新手使用 Debian 系統,最大的麻煩恐怕是不知道該如何安裝軟體,由於 Debian 使用 dpkg 軟體封裝機制,許多人對於 dpkg 的不了解而無法順利上手。這裡來詳盡的介紹各項指令細節。
其他的相關指令 dpkg-source dpkg-buildpackage synaptic update-alternatives equivs。
和其它的 Linux 發行套件不同的是:Debian GNU/Linux 使用了自成一家的 deb 套件,而 Red Hat Linux 和 Mandrake Linux 等等則使用 rpm 套件。
為什麼 Debian GNU/Linux 要和別人都不同呢?那是因為 Debian的套件管理自有一套極嚴謹但又方便至極的套件管理系統,如果您受過 rpm 的荼毒應該會了解筆者在說什麼,使用 rpm 來安裝某個軟體時,它可能會告訴您缺乏套件 A 及 B,所以我們只好先安裝套件 A 及 B。但是在安裝套件 A 及 B 時它可能又告訴你缺乏套件 C、D 及 E。而為了安裝套件 C、D 及 E 時,它可能又要您安裝套件 F、G、H...最後我告訴我自己:那還是重灌好了。這就是所謂的「dependency hell」,他讓系統管理者陷入萬劫不復的惡夢之中。而使用 apt-get 來安裝某個軟體時,它會自動把所有相關套件給同時安裝上去,比起 rpm 來真的方便太多了。這是由於 Debian 開發者與整個設計哲學以大量的文件與規格來定義,因此 apt-get 可以輕易的找出相依的軟體,並自動安裝到系統中。由於開發者經過非常嚴謹的考驗與訓練,因此才能打造出一個非常穩定的系統。
在 Debian GNU/Linux 裡,可以概分為 Stable、Testing、Unstable 三大類的套件,看名字也知道這些套件是如何分類的。
如果要以 Debian GNU/Linux 來架設伺服器時,Stable 的套件雖然最舊,但是可以進入 Stable 的套件往往都表示它們己經經過了千錘百鍊,出問題的機會很少,可以放心拿來架構一個極穩定的環境。並且,進入 Stable 也代表了該套件除非出現安全上的問題,否則基本上已經凍結,不會再有任何更新,直到下個 Debian GNU/Linux 版本發行。下個 Debian GNU/Linux 版本發行時會把 Testing 裡的套件昇至 Stable,而舊有的 Stable 則是走入歷史,很快得被人們所遺忘。因為 Stable 的環境真的很穩定,所以有人會把一些新版本的軟體拿到 Stable 的環境下編譯,而這些套件就稱為 backport。如果您有興趣可以上 http://www.backports.org/ 這裡看一看。
Testing 的套件裡全是 Stable 的候選套件,所以沒有一定的穩定度是進不來的。
而 Unstable 的套件,顧名思義,是一些未經完整的最新套件全都放在裡面,所以裡面的套件版本變化之快,幾乎是一日數變。目前 Stable 的代號是 Woody,而 Testing 的代號是 Sarge,同時 Unstable 的代號是 Sid。Stable 和 Testing 的代號會隨著 Debian 的發行版本而更替,但是 Unstable 的代號 Sid (Still in Develop)是永遠不會變的。
註:
所以當 Debian User 提到 Woody 或是 Sarge 時不要不知所謂呀!
dpkg 是 Debian GNU/Linux 底下管理套件的工具,提供比較低階的安裝維護功能,一般而言,使用者會使用比較友善的 dselect 或是 aptitude。
顯示目前裝在系統中的所有 packages(rpm 用 rpm -qa)
dpkg --list
想知道總共有那些檔案安裝在系統中(rpm 為 rpm -ql samba)
dpkg --listfiles samba
或是在系統中有某個執行檔, 想知道屬於那個 package, 這樣在別台機器中才有辦法安裝
$ which smbd /usr/sbin/smbd $ dpkg --search /usr/sbin/smbd samba: /usr/sbin/smbd
最前面的 samba 即為 package 名稱, 先用 which 找到 smbd 這個執行檔放在那個路徑, 再用 dpkg --search 來找到 package
名稱(redhat 中則用 rpm -qf /usr/sbin/smbd)
看 package 的說明(redhat 為 rpm -qi samba)
dpkg --status package_name 或 dpkg -s package_name
假設我們由網路上自行抓了一個 .deb 的檔回來, 這時就要用 dpkg 來安裝(redhat 為 rpm -i xxx.rpm)
dpkg --install package_name.deb 或 dpkg -i package_name.deb
移除某個 package(rpm 為 rpm -e package_name)
dpkg --remove package_name 或 dpkg -r package_name
徹底移除 package
dpkg --purge package_name 或 dpkg -P package_name
在還未安裝到系統中前, 查看會安裝那些檔案在系統中(rpm 用 rpm -qlp xxx.rpm)
dpkg --contents package_name.deb 或 dpkg -c package_name.deb
在還未安裝到系統中前, 查看 deb 檔es的資訊(rpm 用 rpm -qip xxx.rpm)
dpkg --info xxx.deb
顯示目前各個軟體套件的安裝狀態(未安裝、正確安裝、被移除、完整移除、安裝失敗等等)
dpkg --get-selections
如何在升級套件時, 讓某些套件不要更新:
echo "packagename hold" | dpkg --set-selections
tasksel 是在安裝過程中必備的工具之一,它會詢問你需要何種任務的軟體,你只需要選擇工作所必須的項目,它便會自動將所需工具安裝到系統中。對於生手、懶人或是不願意浪費時間逐一安裝軟體的職業 IT 從業人員非常有幫助。
如你在安裝過程並未做好決定,那麼你隨時都可以用 root 執行 DebianPackages:tasksel 指令。你可以選擇的有
基於 DebianPackages:libncurses5 為 dpkg 主要的使用者選單介面。逐漸被功能更為強大的 aptitude 取代。
DebianPackages:apt 的全名是 Advanced front-end for dpkg ,就如同這個軟體的名字一般,它的主要用途是提供簡化的指令例如 apt-get 以及 apt-cache 等,讓使用者可以輕鬆的搜尋、安裝、升級軟體。更進階的資訊請安裝 DebianPackages:apt-doc 。
Debian GNU/Linux 可以經由修改 /etc/apt/sources.list 這個檔案來指定套件的來源伺服器。也就是說,我們可以在 /etc/apt/sources.list 中指定要上哪裡去下載 Debain 的套件,而這個清單可以是本地端的目錄、http或是ftp。
如:
deb http://http.us.debian.org/debian stable main contrib non-free deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free deb http://security.debian.org stable/updates main contrib non-free
所以在網路上看到 deb http://URLS 時應該要了解到是用來指定要從哪裡來下載這些套件的。
其中 security 是指在 Stable 裡的套件如果有安全上的更新時就會放來這裡。所以如果您在安裝完 Stable 時別忘了要把所有套件更新至 security!方法是將 /etc/apt/sources.list 改成:
deb http://security.debian.org/ stable/updates main contrib non-free
更新 /etc/apt/sources.list,將列表更新,看有那些 packages 有新版本
apt-get update
將系統中所安裝的 packages 中有更新的全部昇級
apt-get upgrade -u
就可以把目前的所有套件更新至 security 了。
安裝某個 package
apt-get install package_name
移除某個 package
apt-get remove package_name
移除某個 package, 並將設定檔給移除
apt-get remove --purge package_name
下載某個 package 的原始碼 source, 也就是還沒 compile 的(平常用 apt-get install下載的是 binary), 由於某些時候我們須要去修改 compile time 的設定, 經由這個步驟, 很容易就可以自己做 .deb 檔後安裝。
apt-get source package_name
下載 source package 後, compile package 需要某些程式庫或 packages, 這個指令可以將全部需要的 packages 都裝起來
apt-get build-dep package_name
apt-get 在安裝 package 前會下載回來放到 /var/cache/apt/archives 中, 再從這裡去解開後安裝, 而這個指令就是將下載後的 deb 檔全部清除
apt-get clean
而 apt-get update 所下載的 sources.list 是放在 /var/lib/apt/lists 裡。由 apt-get 所下載的 deb 檔案是統一放在 /var/cache/apt/archives/ 裡面的。這些檔案可以保存下來或是分享出來給別的機器,這樣子可以節省下大量不必要的頻寬。而一些過舊有新版本的 *.deb 可以使用 apt-get autoclean 將過期的 deb,保留最後一個版本的 deb。
apt-get autoclean
在指定套件的來源伺服器後,就可以開始使用 apt-get 指令來安裝 deb 套件了。我們可以在 /etc/apt/apt.conf 中指定預設是要安裝的是 Stable、Testing 還是 Unstable。以 Stable 為例,將下面這一行加到 /etc/apt/apt.conf 中,那麼以後安裝套件時就會預設以 Stable 為主:
APT::Default-Release "stable";
這時如果想要安裝 Testing 的套件時,則以 -t 來指定。如:
apt-get -t testing install mozilla
就會安裝 Testing 的 Mozilla 了。
另外,最好在開始安裝 Debian 套件之前,先用 dpkg-reconfigure debconf 來設定 debconf 的操作方式。一般都設定對話方式為 Dialog、設定的詢問等級設定為 low,這樣才會看到所有的設定、重覆性的問題當然不要一直問。這樣子對於系統的一些小設定才能全盤掌握。
除了使用 apt-get 安裝程式之外,另外一個重要的問題便是了解到底你需要的軟體套件的名稱是甚麼。 DebianPackages:apt-cache 的主要用途是用來搜尋有那些軟體可用,
apt-cache 除了名稱外, 還可以找軟體套件中的說明簡介,功能強大。假設找 samba, 不知道在 debian 中 samba 的名稱為何 ?則可以使用
$ apt-cache search samba distcc - Simple distributed compiler client and server distccmon-gnome - GTK monitor for distcc a distributed client and server ... xsmbrowser - X11 tool for navigating SMB Networks zope-exuserfolder - XUF -- user authentication, properties and sessions $
此外,僅搜尋 package name 的部份(功能和 aptitude 中的 / 是一樣的)
$ apt-cache --names-only search some_pattern
這樣會找和 samba 相關的軟體,非常多,這時就要慢慢過濾,此時可搭配 grep 來去掉一些不必要的資訊。舉個範例,在安裝 samba 之後,想找個 web 介面維護工具來設定 samba ,由於不知道名稱,可用以下指令來找: (在 apt-cache search 之後可加多個 pattern,關係為邏輯 AND,找有含 samba 並且有 web 的)
$ apt-cache search samba web jitterbug - A cgi-bin tool for problem reporting and tracking konq-plugins - plugins for Konqueror, the KDE file/web/doc browser lg-issue72 - Issue 72 of the Linux Gazette. libroxen-ntuserauth - WinNT/SMB user authentication module for the Roxen Challenger web server samba - a LanManager-like file and printer server for Unix smb2www - A Windows Network client that is accessible through a web browser swat - Samba Web Administration Tool webmin-samba - samba control module for webmin xsmbrowser - X11 tool for navigating SMB Networks zope-exuserfolder - XUF -- user authentication, properties and sessions
如果嫌找到的 package 太多, 加個 grep:
$ apt-cache search samba web|grep -i web konq-plugins - plugins for Konqueror, the KDE file/web/doc browser libroxen-ntuserauth - WinNT/SMB user authentication module for the Roxen Challenger web server smb2www - A Windows Network client that is accessible through a web browser swat - Samba Web Administration Tool webmin-samba - samba control module for webmin
用 apt-cache 找時,英文字母大小寫是不分的,但是 grep 預設則是分大小寫,所以可以加上 -i 來忽略大小寫。如果靈感告訴你,應該是 samba 開頭的吧,apt-cache 可以正規表示法當作搜尋條件
$ apt-cache search ^samba web swat - Samba Web Administration Tool webmin-samba - samba control module for webmin
從以上的例子來看,有 swat 及 webmin-samba 可用。但,我們該如何知道那一個才是我們所需要的呢?必須進一步的檢視軟體的介紹才行,
$ apt-cache show swat Package: swat Priority: optional Section: net Installed-Size: 5692 Maintainer: Eloy A. Paris <peloy@debian.org> Architecture: i386 Source: samba Version: 3.0.2-1 Depends: debconf, samba (= 3.0.2-1), libc6 (>= 2.3.2.ds1-4), libcomerr2 (>= 1.33-3), libcupsys2 (>= 1.1.19final-1), libgnutls7 (>= 0.8.12-2), libkrb53 (>= 1.3), libldap2 (>= 2.1.17-1), libpam0g (>= 0.76), libpopt0 (>= 1.7) Recommends: samba-doc Filename: pool/main/s/samba/swat_3.0.2-1_i386.deb Size: 1526486 MD5sum: 889af1c967dea5fcb6baa855f2c48ecd Description: Samba Web Administration Tool The Samba software suite is a collection of programs that implements the SMB protocol for unix systems, allowing you to serve files and printers to Windows, NT, OS/2 and DOS clients. This protocol is sometimes also referred to as the LanManager or NetBIOS protocol. . This package contains the components of the Samba suite that are needed for Web administration of the Samba server. . Note: if you want to use the on-line documentation that is accesible through the Swat front-end you must install the samba-doc package. Task: file-server, print-server
就像你所看到的,apt-cache 可以查詢這個軟體的優先值、軟體分類、安裝後大小、維護者、版本、相依性、建議安裝、檔名、安裝前大小、md5sum 安裝檔驗證值以及軟體的敘述等。
除了這兩個主要功能外, apt-cache 尚有其他功能例如 status
$ apt-cache stats Total Package Names : 17953 (718k) Normal Packages: 14016 Pure Virtual Packages: 249 Single Virtual Packages: 830 Mixed Virtual Packages: 161 Missing: 2697 Total Distinct Versions: 14306 (687k) Total Dependencies: 81911 (2294k) Total Ver/File relations: 15431 (247k) Total Provides Mappings: 2540 (50.8k) Total Globbed Strings: 108 (1262) Total Dependency Version space: 368k Total Slack space: 116k Total Space Accounted for: 4114k
可以顯示目前可用的套件有多少個,以及系統中有多少相依性,舉例而言以上的資訊顯示出系統中有將近一萬八千個軟體,其中一般的軟體有一萬四千個可供安裝使用。
阿信兄的傑作 http://moto.debian.org.tw/viewtopic.php?t=1937&highlight=aptitude
另外 RonHung? 兄還有個密技:
相信大家也有用aptitude這個方便的工具,最近我發現原來aptitude是可以用來做 dpkg-reconfigure的。首先打開 aptitude,然後把光棒移到你想重新設定的套件,然後按 "shift+r",就可以看到跟安裝時設定一樣的畫面啦
介紹一下 aptitude 的用法: 按 ? 可以看有那些功能可用, 在進入 aptitude 的第一件事, 先按 u, 將 packages list 給更新,再做其他的步驟。但如果一天之內開 aptitude 好幾次, 也不用每次按 u,
約每天按一次就夠了, 因為 packages list 不會隨時更動, 有些 mirror, 有可能一天才去國外更新一次, 所以我們如果從那裡更新檔案列表, 自然也就一天後才會有更新。
如有出現 Upgradable Packages, 則表示目前系統上已安裝好的 package 中, 有新的版本可以更新, 那當然要給他更新了, 我們假設系統裝的版本是穩定版本stable(woody),由於在 woody 中, 並不會有新的 package 或功能新增,大部份都是安全性的更新。
將游標移到 Upgradable Packages 上, 按 g 即可開始更新。
在更新前可以先看看有那些東東是這次要更新的。 Enter 鍵可切換樹狀結構展開與否。
iu libgnomevfs2-0 2.2.5-2 2.2.5-3
如上這行, 表示這個 package 叫 libgnomevfs2-0, 而下方的視窗則為此 package 的說明, 第一個字母 i(install) 表示這個 package 本來就安裝在系統中了, 第二個字母 u(upgrade) 為現在要做 Upgrade 的動作, 從 2.2.5-2 昇級到 2.2.5-3。
接著按 g 即會切換到另一個視窗, 這個視窗顯示的是所有要更新的 packages, 再按一次 g 即可開始更新。
--- New Packages --- Upgradable Packages --- Installed Packages --- Not Installed Packages --- Obsolete and Locally Created Packages --- Virtual Packages --- Tasks
熱鍵:
+ : 安裝
- : 移除
_ : 移除 package, 並且將設定檔也移掉(用 - 的話會移除 package 但保留設定檔)
= : 保留 -> 如是 testing or unstable,有可能新的 package 有 bug 或是某個功能拿掉
所以我們不想昇級,只要設成 hold 之後,Debian 就不會去更新此 package 了。
f : 清除 New Packages 的狀態。
[ : 將某一樹狀結構全部展開。
] : 將展開的樹狀結構關掉。
/ : 搜尋某 package
d : 顯示 package 有那些 dependencies(也就是安裝這個 package 之前要先裝那些 packages)
r : 有那些 packages 是 depends on 這個 package
q : 結束 aptitude
enter : 顯示 package 的資訊
範例:
3dchess - 3D chess for X11
3 dimensional Chess for X11R6. Three boards, 96 pieces and 26 directions.
Priority: optional
Section: games
Maintainer: Stephen Stafford <bagpuss@debian.org>
Compressed size: 31.4k
Uncompressed size: 152k
Source Package: 3dchess
--\ Depends
--- libc6 (>= 2.3.1-1)
--- xaw3dg (>= 1.5-6)
--- xlibs (> 4.1.0)
--- Packages which depend on 3dchess
--\ Versions
i 0.8.1-10
gftp : 圖形介面的 ftp client, 用 glib 寫成的 gftp-gtk : 圖形介面的 ftp client, 用 gtk 寫成的 gftp-text : 文字介面的 ftp client gftp-common : 上面三個 package 共用的部份
順便介紹一個踩地雷遊戲, 在下載 package 的過程中可用來打發時間 ^_^。 按 F10 到 menu 中選 Actions -> Play Minesweeper,按 q 可回到 aptitude 中。