debian-ubuntu

自从青蛙人品爆发,在pidgin上面死活登录不上QQ以后,青蛙都是在wine上面跑QQ.在wine上面速度慢不说,QQ时不时的来一下非法操作就把青蛙折磨的死去活来。
据说最近eva又升级了,于是青蛙决定换用eva。

Debian的apt里面是没有eva的。青蛙上网搜了一圈,也没有发现eva的升级包,连它的主页上也都还是很久很久以前的版本(大概eva已经转入地下了)。青蛙最后在ubuntu的源里面终于翻倒了eva的deb包了。

eva在ubuntu源的universe里面,随便找一个ubuntu的镜像(青蛙用的是中科大的源),在/pool/universe/e/eva目录里找到eva_0.4.9+svn20080215-0ubuntu1_i386.deb,下载回来备用。

在正式安装eva之前,青蛙还要搞定它的依赖性问题。

ubuntu里面的eva是依赖于kdelibs4c2a这个包的。但是debian里面的kdelibs4c2a存在一个依赖性的bug:
它依赖于包libopenexr2ldbl,但是这个包在debian的i386源里面竟然没有。

于是青蛙再从ubuntu源里把libopenexr2ldbl给抓回来,dpkg -i安装之,然后执行#aptitude install kdelibs4c2a,安装一系列的依赖包。

顺便说一句,debian跟ubuntu这两个兄弟有时候还真不错,互相谁也不挑谁的,deb包拿过来一般都能直接用。

最后,执行#dpkg -i eva_0.4.9+svn20080215-0ubuntu1_i386.deb,eva安装成功。聊天去也~

eva

picotux

上面的图片就是号称世界上最小的linux:picotux 100(右侧为picotux 112)。
这个小东西只有35mm×19mm×19mm大小,只比一个RJ45接口大了那么一点点。
它使用32-bit ARM 7 Netsilicon NS7520处理器,主频55MHz,
搭载2M~4M Flash和8M SDRAM,带有一个10/100M网卡,一个可以达到230.400 bps的串口,还有5个I/O针脚。
使用3.3V电压供电。

软件方面,它使用uClinux 2.4.27系统,系统大小最少720KB。Shell可以使用Busybox,使用CRAMFS、JFFS2文件系统, 还可以使用NFS,
有Webserver、Telnet等等程序。开发工具使用GUN Toolchain,使用GCC3.4.4以上版本和ulibc0.9.26以上版本。

这东东售价最低99欧元。

bugzillamozilla一个很好的开源bug管理软件,青蛙准备在glinux的开发过程中用它来管理发现的bug。
但是dreamhost上没有bugzilla的自动安装功能,青蛙按照dreamhost的wiki上面介绍的方法安装时,
又有很多perl模块没有,而且在dreamhost的主机上也没有权限安装这些perl模块。所以,青蛙决定先在主机上自己搞一个perl。

perl的安装方法很简单,dreamhost的wiki也有介绍
青蛙选择的是perl5.8.8,因为wiki上头说有一个针对dreamhost环境的补丁要打
(补丁文件在这里下载)。
打上补丁以后,执行:

sh Configure -Dusethreads -Duselargefiles -Dccflags=-DDEBIAN \
-Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=~/apps \
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio \
-Uusenm -Duseshrplib -Dvendorlib=/usr/share/perl5 \
-Dvendorarch=/usr/lib/perl5 -Dvendorprefix=/usr -Uinstallusrbinperl -des

其中Dprefix参数要设置为要安装perl的目录。
config完毕就可以make \&\& make install了。

下面正式开始安装bugzilla,(青蛙的perl在~/apps/bin目录下,这个目录要换成你自己实际的目录哦),首先进入bugzilla的目录,执行:

~/apps/bin/perl chechsetup.pl

这个脚本会检查当前的perl环境,如果有缺少的模块,它会给出安装命令。
例如,在青蛙的主机上,Email::Send、Email::MIME::Modifier就被提示安装。
按照这个脚本给出的命令把必须的模块安装上,然后再次执行上面的命令,会在bugzilla目录下生成一个localconfig文件。

修改这个localconfig文件:

$webservergroup = “apache”中的apache改为自己真实的组名称,这个组名字可以用groups命令查到。
$dbhost = “localhost” 修改为真实的mysql服务器地址。
$db
name = “bugs” 修改为真实的数据库名。
$dbuser = “bugs” 修改为真实的用户名。
$db
pass = ” 修改为真实的密码。

上面几项都改完后,重新执行checksetup.pl脚本。这时脚本会询问管理员邮箱地址,设置管理员密码等等动作。

因为dreamhost使用suexec方式运行的cgi脚本,所以每次执行完checksetup.pl以后,都要执行以下命令:

