2008-11-27

扩展coLinux分区镜像文件

现在我用coLinux跑ArchLinux,镜像只有256M,不过装几个包就不够用了,急需扩展镜像大小。

link:http://colinux.wikia.com/wiki/ExpandingRoot

上面链接上说了很多方法,下面是我最喜欢的一种,优点是安全,且不需要额外软件(如cygwin),缺点是复制了两次已有fs,有点占空间,不过原始大小只有256M, 所以没什么问题

1.关掉所有coLinux

2.假设现在的文件镜像为cur.img,复制一份,设文件名为old.img

3.创建新的镜像文件,假设新文件名为new.img,大小2G,则在命令行下运行

fsutil file createnew new.img 2147483648

注:Vista下需管理员权限

4. 修改coLinux的conf文件,把三个文件都挂上,例如:
hda1="c:\Program Files\coLinux\cur.img"
hda3="c:\Program Files\coLinux\old.img"
hda4="c:\Program Files\coLinux\new.img"

5. 启动coLinux

6. 检查old fs: e2fsck /dev/hda3

7. copy fs: dd if=/dev/hda3 of=/dev/hda4

8.检查new fs: e2fsck -f /dev/hda4

9.resize new fs: resize2fs -p /dev/hda4

10. 再检查 new fs: e2fsck /dev/hda4

11. 最后修改coLinux的conf文件,用new.img作为root,如果没有问题,就可以删掉cur.img和old.img

2008-11-26

软件推荐: Synergy

从 LinuxTOY 和 LinuxGem 上 同时看到了这个软件。

这是个共享鼠标键盘的软件,通过网络连接,支持多种平台。

于是乎同时使用两台电脑就很爽了。

真是非常不错,非常有创意的软件。

2008-11-24

ibus 输入法配置

最近scim总把我的系统搞死,实在不能忍了。 本想转scim-python,但是svn上的代码居然不能编译。

这是想到了ibus,听说好久了,就是一直没有尝试。这次总算“被迫”试用了。

我的系统是ubuntu8.10 64bit

http://forum.ubuntu.org.cn/viewtopic.php?p=915368上查到了有用的步骤,这里提下简要过程,以及和原链接不同的地方:

1.编译安装dbus-python,ibus依赖0.83以上的版本

2.编译ibus引擎,我这里用git clone下载的,没有confiure,所以用autogen.sh,后来发现不用sudo还不行,是gettext的autopoint出了问题,所以只好用sudo了。另外我这里make也需要sudo,很奇怪

命令是:
sudo ./autogen.sh --prefix=/usr

3编译码表,我下了pinyin, anthy和table(这个里面包含了wu86, wu98, erbi,还有些其他的),编译安装,命令同上,注意安装五笔需要--enable-wu86或--enable-wu98

4运行ibus看是否正常,运行ibus-setup进行配置

5.把ibus注册为gtk的输入法
编辑/usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules
在文件到最后添加两行:
"/usr/lib/gtk-2.0/2.10.0/immodules/im-ibus.so"
"ibus" "ibus Input Method" "gtk20" "/usr/share/locale" "zh"
这样在一些文本框里点右键就能找到ibus了

6.注册给im-switch,替换掉scim或scim-bridge
1) 建立文件/etc/X11/xinit/xinput.d/ibus,内容为
XIM=ibus
XIM_PROGRAM=/usr/bin/ibus
XIM_ARGS=""
GTK_IM_MODULE=ibus

2) sudo update-alternatives --install /etc/X11/xinit/xinput.d/zh_CN xinput-zh_CN /etc/X11/xinit/xinput.d/ibus 50

3)sudo im-switch -c,然后选ibus那一项

7.重新登录应该就没问题。

注,安装五笔时我出了些问题,当时我最初是enable了98,然后发现不爽,想换回86,然后configure wubi86时忘了打--prefix=/usr结果一塌糊涂。最后倒是解决了,整理经验教训如下

8.需要删除engine时,除了删除/usr/share/ibus/engine 下的对应文件,如果设置了preload,还要去gconf里删除/desktop/ibus/general/preload_engines里的项目

9.用--prefix=/usr/local/(也就是不加--prefix)编译安装运行后,/usr/share/ibus/engine里会多出一个engine文件,我这里是wubi86.engine,然而make uninstall和用--prefix=/usr编译安装后这个文件里面的Icon字段仍然指向/usr/local,所以需要删除该文件再make install

试了一下,确实是很好用的输入法。

2008-11-23

coLinux + ArchLinux

最近做Flash,不得不长期在Windows下面跑。然而突然想用一些Linux下面的工具,就会很不爽。 Cygwin其实还不错,但是感觉只是概念上模拟了一个环境,本质还都是exe。

coLinux是一个Linux内核的Windows port,使得可以在Windows下跑Linux。理论上是支持直接启动本机硬盘的Linux的,比如双启动的情况,但是我这里配了很久没有成功,可能是因为我把boot单独分区,以及root分区是xfs格式有关。

于是想找个小巧的linux镜像,就看到了ArchLinux,用了用,确实不错。非常快。

再用一段时间看看吧,这确实是一个很有创意的搭配。

2008-10-28

软件推荐: Cooliris

Cooliris 是个 Firefox 的插件, 主要特色是以3D Wall的形式观看图片,支持RSS, 以及Google,Flickr等搜索。

我稍微用了一下,惊呼“太爽啦”。

地址:
https://addons.mozilla.org/en-US/firefox/addon/5579

2008-10-15

软件推荐: 永中Office2009个人版

http://www.evermoresw.com.cn/webch/product/personal.jsp

稍微试用了一下,感觉有以下优点

1.免费,跨平台 (可惜不是开源的)
2.快 (虽然是java,但是还是很快)
3.对MS Office 文档格式支持不错 (比OOO还好)
4.支持UOF (虽然我不太喜欢UOF)

感觉值得一试

2008-10-12

游戏推荐: InstantAction

http://www.instantaction.com

一个基于浏览器的游戏网站,支持windows,mac下常见浏览器。实际上是用插件把浏览器和exe连接了起来。

上面有很多不同类型的游戏,如fps, rts, 等等,都是多人联机游戏。

不论是游戏,技术,界面都很合我的口味,也许是我kongregate玩太多了? 呵呵。

2008-10-10

加速gnome panel隐藏显示的速度

参见:http://koorenneef.nl/node/5

gnome panel默认隐藏和显示的速度都是500ms,非常慢。

如果想修改,用gconf-editor修改如下键值

/apps/panel/toplevels//hide_delay
/apps/panel/toplevels//unhide_delay

其中是想要修改的panel的名字,得稍微猜一下。

2008-10-03

ubuntu 8.10 uvesafb 不能正常加载的解决

ubuntu 8.10中使用了新内核,用uvesafb替换了原来的vesafb,这带来的不少问题:

1. 依赖的v86d默认没有安装(当然了,手工安装一下就行了)
2. v86d在initramfs下工作不正常
3. uvesafb中mode参数改名为mode_option

之前弄了好久没有成功,近日在https://bugs.launchpad.net/ubuntu/+source/linux/+bug/246269上看到了一个walkaround,结合我的情况,步骤如下

1) 安装 v86d
2) 创建文件 /etc/modprobe.d/uvesafb,内容为: options uvesafb mode_option=1280x800-32 mtrr=3 scroll=ywrap
3)在/etc/modprobe.d/blacklist-framebuffer中加入一行: blacklist uvesafb
4)确保/etc/modules中有 uvesafb 和 fbcon (各占一行)
5)确保/etc/initramfs-tools/modules中没有uvesafb和fbcon
6)如果修改了/etc/initramfs-tools/modules,则需要运行update-initramfs -u

之后重启应该就可以了。

不过这个还是个临时的解决办法,还是希望问题能够早日解决。

64位ubuntu下32位程序的输入法问题

我是64bit的ubuntu,有时会用到32bit的程序,如flock和qq,然后输入法就成了问题。

定义32位程序输入法加载模块的文件应该是/etc/gtk-2.0/gtk.immodules.32,默认安装情况下,里面只有scim没有scim-bridge。不过里面scim指向的模块/usr/lib32/gtk-2.0/2.10.0/immodules/im-scim.so并不存在。这样如果在程序用右键选择输入法为SCIM Input Method,会报找不到模块。

整个解决流程我参考了http://forum.ubuntu.org.cn/viewtopic.php?t=139907&start=0&postdays=0&postorder=asc&highlight

一开始我是想弄通im-scim.so,于是从源里下了32位的scim-gtk2-immodule, libscim8c2a等包,手工解压,之后虽然32位程序里能调出scim输入法了,但是没有中文输入法。在gtk.immodules.32中在scim对应行加"zh"也没用。

后来想想,我系统默认输入法是scim-bridge而不是scim,于是把目光转向了im-scim-bridge,从源里下来32位scim-gtk2-immodule,把im-scim-bridge.so放到/usr/lib32/gtk-2.0/2.10.0/immodules/,然后在/etc/gtk-2.0/gtk.immodules.32最后添加两行:

/usr/lib/gtk-2.0/2.10.0/immodules/im-scim-bridge.so"
"scim-bridge" "SCIM Bridge Input Method" "" "" ""

(链接里说的方法是用/usr/bin/gtk-query-immodules-2.0 > gtk.immodules.32,然后把/usr/lib都改成/usr/lib32,似乎是更佳的方法)

这样32位程序里就能输入中文了,之后发现把32位的scim那些文件删去也可以正常工作,因此看来只需要im-scim-bridge.so一个文件。

2008-09-26

Visual Studio 2008 无法卸载

Vista SP1 + Visual Studio 2008 Team Suite

症状是用Control Panel的uninstall/repair,或者源安装盘,都在load某个component时挂掉,不能进入正常安装界面,然后弹出对话框,提示“A Problem has been encountered while loading the setup components. Canceling setup.”

而Log中显示错误
MSITOSIT: [2] ERROR processed; exception was thrown for retail build
Developer Comment: : has no associated directory, verify the Feature table is correct
Build Time: Thu Dec 11 14:04:18 2003
HRESULT: -2147467259

网上查了一下,有的说是SP1的问题,有的说是Kaspersky的问题,我这里都不管用。

最后的解决办法是找到源安装盘的vs_setup.msi,用Admin进入cmd,运行msiexec /x vs_setup.msi,它似乎就什么都不检查,就能卸载了。

之后重装也没问题。

2008-09-19

游戏推荐: Fantastic Contraption

Fantastic Contraption, 本周Kongregate排名第一。类似Phun的一个游戏,自己搭建机器把一个小块移到指定地点。 玩家还可以上传共享自己的机器设计(需注册,但就需要几秒钟)

我玩了之后大呼过瘾。

这是继Anika's Odyssey之后又一个让我非常想推荐的游戏了。

2008-09-15

网站推荐: Kongregate 一个Web2.0 Flash游戏网站

Kongregate是一个Web2.0的Flash游戏网站。

