3/12/2007

From stage1 install,that's that.

使用 live cd 2006.1 启动机器,输入 gentoo nox 进入系统

hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hdb (启动DMA)

/dev/hda1 /boot +32M
/dev/hda2 swap +512M
/dev/hda3 / +15360M
/dev/hda4 /home xxxM

mke2fs /dev/hda1
mke2fs -j /dev/hda3
mke2fs -j /dev/hda4

mkswap /dev/hda2
swapon /dev/hda2

mount /dev/hda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/hda1 /mnt/gentoo/boot
cd /mnt/gentoo
tar -xvjpf stage?-*.tar.bz2 (从U盘copy?)

tar -xvjf /mnt/cdrom/gentoo/snapshot/portage-xxx.tar.bz2 -C /mnt/gentoo/usr

mount /dev/hda4 /mnt/gentoo/home
mount -t proc none /mnt/gentoo/proc

配置 make.conf
CFLAGS="-march=pentium-m -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="$ -fvisibility-inlines-hidden"
LDFLAGS="-Wl,-O1"
USE="nptl nptlonly -qt -kde -doc nls cjk" (nptl是一个LinuxThreads的替代品,使您机器的性能上一个台阶,在编译glibc时将用到。相关测试结果和讨论可以去BIM的developer论坛看看。“nptlonly”是最合适的,可以处理掉glibc多余的编译,缩短编译时间)
GENTOO_MIRRORS="ftp://linux.ntcu.net/dists/gentoo/ http://www.zentek-international.com/mirrors/gentoo/ http://gentoo.ccccom.com http://mirror.tucdemonic.org/gentoo/ http://gentoo.gg3.net http://gentoo.math.bme.hu "
SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
MAKEOPTS="-j2"
FEATURES="sandbox ccache distlocks"
CCACHE_SIZE="512M"

cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
chroot /mnt/gentoo /bin/bash
env-update && source /etc/profile

注: 安装过程中随时可以在一些步骤中中断, 任何时候需要重新继续之前的步骤, 只需重复如下动作:
挂载各个分区 (如第一部份准备工作中的挂载分区步骤)
重新执行如上的 chroot 命令与 env-update 命令
继续你之前中断的步骤

emerge sync

echo "sys-libs/glibc userlocales" >> /etc/portage/package.use

nano -w /etc/locales.build ::
en_US.UTF-8/UTF-8
en_US/ISO-8859-1
zh_CN.GB18030/GB18030
zh_CN.GBK/GBK
zh_CN.UTF-8/UTF-8
zh_CN/GB2312

cd /usr/portage
scripts/bootstrap.sh

emerge --nodeps gdbm libperl perl

emerge -e system

ln -sf /usr/share/zoneinfo/Asia/Beijing /etc/localtime
date
hwclock --show
hwclock --hctosys
nano -w /etc/conf.d/clock
(将 CLOCK="UTC" 改成 CLOCK="local")

(
我们应该在装完内核配置完用户等步骤完成之后, 系统重启了, 才执行下面两个命令来更改系统时间
# date 120610092004
# hwclock --systohc
)

emerge gentoo-sources
cd /usr/src/linux
make menuconfig
make && make modules_install
cp -i arch/i386/boot/bzImage /boot/kernel-2.6.10 (你喜欢叫它啥名字都可以, 到时在 grub.conf 中配置好就行)
cp -i System.map /boot/System.map-2.6.10

emerge udev
emerge hotplug && rc-update add hotplug default
emerge coldplug && rc-update add coldplug default
emerge alsa-utils
nano -w /etc/modules.d/alsa (编辑 alsa 配置以让内核加载针对你的网卡的驱动)
modules-update
rc-update add alsasound boot
emerge nvidia-kernel (装显卡驱动,ati ???)

/etc/fstab :
/dev/hda1 /boot ext2 noauto,noatime 1 1
/dev/hda3 / ext3 noatime 0 1
/dev/hda2 none swap sw 0 0
/dev/hda4 /home ext3 noatime 0 2
proc /proc proc defaults 0 0
shm /dev/shm tmpfs defaults 0 0

