I am LAZY bones? AN ancient AND boring SITE

分类: 'gentoo' 的归档

终于用上了9.1的官方A卡驱动

经过好几天的折磨(详情可以看这里),总算成功用上了新的A卡驱动。
之前一直是用的8.552的驱动,可以开compiz,但是mplayer用xv不行,开个 googleearth也闪得厉害。
也曾经升级到 8.561 ,就已经发现了问题,当时是开了gdm的,开机以后,出来gdm的界面,但是都来不及输入用户名和密码就黑掉了,过一会儿又会显示gdm,又挂掉,如此反复,6次以后会出来提示说挂了6次,不启动了。那时候觉得 8.561和8.552差不多,就mask了8.561的版本,回退到8.552了,也正常了。
但是最近这个8.573据说是解决了闪的问题,更新蛮大的,所以又想升级,但是还是和8.561一样的错误,一到gdm就崩溃。连续重启动。
然后经过千辛万苦,终于发现是 /etc/X11/xorg.conf 的 Section “Device” 一段里面的 Option “TexturedXRender” “on” 引起的错误。把这行注释以后,就整个都好了。哈哈。但是说来也怪,这个配置文件是ubuntu生成的,在ubuntu下运行没问题,在gentoo的8.552版本驱动下也没问题的啊。。。
还有,就是为什么我开了compiz以后,google-earth还是会闪呢?貌似没有多大的提高啊。。。谁能告诉我还需要如何配置吗?

取消电源按键的事件处理

之前的现象是在gnome-power-preferences里面,设置了”按下电源按钮时:”为”询问”.但是其实真的按下电源按钮的时候,gnome-power-manager的对话框确实出现了,但是根本来不及点,一闪而过的就关机了…
后来,TX告诉我是acpi搞的鬼,处理方法就是修改下 /etc/acpi/default.sh
打开此文件一看,就明白了,有这么一段:

case "$group" in
	button)
		case "$action" in
			power)
				/sbin/init 0
				;;

直接把 /sbin/init 0 那行注释掉,就好了,哈哈…

gnome-do 初体验

gnome-do最近的更新可谓热火朝天,而且最近搞出了个docky模式,貌似很好玩,使我的心里一直痒痒的.
但苦于这玩意是依赖mono的,之前一直不想装那么多包,所以一直没尝试.但是今天装一个以前ubuntu下用过的16进制编辑器Bless的时候,发现这个也是基于mono的,加上之前的tomboy,我不得不承认基于mono的软件还是挺多的,于是终于一股脑把这些都装上了,哈哈,系统里多了mono和一堆dev-dotnet的包.然后终于尝试到了gnome-do.
我的gnome-do是目前最新的0.7.98.启动以后,默认是经典样式的,在首选项里面可以改成docky模式.还是蛮好玩的,先上个图:
gnome-do
第一印象就是这个东西的美工真不错,说实话linux下很多软件的美工都不怎么样,但这个是例外,呵呵.
另外,在可用性上,还有很大的提升空间.super+space出来搜索界面以后,我输入”gnome-ter”都还不能出来”gnome-termial”,后来才知道,原来在中文环境下,要输入”终端”才能执行,那就汗了,我的fcitx在搜索窗口根本无效…而且这个关键字还不能自己定义,这样对中文用户来说,可用性就大打折扣了.
还有就是从panel拖启动器到dock的时候,有的图标会丢失,显示一个华丽的叉叉,哈哈.而且也不能自定义启动器的图标.
另外给个警示,但愿是我RP差的原因,我第一次启动gnome-do的时候,在首选项里面 勾了那个 “show notification icon”,然后画面就冻结了…除了鼠标能动,ctrl+alt+backspace都不能用了,还得我alt+printscreen+b才了事.但是后来又无法重现此问题…

更新 e-file 到 20081230

更新 e-file 到 20081230 版本
没有其他的该动,只是判断了一下运行脚本的机器是否为gentoo。
如果不是,会有一行警告,其实基本的功能也还是可以用的,当然安装状态之类的肯定就查不到了。
下载地址

glibc 升级以后,locale-gen 出现段错误

今早升级了 glibc ,etc-update 的时候 /etc/locale.gen 保留了原来的,然后 locale-gen 的时候就
/usr/sbin/locale-gen: line 264: 7515 Segmentation fault “${DESTDIR}”usr/bin/localedef ${LOCALEDEF_OPTS} -i “${input}” -f “${charmap}” -A “${ALIAS}” –prefix “${DESTDIR}” “${locale}” [ !! ]

已知 locale-gen 是调用 localedef 的,如下:

# /usr/bin/localedef -c -i en_US -f UTF-8 -A /usr/share/locale/locale.alias –prefix / en_US.UTF-8
Segmentation fault

而这个 /usr/bin/localedef 就是glibc里面的文件,大家有没有相同问题的?

另外,发现glibc 有这个 patch:1040_all_2.3.3-localedef-fix-trampoline.patch 删掉它也是一样的错。

