2009-04-29

Debian 的安裝與設定 (下)

(接續前篇)順利登入後,接下來要替新裝好的 Debian 系統做一些軟體安裝和更新。在安裝軟體之前,由於 Debian 是用 apt-get 來管理程式安裝,我們要先確定下載的伺服器位置。接下來編輯下載伺服器的列表:

nano /etc/apt/sources.list

裡面的資料都刪掉,直接取代成下面這一段:

# 完整列表參考 http://www.debian.org/mirrors/list
deb http://security.debian.org/ oldstable/updates main contrib non-free
# 國家高速網路與計算中心
deb ftp://opensource.nchc.org.tw/debian/ oldstable main contrib non-free
deb-src ftp://opensource.nchc.org.tw/debian/ oldstable main contrib non-free
# 交大
deb http://debian.nctu.edu.tw/debian/ stable main contrib non-free
deb-src http://debian.nctu.edu.tw/debian/ stable main contrib non-free
# 台大
deb ftp://ftp.tw.debian.org/debian/ oldstable main contrib non-free
deb-src ftp://ftp.tw.debian.org/debian/ oldstable main contrib non-free

隨著時間更迭,以上的列表常常可能失效或是更新,所以在使用上有發生類似下載不到或是伺服器沒有回應,可以再去找找看最新的 apt-get 伺服器列表並且更新(上面的註解裡有完整列表參考的連結)。

伺服器很多,要挑那個當作自己的優先伺服器呢?可以先裝 netselect 這個工具:

apt-get install netselect

然後用以下命令比較每個伺服器哪個比較快(數字越小表示反應速度越快,這個命令會列出最快的伺服器):

netselect host1 host2 host3 host4

有了列表,接下來第一件事情是更新已知的 Package List,用以下命令進行更新列表,並更新系統現有的元件:

apt-get update
apt-get upgrade

