2008年6月21日

有备无患:在 GitHub 上用不同的 SSH 公钥部署多个应用

GitHub 是一个免费的基于 git 的开源软件仓库托管服务,包括 Ruby on RailsRspecPrototype 在内的许多开源软件都在 GitHub 上架设了软件仓库。


如果你有两个或两个以上的 GitHub 仓库,并且想用不同的公钥/私钥来管理这些仓库的话,会遇到这样一个问题。当你 clone 第一个仓库的时候,git 会使用第一对公钥/私钥,这个时候仍然一切正常。可当你需要用另一对公钥/私钥来 clone 第二个仓库的时候,git 默认仍然会使用第一对公钥/私钥,然后 GitHub 就会返回一个授权错误。


要解决这个问题,首先需要在 ~/.ssh/ 目录下新建一个 config 文件,为不同的项目分别指定公钥/私钥

~/.ssh/config

Host project-1
    HostName github.com
    User git
    IdentityFile /home/wyt/.ssh/id_rsa_project_1

Host project-2
    HostName github.com
    User git
    IdentityFile /home/wyt/.ssh/id_rsa_project_2

然后用 ssh-keygen 创建对应的公钥/私钥。

$ ls -l ~/.ssh
total 24
-rw-r--r-- 1 wyt wyt  244 2008-06-21 13:18 config
-rw------- 1 wyt wyt 1675 2008-06-21 13:04 id_rsa_project_1
-rw-r--r-- 1 wyt wyt  392 2008-06-21 13:04 id_rsa_project_1.pub
-rw------- 1 wyt wyt 1675 2008-05-20 11:24 id_rsa_project_2
-rw-r--r-- 1 wyt wyt  392 2008-05-20 11:24 id_rsa_project_2.pub
-rw-r--r-- 1 wyt wyt  802 2008-05-24 22:44 known_hosts

将公钥上传到 GitHub 上之后,就可以用下面的指令 clone 相应的软件仓库了

$ git clone git@project-1:username/project-1.git
$ git clone git@project-2:username/project-2.git


参考页面

标签: ,

2008年5月19日

有备无患:在 Gentoo 上部署 Git + Gitosis 服务器的笔记

GitLinus Torvalds 为了帮助管理 Linux 内核开发而开发的分布式版本控制软件(Distributed SCM)。Git 汲取了 Torvalds 在维护大型的分布式项目开发方面的经验和对文件系统性能的丰富知识,正如其文档所描述的,“是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。”目前,Linux 内核、X.org 服务器和 Ruby on Rails 等开源项目的版本控制系统都已经切换到 Git。

GitosisTommi Virtanen 为了更方便和安全的辅助 Git 架设和管理软件版本库 (Software Repository) 而开发的工具软件。虽然 Git 本身也提供 git-daemon 以架设版本库,但在用户访问控制上做的并不严格。而 Gitosis 允许单个用户帐号管理多个版本库,使用 SSH keys 管理用户认证,不需要 shell 帐号就可以解决多用户访问集中版本库的问题。

需要说明的是,我使用的 Gitosis 是 robbat2 为了部署新的 Gentoo Overlays 而开发的 Gentoo 分支版本 (Gentoo Fork Version),和上游版本 (Origin Upstream Version) 相比有如下不同:

  • 支持 git+ssh://HOST/REPO 风格的相对路径;
  • 支持以命令行参数方式导入 keys,如 gitosis-init --adminkey=FILE --adminname=STRING;
  • 智能处理 SSH keys,支持 SSH1 和 SSH2 keys;
  • 将上游版本默认的目录权限 0750 更改为 0755,以便用 nobody:nobody 运行 git-daemon。

这篇文章详细记录了我在本地安装和部署 Git + Gitosis 的过程和遇到的问题,希望为大家提供一些参考。欢迎 Fix-Me :-)

安装 Git + Gitosis

安装 git 和 gitosis-gentoo。安装完后,Gentoo 会自动添加 git 用户和组,并将版本库的主目录设为 /var/spool/gitosis/repositories。
# echo ">=dev-util/git-1.5.5" >> /etc/portage/package.keywords
# echo ">=dev-util/gitosis-gentoo-0.2_p20080203" >> /etc/portage/package.keywords
# emerge -av git gitosis-gentoo

如果你的主机上没有装 SSH 的话,还要安装 openssh, 以及 keychain 用来管理 ssh-agents(可选)。
# emerge -av openssh keychain

安装完后,启动 sshd,并加入默认启动。
# /etc/init.d/sshd start
# rc-update add sshd default

配置 Gitosis

首先生成一个 ssh key。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/wyt/.ssh/id_rsa):(回车)
Created directory '/home/wyt/.ssh'.
Enter passphrase (empty for no passphrase):(直接回车)
Enter same passphrase again: (直接回车)
Your identification has been saved in /home/wyt/.ssh/id_rsa.
Your public key has been saved in /home/wyt/.ssh/id_rsa.pub.
The key fingerprint is:
dd:33:cc:99:33:00:66:77:ff:00:bb:99:00:22:55:88 wyt@gentoo

我把 ssh key 保存在默认的 ~/.ssh/id_rsa,你也可以选择其他地方。接下来把 id_rsa.pub 上传到服务器。其中的root@gentoo,root 是根用户名,gentoo 是主机名,可以从 /etc/conf.d/hostname 得知。
$ cat /etc/conf.d/hostname
hostname="gentoo"
$ scp ~/.ssh/id_rsa.pub root@gentoo:
Password: (输入 root 帐户密码)
id_rsa.pub                                    100%  392     0.4KB/s   00:00

上传完毕后,用 gitosis-init 初始化版本库。
$ sudo su -
# sudo -H -u git gitosis-init < ~/id_rsa.pub
Initialized empty Git repository in ./
Reinitialized existing Git repository in ./

上面第二条命令中,-u 表示 sudo 将切换至 git 用户,-H 表示 sudo 将切换至该用户的主目录。初始化完成后,将创建一个名为 gitosis-admin 的版本库,用于 Gitosis 的设置和管理。你需要把它 clone 到相应目录。
$ mkdir git
$ cd git
$  git clone git@gentoo:gitosis-admin.git
$ cd gitosis-admin
$ ls -lh
-rw-r--r-- 1 wyt wyt 80 2008-05-19 00:10 gitosis.conf
drwxr-xr-x 2 wyt wyt 80 2008-05-19 00:10 keydir

gitosis-admin 目录下有一个 gitosis.conf 文件和一个 keydir 目录。gitosis.conf 用来保存项目,用户和权限等版本库配置,而 keydir 用来保存用户的 ssh key。因为 gitosis-admin 也是 Git 的版本库,所以在修改完配置之后,只需要简单的 commit & push,就可以很快很方便的更新服务器的配置了。接下来就用 Gitosis 创建新版本库和添加授权用户。

创建新的版本库

gitosis.conf 里有 gitosis-admin 的默认配置,只要依样画葫芦创建一个新版本库即可。下面举例创建 local_test 版本库,把下面这段 code 追加到 gitosis.conf。

gitosis.conf

[group localteam]
writable = local_test
members = wyt@gentoo

这段 code 定义了新的版本库,包括开发小组的名称 "localteam",版本库的名称 "local_test",以及拥有写权限的小组成员 "wyt@gentoo"。接下来把新的版本库所配置 commit & push 到服务器上。
$ git commit -a -m "添加新的版本库 local_test"
$ git push

接下来在本地创建版本库,然后将其上传到服务器
$ mkdir local_test
$ cd local_test
$ git init
$ git remote add origin git@gentoo:local_test.git

# add & commit 一些文件,然后……

$ git push origin master:refs/heads/master

添加成员用户

添加版本库的成员用户的步骤可以分为两步。一是将用户的 SSH 公钥复制到 keydir/ 目录。二是编辑 gitosis.conf,将这些用户的名字加入 "members"。
$ cd gitosis-admin/
$ cp ~/zhangsan@gentoo.pub keydir/
$ cp ~/lisi@gentoo.pub keydir/
$ git add keydir/zhangsan@gentoo.pub keydir/lisi@gentoo.pub

编辑 gitosis.conf

gitosis.conf

[group localteam]
writable = local_test
members = wyt@gentoo zhangsan@gentoo lisi@gentoo

接下来,将设置提交到服务器
$ git commit -a -m '添加 local_test 版本库成员:张三、李四'
$ git push

选择需要输出的版本库


输出所有版本库

编辑 /etc/conf.d/git-daemon
GITDAEMON_OPTS="--syslog --base-path=/var/spool/gitosis/repositories/ --export-all"

选择输出版本库

编辑 /etc/conf.d/git-daemon
GITDAEMON_OPTS="--syslog --base-path=/var/spool/gitosis/repositories/"

