2007-06-28

MLDonkey - 萬用 P2P 下載工具 (eMule, BT)

MLDonkey 是一個相當好用的 P2P 工具,可以架設成伺服器,提供遠端控制下載的服務,還有內建的文字和網頁操作介面,隨時在任何地方連進來,都可以要求這個服務幫你做 P2P 的下載。而且一套工具,不但支援 eDonkey (& emule)、標準 HTTP 和 FTP 下載,甚至連 BT 也可以整合在一起,算是支援最廣、最方便,而且又相當強大的下載工具(可以參考各種檔案分享工具比較)。要安裝 MLDonkey,記得先更新 Package List,然後直接安裝:

apt-get update
apt-get install mldonkey-server

安裝過程中可以將 MLDonkey 設定為開機啟動(執行身分為新增的使用者 mldonkey、屬於 mldonkey 這個群組)、預設程式目錄為 /var/lib/mldonkey,安裝過程也會要你設定上下傳頻寬限制(之後可以再改,可以都用預設值),裝完也會詢問是否要直接啟動。可以先啟動看看有沒有安裝錯誤,順利起來沒錯誤的話,因為要進行設定檔的修改,所以要停掉剛執行 MLDonkey Server (mlnet) :

/etc/init.d/mldonkey-server stop

由於如果 MLDonkey 在執行中,停止後會寫入設定檔 (/var/lib/mldonkey/downloads.ini),因此如果要更改設定檔,切記 MLDonkey 已經停止,不然中途改的設定都會在 MLDonkey 停止時被還原蓋掉。MLDonkey 所有組態檔包括 /etc/init.d/mldonkey-server (啟動指令檔)、/etc/default/mldonkey-server (啟動參數檔) 和 /var/lib/mldonkey (組態檔路徑),在組態路徑下還有預設的暫存 (temp/) 和下載分享 (incoming/) 路徑,MLDonkey 開始下載後這兩個目錄下面就有會有檔案了,如果你不打算把下載和暫存的東西放在像是 /var/lib/mldonkey/temp, /var/lib/mldonkey/incoming 下面,也要一併去修改設定檔。接下來在服務啟動前,我們來進行設定檔的修改:

nano /var/lib/mldonkey/downloads.ini

我修改的地方大致如下(請找檔案中符合名稱的變數來修改):

...
allowed_ips = [
"127.0.0.1";
"192.168.1.0-192.168.1.255";]
...
max_hard_upload_rate = 100
max_hard_download_rate = 0
...
temp_directory = "/tmp/mldonkey"
...
create_file_mode = 664
create_dir_mode = 775
...
shared_directories = [
{
 dirname = "/home/ftp/P2P"
 strategy = incoming_files
 priority = 0
};
{
 dirname = "/home/ftp/P2P"
 strategy = incoming_directories
 priority = 0
};]

第一行最重要,是用來限制能夠連進 MLDonkey 伺服器的 IP 位址,預設是 127.0.0.1(只有本機可以連),後面補的那一行 192.168.1.0-192.168.1.255 代表的是在 192.168.1.* 同一個網段內的機器都可以連得進去(也可以用 192.168.1.0/24),為了安全起見,請依照自己的需求去更改。接下來兩行是限制最大上傳和下載的流量(單位 KB,安裝時也有設過)。再來是下載時暫存檔的位置(預設是 temp,代表的是 /var/lib/mldonkey/temp,請改成自己想放暫存檔的地方,範例改到 /tmp/mldonkey 去),以及檔案和目錄下載後預設的檔案存取權限(644 & 755 的意思是,該檔案目錄的擁有者 mldonkey 和同一個群組的使用者,都擁有完整讀寫刪除的權限)。最後一段,顧名思義是設定你下載的檔案和目錄放置位置 (incoming_files, incoming_directories),如果有其他目錄願意開放分享給別人搜尋和下載,可以再加一筆記錄(在右中括號 ']' 號之前,放在 {}; 裡面),把 strategy 設成 all_files 就可以了。改完設定後存檔,設定檔的部分就完成了。啟動伺服器之前,要確定上述的目錄都建立了(/tmp/mldonkey, /home/ftp/P2P)、權限都設定正確,不然實際讀寫可能會有問題。

我的規劃是,所有能分享的資料都在 /home/ftp 下面,包含網路芳鄰 Samba、FTP,而為了這些服務都能夠相互支援(建檔、殺檔),所以這些服務所需要的工作帳號都屬於同一個群組 (users),只要把目錄和檔案建立的權限都改成 755 & 664,這樣的話 MLDonkey 下載的檔案,完成後放到 /home/ftp/P2P 目錄,透過網路芳鄰存取或 FTP 登入也可以搬移砍檔。一開始提到安裝 MLDonkey 時如果設做開機啟動,服務會自動建立一個虛擬使用者 mldonkey(不能實際登入使用),它屬於 mldonkey 這個 Group,因此會發現後來下載的檔案和目錄權限都是屬個這個使用者和群組。我們要做的修改很簡單,就是把 mldonkey 這個使用者指定到 users 群組:

usermod -g users mldonkey

並且手動建立上述需要用的目錄、把權限都改成 mldonkey 這個使用者、群組改成 users:

mkdir /tmp/mldonkey
mkdir /home/ftp/P2P
chown -R mldonkey /tmp/mldonkey
chgrp -R users /tmp/mldonkey
chown -R mldonkey /home/ftp/P2P
chgrp -R users /home/ftp/P2P
chgrp -R users /var/lib/mldonkey

這樣我們就可以確定,MLDonkey 下載暫存和分享的檔案會在我們設定的路徑下,而檔案權限和其他服務也可以一併共用,未來系統裡面的某個檔案,也可以透過 Owner 知道是怎麼來的。還有一個地方被寫死要改的:

nano /etc/default/mldonkey-server

這裡的群組要改成 users、檔案權限要從 0022 改成 0002 才可以:

MLDONKEY_USER=mldonkey
MLDONKEY_GROUP=users
MLDONKEY_UMASK=0002

設定都完成,就可以啟動 MLDonkey Server 了(服務模式啟動):

/etc/init.d/mldonkey-server start

服務啟動正常的話,就可以連進伺服器測試看看。可以用 Telnet 連進去 (telnet 機器IP位址 4000),或是用瀏覽器連網頁操作介面 (http://機器IP位址:4080)。如果兩個都連不進去,有可能是服務沒跑起來(ps -aux | grep mlnet 沒紀錄),可以用執行檔模式來跑跑看,有沒有錯誤訊息:

/usr/bin/mlnet

這是前景模式的執行方法,啟動有錯誤的話訊息都會顯示在螢幕上。如果不是設定的問題,通常啟動失敗、都是因為一些暫存檔沒被砍掉導致,砍光再試試看:

rm -f /var/lib/mldonkey/*.tmp

如果前景模式跑得起來,那麼服務模式應該也沒問題,可以用 Ctrl+C 中斷前景模式,重新用服務模式啟動就行了!上面提到 download.ini 裡面的設定,其實也可以透過 Telnet 進去的文字介面或是瀏覽器連進去的網頁介面來做,所以改 download.ini 設定檔算是伺服器沒啟動時的改法,一旦伺服器啟動,用服務啟動後提供的介面來調整,也可以即時變更和儲存。另外,除了預設提供的這兩個介面,還有很多其他搭配的 Client 程式(不過要另外安裝),詳細的說明和工具可以參考這裡

我碰到的這個版本預設管理者帳號是 admin,但沒有密碼,所以不管怎麼登入都不會問帳號密碼(如果安裝過程有問,就可以用命令 dpkg-reconfigure mldonkey-server 來重設)、預設就用 admin 登入,為了登入安全,建議還是要設定一下密碼。設定密碼建議用 telnet 比較簡單,直接 telnet localhost 4000 登入服務,進去後敲命令 whoami 會顯示你登入的帳號是誰(如果有設定密碼,會秀 'Command not authorized'),如果跑出預設帳號 admin,可以下命令 'passwd 密碼' 來設定密碼,只要密碼被設定起來,不管怎麼登入要使用就會被問密碼了。

最後說明一下 MLDonkey 的用法。如果是用網頁介面,一連進去會要求你填登入帳號和密碼。登入後畫面相當簡單,左上有幾個按鈕,右上則是讓你輸入 MLDonkey 指令的命令列。如果要開始下載,只要去複製 P2P 的下載網址(eDonkey - ed2k://files,BT -  http://xxx//files.torrent,或是標準的 http:// 或 ftp://),貼進命令列,在前面加個 dllink 的下載命令 (Download Link 的意思),壓下 Input 按鈕就完成了,如果有大批網址,也可以先用用 DL 按鈕叫出介面、通通剪貼進去批次下載。下面貼幾個官網示範的命令範例(如果是 ed2k:// 開頭的下載網址,dllink 命令其實可以省略):

dllink ed2k://|file|SuSE_V8.1_CD1.iso|648416|250C684D459|/
dllink http://www.open-bits.org/download.php/Openoffice_1.1.4.tar.gz.torrent
http http://67.84.8.14:88/beethoven/karajan.rar
http ftp://xdonkey.macdk.net/dl/XDonkey.dmg

我喜歡用 Web 介面來看所有載點的下載狀況,壓下第一個 Transfer 按鈕會顯示所有正在下載的工作,包括檔案名稱、大小、完成度和載點的情形。像是剛剛修改 download.ini 設定的部分,也可以用 Options 按鈕做詳細的各項設定,此外,像是檔案搜尋 (Search)、伺服器連結狀況 (Servers) 和統計資料 (Statistics),所有功能都可以在網頁界面上顯示和操作。文字介面的操作速度反應更快,不過一堆的命令就比較不友善了。Telnet 進去後其實什麼操作都不能做,要先手動通過身份認證:

auth admin 密碼

接下來就可以使用各種文字命令了。在提示符號下直接貼上一堆的下載命列(和 Web 介面一樣,如果不是 ed2k:// 開頭的,要加上 dllink 命令),就可以快速批次下載。而命令 vs (view downloads) 可以列出所有正在下載的工作,每個工作前面會有個 Index,像是 [D  1],如果要取消、暫停或繼續某個下載工作,用命令 cancel/pause/resume Index,就可以對特定工作做處理。關於設定的部分,也可以用 options、options section 和 set option value 等命令來查看和修改。所有的命令說明和使用方式,官網這裡也有詳細的說明。

MLDonkey 也許下載的效率比不上訂製專用的軟體,但是在使用上的便利性、支援性和操作彈性都是其他下載工具難以望其項背的,它並不是單純的一個下載工具,而是一個可以提供遠端登入使用、允許不同使用者帳號操作的下載服務(可以建立該服務自己的多個使用者帳號,和作業系統無關,提供不同使用者操作),有了這項服務,LinkStation 才能變成名符其實的專門分享的「動物機」,丟入載點網址機器就會乖乖幫你一個個拖回來,即使多人共用,也有便利的權限區隔,這真是 Linux 平台上必裝不可的好東西啊!

補充:預設 MLDonkey 有支援網頁介面登入,但問題是需要特別的連接埠 4080,偏偏這種特別的 Port 很容易被一般防火牆擋住不准用。如果有安裝網頁伺服器,一般不擋的 Port 80 又會被佔用,想用 Port 80 同時跑網頁服務和用 MLDonkey 的網頁介面就相互衝突了!不過如果跑的網頁伺服器是 Apache,網路上有一篇文章提到可以透過 Apache 來做 Redirection、將 Apache 的特定目錄流量直接轉到 Port 4080,這樣就可以用 Port 80 直接使用 MLDonkey、又不會和網頁伺服器衝突啦!(原文請參考:ApacheRedirection

首先,要先啟動 Apache2 的 Proxy & Rewrite 模組,不然會認不得設定檔裡的命令(導致啟動 Apache 時跑出 Invalid command 的錯誤):

ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled/proxy.conf
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

接下來修改 Port 80 預設的網站設定檔:

nano /etc/apache2/sites-available/default

在設定後面、結束標籤(</VirtualHost>)前面加入下面這一段:

# Allow port 4080
<Proxy http://localhost:4080>
        Allow from all
</Proxy>
# Redirection
RewriteEngine On
RewriteRule ^/mldonkey$ /mldonkey/ [R]
RewriteRule ^/mldonkey/(.*) http://localhost:4080/$1 [P]

存檔後重新啟動 Apache:

/etc/init.d/apache2 restart

這樣就完成 Port80 的 ApacheRedirection 啦!只要打開瀏覽器直接連:http://機器的IP位址/mldonkey/,Apache 會幫你轉向到本地端的 Port 4080,這樣就可以用瀏覽器直接使用 MLDonkey、不怕被防火牆擋住,也可以和網頁伺服器共用 Port 80,不影響網站運作啦!(不過有兩點要注意的,第一,開放出去後,為了安全性 MLDonkey 最好一定要設密碼。第二,因為是靠 Apache 直接用 localhost 轉向連線要求,所以對 MLDonkey 服務來說所有連線都是從 localhost 來的,本來那個 allowed_ips 的限制連線設定就沒效啦!要特別注意相關的安全問題。)

回應: 40

 

2007-06-22

Debian 的安裝與設定 (上)

經過上一篇的韌體更新,擁有了可以登入 LinkStation 並且改機所需的軟體環境,接下來要開始安裝實際改機要用的作業系統:Debian Linux。之前 OpenLink 的韌體是放在 /dev/hda1,而我們改機使用的作業系統是放在 /dev/hda3 上面,剛好 hda3 有被 mount 成 /mnt,因此我們只要把 Debian 安裝到 /mnt 下就可以了(/mnt 就是未來改好機的根目錄)。先檢查網路的 DNS 設定(避免 wget 解析不到網址):

bash-2.05a# cat /etc/resolv.conf
# frontalot's static setup (adjust to your network settings)
#
search
nameserver 168.95.1.1
nameserver 168.95.192.1

需要修改的話,輸入 nano /etc/resolv.conf 即可進行編輯(和更新韌體一樣,以上兩筆記錄是 Hinet 的 Name Server)。

其中 nano 是一套文字編輯工具,習慣的用 vi 也可以,編輯方法與一般文書軟體差不多,按 Ctrl+W 可以搜尋字串,其他用法請參考 HELP, 編輯完按 Ctrl+X 存檔,出現提示時按 y,不更改檔名的話直接按 Enter 即可存檔,有時退出 nano 畫面不會自動清除,可以輸入 clear 清除畫面。

輸入 cd /mnt 切換到該目錄,下載人家修改好的 Debian(壓縮檔案大小大概是 32 MB):

wget http://downloads.buffalo.nas-central.org/LSHG_PPC/Distributions/Debian/debian-sarge_powerpc-hdhglan-1.11.tar.bz2

輸入底下指令解開安裝檔,解完壓縮後原始安裝檔可以刪除以節省空間:

bunzip2 debian-sarge_powerpc-hdhglan-1.11.tar.bz2
tar xvf debian-sarge_powerpc-hdhglan-1.11.tar
rm -f debian-sarge_powerpc-hdhglan-1.11.tar

接下來要把 root 切換到 /mnt 這第三分割區 (/dev/hda3) 底下:

chroot /mnt /bin/bash

用 passwd 設定密碼,一樣要輸入兩次做確認。接下來讓所有網域都可以存取這台機器,加入一筆記錄:

echo "ALL : ALL" >> /etc/hosts.allow

接下來一樣要設定 Debian 開機以後的網路設定,內容和韌體的差不多,編輯設定檔:

nano /etc/network/interfaces

去掉原本 DHCP 的設定改為固定 IP,記得還有 Default Gateway 也要設(依照個人網路環境調整):

# we always want the loopback interface
#
auto lo
iface lo inet loopback
# default dynamic setup (no adjustment necessary)
#
#auto eth0
#iface eth0 inet dhcp
#      hostname `hostname`
# frontalot's static setup (adjust to your network settings)
#
auto eth0
iface eth0 inet static

address 192.168.1.1
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.254

編輯登入後的狀態:

nano /etc/init.d/utelnetd

把原來是 bash 的地方改成 login:

#/bin/sh
/sbin/utelnetd -l /bin/login &
exit 0;

以上就調整好網路和登入的相關設定了。不過要注意的是,chroot 後當下使用的其實是 hda3 的設定,記得仿造上面一開始對 dns 的設定,修改 /etc/resolv.conf(這個檔案 chroot 後其實是在 hda3,而不是之前修改 hda1 的),有了正確的 DNS 接下來要透過網址下載檔案(ex. wget)才會通。緊接著應該是安裝 SSH Server、讓新裝好的 Debian 有安全登入的環境,不過因為網路上很多套件已經都要依存於 Kernel 2.6 的 libc6,SSH 也不例外,為了後面安裝的套件都能夠順利,接下來應該先幫 Debian 做核心升級,上到 2.6 才能繼續其他的操作(如果之前有上「U-Boot」,換 Kernel 到 2.6 更是必要動作)。因為預設的 Telnet Daemon 不允許 root 登入,所以先手動增加一個帳號方便 Telnet 登入(用命令 'adduser 帳號' 新增帳號,新增完畢記得用 'passwd 帳號' 設定密碼),登入後再 su 成 root 比較方便。

如果有裝 U-Boot,要將之前裝到 hda1 /boot 下面的檔案先複製一份到 hda3 的 /boot 下面(目錄下放的是 U-Boot 的 Boot Loader 檔案)。由於現在是 chroot 到 hda3,所以要在環境下先 mount hda1,才能把 hda1 的檔案複製過來(先確定有沒有 /mnt 這個目錄,沒有的話手動建立):

mount ext3 /dev/hda1 /mnt/
cp /mnt/boot/*.* /boot/

接下來要上 Kernel 2.6 囉!安裝步驟和之前類似,先下載解壓縮並安裝所需檔案:

cd /tmp
wget http://hvkls.dyndns.org/downloads/latest-openlinkhelper.tar.gz
tar -C / -xvzf latest-openlinkhelper.tar.gz
chmod 1777 /tmp
wget http://hvkls.dyndns.org/downloads/latest-webinstaller.tar.gz
tar -C / -xvzf latest-webinstaller.tar.gz
touch /boot/variant-uboot
touch /boot/variant-ug
/usr/local/sbin/webinstaller-kernelinst.sh

備註:後來再做到這邊時發現,裝 2.6 kernel 過程會有問題 (errors in /usr/local/sbin/webinstaller-kernelinst.sh),主要關鍵是 Can't install Debian's module-init-tools,會要求你裝完元件後重跑一次。當下當然沒辦法裝這個模組啊(硬去裝問題更多)!解決方法的方法是:不管它!因為 kernel 其實已經更新了,直接重開的話,登入後就會發現是 2.6 kernel (Linux 2.6.25.20-svn365-dirty493 ppc)。不管這個錯誤據我瞭解的後遺症是,接下來切換 kernel 的命令會有問題、而且再也回不去 kernel 2.4(強迫只能用 2.6)。不過應該沒有人沒事會想降回來吧,因為在 2.6 安裝的程式很多到 2.4 是不能跑的呀!因此,如果 webinstaller-kernelinst.sh 有問題的話,也不用跑下個步驟切換核心,有裝 U-Boot 這時候就可以重新開機了,沒裝的話請跳過到下個步驟做分割區切換。

然後用以下命令切換 Kernel:

/usr/local/sbin/kernel26.sh

有裝 U-Boot 的話,這時候就可以重新開機(exit, reboot)了(因為 U-Boot 的目的就是幫你切換開機分割區,成功的話,用 nc 會監看到從 boot/uImage 開機)!

如果沒裝 U-Boot 的話,要靠手動切換分割區才能指定從 Debian 這個分割區開機,因此接下來的步驟就很重要,也就是韌體開機分割區和 Debian 分割區開機的切換(以下步驟,如果有裝 U-Boot,千萬不要做)。由於 LinkStation 一開機的 Boot Loader 會使用 hda1 作為開機根目錄,所以如果要用 hda3 的 Debian 來開機,勢必要有工具去切換這兩個分割區(hda1 <-> hda3)。另外,為了怕 Debian 的分割區(實際改完機的根目錄)被我們玩壞,我們希望關機重開都會回到預設的韌體分割區下,了不起就手動再切換也可以,確保改機的安全性。因此在 Debian 開機的時候,就要改回下次重開是由韌體那個分割區啟動,一旦停電或是改機的作業系統弄壞想重灌,才能確保一定都能夠開機修復。這個 Swap 硬碟分割區的工具要另外下載,把它放在 /bin 目錄下,並且改執行權限:

cd /bin
wget http://abinlink.googlecode.com/files/swappart_ppc.gz
gzip -d swappart_ppc.gz
chmod 755 swappart_ppc

接下來要確保一開機一定會執行,切換到開機執行目錄:cd /etc/init.d/,新增編輯一個執行檔:nano swaphd.sh,內容如下,就是切換分割區並留下 log 記錄:

#!/bin/bash
/bin/swappart_ppc /dev/hda /dev/hda
echo "$(date) -- swaphd ok" >> /var/log/swaphd.log

最後要更改這個執行檔的權限,並且在開機的時候都會被啟動(需注意第二行最後面有個點也要輸入):

chmod 755 swaphd.sh
update-rc.d swaphd.sh start 99 2 3 4 5 .

到此為止第三個分割區 (hda3) 裡的 Debian 已經設定完畢,用 exit 離開,回到原來的韌體環境,我們還需要在韌體環境可以手動切換到 Debian 分割區的執行檔(剛剛下載的那個是在 Debian 自動切換回韌體用的),複製一份剛剛下載的工具,並產生手動切換分割區的執行檔 (swaphd),更改檔案屬性:

cd /bin
cp /mnt/bin/swappart_ppc /bin/
echo '#!/bin/bash' > swaphd
echo '/bin/swappart_ppc /dev/hda /dev/hda' >> swaphd
chmod 755 swaphd

有了在 Debian 自動切換回韌體分割區的執行檔 (swaphd.sh),以及從韌體分割區手動切換到 Debian 分割區的執行檔 (swaphd),在韌體分割區的工作就大功告成了。接著試著手動切換分割區,並重新開機:

swaphd
reboot

有裝 U-Boot 的人開完機直接從這邊開始,以上 swaphd 的步驟統統跳過。

剛剛不是有要先新增帳號,重新開機完這時候還沒有 SSH、而 Telnet 又不允許 root 登入的情況下,重新開機完就只能用新增的帳號密碼登入,然後切換到 root 身份:

su -

敲入 root 的密碼,檢查一下現在的環境是不是用 /hda3 的 Debian 開機的(用命令:df,看一下第一行根目錄 '/' 是不是掛載在 /dev/hda3 下),不過應該沒問題啦,因為搞錯分割區,新增的帳號是無法登入的!如果登入有問題,代表沒切到 hda3、還在 hda1 的話,用 U-Boot 的人可以透過 Power 的按鍵組合重試,沒 U-Boot 的可以透過重新執行 swaphd 再開機一次,應該就可以順利用 hda3 的 Debian 開機了!

用 U-Boot 的人會發現,預設開機不按 Power 鍵是進到 hda3 沒錯,但看 df 出來的結果怪怪的,怎麼會有兩筆資料一樣、都是掛載 /dev/hda1?明明 hda3 也有掛成功啊?這時候可以手動修改檔案系統表:

nano /etc/fstab

修改成正確的掛載列表,df 顯示就會正常了!

接下來可以用下列命令來檢查 Kernel 版本:

uname -mrs

順利的話應該是 2.6 以上(我看到的是:Linux 2.6.25.20-svn365-dirty493 ppc),然後也可以用下面命令檢查 Debian 的版本:

cat /etc/debian_version

這時候還沒升級 Debian,所以版號還是 sarge (3.1)。登入順利、Kernel 也上到 2.6 了,接下來才能進行 Debian 的調校和設定。

To be continued ...

回應: 58

 

2007-06-18

LinkStation 改機之韌體更新

開始改機之前,先瞭解一下 LinkStation 開機運作的原理。啟動時機器會先執行 Flash 裡面的 Boot Loader,接下來以硬碟裡第一個分割區的根目錄當作系統根目錄 (/dev/hda1) 讀取 Kernel 後並開始開機,第二個分割區當作 Swap,而第三個分割區 (/dev/hda3) 就當作主要 Samba & FTP 分享用的空間(預設還有第四個分割區,看起來是割剩沒用的)。LinkStation 出廠時含硬碟,在 hda1 已經安裝了原廠的 Firmware,其他分割區也都規劃好,只不過這個原廠的韌體只提供 Web 介面的管理模式,不能 Telnet/SSH,也不能去安裝其他工具軟體,所以韌體的首要工作,就是替換掉 /dev/hda1 的那個「作業系統」,先讓我們能夠透過Telnet/SSH 連進去,這樣才能夠開始改機。

可以用來替換的韌體有三種,第一種是 Buffalo 官方的韌體,只提供基本功能不能改機,如果沒有要改機的話、或改過想要回復原廠狀態,也可以去找最新版官方韌體來更新,最後官方的韌體在這裡下載 (v1.61這裡也有,另外還有一個修改官方 TelnetEnabled 的版本,不過,是日文版)。第二種是根據官方韌體修改而來,渾名叫做 OpenLink,它兼顧了保留原廠 Web 介面的設定方式,增加了一些工具,也開放了 Telnet/SSH 連進來亂搞的彈性。第三種就和原廠沒關係了,叫做 FreeLink (v1.11),是一個以 Debian 為核心、用來取代原廠韌體的版本(此版本我沒有試過,有勇氣的可以到這邊下載)。為了兼顧相容性,這裡使用的是第二種:OpenLink 來取代官方韌體(所有機種能用的韌體可以參考 Custom Firmwares 這個比較的頁面,超完整的)。

更新韌體前,最好把 LinkStation 的 IP 改成固定 IP,避免用 DHCP 反覆重開機後搞不清楚倒底最後 IP 是那個、導致連不進去。可以利用說明書提到光碟片裡附的公用程式:IPSetup 去找到同樣插在同一個區網上的 LinkStation 並設定好 IP,以下說明都以 192.168.1.1 為範例,請自行變通應用為自己設定的 IP。接下來下載最後版本的 OpenLink 韌體,網址在此,最後版本為 0.51b,這個連結是給 LinkStation HG (Gigabits Version) 專用的,其他機種請到下載根目錄找。解開壓縮檔裡面有個韌體更新專用的公用程式: HD-HGLAN FWUpdate.exe,它的作用是會幫你找到區域網路上的 LinkStation、然後幫忙更新韌體,依指示進行,更新完後察看面版電源燈是否停止閃爍,停止後表示更新完成。如果是 XP SP2,更新之前切記先到控制台裡面關閉 Windows 防火牆,不然怎麼更新都會失敗。

接著就可以 Telnet 進去了,預設應該是沒有密碼的。登入之後先設定網路,輸入以下指令增加 DNS 設定(不然會認不得網址,這兩筆是 Hinet 的 Name Server)

echo "nameserver 168.95.1.1" >> /etc/resolv.conf
echo "nameserver 168.95.192.1" >> /etc/resolv.conf

輸入 cat /etc/resolv.conf 確認檢查是否正確加入:

bash-2.05a# cat /etc/resolv.conf
#
# resolv.conf  This file is the resolver configuration file
# See resolver(5).
nameserver 168.95.1.1
nameserver 168.95.192.1

接下來檢查 IP 相關設定,輸入 cat /etc/network/interfaces 檢查 IP 位址是不是正確、是否有 gateway,沒有的話輸入 echo "gateway 192.168.1.254" >> /etc/network/interfaces 增加設定。下面範例中的設定,IP 是固定的 192.168.1.1,gateway 是 192.168.1.254 ,請依照自己的網路環境做調整。

bash-2.05a# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.10.255
gateway 192.168.1.254

以上網路設定完畢後,可以輸入 ping google.com 試試網路是否可以對外連線,此步驟一定要成功,因為接下來的安裝步驟都需要線上下載安裝,所以對外連線一定要正常。

網路都沒問題後,緊接著把 OpenLink 0.51b 更新成最新版(這裡也有提到手動更新從 0.51b 到 0.73b 的方法),先建立暫存目錄,然後下載最新的 0.73b v7 並更新:

cd /tmp
mkdir update
cd update
wget http://downloads.buffalo.nas-central.org/snapshots/update-ppc-OL-0_5x-0_73b_v7.tar.gz
tar -xzvf update-ppc-OL-0_5x-0_73b_v7.tar.gz
./update_ppc_OL_0.5x-0.73b.sh

這個更新會幫你更新一些 Library、新版程式,並且安裝 OpenSSH(SSH 是一個比 Telnet 更安全的登入介面)以及 SSH 的預設金鑰,更新完 0.73b Open SSH 的 sshd 並不會馬上執行,但是重新開機就會了,此時可以下命令 reboot 要求系統重開,試試看 SSH 登入是否成功正常。

從 Kernel 2.4 升級到 2.6

注意!如果是想要嘗鮮,或即將要安裝、已經安裝 U-Boot、這個要塞到 ROM 裡面的 Boot Loader,以下的改機步驟在重開機前才要進行。不過更換 Kernel 有一定的風險,請三思而後行!

更新 Kernel 到 2.6 可以先參考原文:Linux Kernel 2.6 Installation on Buffalo Linkstation/KuroBox/HG/HS/Terastation

簡化原文內容,說穿了就是先抓相關的安裝程式和檔案、先做 U-Boot 設定:

cd /tmp
wget http://hvkls.dyndns.org/downloads/latest-openlinkhelper.tar.gz
tar -C / -xvzf latest-openlinkhelper.tar.gz
chmod 1777 /tmp
wget http://hvkls.dyndns.org/downloads/latest-webinstaller.tar.gz
tar -C / -xvzf latest-webinstaller.tar.gz
touch /boot/variant-uboot
touch /boot/variant-ug

然後透過 WebInstall 來即時線上下載並安裝設定:

/usr/local/sbin/webinstaller-kernelinst.sh

安裝完畢之後,它會在 /boot 下建立 U-Boot 所需的 Boot Kernel 和相關檔案,此時系統其實是同時並存 2.4 和 2.6 的檔案,而且還是維持在使用 Kernel 2.4,如果要把該系統切換成 2.6,還要執行以下手動的命令:

/usr/local/sbin/kernel26.sh

如果又不想用了,想換回 Kernel 2.4,那就手動執行以下命令還原:

/usr/local/sbin/kernel24.sh

如果是為了 U-Boot,其實不一定要切換到 2.6。因為重點是要有那個 Boot Kernel、以及系統裡有 2.6 用的相關檔案才能跑,所以其實安裝好就夠了,有必要再去切換 2.6 吧!決定好 Kernel,順手檢查上面更改過的 DNS 和網路設定,如果有被蓋掉記得改回來,確認無誤後再重新開機吧!

重新開機完,應該就可以用 SSH 登入了,如果沒有 SSH 登入工具,可以去這裡下載 PuTTY 這個 SSH 終端程式。輸入 LinkStation 的 IP 位址,Port 輸入 22,使用 SSH 模式,其餘不用更改即可連線。如果有出現警告要按 Yes 接受(第一次連線的金鑰確認),輸入帳號 (root) 和密碼後即可登入。第一次 SSH root 登入的密碼會被改成預設的 'openlink',記得登入後先用 passwd 去改掉。

登入系統以後,先來看看磁碟機分割區的訊息。預設的硬碟機裝置是 /dev/hda,所以用命令:mfdisk -p /dev/hda,會顯示如下的硬碟分割區訊息:

bash-2.05a# mfdisk -p /dev/hda
Units = /dev/hda, 623MB
/dev/hda1 = Linux, ext3
/dev/hda2 = Linux swap, swap
/dev/hda3 = Linux, ext3
/dev/hda4 = Linux, ext3

這樣的意思是說,在 /dev/hda 這台磁碟機裡有四個分割區,分別是 hda1, hda2, hda3, hda4,和一開始提到的一樣,可以用命令 df 看看實際使用狀況:

bash-2.05a# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1               373359    141041    213042  40% /
/dev/ram0                14521       841     12930   7% /mnt2/ram
/dev/hda3            383604592     32872 383571720   1% /mnt

現在所在的根目錄是屬於第一個分割區 hda1,有三百多 MB,是 Buffalo 預設系統使用的分割區。hda3 是存放使用者檔案的空間,掛在 /mnt 之下也佔了大部分的空間。下一階段要安裝的 Linux 系統為 Debian,會安裝在 /dev/hda3 中,只要透過工具與 /dev/hda1 對調之後,就可以從 hda3 開機然後把 Debian 當成預設系統了。以後就算灌到亂掉,只要恢復回 /dev/hda1 開機、使用 Buffalo 預設系統將 /dev/hda3 格式化,就可以重灌了。一開始提到的 FWUpdate,原理上就是先儲存設定、然後砍掉 hda1 的資料重新灌一份。

韌體必要的修改和設定都做好了,還有一些小東西改不改就看個人需要囉,像是更改登入 Shell 的設定(Prompt 提示符號、Alias,修改 /etc/profile)、更改主機名稱(用命令 hostname 指定主機名稱、在 /etc/hosts 加一行 IP 與主機名稱的紀錄,像是 192.168.1.1 LinkStation)、甚至是改登入提醒畫面(/etc/issue、/etc/motd,以及登入前提示 /etc/issue.net,不過要先編輯 /usr/local/etc/sshd_config 設定 Banner /etc/issue.net 才能打開 SSH 的登入提示),這些都是讓你登入韌體分割區後操作上比較方便和好看。最後要補充的,根據這篇文章說明,有些分享服務 (FTP, Samba) 的設定檔為了韌體安全都會自動幫你做備份和回復,也許沒必要,但如果你在韌體的分割區有要用 Samba 或 FTP、而且有改過設定檔 (/etc/samba/smb.conf, /etc/proftpd.conf),那麼這個「自作聰明」的還原機制就很討厭了,可以參考修改 /etc/init.d/chkshare 這個檔案,把某個檔還原動作的區段裡 /bin/mkcode -a > /dev/null 這一行前面加一個 '#' Remark 起來,就可以關閉了。

到此為止,我們完成了將磁碟機裡第一個分割區內的原始韌體更新成 OpenLink、而且換成最新的 0.73b,不但保留原廠的 Web 管理介面,也提供了能夠改機的軟體環境和 SSH 登入能力,不過這只是開啟了改機的大門,真正改機實際要使用的作業系統(要裝在第三個分割區)都還沒有下載安裝。不過以上步驟除非你想回復原廠、改用新版或是硬碟故障,不然之後的改機(即使系統重灌)都不用再碰到更新韌體的步驟了。至於像是硬碟故障、分割區重劃、需要拆機的硬碟重灌,或是手動的韌體還原,會有其他關於重灌和還原的文章做更詳細的說明。

回應: 15

 

2007-06-01

LinkStation 的升級 Part1: 更換硬碟

去年買了 LinkStation 當作我的個人伺服器之後,一直揮霍著內建的 160G 硬碟,當時買最小容量型號的目的,就是我慢慢用、用到硬碟又跌價而且我也塞爆的時候,再換大硬碟就是了。當時 400G 的型號和 160G 差了將近一萬塊,到現在 500G 硬碟也才五千多,所以能撐就能省到錢啊~話說我最近入手 500G 硬碟的目的就是為了升級 LinkStation,但是本來 LinkStation 就不允許你這麼拆殼換硬碟(一拆殼就破壞一年的保固),而且換硬碟也沒那麼簡單,所以我做足了功課、才敢開始進行硬碟升級的工作。

接下來我會一步一步描述怎麼進行(圖多,分了八個步驟),我雖然一次就順利成功,但是因為多虧了有前人的指點和說明,以下的照片也都引用自 Mobile 01 的文章,一方面補上自己的經驗、另外也算幫忙備份好文和好照片,引用到的照片版權還是屬於發表的作者 ATB & Danielsu。我參考的文章在這裡:Mobile01 - 窮人的NAS之重武裝版,圖片也都是引用這篇文章的。

步驟一,取下鏡面面版下的小螺絲。面版是強力膠黏住的,用刀片或一字起子從隙縫輕輕撬開(別弄傷或折到鏡面面版啊),將面版慢慢掀開就看得到黑色的小螺絲鎖住。這時候要用鎖眼鏡用小螺絲起子才能把螺絲卸下來,上下各有一個小螺絲,一定要都卸下來才能繼續。

步驟二,卸下弓字形灰色塑膠框。這個框框是用扣住的,只要用小螺絲起子戳進去壓下卡筍、往正面面版方向推,就可以卸下一邊,另一邊一樣操作,就可以把整個塑膠框拿下來。


步驟三,鬆開主機構螺絲。這個機殼和主機構固定的唯一螺絲是躲在標籤貼紙的後面,小心地掀開貼紙(並不會很黏,請放心),鬆開螺絲就行了。

步驟四,取下白色外殼的上蓋。除了主機構螺絲,外殼的結合主要還是靠上下各兩個卡筍,兩手同時壓下卡筍撥開上蓋,另一邊也這樣做一次,就可以取下白色外殼的上蓋了。

步驟五,取下主電路板。拿掉上蓋後,整個電路板背面就整個露出來了,只要鬆開四個角落的螺絲,就可以取下主電路板。照片板子左邊有 LED 顯示的透明導光塑膠片,取下電路板的時候要小心別弄斷或損壞了。

步驟六,翻開主電路板,卸下電源供應組。電源供應的機板對角共有兩個螺絲,鬆開就可以取下。(小心電容會放電,儘量不要碰到電路板後面的銲點,我被電到兩次..囧)


步驟七,翻開背後檔板和電源供應電路板,取下硬碟鐵架。鎖硬碟的鐵架是靠卡在白色外殼的下蓋上面,這裡有點難弄,小心拉起鐵架慢慢抽出來(小心別破壞了下蓋),取出鐵架整個外殼的下蓋也分離了。這時候如果有空氣罐或是清潔工具,可以稍稍清潔一下背後檔板上的風扇和上下蓋,這裡灰塵應該很多,沒弄乾淨未來可能會影響散熱的效能。



步驟八,卸下硬碟鐵架上的兩個螺絲,取下硬碟。不要像照片這樣同時鬆開兩個螺絲,這樣硬碟被鬆開的時候可能會小小敲到地上,可以一手扶著硬碟,一手鬆螺絲,兩個螺絲鬆開後、拉開排線和電源接頭,硬碟就算可以取下了。



最後補上一張,所有組件大部分解的照片。做以上動作的時候我都戰戰兢兢,沒時間分神來拍照,只好都引用現成的,不過最後順利拆完就鬆了一口氣,一定要替自己被「分屍」的 LinkStation 拍張真相。(所以只有最後一張是自己拍的,左上角那台硬碟就是即將換上的 500G 硬碟..)

拆下了硬碟,千萬不要就急著把新硬碟插上去,或是貿然把舊硬碟 Format 掉啊!別忘了硬碟裡面的東西,還沒有備份也沒有重置或重載啊!在原文裡,提到的是用 Acronis Trun Image 幫你 Clone 整個硬碟,不過我找到的最新版本,啥?是一個開機光碟的 ISO?這要怎麼樣在 Windows 環境下硬碟複製啊!我手邊的 Ghost,也是要用光碟片開機進到 DOS 模式使用,偏偏我只能接兩個 IDE 裝置(因為系統另兩個是 SATA 介面),光碟開機再接一個硬碟就滿了,怎麼去做「光碟開機」後的「硬碟間複製」啊~另外一個硬碟接上 IDE 轉 USB 的線,光碟開機 DOS 下也認不到啊~最後多虧我的「倉庫」裡有 Acronis Trun Image 的舊版 8.0,安裝之後有提供在 Windows 環境下做磁碟機 Sector by Sector 的複製(因為硬碟裡的 Linux 格式 Windows 不認識,一定要這樣複製),開始對拷之後我就去睡覺了(160G 透過 USB Copy 到硬碟,要很久吧)。這是一種處理的方式,透過這個我沒用過的 True Image,把舊硬碟裡的東西完全複製到新硬碟去(不過要注意,新硬碟的多的空間是不是指定到正確的 Partition 囉)。那,可不可以用很多人習慣的工具 Ghost 呢?可不可以順道把舊硬碟的資料在複製前做個備份映像檔燒到光碟片、以後不幸硬碟壞掉能夠用光碟灌回去?如果在備份前舊硬碟就已經掛了,更換硬碟此舉只是為了換掉故障硬碟,如何還原硬碟裡原廠的韌體、再經由改機恢復 LinkStation 個人伺服器的運作呢?別急,以上的疑問我會再另文討論,請期待囉!

回應: 4