2009年7月13日星期一

更改Linux用戶的home

很簡單,只需修改 /etc/passwd。找到自己想要改的用戶,直接把他的home改成想要的目錄就可以。
antony:x:1234:1234:Antony Ho,,,:/home/antony:/bin/bash
antony:x:1234:1234:Antony Ho,,,:/home/newdirectory:/bin/bash

存檔。

這樣我的Home就被轉成/home/newdirectory了。

封鎖某用戶或用戶組的SSH登入

很簡單,只需修改 /etc/ssh/sshd_config 檔案。

在裡內加上
DenyUsers someone #用戶名
DenyGroups some_people #群組

儲存,並重啟SSHD
sudo /etc/init.d/ssh restart

2009年7月11日星期六

在一台Linux上設virtual host跑數個網站

這個記錄是以Apache2作為HTTP daemon,在Apache2上設定數個網站。因為Apache2本來就在設計上支援這個目的。

Apache2在預設安裝後, 一般使用/var/www/作為網站的資夾料,看一下裡面會發現一個index.html檔案。

但我們既然要在這台伺服器上跑幾個網站,就得用一個資料夾有系統地存放。

我選擇在/home下建立一個叫www的資料夾,然後再在上面因應不同網站建不同的資料夾。

sudo mkdir /home/www
設定這個資料夾所屬的群組和擁有者

sudo chown www-data /home/www
sudo chgrp www-data /home/www
為新的網站建立資料夾

sudo mkdir /home/www/notes.antonyho.net
這些資料夾是用作存放CGI或者log的

sudo mkdir /home/www/notes.antonyho.net/cgi-bin
sudo mkdir /home/www/notes.antonyho.net/logs
sudo mkdir /home/www/notes.antonyho.net/htdocs

設定這個網站的擁有者為owner,設定www-data為資料夾的群組以方便儲取。

sudo chown antony -R /home/www/notes.antonyho.net
sudo chgrp www-data -R /home/www/notes.antonyho.net

好,到戲肉了。
Apache2建立virtual host的方式是在 /etc/apache2/sites-available/ 這個資料夾裡建一個設定檔,在裡面把您網站的資料夾,存取限制設定好。

假設我的網站是notes.antonyho.net,我就在 /etc/apache2/sites-available/ 裡建一個以網址命名的設定檔。

sudo touch /etc/apache2/sites-available/notes.antonyho.net


又或者利用預設的設定檔再作修改


sudo cp /etc/apache2/sites-available/default
/etc/apache2/sites-available/notes.antonyho.net

修改這個檔案

sudo nano /etc/apache2/sites-available/notes.antonyho.net
以下是一個可供設考的設定檔

<virtualhost>
ServerAdmin admin@notes.antonyho.net #網站負責人的電郵
ServerName notes.antonyho.net #網址
ServerAlias notes.antonyho.net #如果網站有縮寫網址可在這裡設定

DocumentRoot /home/www/notes.antonyho.net #改為你網站用的資料夾
<directory /home/www/notes.antonyho.net/ > #這裡記得在資料夾尾加/
Options Indexes FollowSymLinks MultiViews
#上面是設定資料夾的一些屬性
#Indexes,訪客可以要求資料夾的檔案清單,這個要小心設定使用與否。
AllowOverride None
Order allow,deny
allow from all
</directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ #設了這個就可以使用CGI
<directory>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</directory>

ErrorLog /home/www/notes.antonyho.net/logs/error.log #error log的位置

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined #access log的位置

Alias /htdocs/ "/home/www/notes.antonyho.net/htdocs/"
<directory>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</directory>

</virtualhost>


設定好後儲存。
然後啟用這個網站。

sudo a2ensite hkuoshard.com
重載Apache2的設定

sudo /etc/init.d/apache2 reload


提DNS設定指向到這個伺服器後,並把網站的檔案存到/home/www/notes.antonyho.net,訪問notes.antonyho.net該會正常顯示到網站囉。


我在設定時也是主要參考下面這個英文的Debian管理教學,而我使用的是Ubuntu Server。
http://www.debian-administration.org/articles/412

2009年6月18日星期四

AJAX不允許以PUT方式使用越網域資源

基於保安理由,使用XmlHttpRequest不能使用其他網域的資源。