然后在每个选择输出的版本库目录中,添加一个 git-daemon-export-ok 文件
$ sudo touch /var/spool/gitosis/repositories/local_test.git/git-daemon-export-ok

启动 git-daemon

# /etc/init.d/git-daemon start
# rc-update add git-daemon default

如果一切正常的话,我们应该已经大功告成,完成部署 Git + Gitosis 服务器了。现在可以试一下远程 clone。
$ git clone git://169.254.64.95/local_test.git



参考链接



2008-05-20 UPDATE

clone 只读版本库:
$ git clone git://169.254.64.95/local_test.git

clone 可读写版本库:
$ git clone git+ssh://git@169.254.64.95/local_test.git

创建新的可读写版本库:
$ git remote add origin git+ssh://git@169.254.64.95/new_local_test.git
$ git push origin master:refs/heads/master

标签: , ,

2008年4月11日

悠言悠闲:root敢死队

原来平时那么爱用sudo,还真不觉得。


$ history |awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head
99 sudo
62 todo
52 python
49 eix
38 mysql
38 cd
32 ls
19 tda
16 vi
15 tde

标签:

2008年3月31日

有备无患:用Vista字体配置Sun JDK 1.6

也许是升级JDK的时候,把原本配置好的fontconfig.properties给冲掉了,今天emerge OmegaT之后,发现“方框字”又重现江湖。重新在Google上搜了一番,用Bitstream Vera的英文字体,和Windoze Vista的繁日韩字体——正黑,Meiryo和Malgun,重写了fontconfig.properties,直接复制到/opt/sun-jdk-1.6.x/jre/lib/即可。

fontconfig.properties:

# Version

version=1

# Component Font Mappings

allfonts.chinese-gb18030=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-gb18030.motif=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-big5=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.chinese-big5.motif=-microsoft-microsoft jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0
allfonts.lucida=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

serif.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
serif.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
serif.plain.latin-1=-bitstream-bitstream vera serif-medium-r-normal--0-0-0-0-p-0-iso8859-1
serif.plain.latin-1.motif=-bitstream-bitstream vera serif-medium-r-normal--0-0-0-0-p-0-iso8859-1

serif.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
serif.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
serif.bold.latin-1=-bitstream-bitstream vera serif-bold-r-normal--0-0-0-0-p-0-iso8859-1
serif.bold.latin-1.motif=-bitstream-bitstream vera serif-bold-r-normal--0-0-0-0-p-0-iso8859-1

serif.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
serif.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
serif.italic.latin-1=-bitstream-bitstream vera serif-medium-i-normal--0-0-0-0-p-0-iso8859-1
serif.italic.latin-1.motif=-bitstream-bitstream vera serif-medium-i-normal--0-0-0-0-p-0-iso8859-1

serif.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
serif.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
serif.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
serif.bolditalic.latin-1=-bitstream-bitstream vera serif-bold-i-normal--0-0-0-0-p-0-iso8859-1
serif.bolditalic.latin-1.motif=-bitstream-bitstream vera serif-bold-i-normal--0-0-0-0-p-0-iso8859-1

sansserif.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.plain.latin-1=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1
sansserif.plain.latin-1.motif=-bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

sansserif.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
sansserif.bold.latin-1=-bitstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1
sansserif.bold.latin-1.motif=-bitstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1

sansserif.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.italic.latin-1=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1
sansserif.italic.latin-1.motif=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1

sansserif.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
sansserif.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
sansserif.bolditalic.latin-1=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1
sansserif.bolditalic.latin-1.motif=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1

monospaced.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.plain.latin-1=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1
monospaced.plain.latin-1.motif=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1

monospaced.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
monospaced.bold.latin-1=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1
monospaced.bold.latin-1.motif=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1

monospaced.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.italic.latin-1=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1
monospaced.italic.latin-1.motif=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1

monospaced.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
monospaced.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
monospaced.bolditalic.latin-1=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1
monospaced.bolditalic.latin-1.motif=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1

dialog.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialog.plain.korean.motif=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialog.plain.latin-1=bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1
dialog.plain.latin-1.motif=bitstream-bitstream vera sans-medium-r-normal--0-0-0-0-p-0-iso8859-1

dialog.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialog.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialog.bold.latin-1=itstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1
dialog.bold.latin-1.motif=itstream-bitstream vera sans-bold-r-normal--0-0-0-0-p-0-iso8859-1

dialog.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialog.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialog.italic.latin-1=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1
dialog.italic.latin-1.motif=-bitstream-bitstream vera sans-medium-o-normal--0-0-0-0-p-0-iso8859-1

dialog.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialog.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialog.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialog.bolditalic.latin-1=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1
dialog.bolditalic.latin-1.motif=-bitstream-bitstream vera sans-bold-o-normal--0-0-0-0-p-0-iso8859-1

dialoginput.plain.japanese-x0208=-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.plain.korean=-microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.plain.korean.motif=--microsoft-malgun gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.plain.latin-1=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1
dialoginput.plain.latin-1.motif=-bitstream-bitstream vera sans mono-medium-r-normal--0-0-0-0-m-0-iso8859-1

dialoginput.bold.japanese-x0208=-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.bold.korean=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bold.korean.motif=-microsoft-malgun gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bold.latin-1=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1
dialoginput.bold.latin-1.motif=-bitstream-bitstream vera sans mono-bold-r-normal--0-0-0-0-m-0-iso8859-1

dialoginput.italic.japanese-x0208=-microsoft-meiryo-medium-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.italic.korean=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.italic.korean.motif=-microsoft-malgun gothic-medium-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.italic.latin-1=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1
dialoginput.italic.latin-1.motif=-bitstream-bitstream vera sans mono-medium-o-normal--0-0-0-0-m-0-iso8859-1

dialoginput.bolditalic.japanese-x0208=-microsoft-meiryo-bold-i-normal--0-0-0-0-p-0-jisx0208.1990-0
dialoginput.bolditalic.korean=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bolditalic.korean.motif=-microsoft-malgun gothic-bold-i-normal--0-0-0-0-p-0-iso10646-1
dialoginput.bolditalic.latin-1=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1
dialoginput.bolditalic.latin-1.motif=-bitstream-bitstream vera sans mono-bold-o-normal--0-0-0-0-m-0-iso8859-1

# Search Sequences

sequence.allfonts=latin-1
sequence.allfonts.Big5=latin-1,chinese-big5
sequence.allfonts.GB2312=latin-1,chinese-gb18030
sequence.allfonts.x-euc-jp-linux=latin-1,japanese-x0208
sequence.allfonts.EUC-KR=latin-1,korean
sequence.allfonts.GB18030=latin-1,chinese-gb18030
sequence.fallback=lucida,chinese-big5,chinese-gb18030,japanese-x0208,korean

# Exclusion Ranges

exclusion.japanese-x0208=0390-03d6,2200-22ef,2701-27be

# Font File Names
filename.-microsoft-microsoft_jhenghei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0=/usr/share/fonts/TTF/msjh.ttf
filename.-microsoft-microsoft_jhenghei-bold-r-normal--0-0-0-0-p-0-gb18030.2000-0=/usr/share/fonts/TTF/msjhbd.ttf
filename.-microsoft-meiryo-medium-r-normal--0-0-0-0-p-0-jisx0208.1990-0=/usr/share/fonts/TTF/meiryo.ttc
filename.-microsoft-meiryo-bold-r-normal--0-0-0-0-p-0-jisx0208.1990-0=/usr/share/fonts/TTF/meiryob.ttc
filename.-microsoft-malgun_gothic-medium-r-normal--0-0-0-0-p-0-iso10646-1=/usr/share/fonts/TTF/malgun.ttf
filename.-microsoft-malgun_gothic-bold-r-normal--0-0-0-0-p-0-iso10646-1=/usr/share/fonts/TTF/malgunbd.ttf

filename.-bitstream-bitstream_vera_sans-medium-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/Vera.ttf 
filename.-bitstream-bitstream_vera_sans-bold-o-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraBI.ttf 
filename.-bitstream-bitstream_vera_sans-bold-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraBd.ttf 
filename.-bitstream-bitstream_vera_sans-medium-o-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraIt.ttf 
filename.-bitstream-bitstream_vera_sans_mono-bold-o-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoBI.ttf 
filename.-bitstream-bitstream_vera_sans_mono-bold-r-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoBd.ttf 
filename.-bitstream-bitstream_vera_sans_mono-medium-o-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMoIt.ttf 
filename.-bitstream-bitstream_vera_sans_mono-medium-r-normal--0-0-0-0-m-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraMono.ttf 
filename.-bitstream-bitstream_vera_serif-medium-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraSe.ttf 
filename.-bitstream-bitstream_vera_serif-bold-r-normal--0-0-0-0-p-0-iso8859-1=/usr/share/fonts/ttf-bitstream-vera/VeraSeBd.ttf 