里面有几千个游戏和上万个用户。

比较有特色的功能如下

1.聊天室,玩游戏时能和别人聊天,比如探讨通关攻略
2.Badge,很多游戏中达到一定任务(像得到多少多少分,坚持多长多长时间之类),就会给你一个Badge,当然除了加点积分没啥实际用处。
3.显示游戏的排行榜,不同游戏有不同项目

其他功能
1.给游戏评分以及写评论
2.上传自己做的游戏
3.提交bug给作者
4.个人收藏

此外,里面的游戏没有分类,但是游戏作者可以给游戏指定tag

我上这个网站也有一定时间了。感觉很不错,至今乐此不疲。

里面游戏更新很快,而且什么类型都有,不愁没有你不喜欢的。一般来说每天有很多游戏上传,鱼龙混杂。平时我就看看每日hottest,以及有badge的游戏。

真是一个不错的网站~

2008-09-09

Vista 非管理员用户设置环境变量

按XP的方法(System Properties->Advanced system settings->Environment Variables...)只能设置管理员的用户变量和系统变量

Vista下的方法是:
Control Panel->User Accounts->Change my environment variables

2008-08-29

Vista 无法设置游戏控制器

症状:
系统Vista,几周前DMC4还玩得好好的,这几天突然发现不行了。不论是dx9还是dx10的,就一直黑屏。DMC4Launcher可以进入,但是一设置手柄就卡死。

分析:
起初认为是显卡驱动的问题,更新后无果。 后来想起了dxdiag,载入后发现每次到input那个tab就会卡死(好像中间有几次成功了),于是认为是手柄问题,但是在别的游戏(如smynes)中就工作正常。 后来进入控制面板设置游戏控制器,没有反应。

用VS调试DMC4Launcher以及主程序,前者断在dinput8.dll的一个类似EnumDevices的函数里,后者则是一个奇怪的死循环。后来又调式了游戏控制器选项的rundll32.exe, 跟DMC4Launcher情况一样。

于是去Device Manager,到Human Interfaces Devices中逐个删除,发现一个比较奇怪的设备 Root Enumerated Hid Device。删除之后需要重启,而后竟工作正常了。

想想这几天,更新过Tooya Pro绘图板的驱动,于是打开Painter一看,果然绘图板的压感没了。重装驱动后那个Root Enumerated Hid Device再度出现,而DMC4也随之再次不能进入了。

结论:
Tooya Pro的驱动会导致冲突,影响游戏控制器及有关程序(可能主要是dinput8.dll里的那个函数)。不知道哪里的bug,完全google不到。

临时解决办法就是禁掉Root Enumerated Hid Device,仅当需要用绘图板时才启用。不过老得重启还是很麻烦的。

2008-08-19

两款绘图软件比较 Gimp vs Krita

配好了绘图板之后,手一直痒痒的。 之前看着Photoshop绘图教程,在Painter上作画,感觉还不错。 但是一直是想转移到Linux下面来的,指示软件硬件一直都没有配好。现在硬件好了,还是看软件。

首先得说一下我的情况,这代表我的立场。我主要应用是徒手作画,图像处理方面则不怎么要求。 我常用的工具就是画笔,喷枪和涂抹。 另外我当然希望软件对绘图板能够很好得支持, 事实上我对Painter对绘图板的支持不是非常的满意,我的手写板最近才更新了一次Vista驱动,修正了若干bug,包括lag。

两个软件我都就自己的需要尝试了一下,版本为
Gimp 2.4.6
Krita 2.0a6

那么分别说一下各自的优缺点吧

Gimp:
优点:支持文件格式多,工具多
缺点:总觉得界面不够友好

Krita:
优点:绘图板响应虽然有点慢,但是出来的线条非常好看,比如Pixel Brush
缺点:适合手绘的工具较少,也没有我喜欢的三角形+环形的颜色拾取器。 使用RGB模板经常Crash

当然了也很有可能我对软件的挖掘还不够。 目前暂时考虑用Gimp画一幅试试看。

Linux 下绘图板配置

作为一个绘画爱好者,绘图板是必不可少的。 怎奈Linux下面绘图板时认时不认,压感也时支持时不支持。 今天终于下决心弄好它。

我的板子是Tooya Pro,USB版。 Linux下认成WALTOP International Corp. Slim Tablet
系统是Ubuntu 8.04

首先是要定位设备名,一种方法是找到绘图板是哪一个/dev/input/event*,这又有多种方法,一种是看dmesg,记住pci地址,然后去/dev/input/by-path找到对应的,再看其是哪个/dev/input/event*的symlink;另一种方法是用wacdump挨个测试/dev/input/event*。当然也可以二者结合使用。在我机器上绘图板是/dev/input/event2

由于我对/dev/input/event*命名不是很了解,所以担心改了配置后这个数值会变,于是再一个网页上学到了修改udev rules的方法,让它自动建立symlink。后来发现wacom就是这样做的。
具体方法是首先用lsusb等工具找到设备的idProduct和idVendor。 我的绘图板在lsusb下看是172f:0031
然后建立文件/etc/udev/rules.d/65-tablet.rules:
KERNEL=="event*", SYSFS{idProduct}=="0031", SYSFS{idVendor}=="172f", SYMLINK+="input/tablet"
这样以后会自动建立/dev/input/tablet到对应/dev/input/event*的symlink,很是方便。

下一步是需要确定板子的坐标范围(或许这步可以省略),主要是用wacdump看看板子左上角和右下角的坐标。后来我有参考了以下板子的说明书,得到坐标(0,0)-(10000,6250)

接着当然是修改xorg.conf (听说最新的Xorg对即插即用支持得很好,真希望不用老改这玩意儿了)
ServerLayout Section中加一句
InputDevice "stylus" "SendCoreEvents"
然后加一个InputDevice Section
Section "InputDevice"
Driver "wacom"
Identifier "stylus"
Option "Device" "/dev/input/tablet"
Option "Mode" "Absolute"
Option "Type" "stylus"
Option "USB" "on"
Option "TopX" "0"
Option "TopY" "0"
Option "BottomX" "10000"
Option "BottomY" "6250"
Option "MaxX" "10000"
Option "MaxY" "6250"
EndSection

注意我只添加了一个stylus设备,eraser, pad之类的都不需要

最后,软件也得配置一下,比如Gimp。

按理说重启X就应该行了,可是我这里一定要重启系统,要不压感说什么都不认。

另外有个Gnome Graphics Tablet Apps,也有些帮助。

这样就完美了。


参考链接:
http://linuxwacom.sourceforge.net/index.php/howto/x11
http://littlethorpe.net/tptrn/article/72/aldis-low-cost-digitiser-tablet-in-linux
https://help.ubuntu.com/community/Wacom#fnref-ec6781974bf16fcc57d0d15e8186755fb5d1784c
https://help.ubuntu.com/community/WacomTroubleshooting
http://www.alexmac.cc/tablet-apps/

2008-08-07

nVidia 8000/9000 Series Performance Issues

nvidia 8000/9000的linux驱动的2D性能叫人不敢恭维。
标题链接的网页上给出了临时改善方案

1.首先要安装177beta驱动
2.运行nvidia-settings -a InitialPixmapPlacement=2 -a GlyphCache=1,如果有性能有改进,则放入.xinitrc
3. 在xorg.conf里Device Section中加入参数
Option "PixmapCacheSize" "300000"
Option "OnDemandVBlankInterrupts" "True"

我用的8400MG显卡,经过上面配置后似乎改进不大

以下是针对kde的配置
1. Right click on your title bar, and select, in KDE 4, "Configure window behavior".
2. In "Desktop Effects", select "Advanced options".
3. Select the following:
Composition type: OpenGL.
OpenGL Mode: Shared memory (ENABLE THIS AFTER YOU ENABLE DIRECT RENDERING, IF YOU DO OTHERWISE YOU WILL EXPERIENCE SCREEN CORRUPTION)
Direct rendering: Enabled
VSync: Enabled

按这个配置后,在我机器上效果明显。

2008-07-31

赞xulplanet的XPCOM文档

文档中有如下提示

This interface is the type of the following properties:
This interface is passed as an argument to the following methods:
This interface is returned from the following methods:

比如我想看nsIDOMDocument怎么创建,但是它没有构造函数
http://www.xulplanet.com/references/xpcomref/ifaces/nsIDOMDocument.html中可以发现它是一些函数的返回类型。于是轻松找到nsIDOMParser.parseFromString等函数。

不想Javadoc,有时一见接口和抽象类就傻了眼。

当然了这涉及到语言的架构,二者还是不能这么比的。 但是还是要称赞这个文档:

这才是给人看的文档!

2008-07-26

联接远程的 X 服务器

转自Debian参考手册

9.4.8 联接远程的 X 服务器 – ssh

使用 ssh 可以在本地主机和远程应用服务器之间建立一个安全的连接通道。

  • 如果不想每次执行相同的命令行选项,可在远程主机的 /etc/ssh/sshd_config 文件中,打开 X11ForwardingAllowTcpForwarding 选项。

  • 启动本地主机的 X 服务器。

  • 在本地主机上开一个 xterm 进程。

  • 运行 ssh 建立与远程站点的连接。

         localname @ localhost $ ssh -q -X -l loginname remotehost.domain
    Password:
    .....
  • 在远程站点上运行 X 应用程序命令。

         loginname @ remotehost $ gimp &

该连接方式使得远程 X 客户机上的屏幕输出,看上去就好象是通过本地 UNIX 域套接字的方式连接到服务器的客户机输出。

2008-07-24

Blogger 加入 Digg 支持

在模板上找个地方(也不是随便哪里都可以)加上
<b:if cond='data:blog.pageType == "item"'>
<script src='http://digg.com/tools/diggthis.js' type='text/javascript'/>
</b:if>
就行啦

我是放在了
<p class='post-footer-line post-footer-line-3'/>
后面(记得展开Widget代码)

欢迎各位来Digg!


2008-07-22

Flock 2.0b2 试用

其实我听说flock也挺早的,只是以前觉得用不上那些功能。 最近觉得应该开使拥抱Web 2.0了,于是搞了个Flock2.0b2试了试。 还是不错的,用了用感觉确实很方便,另外就是觉得屏幕有些不够用了。

不过还是有些问题的,比如是我用64位系统,flock是32位的,虽然可以运行,但是scim运行不了。本想自己编译一个,但是没有找到源码,再说吧。


QGtkStyle: QT程序的原生GTK外观

以前在LDCD上看到的,一直没有尝试,今天突然试了一下,果然不错。

官方网站:http://labs.trolltech.com/page/Projects/Styles/GtkStyle

安装步骤
svn co svn://labs.trolltech.com/svn/styles/gtkstyle

cd gtkstyle/

qmake && make

sudo make install

然后执行qtconfig-qt4, 设置sytle为gtk即可

2008-06-06

Green Apparatus 移植至X11后 wait 指针的修正

参考: http://d.hatena.ne.jp/tksmashiw/20080421#c