for i in docs graphs images js skins; do find $i -type d -exec chmod o+rx {} \; ; done
for i in jpg gif css js png html rdf xul; do find . -name *.$i -exec chmod o+r {} \; ; done
find . -name .htaccess -exec chmod o+r {} \;
chmod o+x . data data/webdot

完成这些后,bugzilla就算是安装成功啦。可以先用浏览器访问下bugzilla的地址看看效果。

接下来说一下汉化的问题,汉化包可以在这里下载到,下载、解压以后,把cn文件夹复制到bugzilla目录里的template/目录就行啦。

, ,

下面的操作步骤青蛙基本上是从lfs6.3学来的,所以会有$LFS这个变量,如果你对lfs也有兴趣,可以去它的官方网站看看。

青蛙编译完成了toolchain以后,就可以开始建造glinux的目录体系了。
首先,构造虚拟内核文件系统(Virtual Kernel File Systems),这个东东是跟内核通信的一个途径。

执行下面的命令,来建立文件系统的挂载点:

mkdir -pv $LFS/{dev,proc,sys}

然后,建立几个必要的设备文件,

mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3

青蛙准备用udev来管理设备文件,所以只建立这两个文件就够了,其他文件udev会在系统启动的时候自动创建。
现在udev模块在glinux上还没有安装,所以暂时用mount –bind命令将宿主系统的/dev目录镜像到glinux的目录结构里来:

mount -v –bind /dev $LFS/dev

把几个重要的虚拟文件系统都挂在到glinux的目录上去:

mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys

以上几个步骤在每次重新chroot以后都要执行一遍。

上面的步骤都完成,历史性的时刻就要来了:chroot进入glinux。

chroot “$LFS” /tools/bin/env -i HOME=/root TERM=”$TERM” PS1=’\u:\w\$ ‘ \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash –login +h

看到命令提示符在喊“I have no name!”了么?如果看到它喊了,就说明chroot成功了 :) 进入新系统的第一件事就是要建立glinux的目录结构了,关于linux的目录结构,linuxfans上面有一篇文章介绍的非常详细,青蛙执行以下命令来建立一个完整的目录结构:

mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}
for dir in /usr /usr/local; do
ln -sv share/{man,doc,info} $dir
done
mkdir -v /var/{lock,log,mail,run,spool}
mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

然后,把/tools/目录下的一些文件链接到chroot环境对应的目录下:

ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
ln -sv bash /bin/sh

建立一个/etc/mtab文件:

touch /etc/mtab

建立/etc/passwd文件和/etc/group文件:

cat > /etc/passwd << “EOF”
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF

cat > /etc/group << “EOF”
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
mail:x:34:
nogroup:x:99:
EOF

然后重新运行一次bash,让bash不再喊“I have no name!”

exec /tools/bin/bash –login +h

接下来再建立一些要用到的log文件:

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog

到这里,glinux的目录结构基本上搞定了,下面我们就可以制作内核跟busybox了。

在uty同学的积极鼓励下,青蛙开始了glinux下一个版本的制作(关于glinux的历史,欢迎回顾青蛙从前的日志)。
一开始,青蛙准备利用debian现成的编译环境,但是后来突然想自己构建一个工具链比较好。工具稳定下来,做出来的东西才比较有保障。于是,青蛙从新拾起lfs,开始第二轮lfs征程,不过这次lfs只做三分之一,青蛙的目标就是:lfs6.3的Toolschain。
具体操作过程没啥好说的,简单的step by step就好,但是在制作过程中,遇到了几个bug(可能也算不上bug,可能是青蛙系统的原因)。

这第一个,就是在glibc-2.5.1这步,会遇到下面这个错误:

mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class — [], [^] or [)
/[^
mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]
mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, “”, subd …

再往上翻还有这么一句:

mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]

拿google一划拉,发现这个错误是因为青蛙系统上用了mawk的问题,据说换用gawk可以解决。
在babble.com上面有人给出了一个patch,很简单,给三个地方加个“\”就ok了。但是这个patch是给glibc2.7用的,在lfs6.3里带的glibc2.5.1里面没法直接用。青蛙按图索骥,改了这个gen-sorted.awk,就没有上头那些错误了。
虽说一个补丁可以解决这个问题,但是有前辈告诉我们,lfs里面的用的都是awk的脚本,如果用mawk很有可能不会有正确的结果,所以建议大家还是安装gawk的好。
gawk源码在这里下载,debian系的系统只需要aptitude install gawk就好了。其他发行版要注意检查/etc/alternatives/awk是不是正确指向了gawk。

(顺路说一句,cpu在卖力的cc的时候正好可以过来写blog,真是很不错,可以随时把过程记录下来 :p)