# AWT X11 font paths

awtfontpath.latin-1=/usr/share/fonts/ttf-bitstream-vera
awtfontpath.chinese-big5=/usr/share/fonts/TTF
awtfontpath.chinese-gb18030=/usr/share/fonts/TTF
awtfontpath.japanese-x0208=/usr/share/fonts/TTF
awtfontpath.korean=/usr/share/fonts/TTF

标签:

2008年3月9日

有备无患:用脚本自动更新Twitter

如果你也是一个Twitter中毒者,那么也会不消停的在网页上在IM上在手机上,或许还会在第三方服务上发送Twitter消息。不过,你有没有试过在terminal上"骚扰"你的朋友们呢?Digital Streets上有一个很骇很饥渴(wyt:英议very hack very geek)的方法,只需输入一行命令:

$ curl -u yourusername:yourpassword -d status="Your Message Here" http://twitter.com/statuses/update.xml

如果你觉得每次输入一长串用户和密码很麻烦,也可以把他们保存起来写个脚本:

#!/bin/bash
#

USERNAME=yourusername
PASSWORD=yourpassword

if [ $# != 1 ]
then
echo "Usage: ${0##*/} your tweet as you would like it to read"
exit 1
fi
tweet=$1
curl -u $USERNAME:$PASSWORD -d status="$1″ http://twitter.com/statuses/update.xml

如果这样还不能让你提起精神,我们还可以把这段脚本修改一下加到cron里,让它每周每天甚至每小时自动发送消息。比方说,你打算在twitter上作一个奥运会倒计时,可以试试下面这个脚本,把它放到/etc/cron.daily目录下。然后,你的Twitter每天就会更新这样一段消息,"距离北京奥运会开幕,还有 DDD 天 HH 小时。":

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# 记得替换你的用户名和密码
USERNAME="yourusername"
PASSWORD="yourpassword"
# 奥运会将于2008年8月8日开幕,不过我家黄历说"诸事不宜"
OPENDATE="20080808"

declare -i sec_open=`date --date="$OPENDATE" +%s`
declare -i sec_now=`date +%s`

declare -i sec_total=$(($sec_open-$sec_now))
declare -i date_day=$(($sec_total/60/60/24))

if [ "$sec_total" -lt "0" ]; then
    declare status="丫睡过头了吧,北京奥运会都开幕 $((-1*$date_day)) 天了。。。"
else
    declare -i date_hour=$(($(($sec_total-$date_day*60*60*24))/60/60))
    declare status="距离北京奥运会开幕,还有 $date_day 天 $date_hour 小时。"
fi

curl -u $USERNAME:$PASSWORD -d status="$status" http://twitter.com/statuses/update.xml

标签: ,

2008年1月2日

有备无患:用curl获取内网的外部ip

对拥有独立ip的主机来说,可以用ifconfig查看自身的ip。对只有内网ip的主机来说,可以借助互联网上一些提供ip查询的网站获取自身的外部ip。除了用Firefox浏览以外,还可以用linux下的curl命令。curl是一个和wget同享盛名的下载工具,但和wget将下载的数据保存为文件不同,curl可以直接输出到stdout。


$ curl -s http://www.cz88.net/ip/viewip468.aspx | egrep -o -e '[0-9]+(\.[0-9]+){3}'
121.76.54.xxx

标签:

2007年10月26日

悠言悠闲:我妈也是Linux Guru

自从我把家里的电脑都装上Gentoo后,我家妈妈也算是一个Linux Guru了,尽管她可能没有听说过Gentoo,或者Linux,甚至连Windoze也不一定清楚。

她会打开Firefox从访问谷歌的网站导航开始上网,有时候这是一个非常好的入口,不用记域名,只要点击就可以去到相应的网站。偶尔也会在MSN上和亲戚聊天,但是我更希望她能用skype,因为作为一个旁观者,有时候看到别人一个字母一个字母的输入还会是让人有些抓狂。有时候,也会用Mplayer或者Realplayer看看韩剧。唯一麻烦的是QQ,只能用VirtualBox虚拟一个WindozeXP,在里面玩QQ游戏。

我并不是在说Linux的用户体验已经超越了Windoze,甚至Mac。(wyt:虽然很想,但这需要一些勇气和脸皮。换一种说法更容易“蒙混过关”,这就是Linux/Unix的风格,恩很好很强大。)但即使Dell推出预装Ubuntu 7.10的笔记本电脑,Linux的可用性和它在桌面领域的能量,可能仍旧被大大的低估了。

因为很多潜在用户只是被配置未满的Linux给吓到了。对大多数发行版来说,默认配置的Linux,可不能被称作一个可用的操作系统,即使安装已经完成了。

对Gentoo来说,这个问题可能在安装的时候就爆发了。我仍然记得第一次用LiveCD安装Gentoo的时候有多么崩溃——GUI安装程序,和我,一起,崩溃。不知道下一次错误会在什么时候发生,或者为什么会发生这些错误,这让我几乎想投奔SUSE,不过Novell和Microsoft联手把我拉了回来(-_,-)。现在我知道从Stage3开始安装会简单很多,至少你知道问题在哪里。Windoze用户也许很难理解,如果你这么说,猜猜会有什么反应:你丫竟然在说DOS比WindozeXP管用?

无论如何,越来越多的社区开始关注自动化的配置,这是一件好事,像Ubuntu、Fedora,还有国内的Hiweed。似乎Gentoo还没啥动静,但这就是Gentoo的风格,恩很好很强大。(wyt:又在蒙混过关了)最后秀一下最近在用的桌面主题——Aurora-Midnight

优秀的黑色系主题可遇而不可求,无论截图看来多酷,真正放到桌面的时候,强烈的对比度可能会让眼睛异常疲劳。AM是一个基于Gtk2的主题,它的深灰色调比较柔和,长时间注视眼睛也不会很吃力。我已经用了两个礼拜了,虽然没找到和AM配套的xfwm,不过Neutronium和AM也很配,另外Xfce4自带的Moheili感觉上更出挑一些。

{ 系统:Gentoo,桌面环境:Xfce4,主题:Aurora-Midnight,窗口装饰:Neutronium, }

Gentoo桌面截图

标签: ,

2007年10月19日

有备无患:记两个vim小技巧

怎样用vi一次编辑多个文件?

$ vi file1 file2 ... fileN

依次编辑file1、file2直到fileN,中间用:wn (write & next)切换就好,分开使用:w和:n也是一样。:w,保存文件;:w file.new,则是另存为。:n,跳转至下一个文件;:n fileN+1 fileN+2 file N+M,则是创建了一个新的文件池。举一反三,用vi *就能编辑当前目录下所有的文件了。

万一被很多文件给搞的头昏脑胀,不妨试试:f或ctrl+g显示当前文件信息,又或者:args显示所有被选择的文件,其中[当前文件]是被方括号给框起来的。

:e fileX

不用圈定文件池,直接编辑fileX。几个小技巧::e#,返回之前编辑过的文件。:e!,取消改动,恢复上次的存档。:e %.new,创建一个名为fileX.new的文件。%即为当前文件名的替换符。不过,在保存文件的时候可能用的更多一些::w %.new,另存一个名为fileX.new的文件副本。

二,整行复制、剪切和粘贴


输入Nyy,把N行字拖(yank)到缓存中,是为复制。

输入p,取出缓存中的内容,放到(put)文件中,是为粘贴。另外,vi的缓存是所有文件共享的,所以也可以粘贴到其他文件中。

输入Ndd,把N行字删除(delete)——别担心,在删除之前,vi会把那N行字转移到缓存中,随时可以用p命令取出,是为剪切。

标签:

2007年9月23日

有备无患:在支持FastCGI的Lighttpd服务器上部署Django的笔记

Django是一个鼓励快速开发和简练设计的基于Python的高级网络框架。这篇文章详细记录了我在本地部署Django的过程,服务器是支持FastCGI的Lighttpd,操作系统是Gentoo Linux。条条大路通罗马,网上也有很多Django的教程,但这可能是更适合Django本地学习和更有效率的一条捷径。欢迎FIX-ME

开读之前,请注意一下时效性:Django版本:0.96,Lighttpd版本:1.4.18,日期:2007年9月。

一、安装Lighttpd


无论什么时候,在Gentoo上安装软件都是一件愉快的事情,因为我们可以通过USE flags来选择需要安装的包。如果你和我一样记不住这些USE flags的具体意义,不妨用euse查看一下,例如:


# euse -i fastcgi

Lighttpd包括下列USE flags:

  • bzip2 - 为mod_compress提供bzip2支持
  • fastcgi - 提供FastCGI支持,使用Django或PHP都需要FastCGI来提升性能
  • gdbm -提供GNU数据库支持
  • ipv6 - 提供IPv6支持
  • lua - 为mod_cml提供Lua支持
  • memcache - 为for mod_cml提供内存缓存支持
  • mysql - 为mod_mysql_vhost提供MySQL的设定支持
  • pcre - 为Lighttpd配置文件中正则表达式提供PCRE支持
  • php - 提供mod_fastcgi/php的设定支持
  • rrdtool - 为一些统计图形提供RRDtool支持
  • ssl - 为HTTPS提供OpenSSL支持
  • doc -提供安装文档支持
  • fam - 为减少stat()的响应数,提供fam/gamin支持
  • ldap - 提供LDAP支持
  • minimal - 最小化安装,不包括安装文档和不使用的模块
  • webdav - 提供WebDAV支持
  • xattr -提供额外的属性支持

和Apache有内嵌的Python解释器(mod_python)不同,Lighttpd只能通过CGI或者FastCGI方式执行Python脚本。CGI的先天不足导致它在大型Web应用上效率不佳。FastCGI在设计上继承了CGI不受操作系统、服务器和开发语言的限制,又利用一个类似常驻型CGI的设计大幅提高了执行效率。所以,我们在安装Lighttpd的时候,需要把fastcgi选入USE flags。至于其他选项,大家就各取所需了。


# echo "www-servers/lighttpd fastcgi ssl fam" >> /etc/portage/package.use
# emerge -av lighttpd

二、安装Django


接下来安装Django。本地安装Django很轻松,直接emerge就可以了:


# echo "dev-python/django examples sqlite" >> /etc/portage/package.use
# emerge -av django

emerge完以后,我们试试Django是否安装正确。运行Python,输入:


>>> from django.core.handlers.wsgi import WSGIHandler

也可以把其他Django的组件导入Python。如果没有出错信息,表示Django安装完成了。

三、安装flup


flup是一个基于Python的架设FastCGI服务器的模块,这也是需要安装的。


# emerge -av flup

然后,我们试试flup是否安装正确。运行python,输入:


>>> from flup.server.fcgi_fork import WSGIServer

如果没有出错信息,表示flup安装完成。

四、配置Lighttpd和FastCGI


Lighttpd自带的配置相当完整,只需要稍作修改就可以让Lighttpd支持FastCGI。
首先修改lighttpd.conf,自定义Lighttpd的主目录和日志目录等。


# {{{ variables
var.basedir = "/var/www/localhost"
var.logdir = "/var/log/lighttpd"
var.statedir = "/var/lib/lighttpd"
# }}}

你可以把所有的配置都塞到lighttpd.conf中,但是,Lighttpd默认你把CGI和FastCGI的配置文件分别放到了mod_cgi.conf和mod_fastcgi.conf文件中,并在lighttpd.conf中include它们。这样的结构更加简洁明白,本文也采用这种方法配置Lighttpd。


# {{{ includes
include "mime-types.conf"
include "mod_cgi.conf"
include "mod_fastcgi.conf"
# }}}

为2.6核心版本的Linux优化性能。


# for >= linux-2.6
server.event-handler = "linux-sysepoll"

指定用mod_fastcgi处理.py文件。


static-file.exclude-extensions = (".php", ".pl", ".py", ".cgi", ".fcgi")

在lighttpd.conf中,我们还可以设定一些其他参数,比如server.max-worker、server.max-keep-alive-requests、server.max-keep-alive-idle等,来优化Lighttpd的性能,让Lighttpd在大型的Web应用中表现更好。

接下来,修改mod_cgi.conf。


server.modules += ("mod_cgi")

alias.url = (
"/cgi-bin/" => var.basedir + "/cgi-bin/"
)

$HTTP["url"] =~ "^/cgi-bin/" {
    # disable directory listings
    dir-listing.activate = "disable"
    # only allow cgi's in this directory
    cgi.assign = (
        ".pl" => "/usr/bin/perl",
        ".py" => "/usr/bin/python",
        ".cgi" => "/usr/bin/perl"
    )
}

修改mod_fastcgi.conf。



server.modules += ("mod_fastcgi")
fastcgi.server = (
    "/main.fcgi" => (
        "main" => (
            "socket" => var.basedir + "/htdocs/tmp/django.socket",
        )
    ),
)

最后,我们重新启动Lighttpd,并把lighttpd加入启动项。


# /etc/init.d/lighttpd restart
# rc-update add lighttpd default

这样子就万事OK了,我们已经成功的把Django部署在支持FastCGI的Lighttpd服务器上了。接下去就可以开始设计自己的Django项目了。

标签: , ,

2007年9月3日

有备无患:Canon Pixma iP1880打印机安装笔记

相比游戏和多媒体,Linux对打印机的支持强劲了许多,这得益于CUPS(Common Unix Printing System,中译“通用Unix打印系统”)的迅速发展。CUPS诞生于1999年,它能够把Linux支持的PostScript页面描述转换为打印机能识别的命令集,然后输出到打印机。现在,CUPS已经得到大多数打印设备商的支持,能驱动大量的打印设备,我们可以在OpenPrinting的网站上找到这些打印机的驱动信息。

这篇文章记录我在Gentoo Linux上安装和本地配置Canon Pixma iP1880喷墨打印机的过程,希望大家能把它当作《Gentoo打印指南》的补充阅读。欢迎FIXME :-)