前一阵子在gnome look里看到了Green Apparatus这个主题,觉得不错就下载了。

但是其中的Wait指针有问题,动画播放时指针自己浮动了。 主题下面的评论里也提到了这个问题,但是没有解决方案。另外还提到这个主题原来是Windows的,后来被移植过来的。

今天在上面的链接里找到了解决方案:

首先下载CursorXP/FX to X11 Mouse Theme Converter

并安装
sudo apt-get install libconfig-inifiles-perl perlmagick imagemagick x11-apps

然后下载一个Windows的Green Apparatus主题,应该是一个.CurXPTheme文件,其实就是一个zip

解压后修改Scheme.ini,把[Wait]下Frame=106改成107,[Wait_Script]下26-106改成27-107

最后重新打包,并用Converter转换成X11的主题。

安装,测试。 No problem!

2008-05-28

foobillard 没有声音

Ubuntu 8.04 安装foobillard后游戏中没有声音,也不能设置。

解决办法为安装包libsdl1.2debian-all

2008-05-24

Windows Vista 更改启动驱动器SATA模式后出现 STOP 0x0000007B INACCESSABLE_BOOT_DEVICE 的解决

参见: http://support.microsoft.com/kb/922976/zh-cn


最近把硬盘sata模式改成了ahci,linux下没什么问题,但是进vista后就出现上面的错误信息。

产生原因大概是安装Vista时使用的IDE模式,因此Vista安装后没有开启ahci服务。

根据上面的链接,解决方法为,先用IDE模式启动,修改注册表

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci

把Start键值改为0

然后重启,再改成ahci就行了。

2008-04-23

热烈祝贺访问量首次突破50

虽然我的blog的初衷只是为了整理自己的笔记方面日后查找,并不是为了给别人看,但是看到能帮助别人也确实感到很高兴。

根据Google Analytics的数据,2008.04.22日访问量为57,创历史新高,且首次突破50。 主要原因还是最近Blogspot解封了,要不我就得庆祝突破20了。

python urllib.urlopen 使用代理的方法

urllib.urlopen(url, proxies={'http' : 'http://address:port'})

2008-04-22

游戏推荐: The Python Challenge

http://www.pythonchallenge.com/

这是一个猜url闯关的在线游戏,主要利用的python语言的各种知识。十分有趣。

Thunderbird 插件 Provider for Google Calendar 报 "Requires addtional items" 错误的解决

原来的lightning是在源里装的,版本号为0.7, 更新至最新版0.8后问题消失。

有关 64位Linux 驱动 Atheros 5007EG 无线网卡

[2008-10-03 更新]ubuntu 8.10中新增了acer_wmi模块,可以完美驱动无线网卡了 :)

系统是 Ubuntu 8.04 rc amd64,笔记本是Acer Aspire 4520

无线网卡现在看来是 Atheros 5007EG, 为什么这么说呢,我主要依靠lspci判断,最早识别不出来,后来能认出Atheros,但是没型号。然后一段时间内都认成5006EG。当时也是按它装的驱动。但是最近update pciid后又认成了AR242x。 在http://madwifi.org/wiki/Compatibility/Atheros 上是这么说的

Atheros AR5007EG

Chipset:AR2425 / AR5007EG
URL:http://atheros.com/pt/AR5007EG.htm
Supports:802.11b 802.11g
Interface:PCI-Express x1
Device Information: Ethernet controller: Atheros Communications, Inc. Unknown device 001c (rev 01),Subsystem: AMBIT Microsystem Corp. Unknown device 3065
Notes:not supported by HAL as of 2007.04.28 - resturns Hal status 13
Notes:Suported by ndiswrapper with windows driver, but some user reports crash problems
Notes:Instructions about how to use the windows driver + ndiswrapper
Notes:works fine with ndiswrapper, using old drivers, search ubuntu forums
Notes:Sometimes erroneously reported as an AR5006EG by lspci
Notes:Works perfectly with latest madwifi snapshot and this patch --> http://madwifi.org/ticket/1679
Notes:This patch is tested and working on:
Notes:Acer Aspire 5315, Acer Aspire 5520 - detected as AR5006EG, Acer Aspire 5613WLMi, Acer Aspire 5720Z, Toshiba Satellite A210, LG E500, Packard Bell EasyNote? MX-52, Samsung P500, Asus X51RL, MSI-VR601-051, Fujitsu-Siemens Amilo LI1718, Fujitsu-Siemens Amilo PA2510, Asus EEEPC more, Acer Aspire 5570, Acer Aspire 5100, Toshiba Satellite Pro L40-136, Toshiba Satellite P200-170 (PSPBQA) - detected as AR5006EG, Acer Aspire 5050-3785 - detect as AR5006eg working ok
Notes:How-to compile madwifi and the patch
Notes:Works on HP dv6730eg, openSuse 10.3 after installing http://www.pc-forum24.de/suse-treiber/7830-experimentelle-madwifi-pakete-fuer-karten-mit-ar2425-ar5007eg-chipsatz-nur-32-bit.html and kdenetworkmanager
Notes:Does not work with HP dv9722eg (64Bit), no results with ndiswrapper, svn and snapshots with patches, sometimes HAL status 13 and sometimes HAL status 3

于是现在看来,觉得这个就是我的情况。

之前用32位的时候无线网卡一开始也搞了很长时间。 主要是最初查到Atheros有linux下的驱动madwifi。然后试了半天也不行,结果在官网上查到了当时不支持。于是只好用ndiswrapper配windows xp的驱动,工作的也不错。

现在升了64位, ndiswrapper不能挂32位的驱动了,winxp64位的驱动又特别难找。 (倒是有vista64的驱动,但是ndiswrapper不支持)。 于是又想到了madwifi. 也看到了上面的文字。 不过它的5007的snapshot只支持32位,比较郁闷。 一开始我还不知道, co了svn上的代码编译安装,编译是有个小问题,手工解决,然后倒是能载入,但是不能支持网卡。 于是只好又回到ndiswrapper.

那么就要找winxp64的驱动了,仔细找找也找到了不少,ndiswrapper也能安装这些驱动,但是挂载ndiswrapper内核模块后仍没网卡,dmesg说ACPI的IRQ7的问题。 一时又没了主意。

偶然进到了ndiswrapper支持网卡列表http://ndiswrapper.sourceforge.net/joomla/index.php?/component/option,com_openwiki/Itemid,33/id,list_a/(后来后悔:一开始怎么没想到进去看看呢)发现了很多类似网卡,尤其很多标以pci id: 168c:001c正好和我的一样。 其中有三个这样的,里面有两个给出了64位的winxp驱动的地址。而这两个只有一个是免费的,如下:

Laptop: Acer Aspire 5570Z根据最后一个链接下到了一个通用驱动,找到winxp64的驱动用ndiswrapper安装。但是载入内核模块后仍是同样的错误。仔细看上面说明是要求卸载madwifi驱动,我一一rmmod后重载ndiswrapper也无效。于是干脆重启,心想不成功便成仁。 不行就跟Wireless告别一段时间。 没想到重启后再一试竟然好了,实在是高兴。 这也说明当时我搜到的其他winxp64驱动也应该奏效。

不管怎样,经过一个晚上的努力,终于把无线网卡弄好了,值得庆贺。

初尝 Ubuntu 64

最近Ubuntu 8.04 rc刚出, 我脑袋一热装了个amd64版本的。

之前也想过是否要装个64位的,但是经过多方调查,当时64位无论是系统上还是软件上都不成熟。 比如没有flash插件和w32codecs, 不过现在不同了。 flash直接装nonfree的那个就行了, codec有w64codecs。 只是我的无线网卡配了好久。

总的来说性能有明显提升。注意是明显,不是很大。 而且我尽量排除了心里因素。 一个主要的改善是图形界面的响应整体加快了。

在64位的大形势下, 软硬件愈发成熟。 感觉真是不错。

2008-04-20

Transmission: 轻量级BT客户端

轻量级有时隐含着功能少,所以通常我宁可用重量级的。

但是今天偶然试了一下Transmission, 然后就把Azureus卸了。当然Azureus也很不错,以前一直用它,只是我也用不了什么高级功能,眼不见心不烦。况且下的东西也是很热门的(ubuntu的cd),基本不需要客户端费劲心思找peer。

Transmission很简介,效率也不错。值得一用。

2008-04-18

手工更改firefox语言环境

最近想在英文Windows下使用日文Firefox,下了语言包后还是英文的。Windows下似乎不能像Linux那样先设个LC_ALL再启动。

于是想到了about:config, 搜索 locale, 最后发现修改general.useragent.locale即可

ubuntu 下编译安装 compiz 插件所需的包

参考:http://forum.ubuntu.org.cn/viewtopic.php?t=89199&postdays=0&postorder=asc&start=0&sid=96eee591eddbfae76538f6c47b5add88

sudo apt-get install compiz-bcop compiz-dev build-essential libxcomposite-dev libpng12-dev libsm-dev libxrandr-dev libxdamage-dev libxinerama-dev libstartup-notification0-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev libmetacity-dev librsvg2-dev libdbus-1-dev libdbus-glib-1-dev libgnome-desktop-dev libgnome-window-settings-dev gitweb curl autoconf automake automake1.9 libtool intltool libxslt1-dev xsltproc emerald x11proto-scrnsaver-dev libxss-dev

Pidgin 的 Now Playing 插件使用方法

Pidgin 有个 Now Playing 插件看似不错,关键是支持我常用的BMPx,但是刚装上发现不会用

在http://m0n5t3r.info/work/pidgin-mpris上查到了,原来应该在自定义消息中加入%now-playing字符串,之后它便会被替换。

2008-04-15

再说修改ubuntu默认字体


ubuntu 中文默认字体的设置我曾提到修改/etc/fonts/conf.d/65-nonlatin.conf,但是今天还了语言后发现不好使了,man了一下fonts-conf发现原来的做法并不优美

更好的办法是修改/etc/fonts/conf.d/69-language-selector-*.conf,其中*会根据你的locale而改变。修改方式同前。


2008-04-06

Gnome下的键盘设置的小技巧

今天突然发现Keyboard设置里面有个Model选项,于是试着设成的Acer Laptop,因为我用的Acer笔记本。
然后发现那些快速启动键都能很好的识别了,具体表现是设置快捷键是可以显示出有意义的字符了,如XF86AudioPlay
不错不错

[转]让CPU占用率曲线听你指挥

题目《让CPU占用率曲线听你指挥》

问题

写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:

1. CPU的占用率固定在50%,为一条直线;
2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);
3. CPU的占用率状态是一个正弦曲线。

分析与解法

有一名学生写了如下的代码:

while (true)
{
if (busy)
i++;
else

}


