gnome-terminal无法创建该子进程

最近在自家的路由上装起了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

感动啊……终于成功做出固件,成功的chroot到debian了

很久以前就看到这个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,放到指定位置就好了。

[转载]用debootstrap在openwrt上安装debian squeeze,构建编译环境

来源: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环境。

[笔记]当make kernel_menuconfig遇到”…/.quilt_checked] Error 1″

前阵子因为发生了某些很让人蛋疼的事情,因为想在Openwrt上跑Debian,所以去照着教程做了一遍,发现以下很严重的问题,参见这里的#2,发现原来一直以来chroot到debian的时候总卡在一半,然后CPU满满的问题不是我的设定的问题或是什么东西没有做,而是官方编译的缺陷。所以不得不手动编译一个出来……

然后就开始了我的折腾之旅。

嘛~

make menuconfig

的话慢慢查,只要仔细看的话很容易都弄懂。

不过在

make kernel_menuconfig

的时候出了点小问题,总是出现一个错误

make[1]: Entering directory `/home/openwrt/trunk/target/linux'
make[2]: Entering directory `/home/openwrt/trunk/target/linux/ar71xx'
if [ -s "/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3/patches/series" ]; then (cd "/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3"; if quilt --quiltrc=- next >/dev/null 2>&1; then quilt --quiltrc=- push -a; else quilt --quiltrc=- top >/dev/null 2>&1; fi ); fi
make[2]: *** [/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3/.quilt_checked] Error 1
make[2]: Leaving directory `/home/openwrt/trunk/target/linux/ar71xx'
make[1]: *** [menuconfig] Error 2
make[1]: Leaving directory `/home/openwrt/trunk/target/linux'
make: *** [kernel_menuconfig] 错误 2

总是出现这个问题让我一阵纠结啊

然后再官方的ticket找到了答案…… 原来是没有安装quilt。

装上quilt之后,再

make ./tools/compile
make ./tools/install

就可以编译kernel选项了

[笔记]Virtualbox的磁盘格式转换

最近开始自己动手编译openwrt的固件,因为总有时忘记选择编译出vdi的固件,所以得到的都是img格式的,不能直接用在Virtualbox上。

稍微上网找了一下,资料也算相当多,只不过每次都要搜索的话略麻烦了点,于是在这里做一下记录

VBoxManage.exe convertfromraw -format VDI path\?.img path\?.vdi

就变成vdi格式的硬盘了。

 

openwrt挂载移动硬盘(ntfs篇)

最近把移动硬盘插到了路由上,开始玩samba,可是遇到了一个不大不小的问题,硬盘挂载似乎有点问题。

使用默认的mount支持的话,ntfs分区的挂载是只读挂载,这就麻烦了,我可不想老是手动挂载啊。而且如果只是只读的话那是相当的没意思啊。于是稍微上网找了一下相关资料。
挂载点
嗯,最简单的一种方法,就是安装软件包“ntfs-3g”。安装完之后,会说注册了新的文件系统“ntfs-3g”。然后,进入luci,找到挂载点,修改详细,文件系统选择“自定义”,然后输入“ntfs-3g”,然后挂载。挂载出来的就是可读的,在samba上浏览也没有乱码的问题。

相当的简单却又有效的方法啊。

在OpenWrt上部署OpenVPN服务器

话说这标题意外的微妙呢……其实相当一段时间之前就已经弄好的,只是最新更新了trunk的固件,决定重新写一次而已。

在部署的过程中经历了不少曲折,可是最后终究还是做好了。还是外国人的东西靠谱,找到的几分中文教程里面的配置文件完全不给力啊,最后还是在官方Wiki里面找到能用的教程。

http://wiki.openwrt.org/doc/howto/vpn.openvpn

真是一份优秀的教程啊,其他平台的部署也可以略作参考。

下面是咱的人手翻译,说是这样说,其实也只是把大部分的命令弄过来而已……

—————————————–首先是服务器的配置————————————–

首先是安装软件包

opkg update
opkg install openvpn openvpn-easy-rsa

然后是稍微改一下easy-rsa的配置文件(不过如果你对手动签署证书比较熟悉的话也可以手动)

vi /etc/easy-rsa/vars

在文件底部添加环境变量

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Houston"
export KEY_ORG="My Cool Place"

接着是签署证书,一共3份,根证书,服务器证书,客户证书。签署的过程需要填写一些信息,自己看着填,详细可以参考这个里面的说明
根证书

clean-all
build-ca
build-dh

服务器证书

build-key-server server

客户证书

build-key Jimmy
build-key Sara
build-key Soandso
...

将CA证书,服务器证书,dh密钥,服务器私钥拷贝到openvpn文件夹

cd /etc/easy-rsa/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/

接着,把CA证书,客户端证书,dh密钥,客户端私钥拷贝到客户端。

然后,在luci(还是要有图形界面啊)的网络-接口-LAN里面,把tap0加到桥接里面,然后就不需要考虑转发啊什么的了,方便的很。

guide.openvpn.inttab

guide.openvpn.tapbridge

下面是server的配置文件,这个写在/etc/config/openvpn

config 'openvpn' 'lan'
        option 'enable' '1'
        option 'port' '1194'
        option 'proto' 'udp'
        option 'dev' 'tun0'
        option 'ca' '/etc/openvpn/ca.crt'
        option 'cert' '/etc/openvpn/server.crt'
        option 'key' '/etc/openvpn/server.key'
        option 'dh' '/etc/openvpn/dh1024.pem'
        option 'ifconfig_pool_persist' '/tmp/ipp.txt'
        option 'keepalive' '10 120'
        option 'comp_lzo' '1'
        option 'persist_key' '1'
        option 'persist_tun' '1'
        option 'status' '/tmp/openvpn-status.log'
        option 'verb' '3'
        option 'server_bridge' '192.168.1.1 255.255.255.0 192.168.1.200 192.168.1.219'