0. 购买一款Linux支持的打印机


在掏出钱包准备“大出血”之前,我们首先要知道这款打印机能否在Linux下正常工作。OpenPrinting的数据库里有许多相关的信息,比如Linux支持的打印机列表,比如这些打印机的驱动信息。从中我们可以找到答案,例如,iP1880的介绍上写着:Canon Pixma iP1880: Color inkjet printer, works Perfectly(彩色喷墨打印机,完美支持)。这就足够了。

如果我们相中的打印机才“新鲜出炉”,还没有进入OpenPrinting的数据库,该怎么办呢?首选是Google,俗话说得好,“知之为知之,不知Google知”。另外,这儿有一条为Linux挑选硬件的普适原则:尽量选择国际大厂的产品。通常这些产品的质量更好,也比国内厂商也更尊重Linux用户。(wyt:想到淘宝拒收Linux和Firefox用户,怒气值就大幅上升-__-)

在家用打印领域,HP Deskjet D2368、Epson ME2和Canon Pixma iP1880是最近比较热门的选择。D2368单机成本不足300元,性价比较高。ME2的优势在于它的墨盒,黑墨和彩墨分别只要39和59元,适合有大量打印需求的人。

我更喜欢iP1880。Canon Pixma iP1880是佳能的07年春季新品,黑色优雅的立方体和弧线设计,放在我家Tt Matrix旁边相得益彰。FINE打印头技术,使iP1880的打印速度更快打印质量更高。黑白文档每分钟印20页,彩色每分钟印16页,4×6无边距的照片只需70秒。最高4800dpi的分辨率,最小仅2pl的墨滴。而且iP1880单价只有360元,附送830黑墨和831彩墨各一盒,比“抠门”的D2368(D2368仅附送刚够打20张的“体验墨盒”)更超值。但是,iP1880也有一个缺点:因为没有出纸口的挡板,iP1880的实际占用面积要比看上去大得多。


Canon iP1880 Inkjet Printer

1. 配置内核


首先按照说明书安置好iP1880,打开开关。然后为Linux内核添加USB打印支持。检查/usr/src/linux是否指向正确的内核版本。没问题的话,目录切换到/usr/src/linux,运行make menuconfig配置内核。如果你和我一样用genkernel的话,运行genkernel --menuconfig all。(提醒:不要忘记为LVM2或者EVMS2,启用--lvm2或--evms2选项)

和《Gentoo打印指南》说的稍有不同,在2.6.22-r5的内核里,相关的USB支持似乎只能以模块编入内核。但是这不是什么大问题,只要别忘记事后加载这些模块。


Device Drivers -->
  USB Support -->
    <M> Support for Host-side USB
    (...)
    --- USB Host Controller Drivers
    (选择系统HCD。如果不知道选哪个,运行"lspci -v | grep HCI"看看)
    <M> EHCI HCD (USB 2.0) support (或)
    <M> OHCI HCD Support  (或)
    <M> UHCI HCD (most Intel and VIA) support
    (...)
    <M> USB Printer support

编译完内核之后,我们需要让这些模块能自动加载。


# echo "uhci-hcd" >> /etc/modules.autoload.d/kernel-2.6

2. 安装CUPS