nano -w /etc/conf.d/hostname (设置 HOSTNAME 变量, 例如我的 hzy)
nano -w /etc/conf.d/domainname (设置 DNSDOMAIN 变量, 例如我的 gentoo.com - 瞎叫的, 这域名不存在哦)

nano -w /etc/hosts :
127.0.0.1 hzy.gentoo.com hzy localhost

emerge grub
grub
nano -w /boot/grub/grub.conf :
default 0
timeout 10

title=Gentoo Linux 2004.3 (2.6.10-morph15-r1)
root (hd0,0)
kernel /boot/kernel-2.6.10 ro root=/dev/hda3

emerge syslog-ng && rc-update add syslog-ng default
emerge vixie-cron && rc-update add vixie-cron default

passwd
useradd zy -m -G users,wheel,portage,audio,games -s /bin/bash
passwd zy

emerge splashutils
splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence
nano -w /boot/grub/grub.conf :
default 0
timeout 30
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

title=Gentoo Linux 2004.3 (2.6.10-morph15-r1)
root (hd0,0)
kernel /2.6.10-morph15-r1 root=/dev/hda3 video=vesafb:ywrap,mtrr,1024x768-32@85 splash=silent,theme:emergence
initrd (hd0,0)/fbsplash-emergence-1024x768

exit (退回 LiveCD 提供的环境)
cd /
umount /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo/home /mnt/gentoo
reboot

emerge -pv xorg-x11

emerge xorg-x11

装显卡的 glx 支持 (以 nvidia 为例):
emerge nvidia-glx

配置 X:
xorgcfg

startx

3/07/2007

内核开发

