2009年11月11日星期三

修复Grub

修复Grub恐怕是我玩Linux碰到的最麻烦的问题了。系统还没开始启动,引导程序就出错的时候,我们很难做到Don't panic。

我第一次修复Grub,是在安装了Redhat 9再安装Windows XP后,这样Grub就被Windows搞坏了。那时候用Redhat 9的光盘启动进入拯救模式,就可以修复了,还算方便。在用Linux的这几年里,Grub因为种种原因被弄坏过太多次,但之后都不是因为Windows。为什么说修复Grub麻烦呢,因为你需要从光盘启动进去修复。从光盘进入系统速度太慢,如果要试几次,会很花时间的。为此,我一度在硬盘上装两个系统,一个专门用作拯救系统。

昨天整理了老电脑的硬盘,删除了某分区。今天开机后就停在了grub rescue的命令提示符。在这个提示符里面我搞不定,就用Fedora 11的光盘启动。chroot进去后,grub-install和update-grub都出错,大概是分区找不到的错误。Fedora 11提供的拯救模式,在最后一步会提问是否要让程序搜索并挂载已安装的系统。之前我都跳过这一步,自己手动挂载的。最后一次,我让拯救程序搜索并挂载。然后
grub-install '(hd0)'
update-grub
重启之后就成功了。

看来拯救程序挂载得很完美,具体是哪些参数的设置我没研究明白。修复这么多次Grub,每次都很折腾,一个原因是我至今还没完全搞清楚里面的原理。

2009年9月20日星期日

XSane扫描

昨天接了一台HP LaserJet 3055的一体机,装了HPLIP就可以打印了。但用XSane扫描的时候,只有sudo之后才能发现接在USB口的这台机器,普通用户看不到。不过今天再用的时候,普通用户也可以发现了,可能是重启后就好了的缘故。

2009年8月31日星期一

GNOME keyring daemon让桌面进不去

在优盘上装了个Ubuntu 8.04,然后启动进去。结果GNOME进不去,只能看到Xorg的桌面。困惑良久后,dmesg发现gnome-keyring-daemon有segfault的信息。看来是因为这个程序起不来而进不去桌面环境的。这台计算机是不能上网的,没法更新程序,于是rm /usr/bin/gnome-keyring-daemon。虽然这个行为有点冒失,但是之后重新从GDM登录,就成功进入GNOME了。

2009年7月18日星期六

SHOW ME THE IP

从内网获得路由器的广域网IP地址的Python脚本(仅限特定硬件和特定固化软件):
#! /usr/bin/env python
"""
Get my IP address from my TP-Link TL-R402 router.
Pan Yongzhi@ Jul 18, 2009
"""
import urllib2
x = urllib2.HTTPPasswordMgrWithDefaultRealm()
x.add_password(None, 'http://192.168.1.1', 'user', 'pass')
auth = urllib2.HTTPBasicAuthHandler(x)
opener = urllib2.build_opener(auth)
urllib2.install_opener(opener)
flob = urllib2.urlopen('http://192.168.1.1/userRpm/StatusRpm.htm')
"""IP address contained in line 75 of the web page, looks like this:
0, "00-21-27-3C-01-A5", "221.217.204.232", 3, "255.255.255.255", 0, 0, "221.217.204.232", 0, 1, 0, "202.106.46.151, 202.106.195.68", "0 day 00:19:31", "up",
"""
print flob.readlines()[74].split(',')[2].strip().strip('"')

2009年7月15日星期三

还是进程交织快

第一种方法,打包和加密分别进行,共用时46分钟:
$ time tar cf tux.tar tux/

real 23m45.672s
user 0m4.290s
sys 0m52.546s
$ time openssl enc -e -des3 -salt -in tux.tar -out tux.090713.enc
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

real 22m13.738s
user 8m20.402s
sys 0m55.287s

第二种方法,把打包和加密进程交织进行,共用时25分钟:

$ time tar cf - tux/ | openssl enc -e -des3 -salt -out tux.090713.enc-again
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

real 24m56.357s
user 8m26.497s
sys 1m12.961s

文件加密解密脚本

2006年在网上找到的,需要OpenSSL,方便好用:

#! /bin/bash
#
usage()
{
echo "Usage: encrypt foo .. encrypts foo, stores in foo.enc"
echo " encrypt -d foo.enc .. decrypts foo.enc, stores in foo"
echo " encrypt -c foo.enc .. decrypts foo.enc, writes to stdout"
}