第二个错误是在glibc2.5.1的make check过程中:

/tools/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status
make[2]: *** [/mnt/lfs/sources/glibc-build/nptl/tst-cancel24] Error 1
make[2]: Target `tests’ not remade because of errors.
make[1]: *** [nptl/tests] Error 2
make[1]: Target `check’ not remade because of errors.
make: *** [check] Error 2

青蛙没有找到这个错误的原因,大概就像lfs文档里说的,第一次编译lfs跟宿主系统依赖关系太大的原因造成的。

第三个错误发生在bash3.2的make过程中,它会提示没有找到yacc这个程序,解决方法很简单,通过apt装上就好了。

到这里,工具链的制作就完成了,下一步就可以制作系统的目录结构并编译内核了。

青蛙被vmware郁闷了整整一晚上,遇到问题无数,google了一大把关键字,看了一大叠邮件列表,终于把它在2.6.24内核上给装上了。赶紧写下来,免得以后遇到类似的问题再抓瞎。

(请注意青蛙给出命令的提示符,$表示不要求root权限,#表示必须用root权限执行

1. 到http://www.vmware.com/download/ws/这里vmware6的安装包下载回来,总共有200多M。

2. 下载安装包的同时,还需要准备一些包:#aptitude install linux-source gcc-4.1 g++-4.1 libncurses5-dev 这些是linux源码包,还有gcc跟g++,待会编译模块会用到。

3. 解压vmware6的安装文件$tar zxvf VMware-workstation-6.0.2-59824.i386.tar.gz。

4. $cd  vmware-distrib,然后执行#./vmware-install.pl。一路回车,到提示是否执行/usr/bin/vmware-config.pl这步时选择no。

5. $cd /usr/src,然后#tar jxvf linux-source-2.6.24.tar.bz2,再#ln -s linux-source-2.6.24 linux。

6. #cd linux,#make menuconfig,在General setup ->  Local version - append to kernel release选项中填入正在运行内核的子版本号(例如,青蛙的内核版本为2.6.24-1-686,那么就在这里填入-1-686,在这里青蛙困扰了好久,这回终于知道怎么写这个版本号了 :mrgreen: ),然后保存退出,执行#make prepare

7. 在这里这里这里也分别有下载)下载vmware-any-any-update-116.tgz这个补丁。并解压:$tar zxvf vmware-any-any-update-116.tgz,然后$cd vmware-any-any-update116,执行#./runme.pl,当询问是否运行vmware-config.pl的时候,选择yes。(如果以上步骤执行正确,到这里应该能正确的编译vmware需要的各种模块了,如果出错,请google错误信息,一般都有结果的。)

update:2008-03-18. 今天青蛙再次在2.6.24内核上面安装vmware,编译模块时又出现了下面的错误信息:

 /bin/sh: scripts/genksyms/genksyms: 没有那个文件或目录
make[2]: *** [/tmp/vmware-config2/vmmon-only/linux/driver.o] 错误 1
make[1]: *** [_module_/tmp/vmware-config2/vmmon-only] 错误 2
make[1]: Leaving directory `/usr/src/linux-source-2.6.24′
make: *** [vmmon.ko] 错误 2
make: Leaving directory `/tmp/vmware-config2/vmmon-only’
Unable to build the vmmon module.

 青蛙在源码目录执行了一下#make all,把genksyms这个模块编译一下就好了,真是一个很诡异的问题。

8. 接下来就是配置虚拟网卡,按照自己的爱好配置就可以了。

9. 这一切都完成以后,会有一长串的许可协议冒出来,到最后输入yes就行了。

10. 到这里,vmware就算完全安装完毕了,在gnome的菜单里找到vmware workstation运行之,然后输入序列号,就可以安装虚拟系统了。

至于序列号,google上是,一抓一大把,青蛙就不提供了。 祝大家玩的愉快。 :smile:

文中提到的vmware-any-any-update-116.tgz补丁的下载:

vmware-any-any-update-116.tgz (vmware-any-any-update-116.tgz)

参考文档:

http://blog.creonfx.com/linux/how-to-install-vmware-player-workstation-on-2624-kernel

http://linuxtoy.org/archives/vmware-and-kernel-2624.html

http://linux.bloghome.cn/posts/159172.html

青蛙今天使用sudo之后,把系统时间往回调了几小时,然后sudo就罢工了,提示下面的信息:
sudo: timestamp too far in the future
改时间竟然还能改出毛病,这个sudo真是太fz了。青蛙拿着这个出错信息一google,发现了俩解决方法。

第一个,不黄很暴力,用root权限删除/var/run/sudo目录。
第二个,执行sudo -k,这个命令是用来清除sudo的时间戳,下次执行sudo的时候它会跟你重新要密码。