之前因为没怎么弄懂这个,于是总是没法再vhosts启用独立的证书,导致一直都只能有一个使用https链接,今天因为刚买了一个域名,于是将全部的vhosts都改了一下,终于弄懂是怎么回事。

官方文档一堆一堆的英文真是看得我头痛呢, 后来折腾的时候终于弄懂它说的是什么意思……

首先,你需要一个这样的设定

$SERVER["socket"] == ":443" {
server.document-root = "/www/site"
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd.keys/cert.pem"
}

当你需要在vhosts上使用的时候,你需要这样写

$SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/path/to/cert.pem"

    $HTTP["host"] == "host1.com" {
    #some server setting
    )
    }
    $HTTP["host"] == "server2.com" {
    #some server setting
    }
}

然后,在另外的vhosts的设定里面加上

ssl.pemfile = "/etc/lighttpd/keys/certs.pem"

这样就可以覆盖掉证书的默认值从而使用不同的证书。

最近自己重新做固件嗯,因为某些癖好(算是吧,因为太钟爱于https了),一直在启用luci的https,可是不知道为什么,uhttpd的TLS插件无法启用,于是蛋疼了,我擦嘞,不了个是吧,不带这样玩啊…

于是只能启用不安全的uhttpd,让我一阵纠结,心里总是没有安全感…

一晃打开了transmission-web,突然想起了以前看到过的一个老外写的blog,说想远程管理transmission,但是transmission又没有密码保护(现在的版本好像有了),于是就用个nginx做前端,加上密码认证,就可以避免别人过来搞东搞西了。

这给了我启发,为什么不用nginx做SSL的前端呢?效果是一样的啊,顺带transmission的远端管理也可以做了,一举双得。

于是我动手了

首先是重新编译了一次nginx,因为官方编译的nginx没有包含ssl支持

然后启动了普通版的uhttpd,开始监听之后,修改nginx的配置,打开ssl支持,加上证书个密钥(因为用的是以前的证书,所以不用重新签),再写个proxy_pass(这个似乎有点问题,如果写到了location /path/ 中之后出现了问题,似乎是东西显示不完全,格式有点乱,后来写到 location / 中就没有问题了)

顺便把transmission的web管理加上,reload一次之后就完全没问题了。除了载入速度略有下降(transmission的web管理速度慢了稍微有点多)

附上一下配置文件

server {
listen 443;
server_name Router;

charset utf8;

ssl on;
ssl_certificate /etc/ssl/CA/keys/luci_school.crt;
ssl_certificate_key /etc/ssl/CA/keys/luci.key;

ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass ;
proxy_redirect default;
}
location /transmission {
proxy_pass ;
proxy_redirect default;
}
}

嗯,刚把openvpn给弄了出来,本来打算直接连上vps,然后写上路由表,结果没想到意外的麻烦,因为iptables的转发没有写好,结果只能ping到服务器,转发都转不出去,最后前思后想,觉得是这个iptables的问题,稍微翻一下以前的资料,找到了相关的内容。

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE

像上面一样的命令,只要是搭建了vpn的话,就必须写这个(似乎openwrt不用,只要直接把新建的tun/tap接口加到lan里面,openwrt的firewall就会自动处理转发,真不愧是专门的路由系统啊),不然的话会不处理转发。

如果iptables里面的FORWARD默认处理时DROP或者REJECT的话,还要加上额外的允许

iptables -A FORWARD -s 192.168.9.0/24 -j ACCEPT

之前的真是折腾啊

这个缺陷的话其实是busybox弄出来的,之前的版本还是支持的,后来就突然看不到了,全部变成了“?”,看得我略纠结。

之后自己做过两个固件,在busybox的选项里面有补丁的支持,可以支持更多的字符,结果后来自己再做的时候,还是看不见中文,变成了一个“˿”

我就纠结了,我擦嘞,怎么变成这个样子……

最后觉得可能是支持的问题,支持的字符数本来就不足,于是稍微一狠心,将767改了,改成了126735(真的变大了很多啊),结果就成功了。

Busybox编译截图
Busybox编译截图

 

或许支持的字符少一点可以减少busybox的体积,但是支持性实在不好啊

最近在自家的路由上装起了fluxbox啊!各种强力啊!!

可是装上了fluxbox之后必须要跑的就是终端啊,这样就可以在没有外部干扰的情况下执行一些需要比较多时间的操作了。

不过在跑终端的时候还是遇到了问题,嗯,似乎是pts的问题,上网找了一下,找到了一个结局方案。

————————————————————————————————————————-
一下内容来自http://blog.chinaunix.net/space.php?uid=20357359&do=blog&id=1963423

今天中午睡醒之后,闲着没事,就想升级一下自己的系统吧。

apt-get dist-upgrade

因为升级了内核,我就重启了一下,结果发现桌面边成了1280×1024的了,不错!

但是我感觉系统好像慢了很多,尤其是gnome-terminal尤其的慢,连个ls也要很长时间。

再次重启,运行gnome-terminal的时候,弹出对话框:无法创建该子进程。

刚开始我以为是gnome-terminal的装的有问题,apt-get install gnome-terminal –reinstall。
结果依旧,现在我才开始意识到问题的严重性。