最近的工作要涉足内核开发了,主要是关于 HID Simple interface,设计实现一个 HID 逻辑总线,其下可以支持 USB 和蓝牙的 HID 设备。需要看的文档好多啊!感冒还没好呢:( 头一直晕晕的,上来写写 blog,希望感冒快点好起来~

补充资料:
emerge dev-util/git
(之前安装 python 时需要使用 export USE="tk")

获得最新的内核源代码树
git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

更新本地 Git 仓库
$ cd linux-2.6
$ git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

从仓库中导出文件
$ git-checkout
如果您希望覆盖本地修改,可以使用 -f 选项导出文件,这样就可以将您带回到一个干净的状态:
$ git-checkout -f

编辑文件然后提交
vi Documentation/ManagementStyle
git-commit Documentation/ManagementStyle

添加或删除文件
$ git-add Documentation/Sandwiches
$ git-commit Documentation/Sandwiches

Git 来管理本地仓库
$ tar -zxvf release.tar.gz
$ cd release
$ git init-db

$ git add .

$ git commit -a

使用 po 文件翻译 GuideXML[转载]

Date: 2007-01-28
Version: 1.0
Authors: 张乐
Licence: 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆 License

内容

* 背景知识
。po文件简介
。po文件格式解析
。po文件翻译的好处
* 准备工作
。po4a
。文本编辑器
* 推荐翻译模式
。翻译全新的文件
。利用旧版的已翻译文件翻译新文件

背景知识
po文件简介

po文件本来是用来翻译程序源代码里的字符串的。先来稍微解释一下它本来的用途,需要一点点C语言的基础才能完全理解。如果理解有困难 ,可以忽略这段内容,不会对我们使用po来翻译造成任何影响。

目前大部分自由软件实现国际化使用的是gettext。国际化就是让程序可以使用多国语言来显示程序里的字符串。程序里一般都有很多字符串,菜单名也好,错误信息也好,都是字符串。假设字符串为string,非国际化的程序里都是直接写"string"。如果用了gettext来实现国际化的话,就要写成gettext("string")。有时也会看到_("string"),那实际上也是gettext,只不过通过宏的定义把 gettext改头换面了。这个string就是msgid。然后使用xgettext来从程序源代码文件产生po文件。然后交给专门的翻译人员来翻译 po。翻译人员根本不需要懂编程。翻译完毕后,使用msgfmt来把po转化成mo文件,并安装到系统里合适的位置。程序运行时,到底显示什么字符串就是由gettext 函数来决定的了。主要有两个决定因素,一个是系统的locale及相关环境变量(LANGUAGE,LC_ALL,LC_MESSAGES和LANG),一个是相关的mo文件。具体可以看我的这篇 文章 。

随着程序版本的升级,程序里的字符串的数量和内容都会发生变化,但变化不会很大,以前翻译过的po里大部分msgid都能被重复利用。所以维护po的翻译人员在每次得到从新的程序源代码产生的po时,都用msgmerge来根据旧的已翻译过的po来先处理一下新的未翻译的po。处理过后,大部分情况下新po就翻译的差不多了。翻译人员的工作量被大幅度减轻了。
po文件格式解析

po文件都是由一对对的msgid和msgstr组成的。msgid就是原文。msgstr就是译文。原文译文相互对照,所以非常适于翻译。


msgid "Flash Player 9 released"
msgstr ""

有的msgid前面一行有fuzzy的字样。这说明,第一这个po是被msgmerge处理过的;第二,已翻译的po里没有和这个msgid完全等同的 msgid,只有非常相似的。这种情况下,msgmerge仍然会用那个相似的msgid来翻译此msgid。不过会给这个msgid标记为fuzzy,表示翻译人员仍然要翻译这 个msgid,并在翻译后去掉上面带fuzzy的这一行。


#, fuzzy
msgid "Gentoo Linux PPC Handbook"
msgstr "Gentoo Linux Alpha手册"

po文件翻译的好处

1. 原文译文相互对照,适于翻译
2. 一篇文章里同一个msgid不管出现多少次,都只需要翻译一次
3. 旧有的已翻译过的po,可以重复利用,不必再次翻译,且利于统一风格
4. 有非常好的翻译工具,熟练使用后可大幅度提高工作效率

准备工作
po4a

为了使用po来翻译,显然我们需要能够把xml转成po的工具。这里我们选用po4a。有两个原因:

* po4a可支持GuideXML,也就是gentoo文档专有格式
* po4a可以根据原来的xml文档和与之对应的已经翻译过的xml文档生成po。这个功能非常有用,随后即可看到。

安装po4a


emerge po4a

掌握po4a的三个命令

1. 从xml产生未翻译po


po4a-gettextize -f guide -m orig.xml > untrans.po

2. 从旧的xml原文和译文产生已经翻译过的po


po4a-gettextize -f guide -m orig.xml -l trans.xml > trans.po

3. 用已经翻译过的po和xml原文来产生xml译文


po4a-translate -f guide -m orig.xml -p trans.po -k 1 > trans.xml

文本编辑器

最好的翻译po的工具,无疑是po模式的emacs。当然任何其他的文本编辑器都行,但是效率上绝对比不过po模式的emacs。这里我推荐使用emacs 23。这个版本支持xft。它所需要的keyword是~x86或~amd64。

1. 安装emacs-cvs和gettext

echo app-editors/emacs-cvs >> /etc/portage/package.unmask
echo "app-editors/emacs-cvs gtk xft toolkit-scroll-bars" >> /etc/portage/package.use
echo "sys-devel/gettext emacs" >> /etc/portage/package.use
emerge =emacs-cvs-23.0.0-r1 gettext dejavu

1. 配置字体

* 指定xft为FontBackend,在~/.Xdefaults中加入


Emacs.FontBackend: xft

* 用下列命令启动


emacs --enable-font-backend -fn "Dejavu Sans Mono-12"

1. 基本使用

* 用emacs 打开po文件,即自动进入po模式。菜单栏里有一个名叫PO的菜单,里面有当前模式下可以使用的所有快捷键。po模式下不可直接编辑文件内容。可先把光标移到要编辑的msgid上。使用po的快捷键(比如f或u)来移动,移动的单位就是msgid,速度很快。移动到目的地,然后按回车,即可翻译该msgid。这时整个窗口一分为二。上面可显示msgid,下面翻译。在翻译区域进行翻译时,操作方式就和普通模式下的emacs一样。也就是说你可以把它当作Windows记事本来用。唯一不同的是,在结束翻译后,要按住Ctrl,然后按两次c,以保存这一条翻译结果。然后再按f或u来处理fuzzy的和未翻译的msgid。注意在翻译完fuzzy的msgid后要按tab,来删除fuzzy标记。当不管按f还是u,光标都不再移动的时候,就表示整个po翻译完了。
* 常用快捷键:
。n 移动到下一个msgid
。p 移动到上一个msgid
。f 移动到下一个fuzzy msgid
。F 移动到上一个fuzzy msgid
。u 移动到下一个未翻译msgid
。U 移动到上一个未翻译msgid
。tab 删除本msgid的fuzzy标记

推荐翻译模式
翻译全新的文件

假设这个文件叫orig.xml,下同

* po4a-gettextize -f guide -m orig.xml > output.po
* 用文本编辑器翻译output.po
* po4a-translate -f guide -m orig.xml -p output.po -k 1 > trans.xml

利用旧版的已翻译文件翻译新文件

假设旧版文件叫old.xml,旧版已翻译文件叫old-trans.xml,新文件叫new.xml

* po4a-gettextize -f guide -m old.xml -l old-trans.xml > old-trans.po
* po4a-gettextize -f guide -m new.xml > new.po
* msgmerge old-trans.po new.po > new-trans.po
* 用文本编辑器翻译news-trans.po
* po4a-translate -f guide -m new.xml -p new-trans.po -k 1 > new-trans.xml

3/06/2007

天气恶劣,这个月注定痛苦,好好照顾自己啦

接连几天刮风,气温骤降,何时才能彻底摆脱病魔?
3.3 上周六早上出去下着小雨,气温也比较低了,但心里挺高兴的,北京终于又下雨了啊!丝毫没有意识到病魔已经向我靠近。晚上回去时,天气更糟糕,刮大风,雨也下的急,好不容易到宿舍了,但身体也终于顶不住了 --- 感冒了! 感冒?这算得了什么?我也这么想得。明天还有事情,要过去帮忙,于是早些睡觉吧(也是11点多了)。虽然之前看了天气预报,说晚上会下雪呢,但早上起来看到窗外的积雪,天空中飘着雪花,很是兴奋,对还在睡觉的哥哥大声说:“下雪了,白茫茫一片......” 意识到自己的感冒不仅没好,反而喉咙开始不舒服了,洗漱完毕后吃了点消炎药,拿着咽喉含片,打着雨伞就出门了,外面好冷啊!风似乎刮得比昨晚更加猛烈了,看到路上有的指示牌被吹倒在地上,而我手里打着的伞已经不是为了遮雪而是纯粹为了挡风了......等我到了她那边以后,已经被冻的鼻涕直流,而这时的我并没有太在意。看她已经忙起来了,于是我尽量找一些小活干,比如削土豆之类的。她的同事路路续续来了,于是开始吃吃喝喝聊聊......
吃完饭商定去麦乐迪K歌,于是乘车1个小时赶往魏公村。事后我想如果我不去的话就没现在这么难受了。K歌完后一起聚餐,然后各自回家。到家后我就快崩溃了,吃了退烧药就躺在床上。一晚上没睡好,出了好多汗。好在第二天醒来感觉好多了,头不烫了,但是喉咙疼痛却更加严重了,声音也变了,于是又吃了消炎药,并带上一盒急急忙忙就出门上班去了。怎么还是这么大的风啊!本来我感觉好点了,但还是比较虚弱,经这大风再一刮,唉,到公司的时候又开始难受了。中午一点胃口都没有,但想想身体这么弱还是吃点东西为好,于是到超市买了点面包和一杯酸奶,午饭算是打发掉了。下班了,好难受,肚子感觉空空的,但就是没胃口,另外脑袋也有点痛,喉咙依旧,还流鼻涕(幸亏随着带着纸巾),公交车上人挤人,当时真想躺在前面那人的后背上,或者靠在后面人的身上......
下车后先去附近的药店买了盒感冒药(宿舍已经没有合适的药了),到宿舍后,哥没在,于是我把那盒在火车上没吃的方便面煮煮吃了。那感冒药效果还不错,睡了一觉,今天起床感觉喉咙好多了。出门才知道可外面的风丝毫没有减弱 :(
在公交车上面头晕乎乎的,想吐......再一次感受到自己身体的虚弱!
到中午了,觉得眼睛非常难受,很奇怪,于是到卫生间的镜子前一看,乖乖,双眼布满了血丝!感冒才稍微好点呢,怎么又.......我无语了。


从百度知道查的:
眼睛过度疲劳或感染,血管还会破裂,造成出血。

.睡眠充足有助于滋润眼睛,减少眼睛的血丝
.以冷毛巾敷眼部,可收缩血管,滋润眼睛

3/05/2007

gentoo on ibm T42<参考>

/etc/make.conf :
CFLAGS="-O2 -march=i686 -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
DISTCC_HOSTS="localhost "
FEATURES="distcc"
LDFLAGS="-Wl,-O2"
MAKEOPTS="-j2"
SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
GENTOO_MIRRORS="ftp://ftp.kaist.ac.kr/gentoo/ http://gentoo.mirrors.easynews.com/linux/gentoo/ http://ftp.kaist.ac.kr/pub/gentoo/"

===============================
配置 hdparm 可以让你安装快 1.5 倍
/etc/conf.d/hdparm :
disc0_args="-d1 -X66"
cdrom0_args="-d1"

加入服务 :
rc-update add hdparm default
使得开机后自动启动 :
/etc/init.d/hdparm start

===============================
Kernel config:
比较特別的设定
Code maturity level options :
[*] Prompt for development and/or incomplete code/drivers

(Pentium-4) Processor family
<*> /dev/cpu/microcode - Intel IA32 CPU microcode support
[ ] Math emulation // 去掉
[*] MTRR (Memory Type Range Register) support
[ ] Symmetric multi-processing support // 这个一定要去掉
[*] Local APIC support on uniprocessors
[*] IO-APIC support on uniprocessors

[*] Power Management support
<*> Advanced Power Management BIOS support
[*] Allow interrupts during APM BIOS calls // IBM thinkpad 要用
[*] ACPI Support
<*> AC Adapter
<*> Battery

<*> IEEE 1394 (FireWire) support (EXPERIMENTAL)
<*> Texas Instruments PCILynx support
<*> OHCI-1394 support

Network device support --->
<*> EtherExpressPro/100 support (eepro100, original Becker driver
Input core support ---> 全选

Character devices ---> I2C 要选,不然 IEEE 1394 不能 work
<*> I2C support
<*> I2C bit-banging interfaces
<*> I2C device interface
<*> I2C /proc interface (required for hardware sensors)

[ ] Unix98 PTY support // 去掉

<*> Mouse Support (not serial and bus mice)
[*] PS/2 mouse (aka "auxiliary device") support

File systems ---> // 看你用了那个
<*> Ext3 journalling file system support
< > NTFS file system support (read only)
[*] /proc file system support
[*] /dev file system support (EXPERIMENTAL)
[*] Automatically mount at boot
<*> Second extended fs support
/pty98 不可以選

Sound card support // sound 我只选这个,其他的我用 alsa

USB support --->
<*> Support for USB
[*] Preliminary USB device filesystem
<*> EHCI HCD (USB 2.0) support (EXPERIMENTAL)
<*> UHCI Alternate Driver (JE) support
<*> OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
<*> USB Human Interface Device (full HID) support
[*] HID input layer support

bluetooth // up to you

save config 之後
make dep bzImage modules modules_install

===============================
env ALSA_CARD="intel8x0" emerge alsa-driver

在 make alsa_driver 的同時,你可以把 boot loader 裝好
cd /usr/src/linux
cp System.map /boot
cp arch/i386/boot/bzImage /boot

===============================
http://www.gentoo.org/
http://www.linux-laptop.net/
http://furius.ca/techdoc/misc/thinkpad.html (T42)
http://www.y3m.net/docs/gentoo-on-t42/

转载自bashcurescancer.com: 10 Linux commands you've never used

http://bashcurescancer.com/10-linux-commands-youve-never-used.html

1. pgrep:比如,你可以使用 pgrep -u root 来代替 ps -ef | egrep '^root ' | awk '{print $2}',以便抓取属于 root 的 PID。
2. pstree:我觉得这个命令很酷,它可以直接列出进程树,或者换句话说是按照树状结构来列出进程。
3. bc:这个命令在我的系统中没有找到,可能需要安装。这是用来执行计算的一个命令,如使用它来开平方根。
4. split:这是一个很有用的命令,它可以将一个大文件分割成几个小的部分。比如:split -b 2m largefile LF_ 会将 largefile 分割成带有 LF 文件名前缀且大小为 2 MB 的小文件。
5. nl:能够显示行号的命令。在阅读脚本或代码时,这个命令应该非常有用。如:nl wireless.h | head。
6. mkfifo:作者说这是他最喜欢的命令。该命令使得其他命令能够通过一个命名的管道进行通信。嗯,听起来有点空洞。举例说明,先创建一个管道并写入内容:

mkfifo ive-been-piped
ls -al split/* | head > ive-been-piped

然后就可以读取了:head ive-been-piped。
7. ldd:其作用是输出指定文件依赖的动态链接库。比如,通过 ldd /usr/java/jre1.5.0_11/bin/java 可以了解哪些线程库链接到了 java 依赖(动态链接)了哪些库。(感谢 NetSnail 的指正。)
8. col:可以将 man 手册页保存为无格式的文本文件。如:

PAGER=cat
man less | col -b > less.txt
9. xmlwf:能够检测 XML 文档是否良好。比如:

curl -s 'http://bashcurescancer.com' > bcc.html
xmlwf bcc.html
perl -i -pe 's@
@
@g' bcc.html
xmlwf bcc.html
bcc.html:104:2: mismatched tag
10. lsof:列出打开的文件。如:通过 lsof | grep TCP 可以找到打开的端口。

3/02/2007

在 panoramio 分享照片

我的照片地址

panoramio 界面简单,使用方便,速度也不错,另外与 Google Earth 结合......

3/01/2007

MoinMoin 升级

MoinMoin 新版本 1.5.7 发布有段时间了,现在考虑对公司原系统升级

以下供参考,等成功升级后再来补充
首先备份好/usr/lib/python2.3/site- packages/MoinMoin目录和/usr/share/moin目录。接着删除这两个目录和实例目录下的underlay目录,安装新版本的 moinmoin系统。最后把/usr/share/moin/underlay目录拷贝到实例目录,修改该目录的访问权限。升级完成要重启服务器。注意,如果你修改了/usr/lib/python2.3/site-packages/MoinMoin目录和/usr/share/moin目录下文件的内容,升级完成后要重新修改或用旧文件覆盖。

MoinMoin里叫Plugin,有Macro(宏)、Parser(解析器)、Action(操作)、Formatter(格式化工具)、Theme(主题)等,系统级的插件存放在/usr/lib/python2.3/site-packages/MoinMoin/目录下,用户级的插件存放在实例的data/plugin目录下。
http://moinmoin.wikiwikiweb.de/ParserMarket
http://moinmoin.wikiwikiweb.de/ActionMarket#head-f6975b5db3bf67065adf993a440bbaaac3768d04
http://moinmoin.wikiwikiweb.de/MacroMarket