Xupeng's blog

Oct 30, 2006 - 2 minute read - Comments

写了一个从百度下载Mp3的python脚本

google了一下,找到了一些用来从baidu下载mp3的软件,有win下的gui软件,也有linux下的shell脚本,还有python脚本, 但遗憾的是现在都已经无法用来下载mp3了,大概是因为百度mp3改版以后这些软件都没有修正吧,就顺手用python重写了一个,也算是练练手吧:)下载 功能: 用来从百度下载mp3,可以单独下载指定的歌曲,也可以批量下载百度新歌Top100,脚本所接受的参数如下:

Usage: /opt/bin/DownloadSong [OPTION]
Download mp3 file which matches given artist and/or title.

-h --help         Show this help message.
-1 --100          Download Baidu Top100 new songs.
-a --artist       songer
-t --title        song name
-v --version      show version info
使用范例:
DownloadSong -1 下载百度Top100中的所有歌曲(是数字1,不是字母l)
DownloadSong -a 后弦 -t 昆明湖 下载歌手后弦的昆明湖一曲
DownloadSong -a 后弦 -t 昆明湖 -t 九公主 下载后弦的昆明湖和九公主(可以跟多个-t参数,但只能有一个-a参数)
DownloadSong -t 我想我是海 下载我想我是海
备注: 该脚本调用axel命令进行多线程下载,因此需要系统中已安装有axel(http://wilmer.gaast.net/main.php/axel.html) 目前还只能在linux环境UTF-8 locale下使用,在其他locale下使用文件名可能会乱码,我目前只在gentoo linux下测试过。

Oct 10, 2006 - 2 minute read - Comments

遭遇gentoo的循环依赖(circular dependencies)问题

前几天要装gnome时就遇到了这个问题,当时手头有别的事情就给搁下了,几天要装sun-jdk时又遇到了同样的问题:
osr usr # emerge -pv sun-jdk

These are the packages that would be merged, in order:

Calculating dependencies... done!
!!!
Error: circular dependencies:

ebuild / net-libs/gnutls-1.4.4-r1 merge depends on
   ebuild
/ dev-libs/lzo-2.02-r1 merge (hard)
ebuild / media-libs/alsa-lib-1.0.13 merge depends on
   ebuild
/ app-doc/doxygen-1.4.7 merge (hard)
ebuild / app-text/ghostscript-gpl-8.54 merge depends on
   ebuild
/ net-print/cups-1.2.4 merge (hard)
ebuild / net-print/foomatic-filters-3.0.20060720 merge depends on
   ebuild
/ net-print/cups-1.2.4 merge (hard)
   
ebuild / virtual/ghostscript-0 merge (hard)
ebuild / app-doc/doxygen-1.4.7 merge depends on
   ebuild
/ virtual/ghostscript-0 merge (hard)
ebuild / virtual/ghostscript-0 merge depends on
   ebuild
/ app-text/ghostscript-gpl-8.54 merge (medium)
   
ebuild / net-print/cups-1.2.4 merge (soft)
ebuild / sys-apps/dbus-0.62-r1 merge depends on
   ebuild
/ app-doc/doxygen-1.4.7 merge (hard)
ebuild / dev-lang/nasm-0.98.39-r3 merge depends on
   ebuild
/ virtual/ghostscript-0 merge (hard)
ebuild / dev-libs/lzo-2.02-r1 merge depends on
   ebuild
/ dev-lang/nasm-0.98.39-r3 merge (hard)
ebuild / dev-java/sun-jdk-1.5.0.08 merge depends on
   ebuild
/ media-libs/alsa-lib-1.0.13 merge (medium)
ebuild / net-print/foomatic-filters-ppds-20060720 merge depends on
   ebuild
/ net-print/foomatic-filters-3.0.20060720 merge (medium)
   
ebuild / net-print/cups-1.2.4 merge (soft)
ebuild / net-print/cups-1.2.4 merge depends on
   ebuild
/ sys-apps/dbus-0.62-r1 merge (hard)
   
ebuild / net-libs/gnutls-1.4.4-r1 merge (hard)
osr usr #

起初怀疑罪魁祸首是gnutls,安装sun-jdk需要安装它,它又依赖别的包,最终别的包又依赖gnutls早成了死循环以至无法安装,在linuxsir上发了帖子描述这个问题,一边又自己折腾起来。

上面的输出可以看出是cups依赖gnutls造成了循环,于是我编辑cups的ebuild去掉了它对gnutls的依赖,再次emerge -pv sun-jdk,依然是循环依赖,不过跟上次已经大不一样了,这次造成循环的是doxygen,doxygen是一个文档系统,我想起来我的make.conf中有doc这个USE,不会是它的问题吧,试试看,去掉make.conf中的doc USE,再试试,晕,一切正常,没有可恶的循环依赖了。

看来真正的罪魁祸首是doc这个USE,使用全局的USE还是要小心啊,同样遇到循环依赖问题的gentoo lovers可要引以为戒了,遇到这样的问题多看看自己的USE吧,没准就是这样的一粒沙子坏了走远路的脚了,呵呵。

Oct 9, 2006 - 2 minute read - Comments

在LFS下安装qemu和kqemu

qemu是一个很好的模拟器,就不多说了,LFS也很不错,所以我希望在LFS下使用qemu,呵呵。

首先到http://fabrice.bellard.free.fr/qemu/download.html下载qemu和kqemu的源代码,我使用的版本是qemu-0.8.2.tar.gz和kqemu-1.3.0pre9.tar.gz,不同的版本差别应该不大。

首先安装qemu:
root@LFS qemu # tar xf qemu-0.8.2.tar.gz
root@LFS qemu # cd qemu-0.8.2
由于使用gcc4编译qemu可能会有问题,这个在直接使用./configure时也会有提示,所以使用gcc3来编译:
root@LFS qemu-0.8.2 # ./configure --cc=/opt/gcc-3.3.6/bin/gcc --host-cc=/opt/gcc-3.3.6/bin/gcc --enable-alsa --enable-system --enable-user --prefix=/usr
Install prefix          /usr
BIOS directory       /usr/share/qemu
binary directory     /usr/bin
Manual directory   /usr/share/man
ELF interp prefix    /usr/gnemul/qemu-%M
Source path          /root/qemu/qemu-0.8.2
C compiler             /opt/gcc-3.3.6/bin/gcc
Host C compiler     /opt/gcc-3.3.6/bin/gcc
make                     make
install                    install
host CPU               i386
host big endian     no
target list              i386-user arm-user armeb-user sparc-user ppc-user mips-user mipsel-user i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softmmu arm-softmmu
gprof enabled       no
profiler                  no
static build            no
SDL support          yes
SDL static link       yes
mingw32 support  no
Adlib support        no
CoreAudio support no
ALSA support         yes
DSound support    no
FMOD support        no
kqemu support      yes
Documentation      yes
root@LFS qemu-0.8.2 # make
root@LFS qemu-0.8.2 # make install

ok,keqmu安装完成了,测试一下:
下载一个freedos的qemu镜像,把下载的镜像解压缩:
root@LFS qemu # bunzip2 freedos.img.bz2
使用qemu运行:
root@LFS qmeu # qemu -hda freedos.img
呵呵,看到了freedos的运行吧,说明qemu已经成功安装并能正确运行了。

不过现在还没有kqemu加速,接下来安装kqemu,kqemu的安装比较简单:
root@LFS qemu # tar xf kqemu-1.3.0pre9.tar.gz
root@LFS qemu # cd kqemu-1.3.0pre9
root@LFS kqemu-1.3.0pre9 # ./configure
Source path         /root/qemu/kqemu-1.3.0pre9
C compiler           gcc
Host C compiler   gcc
make                   make
host CPU             i386

kernel sources    /lib/modules/2.6.16.27/build
kbuild type          2.6
root@LFS kqemu-1.3.0pre9 # make
root@LFS kqemu-1.3.0pre9 # make install
好了,kqemu已经安装
root@LFS qemu # modprobe kqemu major=0

至此,qemu和kqemu已经安装完毕,为了每次系统启动后能够使用kqemu,可以把modprobe kqemu major加到/etc/rc.d/rc.local中。

Oct 7, 2006 - 1 minute read - Comments

LFS时Fontconfig 2.3.2的编译错误和解决方法

LFS还算很顺利,现在已经进入到BLFS之Xorg7.0阶段,呵呵

编译Fontconfig2.3.2时出错了,提示找不到jw解析器:

/bin/sh ../libtool --mode=link gcc  -g -O2   -o fc-cache
fc-cache.o ../src/libfontconfig.la
mkdir .libs
gcc -g -O2 -o .libs/fc-cache fc-cache.o ../src/.libs/libfontconfig.so
creating fc-cache
rm -f fc-cache.1
docbook2man ../fc-cache/fc-cache.sgml
jw: No parser available
make[2]: *** [fc-cache.1] Error 6
无可奈何,不过在LFS的邮件列表中已经有人解决了这个问题:
before you begin, rename the docbook2html to docbook2html.---
mv /usr/bin/docbook2html /usr/bin/docbook2html.--
once all done, rename it back again !
mv /usr/bin/docbook2html.--- /usr/bin/docbook2html
没什么技术含量,做下记录吧。

Oct 5, 2006 - 2 minute read - Comments

wxGTK引发的些案

我的gentoo最近有些不听话,有好些个应用程序都不能用了:amule、xchm等。revdep-rebuild的时候发现少了很多的库,大概是因为最近几次更新系统都没有revdep-rebuild吧,系统有些凌乱了。

revdep-build并不能解决问题,因为这根本就没有办法运行下去,第一个软件包amule的重新编译就遇到了问题:
!!! set-wxconfig: Error: Can't find normal or debug version:
!!! set-wxconfig: /usr/lib/wx/config/gtk2-unicode-release-2.6 not found
!!! set-wxconfig: /usr/lib/wx/config/gtk2-unicode-debug-2.6 not found
!!! You need to emerge wxGTK with unicode in your USE


按照错误提示,似乎是因为我编译wxGTK时没有使用unicode这个USE?不对啊,从equery u wxGTK的输出来看,我使用了这个USE,那为什么它还告诉我说要使用unicode呢?哦,这个只是它的建议而已,再看上面的错误信息:
找不到gtk2-unicode-release-2.6,看一下,/usr/lib/wx/config下的确没有这样的文件,这个应该是编译wxGTK的时候缺少了什么USE导致的,但不是unicode,因为我的确使用了unicode。

google的结果并没有为我提供可用的信息,还是自己动手吧,丰衣足食:)

vi /usr/portage/x11-libs/wxGTK/wxGTK-2.6.3.3.ebuild,仔细看了看这个ebuild,我找到了这样的一段代码:
pkg_setup() {
    if use X; then
        einfo "To install only wxbase (non-gui libs) use USE=-X"
    else
        einfo "To install GUI libraries, in addition to wxbase, use USE=X"
    fi
}
再仔细看看equery u wxGTK的输出,哦,居然没有X这个USE,问题大概就是在这里了,USE="X" emerge wxGTK,漫长的等待之后,ok,amule等问题程序编译通过了,问题得到圆满的解决。