接下来我们安装CUPS。得益于USE flags,在Gentoo上安装CUPS是一件非常享受的事情。选择你要的USE flag,把它们加入/etc/portage/package.use。如果不知道选哪个,可以参考《Gentoo打印指南》的说明


# echo "net-print/cups ldap ppds" >> /etc/portage/package.use
# emerge -av cups
[ebuild  N ] net-print/cups-1.2.10-r1  USE="X dbus jpeg ldap nls pam png ppds ssl tiff -php -samba -slp" 3,534 kB

(我们还想把cups加入/etc/make.conf,让所以支持CUPS的应用程序都能支持我们的打印机)
# vi /etc/make.conf
USE="... cups ..."

(然后更新这些程序)
# emerge -uDN world

(启动CUPS)
# /etc/init.d/cupsd start
# rc-update add cupsd default

CUPS有一套不错的默认配置,对我来说这已经足够了。如果你希望能从其他电脑上远程调用或者管理这台打印机,你需要修改一下/etc/cups/cups.conf。这通常不会很难,因为cups.org上有一份详细的用户文档可供参考。

3. 配置iP1880打印机


用lsusb命令看看我们的打印机是否在线。


# lsusb
Bus 007 Device 006: ID 04a9:10c2 Canon, Inc.

看起来我们做的不错,Gentoo已经识别出iP1880了。从Gentoo-wiki上我们可以找到和iP1880兼容的驱动net-print/cnijfilter-2.70的ebuild。接下来我们就要开始安装了。


# mkdir /usr/portage/net-print/cnijfilter
(本地overlay中创建目录,参照/etc/make.conf中的PORTDIR_OVERLAY) # mkdir <PORTDIR_OVERLAY>/net-print/cnijfilter # cd <PORTDIR_OVERLAY>/net-print/cnijfilter (下载bugs.gentoo.org提供的ebuild。你也可以下载我这儿的副本# wget http://bugs.gentoo.org/attachment.cgi?id=118804 -O cnijfilter-2.70.ebuild # ebuild cnijfilter-2.70.ebuild digest >>> Creating Manifest for /usr/portage/net-print/cnijfilter... # ebuild cnijfilter-2.70.ebuild fetch

最后一条命令fetch的将是佳能提供的一个rpm。但是我从佳能日本的ftp下的时候速度特别慢,后来我是从Google上搜出的一个ftp上下来的。另外,你可以从这里下载。


# wget http://ftp.linux.kiev.ua/pub/Linux/drivers/Canon/bj/download.canon.jp/pub/driver/bj/linux/cnijfilter-common-2.70-1.src.rpm
(或)
# wget http://luliban.com/attachments/cnijfilter-common-2.70-1.src.rpm

(安装net-print/cnijfilter)
# echo "net-print/cnijfilter ~x86" >> /etc/portage/package.keywords
# echo "net-print/cnijfilter ip1800" >> /etc/portage/package.use
# emerge -av net-print/cnijfilter

然后,我们为把iP1880添加到CUPS所管理的打印机列表中。启动Firefox,访问CUPS的管理界面 http://localhost:631,点击Add Printer(添加打印机)。先是为iP1880添加相应信息:

  • Name: cnip1880
  • Location: Just in my room
  • Description: Canon Pixma iP1880

Device选择Canon iP1800 Series USB #1(Canon iP1800 Series),Model/Driver选择Canon iP1800 Series Ver2.7.0(en)。最后在添加打印机之前,我们还要输入root的帐号和密码。

到这里,我们已经完成了iP1880的安装。我们可以在可以在CUPS管理页面,点击Set Printer Option(打印机设置),配置纸张、分辨率和色彩模型等参数。或者,点击Print Test Page(打印测试页面)看看打印效果。总之,这篇文章到此结束,大家有什么问题的话,欢迎留言评论。

参考页面:

标签: ,

2007年8月28日

悠言悠闲:Compiz Fusion on my Gentoo box


Youtube链接:http://www.youtube.com/watch?v=gL4mwlNQS7s

升级CPU!升级内存!升级显卡!Vista立功了,Aero立功了!不给旧电脑任何的机会。
伟大的Windoze Vista操作系统!它继承了历版Windoze和PC厂商们勾结的传统。Intel、AMD、nVidia在这一刻灵魂附体,
Vista一个操作系统代表了微软和PC厂商们未来所有的利益,在这一刻它不是一个操作系统在战斗,它不是一个操作系统!
——节选自《蚊@喂死它的阴谋》


话说上面这段惨不忍睹的短片,我花了一天时间折腾出来的。说是“折腾”一点都不为过,先是弄我的Wacom Graphire4,明明照着wiki上面做的,重启之后就是不能用udev了,半天起不来,到现在还是用静态的。这也就先将就了,反正过些日子打算把linuxwacom驱动升到0.7.8,据说那样就会有压感了。

用xvidcap作屏幕录像,但是emerge了1.16基本就废掉了,一点就死,论坛上说管使的1.14却有一大堆的gnome的包依赖不敢装。后来用的是RecordMyDesktop,挺傻瓜的,但就是frame多了要崩溃,参数设错了要崩溃。录了好几十遍好不容易找到窍门了,但没想到最大的难关还在后面。

Cinelerra,这已经不是我折腾它,是它在折腾我了,囧。。。想起来就痛苦,不说了。

最后出片到土豆上一看,发现后面OpenOffice里面的一段介绍文字基本看不清。失算了,亏我还留了很长一段时间的静格画面。下次注意吧,这次将就将就贴在这里当补充说明了


Compiz Fusion是一个由OpenGL驱动的运行于X Window System上的合成视窗管理程序,由Compiz和Beryl两个项目合并而成。
Compiz Fusion的3D能力使其可以在窗口管理过程中实现多种视觉效果,比如类似苹果电脑的Mac OS X操作系统中所提供的许多桌面特效,例如 Exposé;或者是类似微软新一代视窗系统Windows Vista中的使用Alt-Tab时切换应用程序的特效等等。最新的Compiz Fusion测试版中最引人注目的效果就是手写火焰了,这也是我最喜欢的效果之一。^ ^

标签: ,

2007年8月24日

有备无患:Gentoo LVM2 安装笔记(下)

3. 安装LVM2


安装全新的 Gentoo Linux 系统之前,首先要准备一张支持 LVM2 的启动光盘。我手头的是Gentoo LiveCD 2007.0,启动时记得加载 LVM2 模块:gentoo dolvm2

然后,照着葫芦画瓢直到Gentoo 安装手册《第四章 - 准备磁碟》。按照Gentoo LVM2 安装笔记(上)中的既定计划分区,我用的是 fdisk,你也可以用 fdisk 或者其它分区工具。使用 fdisk的具体步骤请参照安装手册。结果:


# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 320.0 GB, 320071851520 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot  Start   End     Blocks     Id   System
/dev/sda1    1       9       72261      83   Linux
/dev/sda2    10      72      506047+    83   Linux
/dev/sda3    73      197     1004062+   83   Linux
/dev/sda4    198     38913   310986270  5    Extended
/dev/sda5    198     16246   128913561  83   Linux
/dev/sda6    16247   18800   20514973+  83   Linux
/dev/sda7    18801   21354   20514973+  83   Linux
/dev/sda8    21355   23908   20514973+  83   Linux
/dev/sda9    23909   26462   20514973+  83   Linux
/dev/sda10   26463   29016   20514973+  83   Linux
/dev/sda11   29017   31570   20514973+  83   Linux
/dev/sda12   31571   34124   20514973+  83   Linux
/dev/sda13   34125   36678   20514973+  83   Linux
/dev/sda14   36679   38913   17952606   83   Linux

完成分区后,先初始化 Swap 置换分区。


# mkswap /dev/hda2
# swapon /dev/hda2

接着加载 LVM2 dm-mod 模组,并激活 LVM。


# modprobe dm-mod

(别让 LVM 扫描硬盘以外的设备浪费时间)
# vi /etc/lvm/lvm.conf
(找到这一行)
    filter = [ "a/.*/" ]
(把它替换为下面这一行)
    filter = [ "a|/dev/sda|", "r/.*/" ]
(ZZ,存盘并退出 vi)

# vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found

再注意一次哟,/dev/sda1、/dev/sda2、/dev/sda3 分别对应的 /boot、Swap 置换分区和主分区不要放入 LVM2 volume group。只要用 /dev/sda5 创建一个 LVM2 volume group - lvg。


# pvcreate /dev/sda5
  No physical volume label read from /dev/sda5
  Physical volume "/dev/sda5" successfully created

(建立個叫做 lvg 的卷群组)
# vgcreate lvg /dev/sda5
  /etc/lvm/backup: fsync failed: Invalid argument (无视这警告)
  Volume group "lvg" successfully created

