今天拿出一张多年不用的 DVD-RW,想擦了上面的内容做一张服务器的启动盘(因为 HP ML110 G7 被我折腾了几次以后不肯在 USB 上启动,不知道为什么)。无意中发现上面的内容竟然是 Fedora 6 DVD,那时还叫 Fedora Core 6(后来就没 Core),年份是 2007 年。
看来我跟 Fedora 的渊源在我没有意识到她是 Fedora 的时候已经开始了。我意识地使用 Fedora 是在她的第 9 版。
今天拿出一张多年不用的 DVD-RW,想擦了上面的内容做一张服务器的启动盘(因为 HP ML110 G7 被我折腾了几次以后不肯在 USB 上启动,不知道为什么)。无意中发现上面的内容竟然是 Fedora 6 DVD,那时还叫 Fedora Core 6(后来就没 Core),年份是 2007 年。
看来我跟 Fedora 的渊源在我没有意识到她是 Fedora 的时候已经开始了。我意识地使用 Fedora 是在她的第 9 版。
今天终于把一台服务器从 Fedora 10 升到了 Fedora 14,一开始想用 yum 升级(在 fedora upgrader 的帮助下),尝试跳级升级的,不成功。然后用 Fedora 自身的 major upgrade,分别尝试了跳级升级和不跳级升级,都不成功,最后卡在 Fedora 11 拷贝完升级文件但进不了图形界面完成升级,彻底动弹不得。很懊恼,早知如此还不如一开始就全新安装,就是想绕开重建 server 的麻烦,但这看来是绕不开的。
稍后我列出此次升级的 checklist(以前陆续也写过,但有两年没干这活了,变化还是很大)。
此次升级损失了 DNS slave zones 的文件。本以为主 Server 有备份,但主 Server 几次搬家,什么时候把那些文件搬丢了也没印象了。
升级的起因是我需要 php ssh2,却发现 Zend Server 暂不支持。不想经历自行往 Zend Server 添加 php ssh2 的麻烦,就想回到 Fedora 管理下的 php。不久前说过,我觉得 Zend Server 是鸡肋,这下更坚定我的看法。
估计 KDE 用户碰到这个问题的概率比较高。这个问题的起因不明,症状是要删除文件时出现
The trash has reached its maximum size! Cleanup the trash manually.
检查垃圾箱里没有东西,却无法删除文件进垃圾箱。直接删除操作不受影响。
问题的直接原因是 Trash 的 metadata 有误,解决办法是把 $HOME/.local/share/Trash 直接删掉,然后执行一下 Empty Trash 操作(其实是让 Trash 重建 metadata),以后就正常了。
我用的一台机器的显示卡有两个输出接口,一个是 VGA 接口,另一个是 DVI-I 接口。我以前单用 DVI-I 接口,最近多出一个显示器接在了 VGA 接口,我把 DVI-I 显示在左边,VGA 显示在右边。DVI-I 是主显示器,我也希望 Fedora KDE 桌面环境的 Panel 能固定在 DVI-I 显示器上。
刚开始用 VGA 时,Panel 仍在 DVI-I,用得很顺手,大概是因为 VGA 是在开机以后才插上的缘故。可是重启后,Panel 死活不肯固定在 DVI-I。登录 KDE 前,登录窗口还是在 DVI-I,可见那时 DVI-I 还是主显示器。可登录后,Panel 就显示在 VGA。我试过很多办法,比如调整 DVI-I 在 VGA 的上下左右各种位置,或者 disable VGA 再 enable VGA,可只要 KDE 探测到 VGA enabled,就把 Panel 移到 VGA。
怎样在 KDE 里设置某个显示器为主显示器?我查了一下,似乎没有 GUI 可以让我这么做。原因是 KDE 本身不探测哪个显示器为主显示器,而是直接采用 plasma 里的值,而 plasma 本身有 bug(我不确定这个解释对不对)。
不管原因是什么,我更关心的是解决方案。方法也很简单,run this:
xrandr --output (primary display name) --primary
其中 (primary display name) 是主显示器名称,可以在系统信息里找到,通常是显示器类型-序号,我的是 DVI-I-1。
刚在 Fedora 14 下用 SMPlayer 看了第一场电影,发现 SMPlayer (当前版本 0.6.9)之前版本恼人的无法阻止进入屏保的 bug 不见了。很开心,电影也好看。
Linux software 一直在进步。
我的电脑上只有 19 个文件?这怎么可能!
Google Desktop 64bit 在 Fedora 11 上不能正常建立索引,在 Fedora 14 上仍然不能,我很是失望。我用 Fedora 11 时尝试找别人是怎么解决这个问题的,没找到,最后不了了之。现在用 Fedora 14,重新找了一遍,找到一个:
ln -s /opt/google/desktop/lib /usr/lib64/tls/x86_64
原因嘛,据说是 /opt/google/desktop/lib/libgdl.so 没有放在正确的位置。更具体的原因嘛,我也说不上来了。
圣诞啦,收拾房子,发现两张纸的零碎笔记,是关于如何解决 Fedora 11 安装到尾声,因某些显卡驱动程序有 bug, 花屏死在图形界面。
当时没有整理到芳草苑发表,时间一长就忘了。Fedora 发展到了 14,可能这个 bug 已经不复存在。我也忘了具体显卡型号,反正是一台很老旧的机器,intel 的集成显卡,当时想装 Fedora 11 让它重焕青春,我花了很长时间解决这个问题,现在简单说说吧。
1. 要在机器花屏停止响应之前,按 Ctrl + Alt + F2,进入 terminal,输入用户名、密码,然后输入
init 3
2. 然后输入
yum install system-config-display
有时会有 “Could not retrieve mirrorlist” 的错误,多试几次就可以
3. 然后输入
system-config-display --noui
这条命令生成文件 /etc/X11/xorg.conf
4. 在 /etc/X11/xorg.conf 里添加一行
Option “NoAccel” “true”
具体位置我忘了。
5. 然后输入
init 5
即可进入图形界面。不过 NoAccel 关闭了硬件加速,如能安装正确的驱动当然更好,据说以下命令可以,不过我没试过。
rpm -Uvh --oldpackage http://mirrors.kernel.org/fedora/updates/9/i386.newkey/xorg-x11-drv-i810-2.3.2-3.fc9.i386.rpm
我想这是个普遍问题:在 Fedora 14 里安装了 Zend Server 以后,yum 不工作了。比如 yum update 错误提示:
Fatal Python error: pycurl: libcurl link-time version is older than compile-time version
幸好有 google 和 Fodera forum,找到一堆建议,先试了一个不管用的(python-pycurl, libcurl 两个 packages 我还是专门找了最新的版本,依然不管用)
rpm -Uvh --force http://mirror.bytemark.co.uk/fedora/linux/releases/14/Everything/x86_64/os/Packages/python-pycurl-7.19.0-7.fc14.x86_64.rpm http://mirror.bytemark.co.uk/fedora/linux/updates/14/x86_64/libcurl-7.21.0-6.fc14.x86_64.rpm
又试了一下这个管用:
1. 先把 Zend 库改个名
mv /usr/local/zend/lib /usr/local/zend/zendlib
2. 用 OS 原有的库替换 Zend 库
ln -s /usr/lib64 /usr/local/zend/lib
这时 yum 正常了,但 apache 起不来了。
3. 软链接 Zend apache2 在原位置
ln -s /usr/local/zend/zendlib/apache2 /usr/local/zend/lib/apache2
apache 正常了,但是 Zend Server web interface 里大量的错误,因为只连了 apache2,还有一大堆跟 Zend Server 相关的文件没连。是继续一个个连呢,还是?
以下是我自己的做法:
推倒前述 1,2, 3 步重来。
1. 把该死的随 Zend Server 来的 libcurl.so.4 删掉或改名
mv /usr/local/zend/lib/libcurl.so.4 /usr/local/zend/lib/libcurl.so.4.bak
这下 yum, httpd, zend server web interface 都正常。既然是 /usr/local/zend/lib/libcurl.so.4 导致 yum 有问题,删了不就行了,就这么简单。
我从 Fedora 11 升级到 Feora 14 已有几周,但一直无法在 Fedora 14 下使用 HP LaserJet 1010 打印机。期间我一有空就想解决这个问题,直到今天才成功,好累。想当初在 Fedora 11 上安装这台打印机很顺利,我估计根本原因是 HP 驱动在 Fedora 14 上多少有点问题。回溯几个迂回的片段:
首先从 HP Linux imaging and printing 的网站上下载了 hplib 3.10.9,运行其中的 hplip-3.10.9.run,被提示没有 gcc。我用
yum install gcc gcc-devel
仍说没有 gcc。我只好再试
yum install gcc-c++
这下 gcc 这一关过去了,但仍缺少一堆依赖包,为了求简单,我没有细究我的系统是否需要,按 google 来的建议一股脑地装了很多 packages。
yum install cups libjpeg-turbo libjpeg-turbo-devel openssl-devel net-snmp-devel libusb-devel python-devel xsane sane-backends-devel dbus-devel libtool
这下 hplip-3.10.9.run 似乎成功运行完毕,在系统托盘上添加了 HP Device Manager 图标,也能看到 HP LaserJet 1010 打印机列在其中,但一打印,提示 cups-missing-filter。这种错误提示实在不知所云。想在 HP Device Manager 删了打印机再重装,竟然不让删。
有人说这是 system-config-printer 有问题,只有 cups web interface (http://localhost:631) 才正常。
我在 cups web interface 尝试去删除打印机,果然成功!得,以后就用 cups web interface 去管理打印机。但是,重装打印机并没有解决问题,一有打印任务就提示 cups-missing-filter。我在 cups web interface 里看到一个新的线索:找不到 /usr/lib/cups/filter/foomatic-rip-hplip。这大概是 cups-missing-filter 所谓的 missing filter 了。
我从 hplip-3.10.9.run 的安装目录/prnt/hpijs/ 里找到 foomatic-rip-hplip,拷贝到 /usr/lib/cups/filter/,这时打印不再提示 cups-missing-filter,但仍无法打印,在打印任务栏看到所有 print job 都是一打印 status 就成 stopped。
我没有继续以下尝试,而用重编译 hplib 的办法解决了问题。如果再来一遍,我会尝试
chmod 755 /usr/lib/cups/filter/foomatic-rip-hplip
因为我后来看到 /usr/lib/cups/filter/ 下的文件都是 755 属性。
重编译 hplib 是我在 Fedora 14 下安装 HP LaserJet 1010 打印机最精彩的部分,因为:
它是最终解决方案;
我不懂编译原理,只会依样画瓢,然后看到一大堆字符在终端里滚动,神秘的东西总是精彩的;
我曾想绕过问题在 Fedora 14 下安装另一台 HP LaserJet 1020 打印机,也未成功,说明 HP printer drivers 在 Fedora 14 普遍有问题,那么解决方案也是有普遍适用性。
言归正传。重编译 hplib 之前要先 uninstall hplib。
1. 以 root 身份进入 hplib 的安装目录
su - cd /path/to/hplip-3.10.9
2. 依次执行
make uninstall rm /usr/share/hplip -rf rm /etc/hp -rf rm ~/.hplip -rf rm /var/lib/hp -rf
很多的 rm -rf 哟,小心输入。
现在开始重编译 hplib。
3. 依次执行
make clean ./configure --prefix=/usr --enable-qt4 --enable-doc-build --disable-cups-ppd-install --disable-foomatic-drv-install --enable-foomatic-ppd-install --enable-hpijs-install --disable-policykit --disable-cups-drv-install --disable-hpcups-install --enable-network-build --enable-dbus-build --enable-scan-build --disable-fax-build --disable-foomatic-rip-install --enable-foomatic-rip-hplip-install make make install
在执行 ./configure 时会有一些 warning,大意是跟 foomatic 相关的 options not available。估计有些配置对 hplib 早期版本适用,而对 hplib 3.10.9 无效。Anyway, 这也能完成编译,编译后安装 HP LaserJet 1010 打印机就能打印了。我也想过偷懒,在 uninstall hplib 后不想重编译 hplib,直接在 cups web interface 里添加 HP LaserJet 1010 打印机,指望 cups 能认识一些主流打印机,但没有成功。
花费了这么多时间才安装一台打印机,我认为问题的源头最有可能是 hplip-3.10.9.run has some defects。如果再来一遍,我不再
sh hplip-3.10.9.run
而直接使用它解压出的文件。
我实在不理解 SELinux,以前为了求简单,都是直接 disable SELinux。我也知道这样不好,可以没办法。
最近重装系统,第一次选 Web Server 来装,我想这样搭配出来的 SELinux 最接近我的要求。可是,但我添加了 zend.repo 以后,发现 httpd 无法启动,错误信息为:
# service httpd start Starting httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Syntax error on line 6 of /etc/httpd/conf.d/zendserver_php.conf: Cannot load /usr/local/zend/lib/apache2/libphp5.so into server: /usr/local/zend/lib/apache2/libphp5.so: cannot enable executable stack as shared object requires: Permission denied [FAILED]
我按论坛上的建议,执行了
# find /usr/local/zend/lib/ -name "*.so*" -exec semanage fcontext -a -t textrel_shlib_t {} \;
错误仍在。然后按 SELinux 的建议,执行了
# setsebool -P httpd_execmem 1
呵,成了。因为我不会 undo # find /usr/local/zend/lib/ -name “*.so*” -exec semanage fcontext -a -t textrel_shlib_t {} \; 所以我不知道此命令是否必要。