問題來啦,更新系統所有現存元件並不一定會很順利,不是部份依存的元件沒裝、導致更新失敗,不然就是模組之間的依存關係沒建好,就算裝好也不能動,在排除這些問題之前,系統都不能算是穩定和最新的,除了上面用的命令 apt-get upgrade,也可以換用 apt-get dist-upgrade 來試試看(這兩個命令的差異比較可以參考這篇文章)。如果還有問題,可以根據錯誤訊息 Google 一下解法來處理,例如我在更新系統時,碰到下面的訊息「dpkg: error processing .. trying to overwrite `/usr/sbin/add-shell’」,參照網路上的說法,這應該是權限的問題,只要用下面的命令開放權限、並強迫安裝和更新,就能迎刃而解:

dpkg -r --force all passwd
apt-get -f install

如果過程還有短少什麼元件,那就補安裝 (apt-get install '元件名稱') 再繼續,補到 apt-get upgrade 都沒東西要更新,那就搞定了(有點像 Windows Update 一樣)。不知道有沒有注意到上面的 source list 裡,我用的是 oldstable 的 package?原因是如果一口氣上 stable,更新過程會很不順利(因為內含的 debian 版本是 sarge 3.1,直上最新版差異太大很多套件會相互干擾),所以算是階段性更新系統,先用 oldstable(目前的 oldstable 是 lenny 5.0),一切更新都順利搞定後,再去修改 list、把 oldstable 字樣都改成 stable,接著再 update、upgrade 到沒有錯誤為此。照我的經驗,系統元件升級完畢後 Debian 也會被推到最穩定的新版(從原來的 sarge 3.1、etch 4.0,到 oldstable 的 lenny 5.0,到最新的穩定版 squeeze 6.0),一樣可以用以下命令檢查升級後的 Debian 版本:

cat /etc/debian_version

系統更新完畢就可以安裝軟體了,這裡安裝的第一套軟體是 SSH Server,用以下的命令:

apt-get install ssh

安裝過程會要求你安裝其他相關套件,或是更新 Library,都用 Y 確認就是了,有不懂的設置問題也都直接按 Enter 繼續就好。

裝好 SSH,建議最好重開系統測試一下(重新開機記得選對分割區,要開在 Debian 上),這時候不管 root 或是新開的帳號,應該都要能夠用 SSH 登入。登入順利的話,為了安全,預設的那個 Telnet Daemon 就該關掉了,可以用下面的命令移除預設的 Telnet daemon:

update-rc.d -f utelnetd remove
rm -f /etc/init.d/utelnetd

現在只剩 SSH 了,如果想改登入的提示訊息,可以編輯 /etc/issue.net 的內容,不過預設 SSH 會關閉,因此還要編輯 SSH 的設定檔 (/etc/ssh/sshd_config),找到這一行:Banner /etc/issue.net,移掉前面的 # 標記。如果想馬上生效,可以 kill 掉 SSH 的 Daemon (sshd),然後重跑 /usr/sbin/sshd 即可。

接下來開始安裝基本軟體和服務,安裝軟體前都要有好習慣,先更新最新的軟體列表,然後安裝基本工具(安裝中如果有 [Y/n] 一律按 y 然後 Enter,有不確定的選項就都用預設值):

apt-get update
apt-get upgrade
apt-get install screen nmap less w3m lynx bzip2 zip unzip host make gcc ncftp tzdata ntpdate

以後可以用 dpkg -l 來查看到底系統裡裝了哪些套件。如果想知道還有哪些套件 Package 能夠安裝,可以上官網的連結,有很詳細的分類。接下來是設定台北時區,先刪除舊的時區設定,再連結台北的,最後一個 date 命令會顯示目前日期和時間,檢查看看對不對:

cd /etc
rm -f localtime
ln -s /usr/share/zoneinfo/Asia/Taipei localtime
date

接下來是設定 Host 記錄,讓 Domain Name 能讓系統認得(有自己 Domain 的可以加進去,或是當作手動的 DNS record)

nano /etc/hosts

基本內容如下:

127.0.0.1 LinkStation localhost localhost.localdomain

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

再來還有一個重要的設定,就是語系和中文化支援。目前的狀況應該連打中文、顯示中文都有問題,因此要做調整、能夠完整處理中文目錄和檔名。為了支援全中文和 UTF-8 (Unicode) 的套件和環境,這裡建議預設用中文 UTF-8(不用 Big5 了),首先,要先安裝中文相對應的 Locale (語系):

apt-get install locales localepurge

這樣會跳出一個文字選單,裡面記得至少要選擇 en_US.UTF-8 UTF-8、en_US ISO-8859-1、zh_TW BIG5 和 zh_TW.UTF-8 UTF-8(用空白鍵選擇、Tab 鍵切換到 OK、Default Locale 選 zh_TW.UTF-8)。安裝完畢,可以 cat /etc/locale.gen 這個檔案內容對不對(如果要新增刪除其他語系,請用 dpkg-reconfigure locales)。有注意到除了 locales,上面還另外安裝了 localepurge?因為語系檔預設會全裝到系統裡(以上設定只是設了預設用的),甚至以後安裝軟體,語系支援也會全裝,localepurge 裝完後直接執行,會幫忙清掉系統裡用不著的 locale、藉此節省不必要的空間浪費,而往後安裝軟體時一安裝完,localepurge 也會馬上啟動主動幫忙清「垃圾」,真算得上是有用 locales 時也必裝的工具。接下來設定使用者預設的 Locale,輸入 nano ~/.bashrc,增加下面這兩行:

export LANGUAGE=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
export LANG=zh_TW.UTF-8

登出再登入一次(可以用 locale 這個命令確認是否系統已經更改,SSH Client 程式連線前記得也要換編碼成 UTF-8 unicode 才行,PuTTY 有支援),如此,在登入後命令列的操作就可以看到中文字了。如果 Shell 裡面還是不能輸入,這時候更改使用者的輸入設定,建立檔案 nano ~/.inputrc,確定有下列四行:

set input-meta on
set output-meta on
set convert-meta off
set meta-flag on

同樣登出再登入後就生效了。以上兩個檔案 .bashrc & .inputrc 都是針對一個特定使用者的,如果希望每個新增的帳號都可以免去手動建立的話,那可以去改 /etc/profile 和 /etc/inputrc,可以順便加入一些 alias 和顯示設定(不過記住,在此之前已經建立的帳號,還是會用已經存在的 .bashrc 和 .profile,除非都砍掉才會套用系統的設定),以下是我在預設 /etc/profile 裡面新增的範例(主要是改提示符號、設定別名和中文語系輸出):

export PS1='\u@\h[\w]:'
umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
alias ls='ls --color=auto'

# Some more alias to avoid making mistakes:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Added aliases
alias cls='clear'
alias dir='ls -al'
alias lo="exit"
alias md="mkdir"
alias rd="rmdir"

# Added for Chinese supported
export LANGUAGE=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
export LANG=zh_TW.UTF-8

搞定中文、語系和登入問題,最後別忘了系統時間的同步。Debian 是一台伺服器,所有的 Log 紀錄都有參考意義,所以紀錄裡的系統時間同步與否就額外重要。和一般電腦一樣,LinkStation 有兩種時間,一個是硬體的 BIOS Clock,另外一個是作業系統的時間日期。你可以用命令 date 來看系統時間,還可以用 hwclock 來看 BIOS 時間(兩邊不一定會一模一樣),手動調整很麻煩,不過只要網路是通的,我們可以直接透過網路來對時。上面裝的基本軟體裡有一項叫 ntpdate,作用就是提供你做網路對時的,只要用下列命令:

ntpdate clock.stdtime.gov.tw

就會幫你連到中央標準局的 Time Server 取得正確時間,並且自動調整。如果此時還想把該時間「同步」到 BIOS 裡,也可以用命令:

hwclock -w

剛剛更新的系統時間就會和 BIOS 同步了。當然沒事要手動做以上動作其實也很累,我們可以做一個時間同步的程式,讓系統每天執行一次,那麼時間不就會一天更新一次保持同步了?首先建立一個程式:timesync

nano /etc/cron.daily/timesync

填入以下的程式碼:

#!/bin/sh
# Synchronize time via NTP daily
/usr/sbin/ntpdate clock.stdtime.gov.tw && /sbin/hwclock -w

最後記得改執行檔屬性:

chmod a+x /etc/cron.daily/timesync

這樣系統每天就會自己同步一次系統和 BIOS 時間了。同樣的,也可以像上一篇修改主機名稱(用 hostname 指定名稱、在 /etc/hosts 加一行記錄、修改 /etc/hostname 檔案裡的字串)、更改登入後訊息(登入後畫面 Telnet 用 /etc/issue、SSH 登入用 /etc/motd)。如果未來 Debian 有開放對外服務,偏偏那個服務的 Port 在韌體分割區開機也有提供(像是 Web、SSH),為求安全、怕機器重開被人家連進韌體,建議這兩個分割區指定不同的 IP 位址(都用固定 IP),這樣就可以避免機器因故重開卻讓外面使用者連到另一個分割區去。

到這裡基本的 Debian 環境就完成了。如果和我一樣有舊資料在 USB 硬碟裡、打算全部複製回來,那就可以開始做資料復原的工作。首先準備你的硬碟,插入 USB,先檢查看看 USB 硬碟有沒有抓到,可以用 dmesg 來檢視:

dmesg | grep sda

以上命令是從 dmesg 裡找出所有的硬碟分割出來,內接的硬碟應該都是 hda (hda1, hda2, hda3 ..),外接的 USB 碟則會用 sda。接下來決定你要掛載的分割區,因為我的 USB 碟裝的是之前拿來裝 LinkStation 的 500GB 硬碟,資料都在 hda3,因此我就要 Mount 第三個分割區(這時候變 sda3),掛載的目錄是 /usb/ (沒這個目錄的話要自己建立):

mount /dev/sda3 /usb/

我隨身碟裡面用的檔案系統是 ext3,如果 Format 成 NTFS 或 FAT32,上面就不能用 ext3 這個參數囉!因為現在已經完全改用 UTF-8 的環境,原來有中文的資料大多還是用 Big5 的(目錄、檔名),所以接下來要準備編碼轉換程式,把 Big5 的目錄和檔名都改成 UTF-8 的格式,這裡安裝的工具是 convmv:

apt-get install convmv

裝好後就有這個編碼轉換工具了。只要指定編碼,指定的目錄檔名就可以轉換成你要的格式,假設要從 Big5 轉成 UTF-8,命令如下:

convmv -f big5-eten -t utf8 -r --notest /目錄名稱

這個命令會把指定目錄下原來是 Big5 (ANSI 中文) 的中文目錄和檔名,直接改編碼轉換成對應的 UTF-8 名稱。改完檔名,如果有些檔案內容的註解文字以前是 Big5 的中文(舊的中文文字檔),也可以手動針對檔案內容編碼做轉換,讓你在 UTF-8 的環境下能看到轉換過的正確中文字:

iconv -f big5 -t utf-8 檔案名稱 -o 轉換後另存新檔名稱

這個動作完成之後,整個檔案系統環境就都是純的 UTF-8 了。把所有資料還原前,你可能也會想對整個系統先做備份,因為現在是用 Debian 開機,所以比較好備份的是位於 hda1 的原廠韌體,可以先把 /dev/hda1 Mount 到 /mnt 上,然後備份整個原廠韌體到一個檔案(就是把整個 /mnt TAR 起來壓縮),接下來用原廠韌體開機 (hda1),然後 Mount hda3 到 /mnt,就可以備份整個 Debian 了!動作大同小異,端看你想備份哪個分割區,步驟如下:

mkdir /backups
cd /mnt
tar -zcvp -f /backups/backup_hda1.tgz *

備註:備份前,你應該不希望浪費空間去備份不必要的檔案吧!首先是那些透過 apt-get 安裝的軟體套件暫存檔,這些檔案應該在安裝完就清掉才是,如果之前都沒清,備份前記得下命令清掉:

apt-get clean

這個命令會清掉 /var/cache/apt/archives 目錄下用不著的安裝套件暫存檔。上面有提到,如果有裝 locales,記得用 localepurge 清掉無用的語系檔。如果想手動處理、找出系統裡佔用空間最多的目錄或檔案,可以在根目錄下用下面的命令依佔用空間大小排序列出,讓你想辦法縮小備份壓縮檔的大小。

du -x | sort -n

以上是在根目錄下建立一個 backups 目錄,然後把整個 /mnt 目錄壓縮備份成一個檔案:backup_hda1.tgz(顧名思義這是 hda1 的備份,請依樣畫葫蘆備份 hda3),壓縮完可以用命令 tar -ztv -f 來測試和檢視壓縮檔內容。要注意備份前要放備份檔的地方空間夠不夠,假設你想備份整個 Debian,那麼想必 hda1 下所剩的空間一定不夠,這時候你可能要備份到外接硬碟上才行了!不想備份的特定目錄可以用參數 --exclude '目錄名稱' 來排除。有了備份檔未來要怎麼重灌還原呢?只要用韌體分割區開機,砍掉整個要還原的根目錄 (rm -r /mnt/*,不想砍的目錄可以先改目錄名稱像是 mv /mnt/share /mnt/.share,這樣就砍不到,還原完再把目錄名稱改回來)、或是用 Web 介面進行 Format(hda1 的官方韌體有提供,會清除整個 hda3 分割區),這樣就清掉了整個分割區,再用剛剛的備份檔,在根目錄下解壓縮進行還原:

cd /mnt
tar -zxv -f /backups/backup_hda1.tgz

以上就是整個備份和還原的步驟(要很清楚的知道,你開機的分割去是哪一個,然後去 Mount 你要備份或還原的分割區到 /mnt,接著進行備份或還原的再操作,做完再切換開機分割區用你要的分割區開機來使用)。

至此,我們更新了軟體列表、並讓系統元件都維持在最新的版本,安裝了 SSH 和一些基本工具、移掉 Telnet Daemon、修改 Local Host 紀錄、解決語系和中文環境設定(使用 UTF-8),最後還有搞定登入和網路對時的問題,連資料備份還原的步驟都交代清楚,這樣總算是完成重灌及還原的工作了。

回應: 9

長尾巴的魚 提到...

不好意思問一下, 這一兩個月來. 按照 大大您的方式更新我的 linkstation .
但是總是出現, libc6_2.7-18_powerpc.deb 在更新時有問題.
沒辦法把 kernel升上去 2.6 ....
想要問一下, 網路上好像有討論到, 你講的更新方式, 有些package 已經找不到.
所以沒有辦法把 linkstation 從2.4 升級到 2.6 .
不知道, 這樣的問題大大有沒有遭遇到過

匿名 提到...

我想問用zh_TW.UTF-8是否只支援繁中??如果我的目錄和檔名有繁中/簡中/日文/韓文是否用UTF-8 ??

Abin 提到...

zh_TW.UFT-8 就是 UFT 的編碼方式,不只是支援繁中,任何 unicode 字元都能支援,所以只要你的目錄檔名是用 unicode 來命名,那麼不管你是哪種字元都可以用。
但如果你的目錄是用 Big5 來做,那麼就算是繁體中文,也要先轉成 uncode,才能繼續在 UTF 的環境上用,這是看編碼法,和你是什麼語言沒關係。

Abin 提到...

To 長尾巴的魚:
不好意思,你可以重新檢閱我這幾篇文章,因為最近剛好我也又重灌,在步驟和順序上有調整過,這幾篇筆記也更新了。我做升級到 2.6 都很順利,並沒有發生過更新上的問題,你可以試著重抓最新版韌體、更新 update server list 後,再試試看。

匿名 提到...

不好意思想問一問,我的機器因為壞了硬碟不能啟動,有什麼方法可以在沒有備份原本的image之下換硬碟而令它重生呢??

Abin 提到...

如果只是硬碟故障,機器硬體沒壞掉,拿個新硬碟替換就能重生了。這裡有一篇教學文章,照個做就能恢復了。

匿名 提到...

已照著教學文件做過了,裝了未partition 的硬碟,然後開機,但是用ip setup utility 找不到它的ip, 連ping 192.168.11.150 也不行,可能真的壞了硬件了(diag 閃6 次)....

3shimi 提到...

樓上的匿名大哥 我的情形跟你一樣(除了 diag 閃6次) 我的HG250LAN 睡了一個月有 直到今天才有控去買硬碟來測試與維修

建議你試試看用原廠光碟裡復的 IP Setup Utility 去把你的Linkstation改成Static IP 試試看 改完之後請試試看透過 firmware 的 update 有沒有辦法成功 這裡我失敗了幾次 可是後來我 把router 上其他的東西都拔掉 就剩 1 laptop and 1 linkstation.
我試到後來是可以的 現在已經可以進入 預設畫面了 接下來就在刷其他的東西就可以了

minstrel 提到...

謝謝你提供的iconv與conmv,
讓我順利在debian開啟big5編碼的tar壓縮檔。
不知道除了轉碼外還有更好的方式?

在此謝過!

張貼留言

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