如果想还扩充 lvg,可以用下一节将要介绍的 vgextend。但是,增加一个分区的大小通常比缩小它来的容易,所以在分配空间的时候不妨先做一个十足十的“吝啬鬼”。接下来我们要关心的是为这些个逻辑卷分配空间。



# lvcreate -L10G -nusr lvg
  Logical volume "usr" created
# lvcreate -L100G -nhome lvg
  Logical volume "home" created
# lvcreate -L5G -nopt lvg
  Logical volume "opt" created
# lvcreate -L10G -nvar lvg
  Logical volume "var" created
# lvcreate -L3G -ntmp lvg
  Logical volume "tmp" created

BTW,像 Gentoo LVM2 安装文档里介绍的一样,把 160G 的硬盘等分成8块,也是个非常不错的主意。或许还会用到 lvextend 命令,它的具体用法也可以参考下一节的例子。

然后格式化所有的分区。除了/boot 用 ext2 以外,所有分区都强烈推荐使用 reiserfs 文件格式。因为 reiserfs 支持在线修改分区容量,这样就省去先 umount 后 resize 的麻烦事了。


#mke2fs /dev/sda1
#mkreiserfs /dev/sda3
#mkreiserfs /dev/lvg/usr
#mkreiserfs /dev/lvg/home
#mkreiserfs /dev/lvg/opt
#mkreiserfs /dev/lvg/var
#mkreiserfs /dev/lvg/tmp

格式化完所有分区之后,按着安装手册里说的,先挂载主分区,后再挂载其他的分区。


# mount /dev/sda3 /mnt/gentoo/
# cd /mnt/gentoo/
# mkdir boot
# mkdir usr
# mkdir home
# mkdir var
# mkdir opt
# mkdir tmp
# mount /dev/sda1 boot/
# mount /dev/lvg/usr usr/
# mount /dev/lvg/home home/
# mount /dev/lvg/var var/
# mount /dev/lvg/opt opt/
# mount /dev/lvg/tmp tmp/

接下来回到 Gentoo 安装手册的《第五章 - Gentoo 安装档案》继续照葫芦画瓢——安装 Gentoo Linux。但记得把 LVM2 支持加入到 Linux 内核中。我用 genkernel,需要运行:


# genkernel --lvm2 --menuconfig all

编译好内核与模组后,还要在启动时加载 dm-mod 模块。


#echo "dm-mod" >> /etc/modules.autoload.d/kernel-2.6

注意:把 /usr/src/linux 链接到使用中的内核源码,因为 lvm2 ebuild 所使用 device-mapper ebuild 会用到 /usr/src/linux/include/linux 下的源码。接下来 emerge lvm2


# emerge -av lvm2

然后就像在 LiveCD 中一样,修改 /etc/lvm/lvm.conf 文件。


# vi /etc/lvm/lvm.conf
(找到这一行)
    filter = [ "a/.*/" ]
(把它替换为下面这一行)
    filter = [ "a|/dev/sda|", "r/.*/" ]
(ZZ,存盘并退出 vi)

最后设置 /etc/fstab。这是我的现成品:


# cat /etc/fstab

/dev/sda1      /boot   ext2       noauto,noatime  1 2
/dev/sda2      none    swap       sw              0 0
/dev/sda3      /       reiserfs   noatime,notail  0 1

# Logical volumes
/dev/lvg/usr   /usr    reiserfs   noatime,notail  0 2
/dev/lvg/home  /home   reiserfs   noatime,notail  0 2
/dev/lvg/opt   /opt    reiserfs   noatime,notail  0 2
/dev/lvg/var   /var    reiserfs   noatime,notail  0 2
/dev/lvg/tmp   /tmp    reiserfs   noatime,notail  0 2

注意:如果在 Gentoo 安装过程中被迫重启了,又希望继续使用刚才的逻辑卷群组的话,可以使用 vgscan 命令查找之前设置的节点


# vgscan --mknodes

最后安装完成后,用 vgdisplay 和 pvdisplay 查看 LVM2 的信息,就能知道用了哪些物理卷、卷群组还剩下多少预留空间等。


# vgdisplay -v lvg

    Using volume group(s) on command line
    Finding volume group "lvg"
  --- Volume group ---
  VG Name                lvg
  System ID            
  Format                 lvm2
  Metadata Areas         3
  Metadata Sequence No   9
  VG Access              read/write
  VG Status              resizable
  MAX LV                 0
  Cur LV                 5 
  Open LV                5
  Max PV                 0
  Cur PV                 3
  Act PV                 3
  VG Size                159.62 GB
  PE Size                4.00 MB
  Total PE               40862
  Alloc PE / Size        40448 / 158.00 GB
  Free  PE / Size        414 / 1.62 GB
  VG UUID                iHQRao-cmp4-gZ5l-kbA3-G1Yr-Fkk5-0Lt4my
  
  --- Logical volume ---
  LV Name                /dev/lvg/usr
  VG Name                lvg
  LV UUID                CMTe0N-42s0-4U5I-5quW-Pnk2-Uj4U-SPlo0y
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                10.00 GB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:0
  
  --- Logical volume ---
  LV Name                /dev/lvg/home
  VG Name                lvg
  LV UUID                tfR1uD-1K0u-X5v6-Y5bs-FX2E-4y6o-A39St0
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                130.00 GB
  Current LE             33280
  Segments               4
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:1
  
  --- Logical volume ---
  LV Name                /dev/lvg/opt
  VG Name                lvg
  LV UUID                pAiUjY-2xe5-tpPr-pQvA-WF7z-OYt4-TEO0IG
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                5.00 GB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:2
  
  --- Logical volume ---
  LV Name                /dev/lvg/var
  VG Name                lvg
  LV UUID                MCrrFa-owTk-OAVT-Gbh1-SzXA-Dt7m-3GLGTf
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                10.00 GB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:3
  
  --- Logical volume ---
  LV Name                /dev/lvg/tmp
  VG Name                lvg
  LV UUID                TOk0di-NcvR-2Dm2-Tthy-e33D-9pwI-f9O6Ia
  LV Write Access        read/write
  LV Status              available
  # open                 2
  LV Size                3.00 GB
  Current LE             768
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:4
  
  --- Physical volumes ---
  PV Name               /dev/sda5    
  PV UUID               84Dfoi-zu8P-9j1I-4QO1-ICaL-QvYP-W8gWqZ
  PV Status             allocatable
  Total PE / Free PE    31472 / 0
  
  PV Name               /dev/sda6    
  PV UUID               ZwR0w3-0zg6-DNBj-XdDm-um9I-CG2l-5u1702
  PV Status             allocatable
  Total PE / Free PE    5008 / 414
  
  PV Name               /dev/sda14    
  PV UUID               uxPnzS-ziKj-ujXf-RUNY-QvY9-6rr6-DQnzt5
  PV Status             allocatable
  Total PE / Free PE    4382 / 0

标签: ,

有备无患:Gentoo LVM2 安装笔记(上)

1. 概述


Logical Volume Manager,是一个 Linux 内核的逻辑卷管理器。1998年,Heinz Mauelshagen 基于 HP-UX 的设计,为 Linux 内核开发了 LVM。现在,LVM2 已经是 Linux 中两个重要的卷管理工具之一,另一个是 EVMS。

这片文章详细记录了我在系统中安装 LVM2 的过程,希望能为大家提供一点参考。但要注意哟,不要把它当作你的 HOWTO。你仍然需要在安装前,好好读一遍 Gentoo 安装手册Gentoo LVM2 安装文档 或者其他 LVM2 HOWTO。欢迎 FIXME :-)

2. 准备工作


分区的大小一旦确定,通常就不再可以改变。

每次安装 Windoze,我总是“如临大敌”:Windoze 要吃掉C盘几个G?几个G的软件要装在D盘上?要下载几个G的电影到E盘?……可是,再精明的盘算到最后也可能落空,一不留神就把某个分区塞满的事情时常发生,毕竟我不是先知不会放狗(啊,也许是狼-__-),我也无从得知我“究竟”要在这些个分区上存储多少数据。好在 Windoze 并不介意我把“大珠小珠”散落在不同的“玉盘”上——把D盘装不下的游戏搬到E盘,或者把E盘看不完的电影扔到C盘——来“平衡负载”,直到那个臭名昭著的蓝屏通知我,Windoze 崩溃了——一般不会让我等太久。

可是,Linux 不喜欢这样的“胡作非为”。即使我把10G的 /home 用完了,也不能在 /usr 或者 /tmp 另辟战场,因为我没有将数据写入这些目录的权限。按照传统的分区方法,我需要再增加一个大于10G硬盘,创建一个新的 /home,并将现有的文件复制过去。如果用 LVM 管理这些分区,我既可以把新硬盘直接添加到 /home 逻辑卷中,也可以调整 /usr 或者 /tmp 的大小,把节约出来的空间分配给 /home,然后继续之前的工作。另外,LVM2 可以创建一个可读写的自身快照,类似于 RAID 0。