难道是gnome-terminal和其他程序冲突,例如gnome-pannel,重装gnome-pannel无果。

安装一下其他的X下的终端模拟器试一下,apt-get install konsole。
启动konsole,弹出对话框:
“Konsole is unable to open a PTY (pseudo teletype). It is likely that this is due to an incorrect configuration of the PTY devices. Konsole needs to have read/write access to the PTY devices.”

看来不是gnome-terminal的问题,那到底是什么问题呢?

google了一番,终于找到了跟我有相同问题的人:
http://kanotix.com/PNphpBB2-viewtopic-t-21461.html
竟然是同一天,老外也太快了。
方法1:

apt-get install initscripts/testing
(reboot)
如果已经安装了,可以尝试重新安装:apt-get install initscripts –reinstall
方法2:[未测试]
I added this line to my fstab:
devpts /dev/pts devpts gid=5,mode=620 0 0
and it seemed to do tthe trick.

原因分析:
http://forums.fedoraforum.org/archive/index.php/t-134006.html

——————————————————————————————————–

因为我的debian是chroot来的,于是多加上了一句

none /proc proc defaults 0 0

很久以前就看到这个openwrt可以chroot到debian,想着,弄一个来玩玩啦,文章在已经记录在这里

可惜的是,因为这设备的缺陷(Buffalo WZR-HP-AG300H),没有FPU,导致需要启用FPU仿真,而很可惜的是,官方发布的固件都不会加上这个选项。不得不自己动手做一个。

自己做固件有相当一段时间了(其实也就一个月左右),之前的源码的话编译总是不成功。做不出来固件。直到最近,成功的做出了固件,然后自己当了一会小白鼠,直接刷上了。很幸运的是,没有变砖。可惜的是,因为做固件的时候没有选上某些kernel mod ,导致功能上的残缺。

于是又重新做了一个。这回没有问题了。

接下来的问题是,在debootstrap过程中, 缺少了device.tar.gz导致装不完全((这个很蛋疼,我试过在这里直接chroot,结果passwd都没有,用户名是“I have no name!”,连apt都没有),这时候只要找到debootstrap,打开,找到里面的devic.tar.gz,放到指定位置就好了。

来源:http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=2801&highlight=debootstrap

用到的相关软件:
debootstrap binutils objdump libbfd
1、opkg 安装 objdump
因为debootstrap安装debian时,需要用的dpkg或者ar来解包deb软件包,考虑到dpkg安装需要的空间较大,转用ar,而ar在binutils软件包中,ar的运行需要libbfd库支持。因此先安装objdump,连支持库libbfd也安装了
root@OpenWrt:~#opkg update
root@OpenWrt:~#opkg install objdump
2、解包binutils,获得ar可执行文件
opkg安装binutils需要6M多的空间,而我们只需要其中一个ar,所以我只解包取出其中的ar文件
root@OpenWrt:~#mkdir /mnt/sda1/temp
root@OpenWrt:~#cd /mnt/sda1/temp

wget取得binutils_2.19.1-3_brcm63xx.ipk

root@OpenWrt:/mnt/sda1/temp# wget … 19.1-3_brcm63xx.ipk

解包binutils_2.19.1-3_brcm63xx.ipk (ipk包实际只是个tgz包,可以用tar解开)

root@OpenWrt:/mnt/sda1/temp# tar zxvf binutils_2.19.1-3_brcm63xx.ipk

解包 data.tar.gz ,获得ar

root@OpenWrt:/mnt/sda1/temp# tar zxvf data.tar.gz

解开后,当前目录usr里面有bin mips-openwrt-linux-uclibc/bin两层目录,里面都有ar,我用了mips-openwrt-linux-uclibc/bin/ar

复制ar到/usr/bin里

root@OpenWrt:/cp usr/mips-openwrt-linux-uclibc/bin/ar /usr/bin

试试ar能否执行

root@OpenWrt:/mnt/sda1/temp# ar
Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file…
ar -M [<mri-script]
commands:
ar 搞掂了
3、安装debootstrap
debootstrap在RC-4的源上有,需要修改opkg设置
root@OpenWrt:/vi /etc/opkg.conf
###将源修改为下面地址,保存
src/gz packages … 4/brcm63xx/packages
###安装debootstrap
root@OpenWrt:/opkg updat
root@OpenWrt:/opkg install debootstrap
###安装完后,最好修改原来的源地址设置。
4、安装debian
root@OpenWrt:~# mkdir /mnt/sda1/debian_mips
root@OpenWrt:~# debootstrap –arch=mips –variant=minbase squeeze /mnt/work/debian/ http://ftp.cn.debian.org/debian/

*注:如果遇到没有device.tar.gz,下载devices.tar.gz

###等等等。。。。。若干十分钟后,安装完成后,就有了一个debain了。
5、chroot进行debian
root@OpenWrt:~#mount -o bind /proc /mnt/sda1/debian_mips/proc
root@OpenWrt:~#mount -o bind /dev /mnt/sda1/debian_mips/dev
root@OpenWrt:~#chroot /mnt/sda1/debian_mips /bin/bash
###chroot后,apt-get update,mount磁盘。。。等等等等,之后的事情,就看你的需要了。。。exit退回openwrt环境。