目前临时的解决办法,是从别人那里拷贝一个同版本的二进制文件,替换掉自己的 /usr/bin/localedef ,然后locale-gen就好用了,系统也正常了,但是这样问题的原因仍然没有找出来.在 sir的gentoo版发了个帖子,看看能不能找到原因.

e-file 更新至 20081201

很多人反映不喜欢e-file依赖w3m,原因可能是觉得w3m多少有点大,其实我倒是觉得w3m蛮小巧实用的,但是对于一个百来行的脚本来说,依赖个w3m可能确实有点不太合适吧.于是一直想改成依赖curl,因为这个应该默认都有安装.
而且,Daniel老兄(我猜应该是 portagefilelist.de 的人)告诉我,portagefilelist.de 其实是支持 csv 格式输出的,这样对于我的脚本来说,简直是件天大的好事,因为省去了解析烦人的HTML了,哈哈.
于是很快就改好了新的e-file,目前已经更新至gentoo china overlay.
ChangeLog:

20081201:
去掉了w3m的依赖.

代码太长了,贴起来有些难看,呵呵.就不多此一举了,这里的代码应该马上也会更新: http://www.portagefilelist.de/index.php/Tools#e-file_.28serach_from_cmd_line.29

下载地址

更新了e-file

之前发布的e-file,看起来好像还是挺受欢迎的,没多久,就有人给写了ebuild文件,进了gentoo-china overlay.于是打算再稍微完善一下.
周末去了趟上海,也没空更新这个脚本,拖到今天,终于弄好了,呵呵.
ChangeLog:

20081125:
优化代码结构
增加本地已安装版本的显示
增加Homepage和Description的显示

老套路,贴代码和截图:

#!/bin/sh
#AUTHOR: bones7456 (bones7456<at>gmail<dot>com)
##License: GPL
#e-file is like apt-file for gentoo, but data is online
VERSION=20081125
 
