Showing posts with label Ubuntu. Show all posts
Showing posts with label Ubuntu. Show all posts

Thursday, January 14, 2010

在Ubuntu中配置可供Windows主机共享上网的VPN服务器

VPN (Virtual Private Network, 虚拟专用网) 是一种在现有网络基础上建立的虚拟网络, 主要用于帮助两个网络通过VPN隧道 (tunnel) 进行通信. VPN的好处在于网络A中的电脑A1通过隧道与网络B中的电脑连接上后, A1将能够使用网络B的网络环境. VPN分为加密与不加密两种, 通常我们使用的都是加密VPN. 加密VPN常用的协议有SSL、PPTP等, 其中PPTP是Windows系统内置的协议, 因此如果想要搭建一个支持Windows电脑接入的VPN服务器, 最好是使用PPTP服务器软件. 当前VPN的主要用途有在异地接入一个内部网络, 以及翻越功夫网.

注意: VPN服务器必须是具有外网IP的电脑, 如果IP地址属于10.0.0.0~10.255.255.255, 172.16.0.0~172.31.255.255, 192.168.0.0~192.168.255.255这三个IP地址段, 则不具备搭建VPN服务器的条件.

Poptop是一款Linux下的PPTP服务器软件, 今天我们就主要借助它来完成一个VPN服务器的配置. Ubuntu系统使用如下命令安装Poptop:
$ sudo apt-get install pptpd
如果你的Linux的内核版本低于2.6.15, 那么需要先检查一下是否支持MPPE:
$ sudo modprobe ppp-compress-18 && echo "success"
若是没有输出"success"则证明内核不支持, 可以跟随这里的步骤进行内核的配置.

Poptop安装完毕之后需要简单配置一下, 打开"/etc/pptpd.conf"文件, 添加下面两行, 或者这个文件已经有了一些示例, 只需要去掉注释符号.
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
"localip"表示VPN隧道中服务器 (server) 的IP地址, "remoteip"表示VPN隧道中客户端 (client) 可以分配的IP地址. 关于"pptdp.conf"文件的更多选项, 可以阅读它的man page.
然后设置用于登录的用户名和密码, 打开"/etc/ppp/chap-secrets"文件, 添加下面一行, 中括号部分代表需要配置的地方:
[username] pptpd [password] *
最后重启Poptop:
$ sudo /etc/init.d/pptpd restart
现在试试用其它电脑是否可以成功连上, 注意客户端填写的IP地址是VPN服务器的外网IP, 而不是刚才配置的"localip".

虽然可以成功建立VPN连接, 但通常情况下还不能通过VPN服务器连接到Internet. 原因有多种, 先来看看客户端通过VPN服务器与Internet上的服务器通信的全过程:
client <--> client ppp0 <--> VPN server ppp0 <--> VPN server <--> VPN server eth0 <--> Internet server eth0 <--> Internet server
"ppp0"其实是VPN虚拟的一个网络接口 (可以想象成这是一个虚拟的网卡), VPN隧道就是通过客户端与服务器的这两个网络接口建立的. 而"eth0"则代表服务器上真实存在的物理网卡, VPN服务器与外网通信就需要通过它. 具体流程是: 客户端通过"ppp0"向VPN服务器发出请求, VPN服务器侦测到之后, 再将请求通过"eth0"转发出去, 当请求到达目的地之后, Internet服务器就根据请求做出相应的回复, 这个回复再按照刚才来的路径返回到客户端, 这样客户端就成功与Internet服务器完成一次通信.

上面图示中的箭头部分 ("<-->") 就是可能造成无法连接Internet的关键, 因此需要针对每个部分一一排查. 这里只对可能性最大的两个地方进行介绍, 想要了解每一个关键点的检测方法的同学可以阅读"Diagnosing Forwarding on pptpd"这篇文章.

  1. 是否已经打开IP转发?

  2. 查看"/proc/sys/net/ipv4/ip_forward"文件中的值是否为"1", 如果不是, 则需要在"/etc/sysctl.conf"文件中添加"net.ipv4.ip_forward=1", 然后执行以下命令:
    $ sudo /etc/init.d/procps restart
    
  3. 是否在VPN服务器上设置了对于客户端IP地址的NAT?

  4. 执行下面的命令查看表中是否有相应的表项:
    $ sudo iptables --table nat -L POSTROUTING
    
    如果没有则执行以下命令:
    $ sudo iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
    