然后她就陷入了苦苦思索:else干什么呢?怎么才能让电脑不做事情呢?CPU使用率为0的时候,到底是什么东西在用CPU?另一名学生花了很多时间构想如何“深入内核,以控制CPU占用率”——可是事情真的有这么复杂么?
MSRA TTG(Microsoft Research Asia, Technology Transfer Group)的一些实习生写了各种解法,他们写的简单程序可以达到如图1-1所示的效果。

498)this.style.width=498;" onmousewheel="javascript:return big(this)" alt="" src="http://new.51cto.com/files/uploadimg/20080306/103426364.jpg" border="0" height="367" width="324">
图1-1 编码控制CPU占用率呈现正弦曲线形态

看 来这并不是不可能完成的任务。让我们仔细地回想一下写程序时曾经碰到的问题,如果我们不小心写了一个死循环,CPU占用率就会跳到最高,并且一直保持 100%。我们也可以打开任务管理器 ,实际观测一下它是怎样变动的。凭肉眼观察,它大约是1秒钟更新一次。一般情况下,CPU使用率会很低。但是,当用户运行一个程序,执行一些复杂操作的时 候,CPU的使用率会急剧升高。当用户晃动鼠标时,CPU的使用率也有小幅度的变化。

那当任务管理器报告CPU使用率为0的时候,谁在使用CPU呢?通过任务管理器的“进程(Process)”一栏可以看到,System Idle Process占用了CPU空闲的时间——这时候大家该回忆起在“操作系统原理”这门课上学到的一些知识了吧。系统中有那么多进程,它们什么时候能“闲下 来”呢?答案很简单,这些程序或者在等待用户的输入,或者在等待某些事件的发生(WaitForSingleObject()),或者进入休眠状态(通过 Sleep()来实现)。

在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个 刷新周期内CPU占用率的统计平均值。因此,我们写一个程序,让它在任务管理器的刷新期间内一会儿忙,一会儿闲,然后通过调节忙/闲的比例,就可以控制任 务管理器中显示的CPU占用率。

【解法一】简单的解法

步骤1 要操纵CPU的usage曲线,就需要使CPU在一段时间内(根据Task Manager的采样率)跑busy和idle两个不同的loop,从而通过不同的时间 比例,来获得调节CPU Usage的效果。

步骤2 Busy loop可以通过执行空循环来实现,idle可以通过Sleep()来实现。

问题的关键在于如何控制两个loop的时间,方法有二:

Sleep一段时间,然后以for循环n次,估算n的值。

那么对于一个空循环for(i = 0; i <>

loop:
mov dx i ;将i置入dx寄存器
inc dx ;将dx寄存器加1
mov i dx ;将dx中的值赋回i
cmp i n ;比较i和n
jl loop ;i小于n时则重复循环

假设这段代码要运行的CPU是P4 2.4Ghz(2.4 * 10的9次方个时钟周期每秒)。现代CPU每个时钟周期可以执行两条以上的代码,那么我们就取平均值两条,于是让(2 400 000 000 * 2)/5=960 000 000(循环/秒),也就是说CPU 1秒钟可以运行这个空循环960 000 000次。不过我们还是不能简单地将n = 60 000 000,然后Sleep(1000)了事。如果我们让CPU工作1秒钟,然后休息1秒钟,波形很有可能就是锯齿状的——先达到一个峰值(大 于>50%),然后跌到一个很低的占用率。

我们尝试着降低两个数量级,令n = 9 600 000,而睡眠时间相应改为10毫秒(Sleep(10))。用10毫秒是因为它不大也不小,比较接近Windows的调度时间片。如果选得太小(比如1 毫秒),则会造成线程频繁地被唤醒和挂起,无形中又增加了内核时间的不确定性影响。最后我们可以得到如下代码:

代码清单1-1

 

int main()
{
for(;;)
{
for(int i = 0; i < 9600000; i++);
Sleep(10);
}
return 0;
}

在不断调整9 600 000的参数后,我们就可以在一台指定的机器上获得一条大致稳定的50% CPU占用率直线。
使用这种方法要注意两点影响:

1. 尽量减少sleep/awake的频率,如果频繁发生,影响则会很大,因为此时优先级更高的操作系统内核调度程序会占用很多CPU运算时间。
2. 尽量不要调用system call(比如I/O这些privilege instruction),因为它也会导致很多不可控的内核运行时间。
该方法的缺点也很明显:不能适应机器差异性。一旦换了一个CPU,我们又得重新估算n值。有没有办法动态地了解CPU的运算能力,然后自动调节忙/闲的时间比呢?请看下一个解法。

【解法二】使用GetTickCount()和Sleep()
我们知道GetTickCount()可以得到“系统启动到现在”的毫秒值,最多能够统计到49.7天。另外,利用Sleep()函数,最多也只能精确到1毫秒。因此,可以在“毫秒”这个量级做操作和比较。具体如下:

利用GetTickCount()来实现busy loop的循环,用Sleep()实现idle loop。伪代码如下:

代码清单1-2

 int busyTime = 10;  //10 ms
int idleTime = busyTime; //same ratio will lead to 50% cpu usage

Int64 startTime = 0;
while (true)
{
startTime = GetTickCount();
// busy loop的循环
while ((GetTickCount() - startTime) <= busyTime) ;

//idle loop
Sleep(idleTime);
}


这两种解法都是假设目前系统上只有当前程序在运行,但实际上,操作系统中有很多程序都会在不同时间执行各种各样的任务,如果此刻其他进程使用了10% 的CPU,那我们的程序应该只能使用40%的CPU(而不是机械地占用50%),这样可达到50%的效果。

怎么做呢?
我们得知道“当前CPU占用率是多少”,这就要用到另一个工具来帮忙——Perfmon.exe。

Perfmon是从Windows NT开始就包含在Windows服务器和台式机操作系统的管理工具组中的专业监视工具之一(如图1-2所示)。Perfmon可监视各类系统计数器,获取 有关操作系统、应用程序和硬件的统计数字。Perfmon的用法相当直接,只要选择您所要监视的对象(比如:处理器、RAM或硬盘),然后选择所要监视的 计数器(比如监视物理磁盘对象时的平均队列长度)即可。还可以选择所要监视的实例,比如面对一台多CPU服务器时,可以选择监视特定的处理器。

498)this.style.width=498;" onmousewheel="javascript:return big(this)" alt="" src="http://new.51cto.com/files/uploadimg/20080306/103439305.jpg" border="0" height="284" width="347">
图1-2 系统监视器(Perfmon)

我们可以写程序来查询Perfmon的值,Microsoft .Net Framework提供了PerformanceCounter()这一类型,从而可以方便地拿到当前各种计算机性能数据,包括CPU的使用率。例如下面这个程序——

【解法三】能动态适应的解法
代码清单1-3

//C# code
static void MakeUsage(float level)
{
PerformanceCounter p = new PerformanceCounter("Processor", "% Processor Time", "_Total");

while (true)
{
if (p.NextValue() > level)
System.Threading.Thread.Sleep(10);
}
}


可以看到,上面的解法能方便地处理各种CPU使用率参数。这个程序可以解答前面提到的问题2。
有了前面的积累,我们应该可以让任务管理器画出优美的正弦曲线了,见下面的代码。

【解法四】正弦曲线
代码清单1-4

 //C++ code  to make task manager generate sine graph
#include "Windows.h"
#include "stdlib.h"
#include "math.h"

const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;

int _tmain(int argc, _TCHAR* argv[])
{
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for(int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}

DWORD startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j]) ;
Sleep(idleSpan[j]);
j++;
}
return 0;
}

讨论
如果机器是多CPU,上面的程序会出现什么结果?如何在多个CPU时显示同样的状态?例如,在双核的机器上,如果让一个单线程的程序死循环,能让两个CPU的使用率达到50%的水平么?为什么?

多CPU的问题首先需要获得系统的CPU信息。可以使用GetProcessorInfo()获得多处理器的信息,然后指定进程在哪一个处理器上运行。其中指定运行使用的是SetThreadAffinityMask()函数。

另外,还可以使用RDTSC指令获取当前CPU核心运行周期数。

在x86平台上定义函数:

inline __int64 GetCPUTickCount()
{
__asm
{
rdtsc;
}
}
在x64平台上定义:

#define GetCPUTickCount() __rdtsc()

使用CallNtPowerInformation API得到CPU频率,从而将周期数转化为毫秒数,例如:

代码清单1-5

  _PROCESSOR_POWER_INFORMATION info;

CallNTPowerInformation(11, //query processor power information
NULL, //no input buffer
0, //input buffer size is zero
&info, //output buffer
Sizeof(info)); //outbuf size

__int64 t_begin = GetCPUTickCount();

//do something

__int64 t_end = GetCPUTickCount();
double millisec = ((double)t_end –
(double)t_begin)/(double)info.CurrentMhz;


RDTSC指令读取当前CPU的周期数,在多CPU系统中,这个周期 数在不同的CPU之间基数不同,频率也有可能不同。用从两个不同的CPU得到的周期数作计算会得出没有意义的值。如果线程在运行中被调度到了不同的 CPU,就会出现上述情况。可用SetThreadAffinityMask避免线程迁移。另外,CPU的频率会随系统供电及负荷情况有所调整。

总结

能帮助你了解当前线程/进程/系统效能的API大致有以下这些:

1. Sleep()——这个方法能让当前线程“停”下来。
2. WaitForSingleObject()——自己停下来,等待某个事件发生
3. GetTickCount()——有人把Tick翻译成“嘀嗒”,很形象。
4. QueryPerformanceFrequency()、QueryPerformanceCounter()——让你访问到精度更高的CPU数据。
5. timeGetSystemTime()——是另一个得到高精度时间的方法。
6. PerformanceCounter——效能计数器。
7. GetProcessorInfo()/SetThreadAffinityMask()。遇到多核的问题怎么办呢?这两个方法能够帮你更好地控制CPU。
8. GetCPUTickCount()。想拿到CPU核心运行周期数吗?用用这个方法吧。

了解并应用了上面的API,就可以考虑在简历中写上“精通Windows”了。

ScribeFire: 发布Blog的Firefox插件

其实以前就知道这个,只是那时blogspot没有解封,似乎这个插件不工作。

现在工作正常了,这一篇和上一篇都是用它发布的,还不错。美中不足是tag要自己指定,不能选。

这个其实也不怪它。我查了查Google的Blogger data API,似乎没有查询所有category的接口。

用这个的确方便了不少。

deborphan: 清除不用的库包

平时软件装装删删,总觉得会像磁盘那样有“碎片”,那就是没有用到的包。
而包又分两种,软件和库。软件比较好办,一般能很快发现,但是库就不一样了,一本很难发现。

有了deorphan就好办了,它可以搜到那些库包,用orphaner(一个deborphan的wrapper)还可以方便的删掉。




2008-04-05

blogspot再次解封

不知道是否是为了迎奥运。但是这次一解封让这个blog访问量翻了4番。让我很是吃惊:原来以前有那么多人想上而上不了。

不过依然推荐用Google Reader订我的RSS,不用担心被封的问题,也便于查找文章。

请用这个地址订阅:http://feeds.feedburner.com/coolwanglu

setterm: 控制台抓图

确切的说不是抓图,而是把缓冲区里的文字抓出来。但是仍是很使用的小程序。

一个例子 setterm -dump 1 会把1号终端的文字存成screen.dump

我也就会这么一个用法,具体还要man一下

2008-04-04

Windows is unable to find a system volume that meets it's criteria for installation

最近装Vista时,选择安装分区时总说这个错误。

网上查了一下,有很多说法,但是都跟我的情况不一样。

最后发现是要安装的分区没有boot标记,我的boot标记放在一个放grub的分区上了。

唉,windows。。。

2008-04-01

bash和sh脚本中关于测试表达式的区别

有两种
[ a = b]
[[ a == b ]]

sh 只认第一种
bash 两种都认

有个脚本我一直没改好,原因是以为是bash脚本(或者说以为sh就是bash),然后就按第二种写了,但是总是没用。 后来发现原来那个是sh脚本,而且man了一下发现sh和bash原来不是一回事。终于搞定了。

2008-03-30

mencoder使用范例

xvid
#!/bin/bash
#hdtv
#PARAM
="chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:bitrate=8000"
#MP3PARAM
="vbr=1"
#dvd
#PARAM
="chroma_opt:vhq=2:bvhq=1:quant_type=mpeg:bitrate=3000"
#MP3PARAM
="vbr=3"
#vcd
#PARAM
="turbo:vhq=0:bitrate=768"
#MP3PARAM
="vbr=5"
#normal
PARAM
="turbo:vhq=0:bitrate=384"
MP3PARAM
="cbr:br=64"

for movie in *.rm *.rmvb
do
echo
"conv $movie to xvid"
rm
-f divx2pass.log
mencoder
"$movie" -oac mp3lame -lameopts $MP3PARAM -ovc xvid -xvidencopts pass=1:$PARAM -o /dev/null
mencoder
"$movie" -oac mp3lame -lameopts $MP3PARAM -ovc xvid -xvidencopts pass=2:$PARAM -o "$movie.avi"
done
divx
#!/bin/bash
#hdtv
#PARAM
="vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2"
#MP3PARAM
="vbr=1"
#dvd
#PARAM
="vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo"
#MP3PARAM
="vbr=3"
#vcd
#PARAM
="vcodec=mpeg4:mbd=2:turbo:vbitrate=768"
#MP3PARAM
="vbr=5"
#normal
PARAM
="vcodec=mpeg4:mbd=2:turbo:vbitrate=384"
MP3PARAM
="cbr:br=64"

for movie in *.rm *.rmvb
do
echo
"conv $movie to divx"
rm
-f divx2pass.log
mencoder
"$movie" -oac mp3lame -lameopts $MP3PARAM -ovc lavc -lavcopts vpass=1:$PARAM -o /dev/null
mencoder
"$movie" -oac mp3lame -lameopts $MP3PARAM -ovc lavc -lavcopts vpass=2:$PARAM -o "$movie.avi"
done

psp
mencoder -oac lavc -ovc lavc -of lavf -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=aac \
-af lavcresample=24000 -vf harddup -lavfopts format=psp:i_certify_that_my_video_stream_does_not_use_b_frames \
-ofps 30000/1001 input.video -o output.psp

带字幕
for movie in *.avi
do
for sub in *.srt
do mencoder -font /home/fenggu/Downloads/Ubuntu_Soft/Fonts/FZSTK.TTF -sub "$sub" -unicode -subcp GB18030 -unicode -subcp GB18030 -oac copy -vf scale=320:-3,harddup -ofps 20 -ovc xvid -xvidencopts bitrate=220 "$movie" -o "$movie.avi"
done
done

2008-03-25

bugzilla配置补遗

经过了两个多小时,终于配好了,主要是按着之前转的那篇文章配的,但是还有些细节。

1.关于数据库的配置,其实我对SQL基本一无所知,但是末尾要加分号我还是知道的。原文里就没加
2.bugzilla的目录权限一定要设对,一般服务器是用特殊组运行的,而用root解压bugzilla时other没有权限,所以记得要加上,我在这里费了不少功夫。 另外就是注意对隐藏文件也要设好,尤其是.htaccess这个文件

ubuntu 下 squid 代理服务器的配置

最近需要配一个http服务器,查到了http://www.5xue.com/modules/bbs/viewthread.php?tid=121130
但是有些地方没有说清,所以还是自己整理一下

1.从源里装squid,默认好像有bug,总crash,不管它。现在开始修改/etc/squid/squid.conf
2.crash的原因应该是visible_hostname没有设,然后squid自己又找不到域名。 于是随便加一行 visible_hostname
3.允许目标ip访问,加入acl proxy src ,这里proxy是我随便起的名字,这句话仅仅是加入规则,下一行才是真正允许
4.允许http访问,加入http_access allow proxy
5.想改端口的话,把http_port 这一句改了
6.重启squid

然后OK!真的挺好用

[转] centos 安装 bugzilla

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2007/12/21/linux-bugzilla-centos/


转载的话,请注明来自己www.php-oa.com

bugzilla是用的最多,很不错的bug跟踪系统,但他的安装难到了不少人.这边我写了一个简单安装指南.

安装配置Bugzilla 3

1.安装http,mysql等

yum install gd gd-devel httpd mysqld gcc g++ make

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
上面是加入第三方扩展源,有很多包别人编译好了,我们可以直接使用.

yum install perl-XML-Twig
yum install ImageMagick-perl
yum install mod_perl
yum install perl-HTML-Parser
yum install perl-Email-MIME-Attachment-Stripper
yum install perl-Chart
yum install perl-PatchReader

yum install perl-Net-LDAP

2.生成Bugzilla数据库用户并分配权限
mysql -uroot -p

mysql>create database bugs DEFAULT CHARACTER SET utf8

mysql>GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, LOCK TABLES, CREATE TEMPORARY TABLES, DROP, REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY 'passwd';

3.下载安装Bugzilla,下载安装Perl模块

首先检查相应的perl模块是否已经安装完毕:
./checksetup.pl --check-modules

会出现如下的内容

安装必需的perl包:
/usr/bin/perl -MCPAN -e 'install Email::Send'
/usr/bin/perl -MCPAN -e 'install Template'
/usr/bin/perl -MCPAN -e 'install Email::MIME::Modifier'

安装可选的perl包:
/usr/bin/perl -MCPAN -e 'install GD::Graph'
/usr/bin/perl -MCPAN -e 'install Template::Plugin::GD::Image'
/usr/bin/perl -MCPAN -e 'install Email::Reply'
/usr/bin/perl -MCPAN -e 'install Email::MIME::Attachment::Stripper'
/usr/bin/perl -MCPAN -e 'install HTML::Scrubber'
/usr/bin/perl -MCPAN -e 'install XML::Twig'
/usr/bin/perl -MCPAN -e 'install Chart::Base'
/usr/bin/perl -MCPAN -e 'install Apache::DBI'

少了那个,就用命令安装就好了:命令就是 perl -MCPAN -e '包名'

都OK了的话.

修改localconfig文件,设置数据库访问方式
更改localconfig的以下设置:
$db_pass = '';

$db_pass = 'passwd';

再次运行CheckSetup.pl完成数据库初始化

4.在IIS管理器中为Bugzilla建立虚拟路径

最后,配置apache服务器,使Bugzilla 3以后可用。这一步只需添加以下文件即可:
/etc/httpd/conf.d/bugzilla.conf
文件/etc/httpd/conf.d/bugzilla.conf的内容如下:

#
# This configuration file is bugzilla.
#

Alias /bugzilla "/var/www/bugzilla"


AddHandler cgi-script .cgi
Options +Indexes +ExecCGI
DirectoryIndex index.cgi
AllowOverride Limit
Order allow,deny
Allow from all

添加安apache配置文件后,需要重启httpd,如果重启后不能生效,可能需要重启一下服务器主机:
service httpd restart

6. 配置,汉化Bugzilla

http://IP/bugzilla

如果能看到页面,则基本可以确定Bugzilla 3安装正常,可以正常使用了。如果需要定制Bugzilla 3,请以系统管理员登录Bugzilla 3,进行相应定制设置即可。
记的要用你设置的邮件地址做管理员的名字哦。我原来用安装时设置的名字一直不行,后来才发现.

Bugzilla的汉化其实很简单。
登录sourceforge,而bugzilla汉化项目bugzilla-cn在sourceforge上。
下载下来后,把 cn_UTF8.zip里的default目录放到template/en里,并更名为custom。

注:我不知为什么设置了管理员密码不生效,如果忘记了super user的密码。没有可反向解析的ip,意味着sendmail发的信到不了目的地。
这样注册的新用户就得不到注册时随机产生的密码。
要解决这个问题,可以把data/params里的mail_delivery_method改成testfile,这样就不会通过MTA来发信,而是把 信件内容保存在 data/mailer.testfile里。这样就的到了一个可用的普通用户。然后在mysql控制台里,把bugs数据库里的profiles表里的 这个用户的userid改成1,那么这个用户就变成了super user。

2008-03-24

软件推荐: Mozilla Prism

在LDCN上看到了,试了一下,果然不错

这个软件基本上是“只能打开一个url的浏览器”,可以创建许多应用,对我来说google doc和google reader比较实用

但是这个创意确实很有趣。

ssh连接速度慢的解决

最近用ssh连一台服务器,但是速度非常慢

网上查了一下,有些对的,也有些不对

经过实验,主要是用ssh -v看log,发现卡在了gssapi-with-mic的地方,于是修改/etc/ssh/ssh_config, 加入或修改 GSSAPIAuthentication no 问题解决

2008-03-12

软件推荐: auctex

之前就知道auctex很不错,但是一直对emacs的快捷键望而却步。

今天试了一下,发现非常不错。latexsuite里虽然也有局部编译的功能,但是由于vim没有内嵌图片的功能,所以有些鸡肋。但emacs就不同了,可以很方便的看到编译后的效果,尤其是在推导公式时十分有用,基本都快成了WYSIWYG了。

虽然emacs的快捷键还没记住几个,但是auctex的这个preview功能给我留下了很深的印象,以后还要多试一下。

2008-03-09

Virtual PC 2007 虚拟网络不能启动

参见:http://kbalertz.com/834310/network-adapter-computer-loses-connectivity-start-virtual-machine-Virtual.aspx

症状是,启动Virtual PC后显示
Virtual PC could not open its emulated Ethernet switch driver. Virtual switch networking will be disabled. To fix this problem, re-enable the Virtual PC Emulated Ethernet Switch service or reinstall Virtual PC.

而且似乎开虚拟机一段时间后还会影响到宿主机的网络连接

原因为
Virtual Machine Network Services没有安装好

解决方法:
1.打开网络连接,找到本地连接,右键->属性。
2.如果此时“此连接使用下列项目”中有Virtual Machine Services,则把它删除,否则转下一步
3.安装->服务->添加->从磁盘安装->选择\Utility\VMNetSrv