function printhelp(){
cat <<EOF
This is e-file ($VERSION)
	Usage: `basename $0` filename
EOF
}
if [[ $# -ne 1 ]];then
	printhelp
	exit 1
fi
 
URL="http://www.portagefilelist.de/index.php/Special:PFLQuery2?file=$1&searchfile=lookup&lookup=file#result"
 
w3m -dump -cols 3000 $URL | awk '
BEGIN{
	FLAG=0
	FOUND=0
	"emerge --info | grep PORTDIR" | getline
	split($0,PORTDIR,/\"/)
}
{
	if($1=="dir" && $2=="package"){
		FLAG=1
		next
	}
	if($1=="Retrieved" && $2=="from"){
		if(FOUND){
			for(pkg in vers){
				split(pkg,ii,/\//)
				NF=0
				cmd="ls -tgGd --time-style=+%c /var/db/pkg/" pkg "* 2>/dev/null"
				cmd | getline
				if(NF==0){
					installed=0
				}else{
					installed=1
					install_time=""
					for(i=4;i<NF;i++)install_time=install_time " " $i
					install_time=substr(install_time,2)
					split($NF,install_arr,pkg "-")
				}
				NF=0
				cmd="(grep -h HOMEPAGE " PORTDIR[2] "/" pkg "/*.ebuild | tail -n 1)2>/dev/null"
				cmd | getline
				if(NF==0){
					HOMEPAGE=""
				}else{
					split($0,tempArr,/\"/)
					HOMEPAGE=tempArr[2]
				}
				NF=0
				cmd="(grep -h DESCRIPTION " PORTDIR[2] "/" pkg "/*.ebuild | tail -n 1)2>/dev/null"
				cmd | getline
				if(NF==0){
					DESCRIPTION=""
				}else{
					split($0,tempArr,/\"/)
					DESCRIPTION=tempArr[2]
				}
 
				setcolor(1,32)
				if(installed){
					printf("[I] ")
				}else{
					printf(" *  ")
				}
				clearcolor()
				printf("%s/",ii[1])
				setcolor(1,29)
				printf("%s\n",ii[2])
				setcolor(0,32)
				printf("\tAvailable Versions:\t%s\n",vers[pkg])
				if(installed){
					printf("\tLast Installed Ver:\t")
					setcolor(7,34)
					printf("%s",install_arr[2])
					setcolor(0,35)
					printf("(%s)\n",install_time)
					setcolor(0,32)
				}
				if(HOMEPAGE){
					printf("\tHomepage:\t\t")
					clearcolor()
					printf("%s\n",HOMEPAGE)
					setcolor(0,32)
				}
				if(DESCRIPTION){
					printf("\tDescription:\t\t")
					clearcolor()
					printf("%s\n",DESCRIPTION)
					setcolor(0,32)
				}
				printf("\tMatched Files:\t\t")
				clearcolor()
				printf("%s\n\n",files[pkg])
			}
		}else{
			print "No matches found."
		}
		exit
	}
	if(FLAG==1 && NF!=0){
		T=1
		split(vers[$1 "/" $2],vers_arr,/ /)
		for(i in vers_arr){
			if(vers_arr[i]==$NF){
				T=0
				break
			}
		}
		if(T)vers[$1 "/" $2]=$NF " " vers[$1 "/" $2]
		T=1
		split(files[$1 "/" $2],files_arr,/; /)
		for(i in files_arr){
			if(files_arr[i]==($3 "/" $4)){
				T=0
				break
			}
		}
		if(T)files[$1 "/" $2]=$3 "/" $4 "; " files[$1 "/" $2]
		FOUND=1
	}
}
function setcolor(a,b){
printf("%c[%d;%d;%dm",27,2,a,b)
}
function clearcolor(){
printf("%c[0m",27)
}
'


从图中看到的,其实 portagefilelist.de 的数据也是比较旧的,sys-process/dcron的版本还停留在 2.9 的年代,而本地安装的,早已经是 3.2 了.
脚本下载地址

重新用回官方A卡驱动

我的x1700卡,之前一直因为ati-drivers暂时不支持xorg-server,所以用的是开源驱动,但是开源驱动对我这个卡的支持真的是比较烂,没有3D加速,开不了compiz,glxgears也只有100FPS左右…所以之前一段时间,我还是经常回ubuntu下去,不知道ubuntu从哪里来的驱动,8.10的xorg-server也是1.5.2的,但是驱动却可以用…呵呵.
前几天,AMD官方终于更新了驱动的版本,而这个版本的一大重要特性就是开始支持xorg-server的新版本了,现在gentoo的portage里面也有了,所以我就理所当然得用回官方驱动了.
用回ati-drivers以后,一开始也有点问题,但是参考wiki,基本上就搞定了,哈哈,gentoo终于又可以compiz喽.
$ glxgears
12412 frames in 5.0 seconds = 2482.345 FPS
12551 frames in 5.0 seconds = 2509.578 FPS
这个也正常了.

e-file 根据文件名查询gentoo包的脚本

一直想在gentoo下实现一个类似ubuntu的apt-file的功能,幸好已经有 http://www.portagefilelist.de 这个网站了,就花了2小时写了个小脚本直接到这个站取数据了,感觉效果还可以,先发出来,算是预览版吧,以后会再完善的.
输出格式参考了 eix ,代码如下:

#!/bin/sh
#AUTHOR: bones7456 (bones7456<at>gmail<dot>com)
#VERSION: 20081120
##License: GPL
#e-file is like apt-file for gentoo, but data is online
 
if [[ $# -ne 1 ]];then
	echo "Usage: `basename $0` filename"
	exit 1
fi
 
URL="http://www.portagefilelist.de/index.php/Special:PFLQuery2?file=$1&searchfile=lookup&lookup=file#result"
 
w3m -dump -cols 3000 $URL | awk '
BEGIN{
	FLAG=0
	FOUND=0
}
{
	if($1=="dir" && $2=="package"){
		FLAG=1
		next
	}
	if($1=="Retrieved" && $2=="from"){
		if(FOUND){
			for(i in ver){
				split(i,ii,/\//)
				printf("%c[%d;%d;%dm* ",27,2,0,32)
				printf("%c[0m%s/",27,ii[1])
				printf("%c[%d;%d;%dm%s\n",27,2,1,29,ii[2])
				printf("%c[%d;%d;%dm\t",27,2,0,32)
				printf("Available versions:\t%s\n",ver[i])
				printf("\tMatched File:\t\t")
				printf("%c[0m",27)
				printf("%s\n\n",file[i])
			}
		}else{
			print "No matches found."
		}
		exit
	}
	if(FLAG==1 && NF!=0){
		ver[$1 "/" $2]=$NF " " ver[$1 "/" $2]
		file[$1 "/" $2]=$3 "/" $4
		FOUND=1
	}
}'

截个图:

e-file截图

e-file截图


脚本下载地址

修改了gentoo的组ID

由于我的/home分区是ubuntu和gentoo公用的,这样不管在哪个系统,都能很方便地公用程序的配置.但却又引发了一个小问题:
ubuntu下 我的用户是 uid=1000,gid=1000的,gentoo下,1000这个gid却被dhcp组占用了,生成的用户组id是1004.
这样就出现了一个怪现象,原来在ubuntu下,用户创建的文件,到了gentoo下,就被当初了dhcp组;gentoo下创建的文件在ubuntu下又是无法识别的组了.由于机器上只有一个用户,所以虽然此问题并没有给我带来什么麻烦,但总归是个隐患.于是想修正它,其实方法也很简单:
就是在ubuntu下,把gentoo根分区挂到 /mnt/gentoo ,然后
sudo vim /mnt/gentoo/etc/group
把里面的1004改成1000,1000改成1004,保存退出.
sudo vim /mnt/gentoo/etc/passwd
把里面的 lily:x:1000:1004::/home/lily:/bin/bash 改成 lily:x:1000:1000::/home/lily:/bin/bash
再执行:

sudo find /home/ -gid 1004 -exec chgrp -h 1000 {} \;
sudo find /mnt/gentoo -gid 1000 -exec chgrp -h 1004 {} \;

好了~万事大吉~~嘿嘿.