在完成上面两个检查之后, 应该就可以成功通过VPN服务器与Internet进行通信, 一个VPN服务器也基本配置完毕.

参考资料: Debian pptpd HOWTO, #13, Diagnosing Forwarding on pptpd.

Sunday, October 4, 2009

DEB打包指南 (仅针对解释型语言)

这几天一直在研究DEB打包的事情, 搞得有点头大, 这里总结下具体的过程. 我主要参考了PackagingGuide/Complete - Ubuntu Wiki, Debian New Maintainers' Guide这两篇文档, 另外由于我是打包的Python代码, 所以还参考了Ubuntu: Making a .deb package out of a python program, 下面的内容仅针对类似于Python这样的非编译型语言, 而C/C++之类的打包情况可能要复杂一点.

DEB打包的过程就是一个严格按照标准进行的过程. 每一步都有相应的标准, 所以一定要熟悉其中的规则.

  1. 建立一个新的文件夹, 文件夹的命名规则为: <packagename>-<version>, 然后把所有安装时需要的东西都拷进去, 比如: 源代码、图标、文档、版权信息、ChangeLog等. 最后把这个文件夹打包成.tar.gz格式的压缩包, 与该文件夹放在同一级目录下. 这里假设我建立的文件夹叫做alist-0.6.12, 压缩包叫alist-0.6.12.tar.gz, 后面都遵照这里的约定.

  2. 进入刚才新建的文件夹, 执行以下命令:
    ~/alist/alist-0.6.12$ dh_make -e your.maintainer@address -f ../alist-0.6.12.tar.gz -c gpl
    
    这里主要是对打包进行初始化, "-e"选项后跟的是维护这个DEB包的人的Email, "-f"则是指向了上一步建立的压缩包, "-c"指明你使用的证书. Ubuntu用户如果没有dh_make(8)命令, 请安装dh-make软件包.

    成功执行后将会在上一级目录中生成一个.orig.tar.gz结尾的文件, 比如这里是alist_0.6.12.orig.tar.gz, 这个压缩包里的内容和alist-0.6.12.tar.gz是一样的. 还会在当前目录下建立一个叫做"debian"的文件夹, 这里面包含的文件就是打包最关键的地方了.

    请一定注意, dh_make(8)只能执行一次, 如果你执行完一次之后发现有错误, 那就要重新回到第一步了, 切记不要重复执行dh_make(8), 否则可能发生无法预料的错误.

  3. 现在进入刚才自动建立的"debian"文件夹, 你应该会看到很多文件, 正如前面所说, 这是打包过程中最关键的一步.

    千万别被其中繁杂的文件吓着了, 其实很多都是用不上的, 根据你的实际需要, 保留一部分就行了. 最先需要筛选的就是那些以.ex和.EX结尾的文件, 这都是些示例 (example) 文件, 对于大部分人来说, 可以直接删除, 但是如果你需要用到man page、自启动脚本等其它的一些功能还是可以参考一下的. 我这里就是把这些文件都删除了.

    现在看起来是不是清爽多了? 接下来是"docs"和"README.Debian"这两个文件. "docs"主要用于告诉dh_installdocs(1)命令哪些文件需要放到/usr/share/doc/[packagename]下, 而"README.Debian"则说明了原始文件和打包后的文件有哪些差别, 如果你都不需要用到, 那这两个文件也可以直接删除.

    "copyright"文件很容易理解, 默认生成的文件中会有一些提示信息, 你照着填写就行了. 或者你可以选择不按照它的写法, 采用自己的版权信息文件.

    上面介绍的文件都是可有可无的, 剩下的则很重要了. 先来看看"changelog"文件, 下面是原始内容:
    alist (0.6.12-1) unstable; urgency=low
    
      * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
    
     -- xiaogaozi <gaochangjian@gmail.com>  Thu, 01 Oct 2009 22:35:45 +0800
    
    我们从第一行开始看起, 首先是软件包名, 这个没什么问题, 接着括号里的是版本号: 0.6.12-1, 最后为什么多了一个"1"呢? 这是用来和原始版本号区分的, "1"代表包维护者的修改次数, 比如源文件没有变化, 仅仅是打包的时候某些地方改变了, 那就修改最后这个数字. "unstable"这部分填写适用于安装的发行版的名字, 比如Ubuntu就是jaunty、intrepid、hardy之类的. 最后的"urgency"一般保持不变.

    中间这部分就是详细写上该版本有哪些改动了, 格式同普通的ChangeLog一样, 每行的开头为两个空格 + 一个星号 + 一个空格.

    "changelog"的最后一行为包维护者的名字、Email和修改日期. 这里需要注意的是修改日期的格式必须为RFC822标准所规定的, 也就是date -R输出的格式. 可这个日期的格式书写起来着实复杂, 所以这里推荐使用dch(1)命令来编辑"changelog"文件, 它不仅会自动修改日期, 还会自动帮你加上星号. Ubuntu用户可以安装devscripts软件包来得到dch(1), devscripts软件包还包含了其它很多有用的工具.

    接着是"control"文件. 下面是原始内容:
    Source: alist
    Section: unknown
    Priority: extra
    Maintainer: xiaogaozi <gaochangjian@gmail.com>
    Build-Depends: debhelper (>= 7)
    Standards-Version: 3.8.0
    Homepage: <insert the upstream URL, if relevant>
    
    Package: alist
    Architecture: any
    Depends: ${shlibs:Depends}, ${misc:Depends}
    Description: <insert up to 60 chars description>
     <insert long description, indented with spaces>
    
    这里面包含的内容就是我们平常所看到的DEB包的简介了. 每一项的具体解释请看这里, 这里简单介绍下. "Section"为软件包的类别, 普通的应用程序可以填写"utils". "Architecture"对于Python这种平台独立的解释型语言可以填写"all", 而编译型的则需要具体一点.

    "rules"文件就是一个Makefile, 安装的时候全靠这个了. 根据实际情况修改"binary-arch"项, 把不需要的功能都注释掉. 其中用到了很多以"dh_"开头的命令, 这些都在debhelper软件包中, 你可以查看man page来了解命令的作用. 对于脚本语言, 因为不需要编译, 所以必须把包含"$(MAKE)"的行都注释掉. 下面重点是编辑"install"项, 因为刚才注释掉了"$(MAKE)", 所以现在必须手动建立一个目录用来存放安装后的文件, 在"$(MAKE)"下一行写上:
    mkdir -p $(CURDIR)/debian/[packagename]
    
    记得将"[packagename]"替换成你对应的名字, "$(CURDIR)"指代的是"debian"的上一级目录, 这里即是"alist-0.6.12"目录. 剩下的就看你的具体情况了, 比如你需要把源文件都放到/usr/share/[packagename]下, 就用cp写一行命令, 需要在菜单里放置一个图标, 就把[packagename].desktop文件放到/usr/share/applications下.

    现在还剩下两个文件: "dirs"和"compat". "dirs"填写的是那些make install时没有建立的目录, "compat"则是debhelper软件包的版本号, 一般不需要修改.

    看到这里, 关于"debian"目录下的文件已经全部了解了, 下面来完成打包的最后一步.

  4. 从"debian"目录中回到上一级目录, 执行以下命令:
    ~/alist/alist-0.6.12$ debuild -k8A94AB78
    
    上面的"-k"选项后跟的是你的PGP Public ID, 关于PGP的内容, 我会在下一篇日志中介绍. 执行完以后, 你就得到了梦寐以求的DEB包啦! 赶快试试安装的效果吧~

打包DEB的过程还是有点复杂的, 尤其是第一次接触, 会遇到很多陌生的知识. 相对来说, Arch的AUR就显得方便多了.

Sunday, August 23, 2009

在Linux下使用DNW

2009.9.1更新: 请下载dnw2_linux_fixed_20090901.tar.gz, 详情请参见[ARM板烧写文件系统失败的总结].

DNW是通过USB烧写软件到ARM板的工具, 由三星公司开发, 可是这个软件只有Window$版本. 那天想把Linux内核烧进去, 就在网上找了很久看有没有Linux下的替代品. 最后在ARM9之家论坛上发现有人重写了个简单的命令行版本, 源代码可以从Google Code上下载: dnw2_linux_latest.tgz, 或者下载我的修正版本: dnw2_linux_fixed.tar.gz, 主要修正了一些编译警告. 编译的时候要依赖libusb-dev, Ubuntu用户可以直接安装:
$ sudo apt-get install libusb-dev

Saturday, July 25, 2009

通过Minicom接收文件的临时解决方法

前段时间我写了一篇[Minicom传送文件问题], 解决了通过minicom把文件传送到ARM板的问题. 前天SHE同学需要一些数据, 因此我要把ARM板上的文件传到我的电脑上. 本来以为在有了以前的设置之后, 接收文件 (receive file) 应该是顺理成章的事, 结果我把zmodem, ymodem, xmodem, kermit, ascii全部试完都不行. 真是恼火, 在网上搜了很久也没有发现什么好的方法可以解决. 暂时用的这个邮件列表里的方法:
$ cat < /dev/ttyUSB0 > data
不过这只对于纯文本有效, 要是想传二进制的就不行了. 不过也有人提出了使用uuencode将二进制文件先转化为纯文本文件的方法:
$ uuencode binary_file /dev/stdout > uu_file
$ uudecode -o binary_file uu_file
这样就能用刚才的方法传送二进制文件了. 不过还是没有直接通过minicom传送方便快捷, 希望以后能找到好的解决方法.

注: Ubuntu使用uuencode和uudecode需要安装sharutils软件包.

2009.9.1 更新:
如果板子上有网线接口的话可以选择通过FTP的方式传输, 这种方法既满足了传, 也满足了接, 还是很不错的. 不过我一般比较懒, 不想把我的网线拔来拔去的, 不到万不得已是不会用这招的, 呵呵~ 还有, U盘、SD卡也行, 只要板子满足条件.

Thursday, July 23, 2009

调教Firefox 3.5

昨天换上了Firefox 3.5 (以下简称FF 3.5), 是因为昨天才发现比较好的过渡方法, 是不是有点out了...
$ sudo apt-get install firefox-3.5

当我怀着兴奋与喜悦的心情打开FF 3.5时, 我不禁发现这页面是不是有点走样了. 如下图:
New Tab Button
那个打开新标签的图标很碍眼地挡在了第一个和第二个标签之间, 而且由于Vimperator的缘故, 当打开新标签的时候, 那个加号图标不会像正常的那样一直跟着走, 不过对于Vimperator来说这个图标也用不上. 于是我想把它隐藏了, 还原成以前的样子. 在这篇帖子的帮助下解决.

首先进入你的Firefox的Profile folder, 比如我的是: ~/.mozilla/firefox-3.5/5p41abxo.default, 然后修改chrome子目录下的userChrome.css文件, 没有则新建. 添加以下内容:
.tabs-newtab-button
{
  display: none;
}
重启浏览器即可.

接下来出现问题的是"我最喜爱的Firefox扩展"之一的TwitterFox, 很可恶的, FF 3.5的隐私模式 (后面还会再次谈到它) 的快捷键和TwitterFox默认的弹出窗口快捷键是一样的. 不过更可恶的是当我想要改变TwitterFox的默认快捷键时, 它却一直弹出这样一句话: New keyboard shortcut affects only new windows. 没怎么搞懂这句话是什么意思, 反正就是改不了. 在Twitter上发了问题, 不过没人回我. 但我还不想就这样罢休, 终于让我找到了方法. 打开"about:config", 搜索"twitternotifier.togglePopup", 将Value改为"P,,control alt"就行了, 你可以根据你自己的情况修改一下, 我这里把快捷键改为了Ctrl+Alt+P.

最后来说说FF 3.5新增的隐私模式 (Private Browsing). 在我看来, 这是一个完全鸡肋的功能. 虽然我很喜欢隐私模式的浏览方式, 但是FF 3.5设定的这种方式简直太"别出心裁"了, 每次从隐私模式退回来的时候原来的所有标签都要重新加载一次, 这个不仅浪费了时间, 还可能因此丢失掉以前页面上的一些东西, 所以说是完完全全的鸡肋. 相比之下, 我就更喜欢Chrome/Chromium的隐私模式 (incognito), 而且那个图标也挺酷的. 这里有一篇详细比较FF 3.5和Chrome 3的隐私模式的文章.

继续试用FF 3.5中, 昨天TX因为FF 3.5频繁假死已经快抓狂了...

Saturday, July 18, 2009

Minicom传送文件问题

好了, 有了上一篇文章的方法, 现在可以好好来调试程序了. 该怎么把PC上的文件放到板上去呢? 方法倒是很多啦, 由于板上自带了USB和SD卡接口, 所以可以通过U盘和SD卡拷过去. 板上还有一个网线接口, 通过网络也行, 挂载PC的NFS. 但是... 最简单的方法当然是通过minicom直接传送啦! (我以前怎么没想到...)

可我在选定好文件, 确定传送之后, 画面就一直卡在那了, 看来是不能传送. 这次又是LinuxSir.Org帮助了我, 请看: minicom无法上传文件,需要做什么设置吗?, 荣耀属于话语精简的3楼:
$ sudo apt-get install lrzsz
原来是缺少了一个软件, 这下好了, 障碍基本上扫清了, enjoy coding!

Tuesday, July 14, 2009

Chromium极速安装指南

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4E5E17B5
$ cat /etc/apt/source.list.d/chromium.list
# Chromium Daily Builds
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
$ sudo apt-get update
$ sudo apt-get install chromium-browser

设置GNOME Terminal启动的大小

我有个习惯, 开机第一个启动的程序就是Terminal, 而默认的窗口太小, 于是我还要加上另一个重复性的操作: 调整窗口的大小. 一直在想要是能自动调整大小就爽了, 那天去找了下, 在这篇文章中找到了方法.

点击菜单System -> Preferences -> Preferred Applications, 将System选项卡下的Terminal Emulator改为Custom, 然后在Command处填写:
gnome-terminal --geometry=132x43

当然, 这只是针对用快捷键来打开Terminal的, 你要是用鼠标点的话, 直接加上后面的参数就行了.

Sunday, June 21, 2009

以FastCGI的方式运行PHP

让PHP以FastCGI的方式运行可以最多提高10倍左右的速度, 还是很诱人的, 那天为了测试这个性能提升有多少, 就在Ubuntu里配置了一下.

首先需要安装一个软件包, 如果按上一篇文章[使用Ubuntu源安装LAMP]里讲的过程安装好的话其实就已经不用再安了, 需要的就是php5-cgi这么一个包.

然后需要打开Apache的actions模块, 因为后面的配置需要用到. 以下操作基于源安装的Apache:
$ cd /etc/apache2/mods-enabled/
$ sudo ln -s ../mods-available/actions.* .

最后就是修改配置文件了, 参考了FastCGI的官方文档. 添加如下配置:
# FastCGI for PHP
FastCgiServer /usr/lib/cgi-bin/php
AddHandler php-fastcgi .php
Action php-fastcgi /cgi-bin/php
需要注意, 最后一句中的/cgi-bin/是一个别名, 即下面一行配置指定的:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
经过上面的一系列配置, 当php后缀的文件运行时就会自动以FastCGI的方式运行了. 还可以使用php_sapi_name这个函数测试是否配置成功, 如果运行输出的是cgi-fcgi就证明成功了, 失败通常输出apache2handler.

运行的时候需要注意两点, 一是要给PHP文件加上可执行 (x) 权限, 另一个就是PHP文件所在目录需要在Apache中设置+ExecCGI选项:
Options +ExecCGI

这时就可以使用ab工具来测试了:
$ ab -c 50 -n 1000 http://localhost/fcgi-bin/test.php
经测试, 一个简单的字符串输出的PHP程序才只有处理复杂操作的C++程序性能的2/3, 看来差距还是挺大的.

使用Ubuntu源安装LAMP

以前写过一个编译安装LAMP的文档, 放在我的Google Code的texsky项目里 (关于texsky的详细介绍参见以前的一篇文章[又建了一个项目 -- texsky]), 前段时间觉得有源还是用源好点, 毕竟更新会更加方便.

用源就简单了, 只需要记住软件包名就行了, 以下包名在9.04下测试通过:
$ sudo apt-get install apache2.2-common mysql-server php5 php5-cgi php5-cli php5-mysql
真怀疑为了一点扩展性和性能提升去折腾编译值不值得...

如果还需要FastCGI的支持, 再加上两个软件包:
$ sudo apt-get install libapache2-mod-fastcgi libfcgi-dev
顺便提一下libfcgi-dev这个包, 刚开始以为这个包只是编译的时候需要用到, 因为它的描述是: Header files of FastCGI, 所以误以为只有头文件而已. 结果运行的时候由于没安这个包就出错了, 研究了一下才发现这个包里还包含了一些so文件 (好阴险), 自然是运行时需要用到的了, 安上以后运行一切正常.

Friday, June 19, 2009

Ubuntu下安装Bugzilla

Buggie
今天整了一下Bugzilla, 过程那叫一个痛苦, 缘起还得从MySQL讲起.

由于Bugzilla依赖MySQL, 偏偏9.04里面依赖的版本是5.0, 而我以前装的是MySQL 5.1... 好吧, 肯定是免不了要把以前的MySQL卸载了的, 那就装个5.0吧 (埋怨自己干嘛非得追新...). 这时一件很悲剧的事情发生了, dpkg错误, 这是我最不愿意看到的东西, 依稀仿佛记得以前整AUCTeX的时候也遇到过类似的情况, 当时因为错误严重, 差点就重装了. 好了, 这次算我运气好, 咱又遇上了:
Aborting downgrade from (at least) 5.1 to 5.0.
dpkg: error processing /var/cache/apt/archives/mysql-server-5.0_5.1.30really5.0.75-0ubuntu10.2_i386.deb (--unpack):
subprocess pre-installation script returned error exit status 1
Selecting previously deselected package mysql-server.
Unpacking mysql-server (from .../mysql-server_5.1.30really5.0.75-0ubuntu10.2_all.deb) ...
Processing triggers for man-db ...
Errors were encountered while processing:
/var/cache/apt/archives/mysql-server-5.0_5.1.30really5.0.75-0ubuntu10.2_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
咱可是那种遇到困难就退缩的人? 显然不是! 俗话说"困难像弹簧, 你弱他就强", 这等小事算个啥啊, 在无敌的Google大法面前颤抖吧, 哇哈哈~ 下面隆重介绍Google大神的答案:
$ sudo rm /var/lib/mysql/debian-5.1.flag
主要原因是这个文件影响了MySQL的降级. 然后重新安装MySQL就行了, 我用的是下面的命令:
$ sudo apt-get -f install

经历了MySQL的煎熬, 现在开始安装Bugzilla, 中途会有对话框弹出来叫你设置, 需要输入MySQL中root用户的密码 (这就得要求安装的时候MySQL是启动的, 因为它会去建数据库和表), MySQL中新建的用户bugzilla3的密码, Bugzilla管理员的邮箱 (同时也是账户), 管理员的密码. 顺利完成之后, 麻烦事才刚刚开始.

先来讲讲怎么用Bugzilla. 首先你需要一个Web服务器, 我用的Apache. 如果你没有修改Apache的默认配置的话, 通过网址http://localhost/cgi-bin/bugzilla3/index.cgi就可以访问了. 但现在显示出来的只有文字, 图片、CSS什么的都不能访问, 这时就需要在你在Apache下设置的网站根目录下放置一个链接, 指向/usr/share/bugzilla3/web/:
$ ln -s /usr/share/bugzilla3/web/ bugzilla3
这个链接的名字是固定的.

修正: Bugzilla安装好之后会在/etc/apache2/conf.d下放置一个叫做bugzilla3的链接指向/usr/share/doc/bugzilla3/examples/basic.conf, 这是一个包含VirtualHost的配置文件, 经测试, 会影响其它VirtualHost的访问. 于是我将那个文件的内容合并到了最初始的配置文件里, 并移除了链接, 同时删除其中一行:
Alias /cgi-bin/bugzilla3 /usr/lib/cgi-bin/bugzilla3

使用刚才安装时输入的邮箱就可以登录管理员账户了, 当然, 会有一系列的东西等着你去设置, 毕竟默认配置都是不完美的.

Bugzilla使用邮箱作为账户, 如果有人来注册新账户, 在输入自己的邮箱之后, 服务器就会发送一封邮件给刚才的邮箱进行确认. 这时才发现我电脑上的邮件服务器还没配好, 就顺便折腾了一下. 我用的是Postfix, 不知道为什么, Ubuntu源里安装好的Postfix在用sendmail发邮件的时候会找不到main.cf这个配置文件, 到/etc/postfix下一看才发现根本就没有... 我也懒得自己去配了, 就用的别人的一个例子, 需要安装postfix-doc这个包, 安好之后会有/usr/share/doc/postfix-doc/examples/main.cf.default.gz这么一个文件, 解压, 把文件拷过去重命名就行了. 注意: 不要使用/usr/share/postfix/main.cf.dist这个文件, 里面的配置是不完全的, 我最开始就是用的这个, 结果运行的时候出现了一堆错误. 这时再用sendmail试试, 又发现了一个新错误:
postdrop: warning: unable to look up public/pickup: No such file or directory
在Ubuntu官方论坛的一篇帖子里找到了解决方法:
$ sudo mkfifo /var/spool/postfix/public/pickup
$ sudo /etc/init.d/postfix restart
这下就可以顺利通过sendmail发送邮件了, 不过我电脑上发出去的邮件地址还有点难看, 等有时间再弄一弄, 呵呵~

Bugzilla刚用, 配置等以后再研究了, 到时候肯定还会写一篇讲配置的.

P.S. 这是我目前为止用的标签最多的一篇文章.

Saturday, May 2, 2009

Ubuntu中安装iBus输入法框架

首先到这个页面下载iBus的OpenPGP key, 验证以后设置第三方源, 下面的是9.04的, 其它的可以到刚才那个页面看:
# iBus
deb http://ppa.launchpad.net/ibus-dev/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ibus-dev/ppa/ubuntu jaunty main
安装如下的软件包:
$ sudo apt-get install ibus ibus-pinyin ibus-gtk
ibus-gtk很重要, 否则就没有光标跟随了. 最后将默认输入法换成ibus:
$ im-switch -c
正确选择以后, 重启就行了.

9.04的新功能: 改进版screen

screen
screen是一个很强大的工具, 可以模拟多个终端. 刚安好的screen看上去和普通终端没有什么区别, 但利用高可配置性, 便能展现出强大的一面. 由于screen配置的某些语法晦涩难懂, 非一般人所能折腾也. 这下好了, Ubuntu 9.04带来了已配置好的screen, 并且还能通过提供的菜单添加/删除一些功能.

