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

匿名 提到...

Abin大,
請問一下,我照你所寫下載了openlink 0.51b,然則在要更新韌體時,卻出現"An update is not necessary"的訊息? 請問這該如何? 我機器原先的韌體已是1.61版了,
感謝回應~

Abin 提到...

To zuexx: 你下載的 0.51b 韌體,解壓縮之後裡面有一個 linkstation_version.txt,你先檢查裡面的訊息,會有一行是寫版本:VERSION=1.XX,由於你的韌體已經是 1.61,這個 1.XX 的版號要比 1.61 更高,韌體更新才會成功!
因此你可以改成 1.62,再試試看,這只是單純修改在更新韌體前的版本檢查,實際上還是 0.51b。

匿名 提到...

abin大~
救狼喔~ 在陸續參照了大大您寫的改機教學後,終於成功改好,可是呢.....

因為想換新版的Mldonkey,把核心升上了2.6版... 這部份還OK, 可是升級完Mldonkey後,被要求reboot....結果就是惡夢的開始 囧rz,傳說中的Diag閃6次出現了!!

經過拆機之後,我把必要的檔案備份出來,可是..原本的hda3的partition被我刪掉了,現在只有hda1可用...不知 這部份我有沒有辨法重配置過? 如用spfdisk之類的工具...?

因為實在是linux白痴...目前沒有頭緒中..
裝回後的HDD目前可以正常啟動hda1了,只是最大的空間不見了...囧..(註,我是用WinXP光碟開機,把整個Partition刪掉,同時並未格式化..這是目前的狀況...目前也可telnet)

希望Abin大幫個忙看看有沒有什麼解救方法..感恩....

Abin 提到...

To zuexx:
1. 升級韌體到 2.6 有風險,也因此我寧願手動編譯新版 Mldonkey,也不願意升級核心。

2. 你的韌體是什麼版本?可以 telnet 但是原廠的網頁設定工具還可以用嗎?網頁可以用的話可以試試看用正規法:網頁裡提供的格式化工具去「創造」「格式化」hda3。另外,你提到 spfdisk 重新配置的方法也是可以,把空間都配置給 hda3 並指定與 hda1 一樣的檔案系統 (ID: 82),重開看看 hda3 有沒有出來。

基本上既然你也拆機了,除非硬體故障,不然一定可以回復的。我做過的是拿一個新硬碟,用 spfdisk 手動配置三個分割區 (hda1 放原廠韌體, hda2 是 swap, hda3 空間最大放改機的 Debian),手動分割完再上原廠韌體、進行改機、改完重開機器脫胎換骨。所以你的狀況是小問題啦,手動配置或是用原廠工具都可以做個新的 hda3。

匿名 提到...

Abin大~

我Debian核心應該就是2.4的,目前網頁工具可以登入也可使用,可是format工具作了都沒作用..

再請問一下,我若拆機自行格式化的話,那麼以250G的HDD Swap該設多少為佳?

再次感謝!!

匿名 提到...

請問abin 大大
更新 0.73b的軔体
有什麼差別嗎

Abin 提到...

To zuexx: hda1: 365 MB (ID:83),Swap /hda2: 512 MB (ID:82),hda3: all (ID:83),原廠分割出來的分割區會有「四個」,第四個其實只是零碎空間、用不到的,所以我後來也都是自己分割空間,規劃成以上三個。

Abin 提到...

其實 0.5x 和 0.73b 的差別並不大,可以看這篇討論,我的主要感覺是,除了換了比較新版的程式和函示庫(尤其是 busybox),另外就是換掉 Dropbear、改用 OpenSSH 當作 SSH Daemon,比較省記憶體、登入也比較快速。
不過,這個改機用的韌體主要是讓你能夠跳往 Debian 的跳板,改完機後也很少會用,所以換不換新版差別也就不大了。

匿名 提到...

Abin大~
小弟最近想購入相關設備但不知如何著手
之前有看過你 Asus WL-500g改機文章
依你覺的 在 性能 可朔性 價格做考量下那部較合適

Abin 提到...

我沒辦法推薦你什麼機器,因為我很久沒有研究了。wl500g 是買了以後,意外發現能夠這樣玩,而時至今日,就效能上 wl500g 已經有點頂不住,其他系列 550g, 700g 我又沒碰過,所以也給不了什麼建議。
新機器效能應該都比較好,但是能不能改機,還是要去 Google 找找看。

Unknown 提到...

作者已經移除這則留言。

Unknown 提到...

Abin大,
請教您一個問題喔
不曉得您是否有使用過Linkstation的JTAG PORT?
我的"磚塊"是LS-500GL但是日前update軔體之後,他的燈號就開始不正常了...剩下Power恆亮,Link/Act快速的閃爍... 好像是ROM的資料損壞了
看了Linkstation Wiki裡面的文章,目前就只能用JTAG來重燒ROM...可是要自己做一條JTAG cable又挺麻煩的
在賣場有看到RS-232 to USB的連接線,不曉得能不能用呢?
找了好久的文章~都找不到答案...

Abin 提到...

To Kyle:
我沒有用過 JTAG PORT,我也一點都不想去用到,因為如果真的要走到那一步,應該也是我 LinkStation 掛掉的那一天。
不知道你有看到這個產品:SCON-KIT嗎?我沒深入了解,但好像是類似你說的玩意,附接頭和轉 USB 的套件,而且是 Kurobox 官方出品,用起來會簡單一點(但是好貴,又要千餘元,還不如再去買一台中古的 LS)。

Unknown 提到...

大大...我可以給你ip位置...麻煩請你幫我改嗎???^^...還是你可以加我msn apexmilo@hotmail.com...我想請教你~~~

Craig 提到...

不知道已經安裝過舊KERNAL 2.4的LINKSTATION是否需要整個翻新,還是升級KERNAL就好?
舊版2.4已經很多軟體無法APT-GET了

張貼留言

歡迎留言或發表意見,不過要理性不做人身攻擊。匿名的朋友得到回應的速度會比較慢喔~
發問相關的禮貌和規矩請先參考這篇文章,不當留言、和本文無關的回應可能會被直接刪除無視喔!