if [ $# -eq 1 -a "$1" = "-h" ]
then
usage
elif
[ $# -eq 2 -a "$1" = "-c" ]
then
openssl enc -d -des3 -in $2
elif
[ $# -eq 2 -a "$1" = "-d" ]
then
openssl enc -d -des3 -in $2 -out ${2%.enc}
elif
[ $# -eq 1 -a -f "$1" ]
then
openssl enc -e -des3 -salt -in $1 -out $1.enc
else
usage
fi

2009年7月9日星期四

磁盘错误

某天用着用着突然音乐声音开始一卡一卡,电脑很慢,dmesg发现硬盘错误。重启
后也是磁盘错误进不去,用Ubuntu的Live CD也无效。于是从FreeBSD启动进去试图
磁盘检错,没找到怎么检查。重启后Ubuntu又能进去了。莫非是FreeBSD在启动中
已经把硬盘都查错了?

2009年6月23日星期二

Bash中命令粘合的一个例子

diff -a <(sudo dd if=/dev/sda1 bs=512 count=1 | tee >(gzip - > hd1.gz)) <(sudo dd if=/dev/sda2 bs=512 count=1 | tee >(gzip - > hd2.gz)) | tee output | vi -

上面的命令仅仅作为一个演示,把硬盘第1个分区的第1个扇区(前512个字节)压缩输出到hd1.gz,把第2个分区的第1个扇区压缩输出到hd2.gz,同时比较这两个扇区的差异,diff结果在vi中查看。

要注意的几点:

1. 每个dd要分别加上sudo,在diff前加sudo对dd无用。
2. 前两个tee后面的'>'和'('之间不能有空格,这里的'>'不是输出重定向,输出还会拷贝到stdout。
3. tee output若改为tee > output的话,输出就都定向到了output文件,不拷贝到stdout了,vi也得不到任何输入了。

format=flowed

我是用Thunderbird来发帖到此博客的。发现贴上去后被TB换行了,很难看,即使把写新邮件的换行长度改为零也没用。后来找到了办法:把mailnews.send_plaintext_flowed设为true即可。相关链接:

http://kb.mozillazine.org/Mail_content_types#Disabling_paragraph_flow
http://joeclark.org/ffaq.html

2009年6月21日星期日

LinuxApp版聚/GRUB

昨晚在魏公村的一家餐馆,参加了水木社区LinuxApp版的版聚。参加的人有yegle, dinny, fvwmer, Dieken, ws6644(女), xinliGG, roy, JulyClyde, zhlyang, chenkw, 我, askthesky(女)。没想到其中两人和我一样都在水木聊天室的群里面。能瞎聊聊还是不错的。

学到了一点。GRUB 2的shell里面有cat命令,可以通过set root设置分区,然后用cat就可以查看任意文件,比如Pidgin的accounts.xml文件(里面含有明文密码)。如果是GRUB legacy,可以用password和md5crypt设置GRUB shell的密码,但目前GRUB 2里面还没有这两个命令。

2009年6月20日星期六

Python Shell中切换目录

import os
os.getcwd() # 输出当前工作目录
os.chdir(path) # 改变工作目录至path

2009年6月18日星期四

光盘busy,不能弹出

买的一张VCD有错,没法读出。弹出的时候说Busy,但是lsof里面不显示光盘被什
么程序访问。于是init 1到但用户模式,就可以umount光盘了。

2009年6月17日星期三

Fedora中改变键盘布局

Ubunut的loadkeys在console-tools包中,但是fedora的在kbd中。

# yum install kbd
# loadkeys dvorak

之后就可以用德沃夏克键盘操作了。

2009年6月16日星期二

Fedora相关两条

在Virtualbox里面安装了Fedora,发现网络配置文件在/etc/sysconfig/目录下,而不是Debian系的/etc /network/。端午节在开栋那里,帮他配虚拟机里的Fedora的网络时候,发现没有/etc/network/,还以为是安装问题呢。

另外,用Fedora的安装光盘(试了LiveCD和netinst CD),找不到文字界面启动选项。我在虚拟机里面用图形界面很慢的。后来发现启动菜单时候按下ESC,才会出来boot:提示符,输入linux boot再回车就可以进入文字安装界面了。这一点做得太不清楚了。

开博序言

用Linux时候总是需要记些笔记,因为很多操作不记下来,过后很容易就忘记了。用过Google Notebook,但是界面用起来不流畅,而且有一次不小心把所有笔记都删除了就再不用了。也在纸质笔记本上记笔记,需要自己保存,有点不便。在wikia.com开了个Wiki想记笔记,但发现Wiki不是干这个事情的。也在自己电脑里面用文本文件记笔记,但也有整理不便的麻烦。

以后打算在Blogger上记录这些笔记了。不会写很长,不会写太认真,只是自己的顺手笔记,用于以后查看。