接着是防火墙啊,dhcp啊之类的,默认就可以了。

再贴一个通用版本的config,这个可以直接用openvpn来运行而不必依靠luci

port 1194
proto tcp
dev tun

### Certificate and key files
ca /etc/easy-rsa/keys/ca.crt
cert /etc/easy-rsa/keys/server.crt
key /etc/easy-rsa/keys/server.key
dh /etc/easy-rsa/keys/dh1024.pem

server 192.168.30.0 255.255.255.0
push "route 0.0.0.0 0.0.0.0"
push "dhcp-option DNS 10.1.254.250" # Change this to your router's LAN IP Address
client-to-client

### (optional) compression (Can be slow)
comp-lzo
persist-key
persist-tun

verb 3
keepalive 10 120

————————————————–接下来是客户端(OpenWrt)—————————————

配置文件:

client
tls-client
dev tun
proto tcp

remote <server address> 1194 # 改成服务器的IP
resolv-retry infinite
nobind

persist-tun
persist-key

ca ca.crt #CA证书,可以改成绝对路径,下同
cert Jimmy.crt
key Jimmy.key
dh dh1024.pem

comp-lzo
verb 3

然后可以用

openvpn --config 配置文件 --daemon

运行客户连接

另外原文还有Windows版的Client配置文件,有兴趣的可以过去看看。

又是好一阵折腾

嘛~因为开了vhosts,所以总出点什么问题……

刚刚把自己签署的证书都换了一遍,因为Google Chrome告诉我说,证书的签署算法太旧了,要被淘汰。于是又重新做了新的CA证书,然后把全部证书都重新做了一遍。中间发生了很多很多事情。

因为是签署算法的问题,所以一直在openssl里面看那些命令,不停地做,不停地做。结果最后签出来的证书都是MD5的。又尝试用DSA来做。可是用DSA做出来的根证书全部都是损坏了,不完整的,上Google搜,也没有相关的信息,结果放弃用DSA了。,老老实实用RSA。

然后又考虑是不是私钥的问题。用openssl genrsa 做了好多次,结果一旦加上什么参数就要我加上密码。我擦嘞,能不能不用密码啊,重启服务器都要输密码的话很麻烦啊。

后来翻来翻去,发现签署证书的时候,算法都是在openssl ca -md 命令里面设置的,终于找到了问题所在。 因为我是用着那个很久以前的sign.sh脚本来签署的,估计参数都在里面。然后打开一看,果真如此。改过之后再一sign,出来的就是sha1的算法,Chrome也没有报错了。于是马上动手全部换了一遍。

换了之后,问题又来了。wordpress的博客进不去了……访问的结果都是“No input file specified.”怎么改都不行,偏偏另外一个vhosts的php脚本没问题,跑phpmyadmin也没问题。php.ini的doc_root已经包括了wordpress的文件夹,可是还是不行。最后一怒之下,把doc_root给注释了,结果就好了……

今天意外多折腾啊

[转载]全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL

[文章作者:张宴 本文版本:v1.0 最后修改:2009.11.14 转载请注明原文链接:http://blog.s135.com/startssl/]

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。

它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

1、自行颁发不受浏览器信任的SSL证书:
HTTPS的SSL证书可以自行颁发,Linux下的颁发步骤如下:

openssl genrsa -des3 -out api.bz.key 1024
openssl req -new -key api.bz.key -out api.bz.csr
openssl rsa -in api.bz.key -out api.bz_nopass.key

Nginx.conf的SSL证书配置,使用api.bz_nopass.key,在启动Nginx是无需输入SSL证书密码,而使用api.bz.key则需要输入密码:

server
{
server_name sms.api.bz;
listen 443;
index index.html index.htm index.php;

root /data0/htdocs/api.bz;

ssl on;
ssl_certificate api.bz.crt;
ssl_certificate_key api.bz_nopass.key;
......
}

自行颁发的SSL证书虽然能够实现加密传输功能,但得不到浏览器的信任,会出现以下提示:

2、受浏览器信任的StartSSL免费SSL证书: 继续阅读

[笔记]Linux强制注销其他在线用户

原文地址:Linux强制注销其他在线用户

先用w查看在线用户。

goface ~ # w

11:53:14 up 53 min, 3 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.1.8 11:11 0.00s 0.51s 0.02s w

goface tty7 :0 11:11 53:25 42.50s 0.23s gnome-session –session=classic-gnome

root pts/1 192.168.1.8 11:38 14:53 0.37s 0.37s -bash

那么如何把别人踢过去呢,呵呵。

#pkill -kill -t tty

#pkill -kill -t pts/1

再w一下,发现另一个连接终端被踢了,呵呵。

另外也可以使用skill命令。如

#skill -KILL -t pts/1 能达到同样的效果。

#skill -STOP -u user1

#skill -KILL -u user1 杀死并注销user1。

当然ps grep找出进程杀死也可以实现,不过没有使用上面的命令方便。大家有什么更好的方法,欢迎在回复中评论,大家一起分享,哈哈。

不知为何……之前我在自己的VPS上不能kill掉另外一个bash进程,最后是用了

skill -KILL -t pts/1

才成功了……