Gentoo的Gnome3使用久了,你的“应用程序”集合就会出现各色的图标:失效的、无用的、重复的、图标烂/图标丢失的,还有Wine创建的大量快捷方式,严重影响了Gnome3的使用体验. 比如比尔盖子的桌面上有好多分辨率很低的三明治——好多版本的PyShell.
继续阅读
分类: Linux
对Gentoo的RAID bug进行Workaround
在之前的文章中已经提到了,Gentoo的mdadm在Intel的FakeRAID存在bug,会将一个三块正常硬盘组成的RAID5阵列少识别一块硬盘,但由于RAID5在2块硬盘也能正常运行。而重新启动计算机后,mdadm又能识别出三块硬盘,并开始重建RAID阵列。再次重启后,又回到最初的情况。
继续阅读
Fedora Linux下GVim无菜单、乱码的解决方法
有时,Linux系统安装完GVim后,你会发现它在UTF8中文环境下,无菜单和乱码。原来,GVim是根据系统LANG变量来检测语言并使用相应语言文件的。但是,对于中文,GVim只能识别zh_CN.utf-8,而不能识别不带“-”的zh_CN.utf8(晕)!
解决的方法很简单,到GVim的文件目录的lang目录下,比如/usr/share/vim/vim73/lang,然后做一个软链接(符号链接):
ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim
再打开GVim,你就会发现菜单正常了!
解决Gentoo能识别非iOS的ipod但不能识别iOS设备的问题
今天想用Gentoo给iPhone同步一些音乐,却发现播放器没有识别。通过dmesg得知:
usb 1-3: New USB device found, idVendor=05ac, idProduct=1297
usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-3: Product: iPhone
usb 1-3: Manufacturer: Apple Inc.
usb 1-3: SerialNumber: <You mustn't know>
但是系统没有给其分配设备文件,导致无法挂载。重新配置内核,增加GUID分区表等驱动,未果。最后经过搜索,安装了libimobiledevice,但仍未果。
经过实验,发现比尔盖子的iPod不是iOS系统,可以挂载;但其它iOS设备:iPad、iPhone都无法挂载。经过搜索,发现原来需要增加一个USE:ios,然后再深度编译emerge -avuDN world即可。
原来,USE:ipod是给非iOS的iPod使用的,而iOS的iPod touch、iPhone、iPad则需要使用USE:ios。
最后安装ifuse即可。
iOS 5
但若是用此方法,无法使用iOS 5 的设备。那是因为iOS 5太新了,libimobiledevice和ifuse不支持。需要编译安装git版本。
git clone git://git.sukimashita.com/libimobiledevice.git
cd libimobiledevice/
./autogen.sh
make -j2
su -c 'make install'
git clone git://git.sukimashita.com/ifuse.git
cd ifuse/
./autogen.sh
make -j2
su -c 'make install'
#这样系统就会认为你的这两个包已经安装了,就不会再装一次了,但是当这两个包升级以后就需要自己维护了
su -c 'emerge -C ifuse libimobiledevice'
su -c 'mkdir /etc/portage/profile/'
su -c 'echo "app-pda/ifuse-1.1.1" >> /etc/portage/profile/package.provided'
su -c 'echo "app-pda/libimobiledevice-1.1.1" >> /etc/portage/profile/package.provided'
Gentoo GCC报错解决
今天,比尔盖子在更新了GCC之后,运行了emerge –depclean。然后GCC就不工作了!
每当运行GCC,就得到一个提示:
* gcc-config: Active gcc profile is invalid!
[1] i686-pc-linux-gnu-4.5.3
比尔盖子吓坏了,因为如果GCC被误删了,那么比尔盖子就没法安装任何软件了,怎么办呢……后来,比尔盖子搜索了一下这个错误提示,发现解决方案原来这么简单!
#第一步依然会报错,不要紧张,这是预料之中的事情。
#你需要在第一条命令报错后接着运行下面的命令
gcc-config -c
gcc-config i686-pc-linux-gnu-4.5.3
gcc-config -c
然后GCC就正常了,世界又恢复了美好……
后来反思了一下报错的原因,比尔盖子认为原因应该是:比尔盖子的系统在删除旧版本GCC之前,有两个GCC并存,而且默认使用旧版本GCC。而现在删掉旧版本的GCC之后,由于系统内所有的配置文件都指向旧版本GCC,但旧版本GCC已经不存在了,GCC还能工作吗?而上面的命令,就是将配置文件改成新版本GCC,最终让GCC恢复正常。
按照最新规范修改启动脚本
话说比尔盖子转换完文件系统之后,发现开机的时候有一些Warning。具体内容如下:
Use of the opts variable is deprecated and will
be removed in the future. Please use extra_commands or extra_started_commands.
也就是说,只要把init启动脚本中的”opts=”改成”extra_commands=”就OK了。但是,这项工作也太繁琐了。最终在Gentoo论坛上找到了解决方法,翻译过来,比尔盖子再修改一下,大致是:
注意,这个方法很快捷,同时也很脏。容易出现问题!
用root执行:
cd /etc/init.d mkdir /root/init.d_backups cp * /root/init.d_backups sed -e 's:opts=:extra_commands=:g' -e 's:${opts}:${extra_commands}:g' -e 's:$opts:$extra_commands:g' /etc/init.d/* -i重启。如果系统没挂,而且启动之后的Warning都消失了,就继续用root执行:
rm -r /root/init.d_backups如果系统挂了,很简单,用LiveCD启动系统,chroot之后(方法你应该懂得),root执行:
rm -r /etc/init.d cp /root/init.d_backups /etc/init.d重启,进入系统吧,有Warning就有吧。反正不影响正常使用。最好别再试验了。
反正比尔盖子是一次成功了,重启之后,Warning都消失了!如果你有兴趣,不妨看看原帖:http://forums.gentoo.org/viewtopic-t-465367-start-175.html。
ext2 转换到 ext4!
比尔盖子的蜗牛笔记本在装上Gentoo后,终于变成蜈蚣了,速度快多了。
但是刚才突然想起,比尔盖子的/boot分区当时装机为了避免麻烦,没有使用ext4文件系统。虽然这几乎不会损失什么性能,但是比尔盖子还是想把它转换成ext4。
注意:请务必阅读“修复引导”部分,否则,到时候系统挂了比尔盖子就只能帮你了……如果你没有LiveCD,那么比尔盖子也帮不了你了。
初步转换
怎么转换呢?首先,要先把它转换成ext3,这两条命令盖子都已经背熟了:
#先卸载,后日志,再强检。完事以后挂载。ext2就变ext3!
umount /dev/hda1
tune2fs -j /dev/hda1
fsck -f /dev/hda1
mount /dev/hda1
然后再转换成ext4,去网上查了查命令:
#先卸载,变结构,再强检。完事以后挂载。ext3就变ext4!
umount /dev/hda1
tune2fs -O extents,uninit_bg,dir_index /dev/hda1
fsck -f /dev/hda1
mount /dev/hda1
性能优化
虽然转换完了,但是由于这样转换,虽然文件系统是ext4了,但是数据结构还是ext3。只有新的数据才是ext4格式。这不是瞎折腾吗?
这可通过整理磁盘碎片解决,但是由于ext4从来没有什么真正的“碎片”,因此磁盘碎片整理程序几年过去了还是没有稳定下来。但是,比尔盖子发现BFS调度器的作者:大名鼎鼎的澳大利亚黑客——CK,居然还写了一个能基本上无视文件系统,从抽象层就可以(我不知道我理解的是否正确,因此使用了删除符号,注意,这段内容仍然有效,只是我怕误导大家)整理磁盘碎片的bash脚本!
可以从这里获得:http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
把这个脚本放到你要整理的文件系统上,比如我要整理的是新的ext4分区:/boot。就把它放到/boot的根目录上,然后用root执行:
bash defrag
umount /dev/hda1
fsck -f /dev/hda1
mount /dev/hda1
在这里,为了防止这个脚本在整理磁盘碎片时胡乱破坏文件系统,因此再强制检查一次。稍等片刻,整理就完成了。现在可以删除这个脚本了。
引导修复
修复GRUB
需要注意的是,这时候如果你重新启动系统,那么你可能就再也进不去了!你只能看到永远的黑屏,没错,连内核信息都没有!
因为,文件系统转换以后,再加上用CK大神的脚本整理了磁盘碎片,因此我的/boot的GRUB已经有99%可能性已经被破坏了,因此,需要重装GRUB。
如果你转换/整理的文件系统不是引导分区,那么可以省略这步!
用root执行:
#因为比尔盖子的/boto分区是独立的,因此需要这样:
grub-install --root-directory=/boot /dev/hda1
如果提示没有错误,那么就说明GRUB已经修好了。
修改/etc/fstab
这一步是必需的,否则下一次将无法挂载修改后的文件系统。只能卡在内核提示的Kernel Panic的灾难信息上。
用root权限执行你喜欢的编辑器,比如Vim、Emacs,把里面的ext2改成ext4。
注意,如果你并没有转换某个ext2分区,请不要把它后面的ext2改成ext4。程序猿,Linuxer,你们懂得。
解决一个小Bug——Sendmail无法发送邮件
今天输入mail,发现root收到16000多封邮件,都是Cron发给我的。
我一看:
451 gmail.com: Name server timeout
天啊,这年头DNS也抽风?后来经过查阅资料,再加上一些回忆,终于想到了原因:
原来比尔盖子的VPS机房是支持IPv6的,可自从搬到日本去IPv6就没有了。但是Sendmail依赖IPv6,因此没有了它DNS也就查询不成功了。
解决这个问题的方法倒是挺简单:
cd /etc/mail
yum install sendmail-cf
#刚学会超级转义符号:单引号,用单引号引用的内容永远不会具有特殊含义,比双引号厉害。
#正好就用到了!
#下面这句话的意思是:在sendmail.mc的最后一行加上"dnl define(`confBIND_OPTS’, `WorkAroundBrokenAAAA’)dnl" 来屏蔽IPv6!
echo 'dnl define(`confBIND_OPTS’, `WorkAroundBrokenAAAA’)dnl' >> sendmail.mc
m4 sendmail.mc >sendmail.cf
make
service sendmail restart
然后,Sendmail终于把邮件发出去了!
Fedora 16编译安装Osd-Lyrics
昨天升级完Fedora 16后又闲着没事干,想起来以前看过一篇文章,可以安装一个插件让Linux实现歌词同步显示。于是尝试了许多Rtythmbox的插件,结果发现这些插件安装上去以后,都没有在Rtythmbox的插件列表中显示出来……
最后,发现了Osd-Lyrics。于是决定下载源码编译安装,结果发现编译失败。于是我去提交了一个Bug(Issue 244: Fedora 16 编译失败),结果10个小时就解决了!
现在编译安装的过程如下:
检查依赖项目
- gcc gcc-c++
- autoconf automake libtool intltool
- gtk2-devel >= 2.12.0
- dbus-glib-devel
- libcurl-devel
- libnotify-devel
- sqlite-devel
- libmpd-devel (this is unnecessary if you configure with –disable-mpd option)
- xmms2-devel (this is unnecessary if you configure with –disable-xmms2 option)
开始编译
git clone git://github.com/tigersoldier/osd-lyrics.git
cd osd-lyrics
git checkout --track origin/develop
aclocal
autoheader
autoconf
automake --add-missing
./configure
make -j3
su -c "make install"
然后在Gnome3“应用程序”的“影音”中找到“Osd Lyrics”,打开,然后拿Rtythmbox放一首歌,歌词出来了!
Fedora 16之悲催的升级过程
按照惯例,经过多次跳票之后,Fedora 16终于如期在2011年11月8日发布了。周末,比尔盖子也趁着这个功夫,打算将自己的工作站升级到Fedora 16。
升级的日子正好是百年不遇的光棍节。也许正是这个日子,让比尔盖子遇到了一些闻所未闻的麻烦。开始升级的时候还算顺利,一句话Preupgrade就慢慢下载吧!一切就绪,重启,黑屏!原来是GRUB损坏。早就听说由于Fedora将用GRUB2代替GRUB,可能会有这个BUG,没想到就遇到了!
找Fedora的LiveCD。由于比尔盖子的整个系统都被撞到了逻辑卷管理器(LVM2)上,因此需要执行这些命令来修复GRUB:
mkdir -p /mnt/temp/boot
vgchange -a y
vgscan
lvdisplay
mount /dev/vg_biergaizi-LogVol00/ /mnt/temp
mount /dev/sdd1 /mnt/temp/boot
grub-install –root-directory=/mnt/temp /dev/sdd
你的逻辑卷名称和设备名称可能不一样,需要自己修改。
接着,搞定,重启。选择第一项(有乱码的那一个),然后是漫长的黑光标,然后是升级界面。漫长升级之后,重启,出现新的GRUB2。引导后,发现Gnome提示崩溃,让比尔盖子联系管理员。多次重装显卡驱动后也不行!
在Linuxquestion.org上找到一个绝招:
1.清理配置文件
rm -rf ~/.gnome
rm -rf ~/.metacity
rm -rf ~/.gnome2
rm -rf ~/.gconf
rm -rf ~/.gconfd
2.卸载Gnome-Shell
rpm -e gnome-shell –nodeps
3.卸载所有显卡驱动
这时,重启电脑,你会发现由于没有了Gnome-Shell,Gnome就会自动进入备用模式。这时,安装显卡驱动(或者init3之后在文本模式下安装),然后yum install gnome-shell,重启,就OK了。但是比尔盖子这么做以后,发现一登录账户就花屏。后来发现,Gnome-Shell根本没装上!再次尝试安装,却提示caribou这个依赖项目出了问题。用yum remove caribou,然后再yum install gnome-shell终于正常了!
但最后发现账户还是有问题,很多应用程序都打不开,换了个账户就正常了。只好备份home目录后删除账户再重建账户!
最后,比尔盖子终于能用Fedora 16发布这篇文章了。