假設
您的網址是notes.antonyho.net,現在使用AJAX的XmlHttpRequest去拿antonyho.net或者其他站(例:yahoo.com)的資料,是不可行的,因XmlHttpRequest不容許這樣做。您只能用XmlHttpRequest不容許這樣做拿notes.antonyho.net的資料。

希望網站的站長使用XmlHttpRequest踫到授權問題時會想起這個限制。

這個限制並非網站的規限,而是Javascript的XmlHttpRequest不容許你這樣做。所以暫時是沒辦法解決這問題的,在下的解決方法是寫一個PHP script,放在自己的網域底下,再由這個PHP script去另一個網域拿資料,然後傳回給客戶端。做法大概是:


2009年6月10日星期三

FTP指令上載樹狀資料夾

在一台沒有GUI的Linux server上,要使用FTP指令上傳或下載樹狀的資料夾是沒有簡便的方法。從建立資料夾到上傳或下載都要一個一個的自己輸入,一堆mkdir, cd, mput *, mget *的,實在痛苦。
在網上找查了好久還是沒有實際的方法,後來找到ncftp這個工具。ncftp是個FTP client(客端),可以完全平常的FTP指令之餘,還有很多方便的指令,例如put -R <本地資料夾名>就能把一整個資料夾連樹狀的子目錄和檔案一併上傳。下載也差不多get -R <伺服器資料夾>就可以。

如果要在Ubuntu安裝ncftp,只要輸入:
sudo apt-get install ncftp

好,可以登入了!

ncftp -u my_username -p my_password mydomain.com

然後就可以把整個資料夾連子目錄和檔夾一併上載,不必一個一個來。

put -R my_folder

下載也一樣

get -R remote_folder

2009年3月2日星期一

在Ubuntu安裝ClamAV掃毒軟件

其實在Linux上安裝掃毒軟件主要並不是為Linux本身的OS掃瞄和防毒,而是為了把檔案內會侵害Windows的病毒殺掉,又或為Windows分區掃瞄。
安裝ClamAV:
$ sudo apt-get install clamav
更新ClamAV病毒資料庫:
$ sudo freshclam
使用ClamAV掃瞄(假設要掃瞄的檔案為your_file):
$ clamscan your_file
若果要掃瞄的是資料夾(your_directory),要連子資料夾也掃瞄的話就使用參數-r:
$ clamscan -r your_directory
若果只想在掃到含有病毒的檔案才顯示到console的話,就使用-i參數:
$ clamscan -i -r your_directory
即使Linux很少機會中毒,也可以安裝一個USB盤版的Ubuntu加上經常更新的ClamAV用來替中毒已深的Windows除毒。雖然Windows中了某些源自中國內地病毒也只有重新安裝一途,因為那些病毒大多都把Windows的registry改得面目全非,只要一開機,因registry已改,系統就馬上連線到網絡自動再把病毒下載了。但用來把受感染的USB盤或磁碟分割還算不錯。

2009年2月28日星期六

Oracle下Unix epoch timestamp與Date互換

在*nix環境下使用Oracle的date,又或者在Java裡使用epoch時間與Oracle的date互換,的確是件很麻煩的事。
以下是一些解決方法,不過單是一個時間就把query弄得長長的。


從Unix的epoch timestamp轉成Oracle的date:


SELECT (TO_DATE('19700101000000','YYYYMMDDHH24MISS')+NUMTODSINTERVAL(10,'SECOND')) AS oracle_datetime FROM dual;

請留意紅色那個數字,把您的Unix timestamp換上去。

從Oracle的date轉成Unix的epoch timestamp:

SELECT (SYSDATE - TO_DATE('01011970000000' , 'ddmmyyyyhh24miss')) * 86400 AS epoch_timpstamp FROM dual;

請留意紅色那個SYSDATE,SYSDATE是系統時間,這裡換上您的Oracle date的field。

除此,在下還自行編寫了兩個簡單的user-defined function來做轉換,總比這麼長長的好。


date轉成Unix timestamp:

CREATE OR REPLACE FUNCTION date2epoch(input IN DATE) RETURN NUMBER IS
BEGIN
RETURN ((input - TO_DATE('01011970000000' , 'ddmmyyyyhh24miss')) * 86400);
END date2epoch;

