x11-drivers/xf86-video-radeonhd-1.3.0 会引起黑屏
今天对我的gentoo进行了解常规的uDN升级,但是等我晚上到家打开电脑就不能正常启动了,字符界面的信息输出完以后到了X就直接黑屏了,看了近期的升级日志,发现x11-drivers/xf86-video-radeonhd-1.3.0这个升级非常可疑,于是暂时mask掉,退回1.2.5版本,果然就好了。
我的显卡是x1700,用的是2.6.31内核里面的drm模块。有遇到相同问题的gentoo用户吗?
今天对我的gentoo进行了解常规的uDN升级,但是等我晚上到家打开电脑就不能正常启动了,字符界面的信息输出完以后到了X就直接黑屏了,看了近期的升级日志,发现x11-drivers/xf86-video-radeonhd-1.3.0这个升级非常可疑,于是暂时mask掉,退回1.2.5版本,果然就好了。
我的显卡是x1700,用的是2.6.31内核里面的drm模块。有遇到相同问题的gentoo用户吗?
今天备份blog数据的时候,突然想了解一下,谁在我blog里留言最多呢?
这样不仅可以满足自己的好奇心,还可以更好地做好读者回访工作,哈哈。
于是,在WP的后台里导出xml的备份数据以后,来了这么一行,如果你用的于是WordPress,那也可以做为参考哦:
grep "wp:comment_author_url" wordpress.2009-10-09.xml | awk -F"[<>]" '$3{A[$3]++}END{for(k in A)print A[k],k}' | sort -nr | head -n 30 |
或者是贴出来的加上链接的形式:
grep "wp:comment_author_url" wordpress.2009-10-09.xml | awk -F"[<>]" '$3{A[$3]++}END{for(k in A)printf("%02d <a href=\"%s\">%s</a>\n",A[k],k,k)}' | sort -nr | head -n 30 |
以下就是我blog的结果(已经人工去掉了自己和无意义的数据):
68 http://imtx.cn
47 http://joolix.com
41 http://www.sxnsx.com
29 http://hi.baidu.com/tpxc
23 http://oceanboo.cn
22 http://wdicc.com
20 http://lfeng.cn
19 http://young001.blogbus.com
18 http://frankyue.cn
17 http://millenniumdark.blog.ubuntu.org.cn/
15 http://zhan.blog.ubuntu.org.cn/
15 http://blog.imxifs.cn
13 http://www.ownlinux.cn/
12 http://www.kissuki.com/
12 http://muzuiget.blog.ubuntu.org.cn/
11 http://www.hicrokee.com
09 http://lerosua.org
08 http://www.ownlinux.cn
07 http://www.imkeke.net
07 http://ivenvd.blogspot.com/
06 http://tianhao.blog.ubuntu.org.cn/
06 http://maclpashideout.blogspot.com/
06 http://classfoo.googlepages.com
05 http://www.w3rep.cn/blog
05 http://www.shuge.org/lee
05 http://www.joolix.com
05 http://www.imkeke.net/
05 http://raychen1984.cublog.cn/
04 http://yegle.net
04 http://www.imchao.net
当然,这样就直接忽略掉了没有url字段的评论,如果你不想这样的话,也可以根据wp:comment_author字段来进线昵称的统计。
6号了,差不多该回顾下这个假期了吧~
首先,本来想看国庆的阅兵直播的,但是不巧,车票刚好买到那会儿的,所以阅兵的时候,我正在高速上颠簸着,我也没有啥3G手机之类的高级货,所以也就没看成直播。不过后来听说,其实CCAV的那个“直播”,其实也是延时30秒的快速“转播”而已,所以想来和我看的“重播”也没啥区别吧~
然后,这个假期应该是最累的吧,因为家里老房子在装修,所以貌似有干不完的杂活。也正是因为这个原因,最近上网的时间几乎是0了,只是偶尔用ipod上来看看。
那到底在干啥呢?
首先是铺完外墙砖以后,一切都很脏了,到处都是碎水泥和灰,搞卫生就成了第一重任了,最难搞的就是玻璃,擦玻璃就擦了2天。。。非常汗哦~
另外,还有一天去收稻子了哦,这个活,算起来应该有10年没干过了吧~这次这块地很小,而且没法用收割机,所以就人工上了,带上镰刀和脱粒机就去了,虽然其实也没割几下,但是也好好地体验了一下以前的生活。不过,我纳闷的是,这10几分地就把我们一伙都累趴下了,当年的3亩地是怎么搞定的呢?现在的人确实都退化了。。。
不管如何,明天就回杭州了~
有个很牛B的小日本搞出来的东西。
# ruby l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t .size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\ \"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskel l"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31 +"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+ "\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32 +"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+" \"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfuck"+l*64+"n++++++++[>++++ <-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31 +"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++co ncatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+ "\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"2100211101012021122 2211211101000120211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l *63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31 +"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i] );puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\"" +l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing; t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Not hing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x); h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d<p then '<'else '>')++"+l*31+"\" ."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+ (z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+ l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### (c) Yusuke Endoh, 2009 ###########\n" |
这段ruby代码,相当牛,如作者所说,运行这段ruby,生成一段python代码,再运行python代码,生成一段perl代码,再运行perl代码,生成一段lua代码。。。这样一直下去,经过11种语言,最后。。。居然又能重新得到之前的ruby代码。。
这11种语言是:ruby 1.8.7-p72、Python 2.5.2、perl v5.10.0、Lua 5.0.3、OCaml 3.10.2、ghc-6.8.2、gcc 4.3.2、java “1.5.0_17″、beef 0.0.6-2、whitespace 0.3-2、unlambda 2.0.0-5。
在est这里看到了介绍,实在忍不住,把所有解释器都装上验证了一把,果然是可以的。彻底无语了,特此把中间结果都打包放上来,供大家瞻仰。
ubuntu下也想自己试试的话,得确保有这些包: ruby lunar lua50 ocaml-interp ghc6 sun-java5-jdk beef whitespace unlambda
PS: 我以为 brainfuck 就已经很BT了,没想到还有更BT的 whitespace ,彻底无语了。
看到标题,很多熟悉linux的朋友估计都会想到曾经的 lunar-applet ,我之前也用过这款软件。
不过lunar-applet其实是基于gnome-panel的clock这个applet的代码做的,只是替换了原来显示日历的控件而已,这样,如果成为单独一个软件的话,得同步上游的代码,维护起来比较累。
所以,最近软件的作者 yetist 再次发力,把lunar-applet拆成了2个包外加一个patch。
具体就是:
这样虽然描述起来比较费力,但是显然比较合理和易于维护,所以lunar-applet本身也就停止维护了。
现在貌似还没有deb/rpm的包,不过如果你用的也是gentoo的话,可以试试我传到gentoo-china-overlay的ebuild。如果你已经加了这个overlay的话,现在就可以给 gnome-panel 加上 lunar 这个USE,然后重新emerge一下 gnome-panel,就可以看到效果了。
我这里的截图,已经被传到项目主页里去了:
另外,值得一提的是,liblunar 还自带 python 的绑定哦,你要在python里使用的话,也是相当方便的,给个例子:
>>> import locale, time, liblunar >>> locale.setlocale(locale.LC_ALL, "") 'zh_CN.UTF-8' >>> t = time.localtime() >>> l = liblunar.Date() >>> l.set_solar_date(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour) >>> format = "\n公历:%(YEAR)年%(MONTH)月%(DAY)日\n农历:%(NIAN)年%(YUE)月%(RI)日\n干支:%(Y60)年%(M60)月%(D60)日\n生肖:%(shengxiao)\n" >>> print l.strftime(format) 公历:二○○九年九月二十九日 农历:己丑年八月十一日 干支:己丑年癸酉月丁丑日 生肖:牛 >>> |
更多信息,还可以在项目主页里挖到。
这里假设你已经用LAMP或者其他东西建立好了一个网站,并可以正常访问了。比如我的ubuntu源。
在这样的基础上,如果你要给你的站加一个流量监控的功能的话。可以选择最基础的mrtg。
mrtg是一个基于snmp的web监控软件,可以生成系统信息的图表结果,这个“系统信息”其实不仅包括网络流量,还可以是CPU/负载/内存等其他信息。如果你想监控更多信息,可以参考这个页面。
我这里只以我需要的网络流量为例。
安装必要的包:
sudo apt-get install snmpd mrtg |
再修改snmpd的配置,编辑 /etc/snmp/snmpd.conf ,找到以下几行,改成这样:
# sec.name source community #com2sec paranoid default public #注释掉这行 com2sec readonly default public #再把这行打开 #com2sec readwrite default private |
这样,其他进程就可以通过snmp读取相关信息了。记得修改完配置需要
sudo /etc/init.d/snmpd restart |
重启一下snmpd。
接下来要修改mrtg的配置了。mrtg的配置文件是 /etc/mrtg.cfg ,他的格式比较复杂。所以mrtg提供了专门的命令行工具──cfgmaker──来生成它的配置文件,你只需要通过给cfgmaker传入特定的参数,即可生成相应的配置。
还是以我的简单应用为例:
cfgmaker --global "WorkDir: /data/mirrors/mrtg" public@localhost | sudo tee /etc/mrtg.cfg |
这样就把生成的配置文件写入了 /etc/mrtg.cfg,你也可以再打开确认一下是否符合你的要求。
下一步是生成mrtg的index.html文件,方法如下:
sudo indexmaker /etc/mrtg.cfg | sudo tee /data/mirrors/mrtg/index.html |
注意了,这个index.html文件只需要手工生成一次,以后就都是静态的了,除非你修改过 /etc/mrtg.cfg 就不用再次生成了。但是这个html文件会引用其他的图片之类的,就需要重新生成了,默认ubuntu的mrtg已经把这个任务加进crontab了,5分钟执行一次,所以稍等片刻,你就可以访问了。
我配置的mrtg访问地址是http://ubuntu.srt.cn/mrtg/
另外也参考其他类似的流量统计软件 awstats
还是因为我的那个ubuntu源,之前只能以http方式访问,看到很多源也同时提供ftp和rsync的访问方式,我也就学着架设了一个。
先说说ftp方式,这个比较简单,参照官方源,我用的也是vsftpd。这个在ubuntu下几乎是不用配置就可以跑了。大致就是:
sudo apt-get install vsftpd #安装vsftpd,会自动建立ftp用户,家目录默认是 /home/ftp sudo usermod -d /data/mirrors ftp #将ftp的家目录改成你数据所在的目录,人家访问的时候就可以读到这个目录的内容了 sudo /etc/init.d/vsftpd restart #重启安装的时候就默认启动的vsftpd |
这样就完全可以了,如果你还想修改一下人家登录的时候的欢迎信息的话,编辑 /etc/vsftpd.conf ,将里面的 ftpd_banner= 解除注释,并将你要的信息填在后面。
其实这个配置文件还有很多其他选项可以修改,诸如是否允许匿名登录、写权限之类的,需要的话,自己 man vsftpd.conf 好了。
再说说rsync的服务端配置,我发现网上的那些中文教程用在ubuntu下都是会有问题的。
在ubuntu下,这个rsync的服务端和客户端似乎是一个东西,也就是没有rsyncd这个包了,所以也就不需要安装额外的包了,只需简单配置一下,并启动就可以了。
参照 man rsyncd.conf 的提示
建立一个 /etc/rsyncd.conf 文件,内容如下:
motd file = /etc/rsyncd.motd pid file = /var/run/rsyncd.pid [ubuntu] comment = Hangzhou srt ubuntu mirror path = /data/mirrors/ubuntu max connections = 3 log file = /var/log/rsyncd.log |
其中 motd file 应该是可选的,如果写上了,就需要再建立一个 /etc/rsyncd.motd 的文本,写入欢迎信息,有空的话,还可以搞个帅帅的ASCII art哦。
上面的两行是全局的配置,下面中括号里的是模块名,以下的配置都是模块级的。可以同时指定多个模块。
配置好了以后,执行
sudo /etc/init.d/rsync start |
rsync应该就启动了,另外可以在 sysv-rc-conf 里确保启动的时候就开启了rsync服务。
现在也可以通过以下方式访问SRT ubuntu mirror了:
rsync://ubuntu.srt.cn/ubuntu
ftp://ubuntu.srt.cn/ubuntu/
9月19日,是2009年的软件自由日,在这个比较特殊的日子,我要送给广大ubuntu爱好者一份礼物──一个新的ubuntu源。
正如我刚才的那篇文章所说,这个源的特点就是能保证全和新。至于速度还要看大家的测试结果(应该不会太差)。
这个源是在杭州电信的,百兆共享带宽,不知道网通用户的速度如何。
希望在9.10发布的时候,就能够加到ubuntu官方源列表里。这样用起来就更方便了。
其他就先不说了,大家可以通过这几个域名访问:
http://ubuntu.srt.cn/
http://ubuntu.hzlug.org/
http://u.srt.cn/
最近在折腾新的ubuntu的源,向公司申请了一台配置一般的服务器,另外买了一块硬盘,硬件就有了。
然后装了个ubuntu 9.04 server,装上ssh,再装上nginx,稍微配置一下,服务就好了,这个过程还是蛮简单的,也很顺利,就不多说了。
接下来就可以开始同步数据了。由于我的目标是一个完整的源,所以就没有用apt-mirror之类的工具,而是直接拿rsync抓取上游的数据了。这个数据量是很大的,所以想尽量选择一个速度最快的带rsync的而且是“Up to date”的源,但是在茫茫的ubuntu官方源列表里,这么多源哪个最快呢?当然没有人会告诉你答案,因为每个人的网络环境都不一样啊。所以,最好的办法还是实地测试,所谓磨刀不误砍柴功啊,后面有300多G的数据要下载呢,这个测试绝对有价值。
上脚本(2009-12-12 更新):
#!/bin/bash rmie(){ while [ -n "$1" ] ; do [ -f $1 ] && rm $1 shift done } urls=`curl https://launchpad.net/ubuntu/+archivemirrors | \ tr -d "\n" | sed 's/<\/tr>/\n/g' | grep "Up to date"|grep '>rsync</a>'|awk -F '"' '{print $4}'` rmie res { echo "$urls" | while read url;do echo "testing... $url" rmie T wget -q --no-cache -O T "$url/ls-lR.gz" & sleep 5 kill %% echo -n "$url " >> res ls -l T >>res done } 2>/dev/null sort -k 6 -n res > fast_mirror_`date +%F` rmie res T |
最后你可以 tail fast_mirror_XXX 看到5秒内下载的字节数最多的一个源。我这还真有一个源,能在3秒把7.4M大的ls-lR.gz给下载完的。
然后,你可以先用这个最快的源把大部分数据先更新下来,完了之后,为了保证数据最新,再向官方源更新一次,我用的是这个脚本:
#!/bin/bash [[ $UID == 0 ]] || { echo "Must be root to run this script."; exit 0; } LOCK="/data/sync_sh/lock" LOG="/data/sync_sh/log" while true; do echo -e "\nstart sync @ `date`" | tee -a $LOG if [ -f $LOCK ]; then echo "another sync is running, I exiting..." | tee -a $LOG exit 1 fi touch $LOCK st=`date +%s` rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/pool/ /data/mirrors/ubuntu/pool/ res=$? if [ $res -eq 0 ]; then echo "rsync pool succ" | tee -a $LOG et=`date +%s` echo "pool sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG else echo "rsync pool failed" $res | tee -a $LOG fi st=`date +%s` rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/ /data/mirrors/ubuntu/ res=$? if [ $res -eq 0 ]; then echo "rsync all succ" | tee -a $LOG et=`date +%s` echo "all sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG else echo "rsync all failed" $res | tee -a $LOG fi df | grep "/data" | tee -a $LOG echo -e "end sync @ `date`" | tee -a $LOG rm $LOCK sleep 7200 done |
这个脚本先更新pool目录,再整个目录更新一遍,这样是为了减少出现软件列表里已经有某软件,但是却下载不到的情况。
脚本常驻运行,在上次更新完以后的2小时,启动下一次更新,这样应该算是国内最新的源了吧?
PS: 感谢服务器达人lupa的walkerxk在我架设源时,给我的热心帮助。
很久以前,我用firefox的插件──CHM reader──来看chm文件,然后,不知道从哪个ff版本开始,就失效了,打开任何chm都没有反映。
后来,我又用chmsee看,但是这个却只依赖 net-libs/xulrunner-1.9.1 ,自从xulrunner升级了以后,chmsee打开任何chm文件都会出现段错误,也被我卸载了。
今天,ob在装virtualbox,问了我一句“现在vbox怎么不依赖Qt了啊?难道都内嵌了?”。其实我本来是知道 virtualbox-bin 是内嵌了Qt运行库的,但是为了保险起见,我还是 equery files virtualbox-bin 了一下,结果却意外地发现了这个:
/opt/VirtualBox/kchmviewer
看文件名,就知道是什么了,哈哈,原来vbox的帮助文件是chm格式的,所以顺便内置了一个chm阅读器。
试了试,这个阅读器完全可以独立运行,效果还不错呢,见我截图:
节省版面,点击看大图吧。