这就是 LVM 的好处,赋予我的工作以弹性。不再猜测未来究竟会使用多少空间,我只需知道当下要用多少空间,并为未来留下足以变通的可能性就可以了。

我手头上是一块希捷的酷鱼7200.10 SATA 320G 硬盘。我不打算安装 Windoze,但是也许会试试 Ubuntu 或者 CentOS,所以我不会把所有的硬盘空间都扔给 Gentoo。如果你的想法恰好和我一样,我想你会享受这个方案的。不过大多数情况下,你要根据自己的需求来拟定自己的计划。接下来简单说明分区计划:


  • /dev/sda1 --> /boot 启动分区
  • /dev/sda2 --> Swap 置换分区
  • /dev/sda3 --> / 主分区
  • /dev/sda4 --> 扩展分区
  • /dev/sda5 --> 安装时即加入 LVM2 卷群组
  • /dev/sda6 ~ /dev/sda14 --> 备用分区

/boot 分区不需要很大,64M就足够折腾一堆内核了。

Swap 置换分区视内存而定,512M。

Gentoo LVM2 安装文档建议的主目录空间是150M,包括/etc、/lib、/mnt、/proc、/bin /sbin、/dev 和 /root 等目录,不包括 /usr、/home、/opt、/var 和 /tmp。想到万一会用 root 帐号下载东西,把主分区设置为1G(不是 root 敢死队哟,万一啦)。特别要注意,主目录最好不要放在 LVM2 volume group 中。这样即使 LVM2 或者其他程序发生灾难的时候,至少还可以用 root 帐号登录到系统。

剩下有300G+空间。我可不想只是弄成一个大分区,全部扔给 LVM2 管理,因为这办法没什么“弹性”。我先确定将要使用的空间 /dev/sda5 130G,当中有 /usr 10G、/opt 5G、/tmp 3G、/var 10G 以及 /home 100G。剩余的空间以20G为单位划分成9个分区。这有点像 CS 里换弹匣的感觉——当 AK 子弹用光的时候,你就要按下'Reload'键来重装一个弹匣,而 /dev/sda6 ~ /dev/sda14 9个分区就是我的备用弹匣。我可以在需要的时候把它们归入 LVM2,也可以用来安装 Ubuntu 或者 CentOS,这样就为未来预留了可能性。

最后是我现在的硬盘空间情况,权当参考。


# df -hH

Filesystem              Size   Used  Avail Use% Mounted on
/dev/sda1                72M   8.2M    60M  13% /boot
/dev/sda3               1.1G   266M   763M  26% /
udev                     11M   263k    11M   3% /dev
/dev/mapper/lvg-usr      11G   3.5G   7.3G  33% /usr
/dev/mapper/lvg-home    140G   128G    13G  92% /home
/dev/mapper/lvg-opt     5.4G   355M   5.1G   7% /opt
/dev/mapper/lvg-var      11G   1.6G   9.2G  15% /var
/dev/mapper/lvg-tmp     3.3G   163M   3.1G   6% /tmp
none                    1.1G      0   1.1G   0% /dev/shm

终于要开始安装 LVM2了。请继续:《Gentoo LVM2 安装笔记(下)》

标签: ,

2007年6月8日

有备无患:升级Gnome 2.16.3后,启动异常的解决办法

Gnome升级到2.16.3之后,出现一个问题:桌面全黑,无图标,无墙纸。怀疑是nautilus没有正常启动,从gnome terminal执行nautilus,系统报错:大意是libexif.so出了什么问题。所以,祭起万能的重编译的大旗,万事OK。


$ sudo emerge -av libexif nautilus

标签: ,

2007年2月9日

有备无患:在Gentoo上安装Tor并配置服务器,破解GFW封锁

Tor是一个由虚拟通道组成的网络,团体和个人用它来保护自己在互联网上的隐私和安全。


个人使用 Tor 避免网站追踪他们和他们的家庭成员,或者连接到被本地ISP 封锁的新闻站点、即时通讯服务等等。
记者使用 Tor 更安全地与告密者和持不同政见者交流。
非政府组织(Non-governmental organizations, NGOs)使用 Tor,当它们的工作人员在国外时,他们可以连接自己的网站,而周围的人对他们的工作却一无所知。
独立新闻媒体(Indymedia)之类的团体建议使用 Tor 来保护他们成员在线的隐私和安全。


Tor 的用户的多样性正是使之如此安全的部分原因。 Tor 把你隐藏在网络上的其他用户之中,所以 Tor 的用户群越发庞大和复杂,你的匿名性就会得到越好的保护。

电子前沿基金会(Electronic Frontier Foundation, EFF)之类的社会活动团体正在支持 Tor 的开发工作,它被认为是维护公民在线自由的一种手段。

而对于中国的用户来说,最直接的用途就是破解中国政府GFW的网络封锁。

第一步,安装必须的Tor和Privoxy软件包


# echo "net-proxy/tsocks tordns" >> /etc/portage/package.use
# echo "net-proxy/privoxy pcre zlib" >> /etc/portage/package.use

# emerge -av tor privoxy

配置/etc/privoxy/config文件


(line 262) # logfile privoxy.log
(line 288) # jarfile jarfile
(line 571) #debug   1    # show each GET/POST/CONNECT request
(line 1008) forward-socks4   /   localhost:9050 .
(line 1009) # Don't forget the '.' at the end!

第二步,启动Tor和Privoxy


# cp /etc/tor/torrc.sample /etc/tor/torrc
# /etc/init.d/tor start
# /etc/init.d/privoxy start

(将Tor和Privoxy添加为系统默认启动)
# rc-update add privoxy default
# rc-update add tor default

第三步,安装Firefox Extension:Tor Button FoxyProxy

第四步,配置Tor服务器< /etc/tor/torrc


(line 94) Nickname idoshicntorserver
(line 97) Address 58.24.98.60
(line 107) ORPort 9001
(line 146) ExitPolicy reject *:* # middleman only -- no exits allowed
(line 148) ## To limit your bandwidth usage, define this. Note that BandwidthRate
(line 149) ### must be at least 20 KB.
(line 150) BandwidthRate 20 KB        # Throttle traffic to 20KB/s (160Kbps)
(line 151) BandwidthBurst 50 KB       # But allow bursts up to 50KB/s (400Kbps)

重新启动Tor


# /etc/init.d/tor restart

检查Tor服务器是否启动,执行指令:


# cat /var/log/tor/tor.log |grep Self-testing
(如果显示下列记录,则表示服务器启动成功。)
  Self-testing indicates your ORPort is reachable from the outside. Excellent. 

参考资源




2007-8-28 UPDATE: 最新的Tor不再需要安装privoxy。

标签: ,

2007年1月28日

有备无患:Gentoo镜像更新命令与常用镜像

Gentoo Linux中,可以用mirrorselect命令寻找相对速度最快的镜像服务器。如果系统中没有安装mirrorselect,需要先输入运行:


$ sudo emerge -av mirrorselect

安装完成后,执行:


$ sudo mirrorselect -D -s 5 -b 10

mirrorselect会尝试连接所有Gentoo的镜像服务器,比较下载速度,然后把速度最快的5个服务器存入/etc/make.conf文件。

在家里用的镜像服务器列表(上海有线通-电信)


GENTOO_MIRRORS="http://linux.ntcu.net/ftp/dists/gentoo http://ftp.gentoo.or.kr http://mirror.datapipe.net/gentoo http://gentoo.zie.prg.gda.pl"
SYNC="rsync://linux.ntcu.net/gentoo-portage"

在学校用的镜像服务器列表(北京教育网)


GENTOO_MIRRORS="ftp://ftp3.tsinghua.edu.cn/mirror/gentoo ftp://ftp.sjtu.edu.cn/gentoo"
SYNC="rsync://ftp3.tsinghua.edu.cn/gentoo/gentoo-portage"

校内的镜像服务器列表(北京理工大学校内网)


GENTOO_MIRRORS="http://mirror.bitunion.org/gentoo/"
SYNC="rsync://mirror.bitunion.org/gentoo-portage/"

标签: ,

2007年1月18日

有备无患:vim编辑器的一些基本命令

移动光标
h
l
w
b
W
B
e
E
0
^
$
左移一个字符
右移一个字符
左移一个单词
右移一个单词
移至下一个非空字符的开始
移至上一个非空字符的开始
移至当前单词的结尾
移至当前非空单词的结尾
移至行首
移到行内的第一个非空字符
移至行尾
输入模式
i
a
I
A
R
当前字符前输入
当前字符后输入
行首输入
行尾输入
覆盖输入
删除
dh
dl
db
dw
dB
dW
d$
d0
扩展命令
D
dd
C
cc
X
x
向后删除一个字符
向前删除一个字符
向后删除一个单词
向前删除一个单词
向后删除一个非空单词
向前删除一个非空单词
删除至行尾
删除至行首