用法:
SELECT date2epoch(sysdate) FROM dual;

Unix timestamp轉成date:

CREATE OR REPLACE FUNCTION epoch2date(input IN NUMBER) RETURN DATE IS
BEGIN
RETURN (TO_DATE('19700101000000','YYYYMMDDHH24MISS')+NUMTODSINTERVAL(input,'SECOND'));
END epoch2date;

用法:
SELECT epoch2date(1234567890) AS oracle_datetime FROM dual;

2009年2月26日星期四

令32-bit的Ubuntu能用上4 GB以上的記憶體(RAM)

我的Dell notebook剛買了回就自己換掉那1GB RAM換上一雙2GB RAM。可惜,連原廠機附的Window Vista Home Basic是32-bit,不支援4GB或以上的RAM。偏我安裝的Ubuntu Linux 8.04也是32-bit,用不盡4GB RAM,總是覺得有點浪費。今天我剛好Google了一下,發現原來32-bit的Ubuntu也可以盡用4GB RAM。只要安裝帶PAE(Physical Address Extension)的Ubuntu server kernel就可以。

只要按著以下的示範一直裝就可以:
$ sudo apt-get install linux-restricted-modules-server
$ sudo apt-get install linux-headers-server
$ sudo apt-get install linux-image-server linux-server

完成後重新開啟後就已經看到使用了4GB RAM。

2009年2月23日星期一

在Mac OSX 10.5上讀寫NTFS檔案格式

今天打算把錄影好的高清節目抄寫到外置硬碟盒,可狠的是購買時聲稱支援Mac OSX的硬碟盒接到MacBook後竟不能寫上去。Google後得知可以使用第三方的驅動和程式正常讀寫NTFS file system。

要令Mac OSX 10.5(Leopard)讀寫NTFS的是著名於*nix系統的NTFS-3G
macfuse。NTFS-3G是由Open Source群組開發的,可以免費自由使用。關於使用權等詳情請自行查閱官方網站:http://www.ntfs-3g.org/

步驟:
1.先到http://code.google.com/p/macfuse/下載macfuse,安裝。

2.到http://macntfs-3g.blogspot.com/下載Mac OSX用的NTFS-3G,最安全是使用穩定版,雖然後一點,但抄寫會相對安全。安裝後會要求重啟。重啟後就能在Mac OSX上正常讀寫NTFS的檔案系統了。

2009年2月22日星期日

在Netbook上安裝Ubuntu Netbook Remix

最近買了一台Lenovo S9回家玩,因為他的Linux版帶4GB SSD(固態硬碟),還可以自行拆開機背加裝RAM和2.5"硬碟。一世買回家後把他加到2.5GB RAM和加一個250GB硬碟。再在上面安個Ubuntu和Windows 7 beta版。

有250GB空間安OS、安軟件、存資料的netbook實在吸引。

由於體積關係,netbook的螢幕一般都較小,大約7"到10"不等。所以一般圖形介面的桌面實在不實用。所以Ubuntu的開發公司Canonical也有為netbook開發了一個名為Ubuntu Netbook Remix的包,使用的介面很適合netbook使用,也為netbook系統作專門優化。先看看抓圖:


上圖源自:http://flickr.com/photos/njpatel/tags/netbookremix/

介面可以供用戶隨意切換Netbook模式或一般的桌面模式。

好!事不宜遲,開始安裝。

先備份sources.list:
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak-`date +%d%m%y`

這裡留意你使用的是Ubuntu 8.04(Hardy)還是Ubuntu 8.10(Intrepid),跟著你使用的版本的示範去做。別跟錯!

Ubuntu 8.04(Hardy)
$ echo "deb http://ppa.launchpad.net/netbook-remix-team/ubuntu hardy main" | sudo tee -a /etc/apt/sources.list
Ubuntu 8.10(Intrepid)
$ echo "deb http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main" | sudo tee -a /etc/apt/sources.list
把http://ppa.launchpad.net/的GPG key加到系統:
$ gpg --keyserver subkeys.pgp.net --recv 3F2A5EE4B796B6FE
$ gpg --export --armor 3F2A5EE4B796B6FE | sudo apt-key add -