Ubuntu中文论坛的roylez金主席也提供一个很不错的配置, 有兴趣的可以参考下.
P.S. 这位是一个CLI狂人.

Monday, April 27, 2009

美化了一下下Ubuntu

感谢大鹏和杨杨同学的推荐, Ubuntu Studio的图标不错, usplash很大很震撼.
$ sudo apt-get install ubuntustudio-theme ubuntustudio-icon-theme ubuntustudio-gdm-theme \
> ubuntustudio-wallpapers usplash-theme-ubuntustudio

另外推荐下现在使用的GDM: Arc-Colors GDM-Walls, 见下图, 来自LinuxTOY的推荐.
Arc-Brave GDM

Wednesday, March 11, 2009

英文环境下的中文美化

今天换到了英文local, 可中文显示都变成了难看的点阵 (关于点阵和矢量, 仁者见仁, 智者见智), 于是乎, 到处去寻求解决方法. 在比较了各种方案以后, 选择了一种比较简便的.

首先, 你不需要把Appearance中的字体都改成中文, 虽然那样也行, 但由于我用的是文泉驿正黑, 而我又不喜欢正黑的英文效果, 所以我保持了默认的设置, 如下图:
Appearance

我们需要做的是修改一个配置文件就好了.
$ sudo fontconfig-voodoo -f -s zh_CN
$ sudo vim /etc/fonts/conf.d/69-language-selector-zh-cn.conf
...
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>Bitstream Vera Serif</string>
<string>DejaVu Serif</string>
<string>WenQuanYi Zen Hei</string>
<string>AR PL UMing CN</string>
<string>AR PL ShanHeiSun Uni</string>
<string>AR PL UKai CN</string>
<string>AR PL ZenKai Uni</string>
</edit>
</match>
...
把WenQuanYi Zen Hei放到了最上面, 也就是渲染中文字体的时候优先选择文泉驿正黑, 然后重启就好了.

English & Chinese

Saturday, May 24, 2008

VirtualBox 安装完毕后的一些设置


最近在玩虚拟机, 不收费的里面, 也就VirtualBox最简单, 但安装完毕后我们还得进行一些必要的设置, 不过如果你安装的是Window$版, 以下步骤可以省略.

  1. 将当前用户添加进vboxusers群组. 这是最基本的一个设置, 否则你连虚拟机都启动不了.

  2. $ sudo usermod -a -G vboxusers `whoami`

  3. 解决VirtualBox访问USB子系统失败

    • 首先建立usbfs群组
      $ sudo groupadd usbfs
    • 然后将当前用户添加进usbfs群组
      $ sudo usermod -a -G usbfs `whoami`
    • 获取usbfs群组的GID
      $ cat /etc/group | grep "usbfs"
      比如在我的机器上显示的是
      usbfs:x:1001:xiaogaozi
      那么usbfs的GID就是1001
    • 修改/etc/fstab文件
      $ sudo vim /etc/fstab
      在末尾添加
      none            /proc/bus/usb   usbfs   devgid=<yourgid>,devmode=664 0 0
    • 重启

    P.S. 有人说 OSE (Open Source Edition) 不支持USB, 没试过, 也不知正确与否.

  4. 对于 Ubuntu 8.04, 会遇到在虚拟机中无法使用键盘的情况, 解决办法是
  5. $ sudo apt-get install scim-bridge-client-qt
    然后注销就可以了.

Wednesday, May 14, 2008

MPlayer中文字幕乱码解决办法

修改~/.mplayer/config文件, 添加
subcp=cp936  # cp936=gb2312
subfont-text-scale=5

然后如果是Ubuntu 9.10之前版本的系统, 需要链接一个中文字体 (命令如下), 这样中文字幕就不会出现乱码了.
$ cd ~/.mplayer
$ ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf subfont.ttf
而Ubuntu 9.10则不需要链接中文字体 (因为链接了也没用...), 在使用mplayer播放时加上"-ass"参数即可, 比如:
$ mplayer -ass filename