d$
0d$dw
d$a
0d$a
dh
dl
搜索历史命令
k or -
j or +
G
/string
?string
n
N
向前移动一行
向后移动一行
移动到重复计数指定的行
向后搜索字符串
向前搜索字符串
顺向重复搜索
逆向重复搜索
查找字符
fx
Fx
tx
Tx
;
,
右移至x
左移至x
右移至x之前一格
左移至x之后一格
顺向重复查找
逆向重复查找

标签:

2006年12月21日

有备无患:nVidia+Beryl的相关xorg.conf参数设定

Section "ServerLayout"
    ... ...
    Option    "AIGLX" "true"
EndSection

Section "Module"
    ... ...
    # Load    "GLcore"
    Load     "dri"
    Load     "glx"
EndSection

Section "Device"
    ... ...
    Driver    "nvidia"
    Option    "RenderAccel" "true"
    Option    "AllowGLXWithComposite" "true"
    #Option   "backingstore" "true"
    Option    "TripleBuffer" "True"
    Option    "AddARGBGLXVisuals" "True"
EndSection

... ...

Section "DRI"
    Group    0
    Mode     0666
EndSection

Section "Extensions"
    Option    "Composite" "Enable"
EndSection

标签: ,

2006年12月20日

有备无患:在装有JMicron SATA/IDE Controller的主板上安装Gentoo Linux的解决方法

因为Intel i965系列芯片组中取消了IDE控制器,理论上只能用SATA硬盘和SATA光驱。可是市面上大部分的光驱都还停留在IDE时代,所以主板厂商都采用独立的SATA/IDE控制器将SATA转换成IDE,供IDE光驱和硬盘使用。我的技嘉GA-965P-DS3用的是JMicron SATA/IDE Controller。运行Windows没有什么问题,但是Gentoo Linux 2006.1还不能完整支持这些控制器,虽然Linux Kernel 2.6.17好像就已经打过了JMicron的补丁,但是可能并不是支持全系列的JMicron控制器,所以即便升级到2.6.18也还不能直接支持。

解决方法就是安装时,添加参数all-generic-ide irqpoll,让Linux把所有的SATA设备和IDE设备统统认作IDE设备,硬盘也从sdx变成hdx。

如果要继续用IDE光驱的话,Grub启动时也需要添加这两个参数。附:grub.conf中的相关参数:


title=Gentoo Linux (genkernel-x86-2.6.18-gentoo-r4)
root (hd0,0)
kernel /kernel-genkernel-x86-2.6.18-gentoo-r4 root=/dev/ram0 init=/linuxrc ramdisk=8192
real_root=/dev/hda4 all-generic-ide irqpoll vga=791 splash=silent
initrd /initramfs-genkernel-x86-2.6.18-gentoo-r4

标签: ,

2006年10月3日

悠言悠闲:感受XGL及安装备忘

整完XGL的时候,已经是昨晚10点多了。桌面上正下着大暴雨,就像上海黄梅天老下的那种,稀里哗啦的,看着都……爽啊——这就是XGL,传说中媲美微软Vista的3D桌面效果?呵,不枉费我折腾了一天多,系统崩溃重装N次黑屏N次最后无奈给LCD换了模拟线才勉强凑合。记下流水账,有备无患。

默认的显卡驱动是不支持3D加速的,所以要装上nVidia自家的驱动优化性能,这和Windows中没有两样。参考SUSE网站上的安装指南,我用的是SUSE Linux 10.0-IA32,安装驱动的方法有两种,一种是通过YOU(YaST2 Online Update)自动升级驱动,推荐理由有两个:简单,不用重新编译nVidia内核模块。另一种是手动安装,推荐理由也有两个:最新的nVidia驱动,通过YOU在nVidia的FTP上下载到的驱动一般不是最新的驱动版本——记得好像是8767,最新的是8774;二是第一次的时候我用YOU安装驱动,结果系统崩溃,可我不会很细节的配置修复系统,只好重新安装了。血的教训啊……

YOU自动安装的方法。首先添加安装源,ftp://downloads.nvidia.com/novell,直接添加网址或者使用FTP协议。按理来说,两者应该是等价的,但是我用FTP协议的时候就是没有办法响应,直接添加网址倒很好用。然后运行YOU,选择过滤器:安装源:nVidia,选择下载通常在列表最下面的一项:Download NVIDIA(r) Graphics Driver。如果是升级驱动的话,右击选择“Update”。安装完之后,重新启动Xserver……传说中就可以了——虽然我是没有成功直接黑屏挂掉了T.T

手动安装的方法。准备工作,下载驱动的安装文件NVIDIA-Linux-x86-1.0-8774-pkg1.run,确认安装了‘kernel-source’、‘make’和‘gcc’软件包,没有装的话用YaST2安装,装过但没有升级过的话用YOU升级,装过也升级过的话就进入下一步。然后退出XServer,输入指令安装驱动1.0-8774:


$ sh NVIDIA-Linux-x86-1.0-8774-pkg1.run

安装过程很快,但需要连接download.nvidia.com,检查kernel interface更新。安装完之后输入指令配置X.Org:


$ sax2 -m 0=nvidia

注意:0是数字不是字母,代表设备ID。

然后重新启动Xserver……传说中就可以了——

可是,在Linux引导过程中加载了显示驱动模块之后,LCD黑屏,OSD显示“频率超出响应范围”。把别人的CRT借过来测试,能用,只是分辨率变成1024x768,而不是原来的1680x1050,频率固定在75Hz不能更改。试了很多办法,导致有重装一次系统,又一次血的教训啊……最后抱着死马当活马医的心态,试试LCD的模拟信号把模拟线拿出来插上去,还真管用,能够正常显示1680x1050@75Hz,可是似乎有残影,可能还是驱动和频率的问题。有待解决。

最后,show一下XGL效果;-)

3D桌面效果:Linux可以设置多个独立的桌面(工作区),把这些桌面分别配置到长方体的多个面上,感觉很酷。


水纹效果

水纹效果:模拟在雨滴落在桌面的感觉,我喜欢用暴雨级的:P


拖动效果

拖动效果

窗口拖动:2D窗口想象成一个有弹性有质量的物体,那么拖来拖去的时候就会产生相应的形变了。


标签:

2006年9月28日

有备无患:Linux中加载Windows分区

前几天新装了一个SUSE Linux Enterprise Desktop 10,还不是很明白,翻了翻书找了找加载Windows分区的方法。记录下来不怕忘记。

要在Linux中加载Windows系统的硬盘分区,首先为每个硬盘分区需要创建各自的安装点,比如我的Windows系统有四个分区,C:\、D:\、E:\、F:\,就需要创建四个安装点,输入命令:


# mkdir /mnt/win0 ; mkdir /mnt/win1 ; mkdir /mnt/win2 ; mkdir /mnt/win3

接下来需要将Windows系统的硬盘分区安装到Linux下面。在本地计算机的文件系统上,有关安装的文件系统的定义保存在/etc/fstab文件中,所以输入:


#vi /etc/fstab

进入vi编辑器,添加下列Windows硬盘分区,


/dev/sda1   /mnt/win0   ntfs   noauto   0 0
/dev/sda5   /mnt/win1   ntfs   noauto   0 0
/dev/sda6   /mnt/win2   ntfs   noauto   0 0
/dev/sda7   /mnt/win3   ntfs   noauto   0 0

第一列表示设备名;第二列表示安装的位置,/mnt/winx就是刚才创建的安装点;第三列表示硬盘格式,一般Windows上有NTFS,FAT32和FAT三种;第四列表示启动类型,noauto表示引导时这些设备将不会被加载;第五和第六行的参数不是很明白。

最后需要将这些硬盘分区加载到Linux中,输入


# mount /mnt/win0 ; mount /mnt/win1 ; mount /mnt/win2 ; mount /mnt/win3

这样就可以在Linux下访问Windows中的文件了。


UPDATE:加上只读和所属用户属性的完整挂载命令:


# mount /dev/sda1 /mnt/win0 -o utf8,ro,uid=userid,gid=groupid ;
# mount /dev/sda5 /mnt/win1 -o utf8,ro,uid=userid,gid=groupid ;
# mount /dev/sda6 /mnt/win2 -o utf8,ro,uid=userid,gid=groupid ;
# mount /dev/sda7 /mnt/win3 -o utf8,ro,uid=userid, id=groupid

标签: