Loading………………Please Wait~(_Click2Close_)
Loading………………

2010-09-27

Boot Windows by GRUB2

Grub2的設定與以前有後大的分別,現在主要設定檔是自動生成的
grub.cfg是自動生成,所以直接編輯的話更新後就會失效
想要手動加入Windows開機選項的話,可以修改/etc/grub.d/40_custom

首先我們要知道目標Windows 7所在分區

$sudo blkid
/dev/sda2: UUID="10AC99D8AC99B8A4" TYPE="ntfs"
用blkid查看目標所在分區的UUID,大概會出現一個ntfs格式的分區
之後在40_custom裹加入:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows" {
insmod chain
insmod ntfs
search --fs-uuid --set 10ac99d8ac99b8a4
chainloader +1
}
第一句menuentry意思是加入一個Windows的項目在開機選單裹
然後insmod意思是啟用chain模塊和ntfs模塊,目的是使用chainloader命令和讀取ntfs格式的分區
(不過chain好像沒有也可以)
search就是用uuid去尋找目標分區,用uuid會比舊格式方便
原因是加入新硬碟後或者硬碟順序改變了,依然可以啟動而無修改
最後chainloader +1就會啟動Windows

完成編輯以後還要更新設定檔才能使修改生效
執行sudo update-grub便完成
重新開機看看效果吧~

另外附上修復Windows 7開機的小方法:
用Windows 7安裝光碟開機,打開一個cmd
BootRec /ScanOS
BootRec /RebuildBcd
bcdedit
BootRec /FixBoot
BootRec /FixMbr
使用BootRec命令來修復開機

Via: http://grub.enbug.org/ChainLoadWindows

2010-08-22

Kensington SlimBlade Trackball @ Gentoo

昨天買了隻Kensington的SlimBlade Trackball
在Gentoo System下這隻Trackball不需要甚麼設定便可以良好地工作
但這顯然不乎合我的Geek理念
所以我上網查了一下
修改/etc/X11/xinit/xinitrc.d/99-input
用xinput去設定這隻Trackball
先把按鍵remap,因為我習慣用左手來操控mouse
所以把左右鍵交換,然後把Trackball左上角的鍵改成left click
右上角則為中鍵
左下角是右鍵、右下角是左鍵
原本SlimBlade有個功能是瀏覽模式
這個功能也很容實現,253 property 是Wheel Emulation,設定成1意思是true
257是Wheel Emulation Button,輸入2是第二個鍵
這個2不是remap後的值
第2個鍵是左上角那個,這樣定設按住左上角鍵
再上下左右動就可以上下左右Scrolling
單按一下就是單click左鍵
完成啦~


$ cat /etc/X11/xinit/xinitrc.d/99-input
#!/bin/sh
xinput set-button-map "Kensington Kensington Slimblade Trackball" 3 1 1 4 5 6 7 2 9 10 11 12
xinput set-prop "Kensington Kensington Slimblade Trackball" 253 1
xinput set-prop "Kensington Kensington Slimblade Trackball" 257 2

2010-07-20

trac + lighttpd

做Final Year Project,想搭建一個Bugs tracking server
於是挑了用Python實現的trac
系統是Gentoo + lighttpd + fastcgi
lighttpd支援fastcgi,只需要設定lighttpd就可以跑python的webapp
trac就用Gentoo portage提供的webapp-config安裝到lighttpd的網站目錄
因為還想跑其他網站,所以註冊了一個免費域名
再用lighttpd的vhost modules

其實fastcgi只是一個python文件,裏面寫了啟動trac的code
設定lighttpd去讀取它就可以
所以最複雜的就是lighttpd的設定,這部份留到安裝好portage裏的trac再做
先emerge www-apps/trac
如果沒有sqlite和lighttpd的話還要emerge lighttpd sqlite
trac還支援其他SQL DB
因為server就只有我和另外兩個隊友使用,sqlite已經很足夠了
裝好以後可以用Gentoo的webapp-config輕鬆設定好trac

sudo webapp-config -I -h <hostname> -d trac trac 0.11.7 -s lighttpd
只需要跟據實際情況填上
會在/var/www/目錄裏建立好trac用的fastcgi執行檔
而trac本體會安裝在另外的地方,trac project則存放在/var/lib/trac

trac預設支援SVN,我是喜歡用GIT
trac也有GIT plugins,不過我沒有安裝
接着需要用trac-admin來建立一個trac project
sudo trac-admin /var/lib/trac/ initenv

可能trac設計是預期和網站整合,所以url是/trac/projectname

然後便是設定lighttpd
先來搞定mod_fastcgi,編輯/etc/lighttpd/mod_fastcgi.conf

server.modules += ("mod_fastcgi")
var.fcgi_binary="/var/www/trac-site.net/cgi-bin/trac.fcgi" # 0.10 name of prior fcgi executable

$HTTP["url"] =~ "^/trac(?!/static)" {
fastcgi.server = ("/trac" =>
("trac" =>
("socket" => "/tmp/trac-fastcgi.sock",
"bin-path" => fcgi_binary,
"check-local" => "disable",
"bin-environment" =>
("TRAC_ENV_PARENT_DIR" => "/var/lib/trac/" )
#("TRAC_ENV" => "/var/lib/trac/android/")
)
)
)
}

modules裏加載mod_fastcgi,然後設定trac.fcgi的位置為一個變量(var.fcgi_binary)
用RE設定網址/trac為fastcgi負責
再設定trac需要的東東,大概就是這樣
重點是lighttpd.conf

var.basedir = "/var/www"
var.logdir = "/var/log/lighttpd"
var.statedir = "/var/lib/lighttpd"

# {{{ modules
# At the very least, mod_access and mod_accesslog should be enabled.
# All other modules should only be loaded if necessary.
# NOTE: the order of modules is important.
server.modules = (
# "mod_rewrite",
"mod_redirect",
"mod_alias",
"mod_access",
# "mod_cml",
# "mod_trigger_b4_dl",
"mod_auth",
# "mod_status",
# "mod_setenv",
# "mod_proxy",
"mod_simple_vhost",
# "mod_evhost",
# "mod_userdir",
# "mod_compress",
# "mod_ssi",
# "mod_usertrack",
# "mod_expire",
# "mod_secdownload",
# "mod_rrdtool",
# "mod_webdav",
"mod_accesslog"
)
# }}}

# {{{ server settings
server.username = "lighttpd"
server.groupname = "lighttpd"

server.document-root = var.basedir + "/localhost"
server.pid-file = "/var/run/lighttpd.pid"


auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/lighttpd-htdigest.user"

auth.require = (
"/trac/login" =>
(
"method" => "digest",
"realm" => "Android",
"require" => "valid-user"
)
)

url.redirect = (
"^/favicon.ico" => "/favicon.ico"
)
# {{{ cgi includes
# uncomment for cgi support
# include "mod_cgi.conf"
# uncomment for php/fastcgi support
include "mod_fastcgi.conf"
# }}}

simple-vhost.server-root = "/var/www/tokyo-jupiter.sytes.net/"
simple-vhost.default-host = "tokyo-jupiter.sytes.net"
simple-vhost.document-root = "/"
$HTTP["host"] == "trac-site.net" {
server.document-root = "/var/www/trac-site.net/"
dir-listing.activate = "enable"
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/lighttpd-htdigest.user"
$HTTP["url"] =~ "^/trac/.*/login$" {
auth.require = (
"/" =>
(
"method" => "digest",
"realm" => "XxXxX",
"require" => "valid-user"
)
)
}
url.redirect = (
"^/$" => "http://trac-site.net/trac//",
"^/trac?$" => "http://trac-site.net/trac//"
)
alias.url = ("/trac/static" => "/var/lib/trac/static/")
}

上面不是完整的lighttpd.conf,因為太長了所以我刪了一些沒用的
因為用了vhost module,所以vhost外面的設定會作為全局設定,vhost裏面的才是最後的
認證那裏是用了htdigest,要用md5去生成那個htdigest.user檔案的內容
alias.url是設定static網址的位置,/trac/static會指向/var/lib/trac/static/
原來的document-root的內容則保留trac的東西
url.redirect把/和/trac都重導向到/trac/

trac的帳號是用http的登入方法,所以認證是由lighttpd負責的
雖然http本身不是很安全,但官方建議盡量用digest
我這個網站就只有trac,因此我做了redirect

2010-04-22

LVM

因為Ubuntu自動分區是使用了LVM
所以我也研究了一下LVM
目前只知道它的好處是,日後能調整分區的大小
例如買了隻新的HDD,可以把partition加進去現有的partition
類似raid0,不過partition的大小可以不同
可以是同一隻HDD裏面的,而LVM主要不是提高性能用
我是參考了這個HOWTO

先簡單介紹LVM吧
LVM就是Logical Volume Manager
它可以在一個partition裏分割出幾個logical volume(LV)
每一個LV都可以當成普通的partition去建立檔案系統和掛載
而LV是建立在一個volume group(VG)裏面的
一個VG又可以包含好幾個physical volume(PV)
而PV就是普通的partition
(借用HOWTO裏的圖~)

    hda1   hdc1      (PV:s on partitions or whole disks)                        
\ /
\ /
diskvg (VG)
/ | \
/ | \
usrlv rootlv varlv (LV:s)
| | |
ext2 reiserfs xfs (filesystems)

除始之外,PE和LE是PV和LV裏的基本單位

我只研究了最基本的建立LVM partition方法
在Ubuntu 9.10的環境
先分好區,這裏分了3個分區
/dev/sda1是/boot、/dev/sda2是Logical Partition
/dev/sda5是/和swap(都在同一個Volume裏)
因為/boot不需要LVM所以這裏不需要理會