之后应该就可以了
另外进行上述操作时最好关掉跟网络连接有关的程序。

利用Virtual PC和WinDBG调试Windows内核

参见:http://www.xker.com/edu/tools/041/067807320651976.html

在VirtualPC中设置COM1为named pipe: 名字为\\.\pipe\com_1

在虚拟机中的Windows(我这里是XP)加入内核参数/debug, /debugport=COM1: /baudrate=115200

在WinDBG里打开内核调试,选COM1, 然后Baud Rate设115200, Port设\\.\pipe\com_1,并钩上pipe

经过这样设置以后,先运行windbg,再启动虚拟机里的Windows即可

2008-03-08

安装AppLoc后Installer及安装程序出现乱码的解决

这是个古老的bug,
装了AppLoc并运行后,会生成C:\WINDOWS\AppPatch\AppLoc.tmp这个文件,导致以后Installer会出现乱码,而且有时开始菜单里的项目也会出问题

解决办法是删掉这个文件,或者弄一个0字节的只读文件(推荐后者)

2008-03-04

[转]关于一些Linux SVN的安装使用

SVN简介

The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.

SVN是一个版本控制软件,类似CVS,但是SVN的的有点是开源的,而且SVN的版本控制能力给CVS还要强多。

SVN可以用于项目管理,还可以用于版本同步,功能可是十分强呢:)