然後更新deb包的資料:
$ sudo apt-get update
最後安裝Ubuntu Netbook Remix所需的包(package),這裡記著要跟隨自己便用的Ubuntu版本去安裝了

Ubuntu 8.04(Hardy)
$ sudo apt-get update && sudo apt-get install desktop-switcher go-home-applet human-netbook-theme maximus ume-launcher window-picker-applet metacity
Ubuntu 8.10(Intrepid)
$ sudo apt-get update && sudo apt-get install go-home-applet human-netbook-theme maximus netbook-launcher window-picker-applet

好,現在到System > Preferences > Appearance,在Theme處選Human-Netbook。然後再到Visual Effects選None,不要使用任何特效。因為使用特效的話,會使Ubuntu Netbook Remix介面顯示不太正常。







在,現在可以選擇重新啟動Ubuntu或重新載入GDM來啟用Ubuntu Netbook Remix,若果選擇重新載入GDM的話可以輸入:
$ sudo /etc/init.d/gdm restart

最後,奉上一個小建議,在SSD上安Linux便用ext2比ext3檔案格式(file format)效能應該會較佳。因為Journaling File System會在每次資料變化時都作記錄(log)。所以在寫入或刪除資料時都較慢。但使用ext2等無Journaling的檔案格式也存在風險,假若在使用中途突然受影響(如停電、當機)而導致資料損壞的話,是無法修復的。所以選擇時要多加考慮。

2009年2月16日星期一

在Linux上掛載ISO

要在Linux上掛載(mount)光碟的ISO其實很方便簡單。

假設我們現在要掛載Ubuntu 8.10 32bit的光碟ISO: ubuntu-8.10-desktop-i386.iso
若ISO放在我的home /home/antony,現在我們需要建一個資料夾位置去把他掛載。

在/tmp建立一個資料夾用來掛載(你也可以選擇在其他路徑建立資料夾來掛載):
$mkdir /tmp/iso_mount_point

把ISO掛載到剛才建立的資料夾:
$mount -o loop /home/antony/ubuntu-8.10-desktop-i386.iso /tmp/iso_mount_point

完成。

現成查看/tmp/iso_mount_point就會發現ubuntu-8.10-desktop-i386.iso的檔案。

在Ubuntu 8.04安裝Mono 1.9.1

由於Ubuntu的軟件包(package)更新都比較保守,所以Ubuntu 8.04使用的main package repository裡的Mono版本比較舊(1.2.6),要自己下載原碼編譯,對新手來說不易,對懶人來說麻煩。所以Ubuntu的package maintainer - directhex就自己把Mono 1.9.1打包並建了一個badgerports,因為他本人覺得1.9.1是穩定的啦,他自己也為Ubuntu Mono runtime 1.9.1下了很多bugfix。但那裡只有給Ubuntu 8.04的Mono 1.9.1啦。Ubuntu 8.10的好像在main repository已有新版。

網站在此:http://directhex.mfgames.com/


做法:

把directhex的badgerports加到sources.list。

先把原來的sources.list備份:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak-`date +%d%m%y`


把directhex的badgerports加到sources.list:

$ echo "deb http://directhex.mfgames.com/ hardy main" | sudo tee -a /etc/apt/sources.list


由於badgerports不是官方認可的repository,所以需手動把GPG key加上。
先在這把8.04 badgerports的GPG key複製:在此
把key在文字編輯器內貼上,並儲存在自己的home,例如:/home/antony/directhex-gpg-key.txt。
然後用apt-key把key加上(用自己儲存key的路徑):

$ sudo apt-key add /home/antony/directhex-gpg-key.txt

更新repository的package list並安裝mono。

$ sudo apt-get update
$ sudo apt-get install mono




完成。

2009年2月15日星期日

在Ubuntu的FireFox內使用SCIM

由於安裝Ubuntu 8.04時使用的是英文版,所以即使安裝中文語言後仍無法在FireFox等某部份程式上使用SCIM輸入中文。

原來解決方法很簡單。(以下是Gnome介面下的解決方法)

先選System > Administration > Language Support

在Language Support頁開啟後在Supported Language表內選擇需要的語言,然後在最底部勾選Enable support to enter complex characters,按下OK後就可以在FireFox內按Ctrl+Space使用SCIM了。