#( 先把/dev/sda5建立為PV )
$ sudo pvcreate /dev/sda5
#( 然後把它加進新的VG )
$ sudo vgcreate vgname /dev/sda5
#( 最後在VG裏分割出兩個LV作為/和swap )
$ sudo lvcreate -L 20G -n root vgname
$ sudo lvcreate -l 100%FREE -n swap vgname
#( -L用來指定大小,-l是用百分比來指定,XX%FREE是指剩餘空間的XX% )
#( -n就是LV的名字 )
#( 建好後的LV就在/dev/mapper/下面 )
#( /dev/mapper/vgname-root和/dev/mapper/vgname-swap )

重裝grub2

現在Ubuntu已經改用Grub2
雖然還不太清濋有甚麼好處,但抱着嘗鮮的心態我裝了個Ubuntu 9.10玩
然後發現Grub2的改動很大
首先/boot/grub/grub.cfg的內容是自動產生的
然後grub的設定檔分散在/etc下面
還在研究怎麼修改它

如果是要重裝grub2的話
(例如裝了windows要再安裝它)
比舊版本麻煩得多
先要有可以開機的Linux,這個可以用Ubuntu的Live CD
啟動入了系統後
要掛載目標系統的/和/boot
再用chroot進入目標系統的環境
這裏假設/在/dev/sda5、/boot在/dev/sda1


#( 先把root掛在/media/cdrom0 )
$ sudo mount /dev/sda5 /media/cdrom0
#( 然後是/boot )
$ sudo mount /dev/sda1 /media/cdrom0/boot
#( 還需要/dev和/proc )
$ sudo mount --bind /dev /media/cdrom0/dev
$ sudo mount -t proc /media/cdrom0/proc
#( 可以chroot啦 )
$ sudo chroot /media/cdrom0/ /bin/bash
#
#( 然後會得到一個root shell,可以安裝grub2到mbr了 )
# sudo grub-install --recheck /dev/sda
#( unmount所有分區再reboot就可以進入系統了 )
# exit
$ sudo umount /media/cdrom0/proc
$ sudo umount /media/cdrom0/dev
$ sudo umount /media/cdrom0/boot
$ sudo umount /media/cdrom0/
$ sudo reboot
完成了~
更多關於Grub2的資料在Ubuntu wiki

2010-02-01

Linux 顯卡硬解-續

Linux平台下的硬解實現已經很成熟啦
我現在的環境是
sys-kernel/gentoo-sources-2.6.31-r6
x11-drivers/nvidia-drivers-185.18.36
media-video/mplayer-1.0_rc4_p20091026-r1
media-video/smplayer-0.6.8

在smplayer裏有vdpau的選擇
使用的話播放H264編碼的video CPU使用率非常低
以我的E4500為例,播於youtube下載回來的高清格式影片
使用xv的話約40%
使用vdpau的話約10%
差距非常之大
影視效果以肉眼看不到多大分別

不過現在smplayer用vdpau有個問題
就是不能screenshot
(就不能截圖啦)
因為用vdpau的話mplayer會取消所有filter
其中包括了screenshot
所以用了vdpau就會有部份功能沒有了

2009-12-31

Gentoo & synaptics

synaptics是touch pad的驅動
用HAL來自動設定的話很簡單
在/etc/make.conf裏的INPUT_DEVICES裏加入evdev synaptics
INPUT_DEVICES="evdev synaptics"
然後use裏面加入hal
emerge -DaNu world
確保需要的東西都安裝好,例如input-synaptics
最後要讓hal daemon每次開機都啟動
# rc-update add hald default
這樣就能用touch pad了,而keyboard mouse則由evdev負責,基本上都沒甚麼需要設定了
keyboard主要是交換按鍵(例如Ctrl和Caps Lock)
Mouse就不用怎麼搞的(上下左右scrolling都可以用啦~)
但touch pad可能要設定一下,因為預設並不是太適用
本身是只有上下scrolling沒有左右,也沒有Tap(即是碰一下touch pad就等於按一下左鍵)
要改設定首先去把設定檔cp過去/etc
# cp /usr/share/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi /etc/hal/fdi/policy/

然後修改/etc/hal/fdi/policy/11-x11-synaptics.fd,加入下面三行


<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.HorizEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.TapButton1" type="string">false</merge>

這樣會啟用上下左右scrolling和取消tap
更多的選項可以用synclient -l查看
synclient也可以即時修改synaptics的設定,不過想要永久修改的話需要改/etc下面的

2009-12-22

emesene 1.5.1

由於eMeSeNe 1.5改動很大
加入了視像聊天的功能,也修複了很多Bug
但預設不能顯示M群的名字

其實emesene存在這個功能,不過預設沒有打開
只要到選項-》連線-》MSN群組聊天時顯示聯絡人名稱
然後重新啟動

這樣就可以繼續用M群了~