下载:[url=http://subversion.tigris.org/][color=#22229c]http://subversion.tigris.org[/color][/url]

当前日期稳定版SVN1.32http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz

安装:

解压:#: tar zxvf subversion-1.3.2.tar.gz

依次输入./configure , make , make install 进行编译安装完成。

开启SVN服务:svnserve -d

检测服务是否开启:netstat -ntlp如果看到3690的端口正常开放了,证明SVN启动了。

正式使用:
首先我们得建立一个SVN的项目,一般人都认为建立项目就只需要一个文件,在我第一次使用SVN之前都有这样的看法,SVN建立项目需要建立文件夹

建立项目命令:svnadmin create project_name project_name 为你的project名字,可以任意取。
建立完毕后,project_name是一个文件夹,进入文件夹,可以看到一个conf的文件夹。进入文件夹可以看到2个文件(如果没有passwd文 件,可以用vi创建),编辑 svnserve.conf 把anon-access = read ,auth_access = write
还有password-db = passwd 的注释去掉,还有[general]的注释也要去掉。
vi passwd文件,如果是新文件,则输入:
[user]
your_name = your_password
这里设置的your_name是你的用户名,your_password是你的密码,这个是访问SVN必要的通行证。


好了,现在终于把准备功夫做完了,下面可以正是使用了。
首先找到你的项目源代码文件夹,使用下面命令:
cd your project
in your project dircetory
use:svn co /home/project_name --username = your_name --password=your_password

好了,现在你可以在客户机上使用以下命令获得你想要的项目源代码文件
svn co svn://home/project_name --username=your_name --password = your_password

把增加的svn文件添加入svn库:
svn add /home/your_project/*.* --username=your_name --password = your_password

提交文件:
svn commit /home/your_project/*.* --username=your_name --password=your_password

更新文件:svn update /home/your_project/*.* --username=your_name --password=your_password

当然你可以编辑一个脚本文件来一次完成所有的操作:
vi svnupdate.sh

#!/bin/sh
svn add /home/your_project/*.* --username=your_name --password = your_password
svn commit /home/your_project/*.* --username=your_name --password=your_password
svn update /home/your_project/*.* --username=your_name --password=your_password

chmod +x svnupdate.sh

Finish

2008-03-02

GameConqueror: Linux 下的游戏修改器

自己和同学合写的小软件,在linuxtoy.org上发了个广告,这里也发一个吧:

http://linuxtoy.org/archives/gameconqueror.html

在 Linux 下常玩游戏,但是没有像金山游侠那样的修改器,于是跟同学合写了一个:GameConqueror。目前,GameConqueror 只有命令行控制,不过 Linux 一般可以方便地切到纯终端,所以不一定非要金山游侠那样弄个 directx 线程插入。

感兴趣的朋友不妨试试。GameConqueror 目前刚刚起步,功能不够完善,望大家多提宝贵意见。

当前,GameConqueror 的最新版本为 1.1,你可以从 SourceForge.net 网站获取其源代码

frets on fire不能运行

Ubuntu 7.10 按源里装了个Frets on Fire, 但是不能运行,错误为pygame.error: Couldn't find matching GLX visual

解决办法为修改xorg.conf,把默认色深改成24(以前是16),重启X即可

2008-02-27

[转]常用开源协议的详细解析

作者:Charles Huang 来源:javaeye.com 发表时间:2006-04-10

开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的。开源运动同样有自己的游戏规则和道德准则。不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿。

现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种。我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。

这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考。

BSD开源协议

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但“为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence 2.0

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

1. 需要给代码的用户一份Apache Licence

2. 如果你修改了代码,需要再被修改的文件中说明。

3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL

我们很熟悉的Linux就是采用了GPLGPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linuxlinux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用GPL 协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL

LGPLGPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。 LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

P.S. 随手写写,是因为跟客户交谈的时候发现很多人其实对开源有完全错误的理解,特别是开源协议。很多人认为只要是开源,就意味着随便用,随便改都可以。

dlee补充:

这些知识 Linux Fans 大多比较清楚,因为经常使用开源软件,每天下载源代码,编译、测试、安装是常事。这些问题在各个 Linux 论坛上也早已经是老生常谈,但是有些 Java Fans 以及大多数 M$ 平台的开发人员几乎一无所知。我在这里一般不会谈跟 Java 关系不大的内容。既然 Charlesxp 想谈谈,我也补充一下。

首先,软件有两种分类方法:

商业软件 vs. 免费软件

商业软件:软件是要卖钱的。

免费软件:软件不卖钱,出于兴趣开发,可以随便使用。

开源软件 vs. 私有软件

开源软件:软件的源代码是公开的,可以在遵守某种 license 的条件下加以修改。

私有软件:软件的源代码不公开,用户仅仅只能得到软件的二进制版本。

   从上面的两种区别我们可以看出,开源软件和商业软件不是对等或对立的关系,开源软件同样也可以卖钱。但是给了你源代码,你如果没有一定的功力也未必能看 懂。而且用户常常不具备相应的能力(没有从事过软件开发),仅仅想要使用软件的功能。既然这样,开源对于这类用户还有何意义呢?开源可以保护这类用户免于 陷入厂商设置的锁定陷阱。因为提供了全部源代码,只要用户能找到有能力维护这些代码的人或公司,他就可以持续发展这些代码的功能。这个人或公司不一定是最 初卖软件给他的那一家。用户不会在大部分功能用的好好的,某个关键功能无法使用的时候,买家告诉他,你希望获得的这个功能在我们的下一版本中有,但是你必 须支付我们 10w$ 升级费我们才可以提供。这个就叫做厂商锁定。如果软件不是开源的,用户没有办法做出选择,上了贼船后想下来可就难了。所以开源的商业软件对于保护用户自己的利益是非常重要的。用户可以获得真正的安全,而且更体现了软件的本质就是一种高级的服务。

  那么有人会担心,这样做究竟能不能赚到钱?你能不能赚到钱要看市场和需求有多大。只盯着厂商锁定一种方式来赚钱其实是一种短视的行为。现在国内大部分软件开发商都不重视维护和服务,仅仅靠卖软件本身的 copy license 来赚钱,用户感觉不到自己是上帝,怨声载道。其实用户所需要的还是长期的维护和服务。所以这样的软件如果真能把服务做好,用户是会非常欢迎的。既然经过分析预计会有很大的需求,从长期看,我相信肯定是可以赚到钱的。

  还有一类软件:共享软件。这类软件不是开源的,但是有免费的版本可以使用。如果你用的很爽,良心发现了,可以把钱汇给作者。如果希望作者提供服务,也可以找他谈。国内很有名的 FoxMail 就是这类软件。但是对于用户最有价值的一类软件,其实还是开源的商业软件。

  开源软件卖的是长期的服务,不是软件本身的 copy。不是所有的软件都有可能卖服务,也不是所有的用户都需要服务(这个问题我们以后可以讨论)。但是一个大型企业或者重要的政府机关,假设使用了 JBoss+MySQL 这种组合,长期的服务是非常必要的(至少出了事情可以找到一个替罪羊)。你问这个问题就说明你没有多少企业应用的经验,不知道 IBM 这些公司的商业模式就是建立在 IT 服务的基础之上的。开源软件提供了一个新的组合,对于更好地做好这种服务非常有帮助。实际上,IBM 的解决方案中就包括了大量开源的成果。HP 做的方案也有采用 JBoss 的,为了得到长期的服务,HP JBoss 专门签订了长期合作的协议。

中 国国内由于市场容量的限制,以及用户缺乏信息化的经验,对于软件长期服务的重要性认识不足,因此总是只看到软件本身的售价,给了一些夫妻店竞相压价钻空子 的机会。但是必须承认,这并不是一种良性竞争的状态。最终还是要走到切实为用户做好服务的道路上来的。服务是值钱的,不是免费的。你去路边的理发馆随便理 个发,5 块钱,出来以后仍然蓬头垢面。你去高级发廊做头,500 块,但是你得到了按摩等各种服务(不要联想引申),身心得到了放松,出来以后精神焕发。你只盯着路边的理发馆,但是仍然有别人愿意去高级的发廊。

  当然,真正要做好服务,对于技术等各方面的能力要求是非常高的。这种要求不是随便哪个夫妻店就能够达到的。

robbin补充:

  Richard StallmanGNU创始人和GPL的创造者,Stallman开发的比较著名的GPL软件包括GNU GCCGNU Emacs。其中EmacsStallman独立开发的早期也是卖钱的。Stallman定的Emacs售价为每份150美元。

  因此请记住: 开源软件不等于免费软件。

2008-02-25

Nautilus 总使用旧样式打开的解决办法

参考:http://gnome-hacks.org/hacks.html?id=60

同学的gentoo装了gnome,但是用nautilus浏览文件时总是旧样式,没有sidebar,也没有toolbar。

根据链接里的内容用nautilus --browser后可以用新样式了

而若想每次都这样则修改gconf,把/apps/nautilus/preferences/always_use_browser设为true

2008-02-24

再次遭遇reiserfs文件系统错误

为了重现上次文件系统的问题,也为了找到上次出问题的原因,我又一次捣鼓了休眠的功能。

这次是用菜单休眠的,按理说应该没什么问题,但是由于重启是用我自己编译的内核启动的,而且参数似乎没设对,因此没能自动唤醒,而是正常启动。中间似乎有个关于swap的服务,显示fail,不过当时我没注意。另外值得注意的是,这次启动过程中fsck.reiserfs有些replay的动作。

后来进行了很多操作,按了一些软件包,其中还创建的新的用户和组。没任何异常。但是重启时,我又想起来了那个resume参数,加上以后,也没什么异常,直接关机了。

但是再次重启后,问题重现了。首先是一堆reiserfs的错误,应该是上次开机后进行了大量文件操作的缘故。之后自然shell也进不去了。

***

这一次,问题的原因很明显了,应该就是休眠时文件系统没有同步,然后正常启动后把那些操作都replay了,之后进行的新的操作,然后我又恢复了休眠时的状态,这样造成了文件系统的错乱。

本想着用上次的办法骗来一个shell,但是这次告诉我PAM failure之类的错误,我心想坏了,估计/etc/passwd之类的文件挂了,因为上次开机后中间新建了用户和组。

***

有了上次的经验,我估计不用安装盘没戏了,花了一天下了个Ubuntu 7.10 alternate的CD,然后从ubuntu网站xxx上下了硬盘安装所需要的hd-media文件,vmlinuz和initrd.gz.准备用它恢复。

由于我本身有grub,而且能够正常运行,因此不需要下而外的grub4dos,我把vmlinuz, initrd.gz和CD映像放在移动硬盘里,开机前插上。启动进入grub后,进入shell,输入

kernel (hd1,0)/vmlinuz root=/dev/ram0 ramdisk_size=170000 devfs=mount,dall
initrd (hd1,0)/initrd.gz
boot

于是从移动硬盘启动了,看到选择语言界面后,按Alt+F2换个控制台,按回车就出来个busybox。


不过遗憾的是它虽然支持reiserfs,但是没有reiserfsck,几分钟后我想到了可以把那块磁盘只读挂载,这样也许就不用检查了,果然如此。

之后就可以用那个盘上的reiserfsck来修复了,这次不需要中间super block(应该是上次已经重建过的缘故),只需要--rebuild-tree 和 --check就可以了。另外我用了chroot,但是似乎不用也可以运行reiserfsck。

这次也没花很长时间,但是报的错误比上次多很多,而且有很多关键的文件。我心里一时没了底,但是心里明白,都是安装软件惹得祸,特别是还创建了用户和组,弄不好就。。。

***

本以为一些就像上次一样顺利,但是重启后虽然没有reiserfs的错误,却出来一堆modprobe的错误,之后shell也进不去,仍然是PAM failure。

我再次用hd-media启动,挂载磁盘一看,/lib/modules/ 竟然都没了!不过是意料之外,情理之中。另外我查看了一下/etc/passwd,/etc/group,/etc/shadow等文件,都是莫名其妙的xml文件(后来知道是/etc里的另一个文件,应该是指针交叉了),幸好还有/etcpasswd-,/etc/group-,/etc/shadow-,于是简单恢复了一下,以为没事了。

用另一个内核启动后,虽然没有modprobe的问题,但是仍然有PAM failure,我估计文件系统乱得够呛了,决定重装。

***

首先要备份的当然是~,之后是/usr/local,还有一些/etc/下的配置文件(我后来挑拣出来一些我修改过的备份出来)

另一个要备份的就是已安装的软件,我查到可以用dpkg --get-selections得到列表,于是用hd-media启动,然后chroot,但是运行时告我/var/lib/dpkg/status错误,我一看,压根儿没这个文件,一下没招儿了,肯定是当时装软件时弄的。不过又一想,重装是对的,系统估计也很难恢复了,而且我正好也想重分一下区,换换文件系统。

最后一个备份的就是/var/cache/apt/archieves,这是apt存档留下的deb文件,虽然不全,但是可能能省点带宽,所以也备份了。

***

重装前我还想调整一下分区,有个不常用的FAT分区,我想腾出点空间给linux,于是下了个Partition Magic,另外要注意的调整后是否还能启动,因为现在硬盘上有grub,是在Linux分区上,因此用PM只是把那个FAT分区分割,而没有跟Linux分区合并,否则就不能启动了。

***

参考了wiki.ubuntu.org上关于硬盘安装ubuntu的文章,知道可以把iso放FAT硬盘上,hd-media可以自动识别(伟大!),于是为了快一些就把移动硬盘上的iso挪到了一个FAT硬盘上,重启。

重装时对分区动了些脑筋,有31G的空间,最后的结果如下

12G XFS linux系统
15G XFS /home
1.5G swap
0.5G reiserfs /boot
2G reiserfs 一个最小系统,以及hd-media和ubuntu映像,用于紧急情况

其他就没什么了,等着便是

***

不一会儿装好了,剩下就是把那些文件拷回去,再补上却的软件了。不过考虑到我家网费,还是决定回学校再装软件,所以现在只是把文件拷回去了。但是现在软件,库之类的版本不一,仍然不大敢用,就等着更新软件了。

***

尾声&总结

1.找到了上次问题的原因,以后要慎用休眠,以及自己编译的内核,毕竟ubuntu的内核多了很多东西,或者挂个initrd是否会好些?另外就是正常启动时要让休眠镜像失效
2.分区分区!
3.备份备份!
4.查了查资料,这次换成了XFS,不知会如何
5.ubuntu重装,总的来说,还是很容易的,最好是联着网装,这样直接装最新的,省去了不少时间
6.不要太相信文件系统如何如何安全,我倒不是针对reiserfs,其实它确实挺好的

2008-02-23

gnome下美化qt程序外观

参见http://linuxtoy.org/archives/change-qt-applications-look-and-feel-under-gnome.html

Ubuntu默认情况下qt程序外观不咋好看

安装qtconfig-qt3或qtconfig-qt4(依照实际版本),以及polymer

运行qtconfig,修改GUI style为polymer

这样qt程序的外观会比默认好很多

2008-02-20

Windows XP 强制取消更新

症状:大概是由于某次更新安装失败,每次关机时都提示安装更新,而且数目都一样。平时右下角也没有黄色盾牌的图标。

解决办法:
1.杀wuauclt进程
2.关Automatic Updates服务
3.把c:\WINDOWS\SoftwareDistribution\DataStore改名
3.运行wuauclt /detectnow以恢复更新功能(Automatic Updates服务也会自动开启)

其中第3步应注意备份。
另外对此解法我也不是很肯定,但是在第3步中在c:\windows\SoftwareDistribution里捣鼓一番是肯定没错。

2008-02-19

workrave: 合理控制使用电脑时间

有点像之前说过的eyeguard,只是这个是跨平台的,比较不错。

一点小遗憾是windows下,gtk会自动选择语言,我这里中文显示不正确。于是乎把workrave的中文locale目录删了,呵呵,之后就是英文界面了。不错。

2008-02-17

遭遇reiserfs文件系统错误

第3天,我的ubuntu终于回来了。

在讲故事之前,先交代一下我的系统:

我的电脑双系统,windows xp和ubuntu 7.10
硬盘分了5个区,一个ntfs放windows,两个fat32放windows程序和双系统公共数据,一个reiserfs放ubuntu,最后一个swap
ubuntu有两个内核可以启动,一个是自己编译的2.6.24.2 另一个是ubuntu自己的2.6.22-14-generic

***

事情还要从编译内核说起,那天编译内核是发现有个hibernate的支持,说明里是说可以用echo 'disk' > /sys/power/state来休眠,于是编译好内核并用它启动后便试了试这个功能。

运行这个命令后系统很快就掉电了,没什么异样。

重启后和没休眠没什么两样,这让我有些疑惑,后来想起好像需要在启动是加上resume=<休眠swap分区>的参数,于是修改了/boot/grub/menu.lst,再用那个命令休眠。

但是,谁能想到,从那时起,到我那linux再次正常启动,竟花了3天时间

当时已是深夜,母亲催我入睡。 料我昏昏欲睡之时也不大可能搞好--不把电脑弄的更糟那就是万幸--睡吧,明天再说。

***

第二天白天都串亲戚去了,晚上才开始动手。

再次启动时,突然发现grub选择操作系统的菜单消失了,迎接我的只有一堆提示信息和一个grub>的shell提示符,愣了几秒后我反过神来,凭印象输入引导命令,但是总报错,按help得到了命令列表,其中有个cat,于是cat /boot/grub/menu.lst,但是提示inconsistnet filesystem,于是我大概明白了发生了什么--似乎时休眠时文件系统没有同步好。

按tab命令不全时发现了原来还有/boot/grub/menu.lst~这个自动备份,于是cat看看,记下了命令,先进linux看看吧:

root (hd0,5)
kernel /boot/vmlinux-2.6.24.2 root=/dev/sda6 ro
boot

但是不一会fsck报出一堆错误,还说必须用--rebuild-tree修复,都说reiserfs很稳定,我一直也这么觉得,遇上这么严重的问题,我还是大姑娘上花轿--头一回。

这次仍用上面的命令,只是加上了 resume=/dev/sda7,神奇的是竟然成功唤醒了休眠时的状态。由于grub的问题,我查看了/boot/grub/menu.lst,权限各栏都是问号,用root也不能进行操作(编辑,删除)。我当时只是觉得文件系统出了问题,也没多想,就关机了。后来想想,可能这时候多拷贝出些文件,或者再次休眠才是好注意。

以后启动就一直是失败,resume参数也不灵了。 我意识到问题严重了,开始想办法修复

***

首先想到的当然是用fsck修复,但是既然硬盘不行了,就只能用U盘启动了,我以前只做过dos启动盘,linux启动盘还是没有接触过。只好上网查查了,首先要进去windows,在grub shell里输入

root (hd0,0)
chainloader +1
boot

还好还好,windows完好无损。

几经查找,几番折腾(重启了若干次),我用syslinux和ttylinux做好了一个启动盘,成功进入的一个linux2.6.14,似乎成功在望了,而其实,还差的远。

不知是不是为了省空间,ttylinux不支持reiserfs,mount不认识,fsck.reiserfs也没有。唉,毕竟是个不到6M的系统,人家也不容易。

后来下了个50M的Damn Small Linux,我那32M的U盘已经放不下了,于是用老爸的移动硬盘(杀鸡时如果只有牛刀可以用,也得用啊)又搞了一下,启动后到不错,还有个简易的图形界面,而且竟然还有游戏--虽然linux只是2.4,虽然仍然不认reiserfs。 唉,又白搭。

这时想到了ubuntu的iso(手边没有盘,要是有盘我早弄好了。。。),开始下,但是可怜我们家的网速,要一个半小时才能下完。想到我家这月上网时间所剩不多,放弃了。

现在的问题是没有fsck.reiserfs,也就是reiserfsck,而我现在只有linux分区上才有这个文件。这就是个鸡生蛋蛋生鸡的问题。 突然想到何不从别的地方搞一个?网上搜了半天没有结果,于是让同学给传了一个。 欣喜地(用u盘)重启后发现还要个libuuid库,这哪有? 不想再找同学传了(谁知道还有几个依赖的库?当然。。。也许就这一个),而且又到了深夜,不弄了。

***

第三天,一起床就开始搞。

想了很多办法,试图用U盘上的内核挂上硬盘上linux分区,都失败了。

这时不知怎的有想起linux的recovery模式了,就是加上个single的内核参数。启动后虽说fsck也失败了,但是还是要管理员密码,看来有点门儿!

不过,输入了密码后没有见到root shell,却被告知sulogin terminated,也不知怎么回事。

一定要搞个shell来,我这样想着,想着,突然心生一计,记得以前刚学会sysrq魔术键时在启动时乱按,弄出个busybox的shell来,似乎还是initrd阶段的(后来知道应该是init被中断自动重启),何不试试看呢。

仍用single模式重启,我试着按alt+sysrq+k,但是只是看到进程被杀,就卡在那里了,没有反应,多次重启并在不同地方尝试,仍未成功,直到再次看到give root password for maintainance or type Control-D to continue。我已经知道输了密码后会说sulogin被中止,而此时按alt+sysrq+k也类似。只好按control-d了,这是系统开始关机,依次结束各个服务和进程,之后系统就断电了。

再次重启,我再最后一个地方试alt+sysrq+k,也就是按control-d后的那个阶段,这一次,只见init terminated, repawn之类的提示,啊,终于看到login了,我用普通用户登陆,然后sudo bash,试了一下,/是只读挂载的,太好了!

按照http://www.chinaitpower.com/2005September/2005-09-13/200571.html上的方法,我开始修复:

方法如下

1,dmesg |grep reiserfs |grep partition
查看你的 reiserfs 文件系统是那个版本的(在后面要用到)

2.fsck.reiserfs --check /dev/partition
如果报错不能修复,转3,否则结束。

3.fsck.reiserfs --rebuild-sb /dev/partition
重建 super block

重建时会让你选择文件系统版本,根据刚才得到的版本号选择

4.fsck.reiserfs --rebuild-tree /dev/partition
尝试重建文件系统树

5.fsck.reiserfs --check /dev/partition

我实际操作时,第4步一开始说剩余时间8000多秒,2个多小时啊,吓我一跳(我那个分区用了18G),但是过了几分钟后剩余时间突然变成260秒。整个过程不到10分钟就结束了,而且感觉出问题的地方并不多。万幸万幸。

另外第3步时并没有问我版本号。另外我一开始没看到第5步,第4步成功后就高兴地重启了,但一般启动总报错,是ata模块报的,好像是某某状态错误。最后用single模式进入,中间有fsck的提示,进行了一些操作,大概做了些标记,之后sulogin仍然失败。但是感觉上文件系统已经没问题了,于是再次重启。

这一次,没有任何异样,一堆系统消息后,屏幕一闪,啊,终于看到了熟悉的登陆界面。啊!终于弄好了!

***

现在分析一下问题的起因,应该就是我休眠和恢复没有弄好,导致文件系统没有同步好。至于具体的原理,其实现在也还是不大清楚。只是现在不敢用那条命令进行休眠了。

另外就是再休眠的那个会话里我还在一个FAT分区下了些文件,结果到windows发现那个地方也不正常了,后来全盘扫描了一遍才恢复。

***

总结
1.备份很重要,自动备份的/boot/grub/menu.lst~还是很有用的
2.分区很重要,我很后悔当时没有把/boot, /home等单独分一个区,现在想分也很麻烦
3.最好准备一个应急启动盘,而且至少要支持自己硬盘的文件系统
4.文件系统再稳定也没用,还是应该平时注意保护和保养
5.应该熟记grub命令和kernel参数,关键时刻还是挺有用的
6.那个syssq魔术键我自以为用得还是不错,至少骗来个shell,在最后时刻发挥了决定性的作用。我最好再看看其他魔术键的功能
7.不要轻易尝试危险的东西,如那个休眠的命令。有时,分辨一个东西是否危险的能力更加重要


就写这些了。可能系统还有些后遗症,但是已经无大碍了。能恢复成这样已经万幸了。

制作u盘linux启动盘

前几天电脑坏了,想弄个linux启动盘应急修复一下,最后虽然还是没派上用场,但是至少启动盘弄出来了,在此记录一下。

需要的工具有
syslinux, 可以从http://www.kernel.org/pub/linux/utils/boot/syslinux/下载一个可以启动的linux映像,为了弄在U盘上,我选择了不到6M的ttylinux

由于是linux坏了,以下操作我都是在windows中进行的

1.解压syslinux
2.插入U盘
3.把linux映像解压到u盘,注意是解压不是拷贝
4.运行syslinux -sfma
5.由于ttylinux的映像是isolinux映像,所以应该做一些修改,把U盘里isolinux目录改名为syslinux,再把里面的isolinux.cfg改名为syslinux.cfg

这样就ok了,其中第5步我花了好久才悟出来
另外syslinux压缩包里也有linux版本

2008-02-10

firefox 拼写检查导致崩溃

最近更新了一下,然后firefox就不正常了,gmail里写不了邮件。
看控制台消息,报 /usr/lib/firefox/firefox-bin: symbol lookup error: /usr/lib/firefox/components/libmyspell.so: undefined symbol: _ZN8Hunspell5spellEPKc

之后在https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/107340找到了问题原因,是拼写检查模块libhunspell的问题,解决办法为禁掉firefox的拼写检查(about:config然后设置layout.spellcheckDefault=0),或者把libhunspell降级(我这是1.1.5,据说1.1.4就没问题)

2008-02-07

Motorola手机输入法

我现在用的是Moto的一款不算很新的机型,A768i

在使用过程中我发现它的输入法联想十分体贴,之一是可以根据通讯录的姓名进行联想,这样输入人名快速准确,之二是可以发短信时可以根据历史短信内容进行联想,这样发类似消息时就轻松了很多。

真是十分不错的功能,巧妙而独特,至少我没在其他手机上发现这些功能。

在此称赞一下,期待更多惊喜。

2008-01-18

软件推荐: mpd 音乐播放器

平时我只是播放单个文件或者url,所以喜欢用beep media player这样简单小巧的播放器。

今天突然想把自己屯的音乐放一起听, 因此需要一个能管理一个媒体库的播放器。 以前我挺喜欢rhythmbox和amarok的,不过突然发现我都给卸载了。正好前几天听说了个mpd,好多人说不错,我也想试试。

其实只是知道它是个c/s模式的播放器,挺新鲜的,但是对“好用”却不以为然。 但是用了5分钟后就发现其有趣的地方了。

首先是没有界面,我用的是命令行控制的,设好后客户端就可以关了,而服务器在后台,所以桌面上没有任何界面或图标。 这样才真正有背景音乐的感觉,因为“不知道从哪里来的声音”。 另外心理上也觉得省了图形界面的资源消耗。

然后就是日常控制很方便,用mpc的话10个字符左右就能完成日常操作。

当然也有不方便的地方,首先是配置有点麻烦,但是配置好后以后以后一般就不用动了。 再有就是有些控制不方便,比如涉及到文件名的一些操作。

但是总而言之,这个播放器很适合我,一方面我比较喜欢命令行,喜欢没有界面。 另一方面我没有特别的功能要求,把我的音乐列表播放了就行了。

安装的话当然要装个mpd,另外还需要个client,我装的是mpc,也有图形化的sonata, gmpc等。

需要注意的是我这里ubuntu7.10源里装的mpd,默认是带参数运行的,这样它只认/etc/mpd.conf, 而不像manpage里说的还查看home里的配置文件。

2008-01-15

zsnes 不能运行的解决方法

ubuntu 7.10 在源里装的zsnes, 运行后出现
can't create mcop directory
就退出了

网上查了一下,解决方法是运行
zsnes -ad alsa或zsnes -ad oss

而且如果好了以后也不用参数了。

2008-01-14

OpenOffice 彩蛋两只

参考:http://dormforce.net/Blog/electronixtar/archive/2006/11/28/11811.aspx

OpenOffice Writer 里输入 StarWriterTeam 按F3

OpenOffice Calc 的一个空单元格里输入 =GAME("StarWars")

挺有意思的

ubuntu 7.10 安装 kde 4

参考: http://www.ubuntugeek.com/howto-install-kde-40-stable-in-ubuntu-gutsy.html

加入源:
deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy main

更新
sudo aptitude update

删除旧包
sudo aptitude remove kdelibs5 kde4base-data kde4libs-data

安装
sudo aptitude install kde4-core

2008-01-13

Linux RST.B-1 病毒查杀

话说上次那次的病毒突然又复活了,今天我用电脑不久发现/bin的几个文件又被感染了,这次留了个心眼,重启之前用clamav看了下病毒名,叫做RST.B-1

之后在http://www.symantec.com/security_response/writeup.jsp?docid=2004-052312-2729-99&tabid=2
处看到了相关资料,这个病毒会感染/bin和当前目录下的可执行文件。上次我只恢复了/bin的文件,所以应该是没清干净。

于是用live cd引导,覆盖/bin的文件,然后chroot再用clamav全盘扫描,果然发现了另外几个感染的文件,删除之(我有备份),重启后正常。

2008-01-12

ssh服务器禁止root登录

修改/etc/ssh/sshd_config
添加或修改 PermitRootLogin no

也可以参考AllowUsers, DenyUsers, AllowGroups, DenyGroups等选项

遭遇黑客软件

昨晚突然发现电脑变慢,ps一看有好多以www用户名的进程,我可没有这个用户啊,再看那些进程,一堆scan和一个httpd等,真是可疑。

然后去/proc/查看,那些文件的可执行文件都位于/tmp/.a,里面除了这个scanner和httpd外,还有bruteforce和一个弱密码字典,以及一些扫描的log。 哇,中招了!

于是赶紧杀进程,然后想删掉这些文件,却总是报Segmentation fault, 之后又试了几个命令,也是报这个错,我看了一下/bin, 啊,原来很多命令的文件都被修改了。 于是重启,发现启动过程中都是Segmentation fault, 一下子懵住了。 当时太困了,不知所措,只好关掉等今天解决。

实在是不想重装,于是试图恢复,首先用live cd启动,把/bin的那些文件拷过去一份,然后搜了下/sbin,/usr/bin等重要文件夹,没有被改动的样子(这里/bin,/sbin,/usr/bin都是硬盘上的而不是live cd上的), 之后,用chroot和aptitude重装了一下coreutils,为了保险,把一些*utils都重装了一下。

然后重启,似乎是正常了,松了一口气。但是还是要观望一段时间,看有没有什么遗留的。

现在想一下,根据那个文件夹里的log和字典文件推断,那个scanner是破解ssh里高权限用户的密码,然后一看我这里的root密码,天啊,原来是个弱密码,我才想起来当时装MySQL时图省事弄的,结果现在忘了。。真是敲响了警钟。

另外上网搜了一下相关资料,除了看到一个人跟我有类似情况外,没有别的有用的信息,看来这个东西还是挺新的。

现在赶紧把ssh的root登录关掉。

总之是第一次有这种经历,万幸阿,那个程序没给我rm -rf /, 我作业还没写完呢。。