1
分类: LINUX
2006-10-11 15:30:04
使用 APT 管理 Red Hat Linux RPM | ||
|
|
Since 2003-05-31 by |
前言
你使用什麼方法在管理你的 RPM,從光碟片安裝,從網路下載安裝、還是使用 Red Hat 的 up2date(Red Hat Network)在維護,這些都是解決問題的方法,可是你可以有更好的選擇 -- APT
此文件包含兩個章節,:APT 的安裝、使用,:APT伺服器架設
(註:所有操作皆是在 Red Hat Linux 9 下完成)
第一節 APT 的安裝、使用
1-1. 什麼是 APT
APT(Advanced Package Tool)是 用來管理套件的工具, 這家巴西的 Linux 套件公司將它移植到使用 RPM 系統的 Linux 套件上,所以現在我們才可以在 Red Hat Linux 上使用 APT 來管理我們的 RPM
1-2. APT 能做什麼
我們可以用 APT 來管理我們的 RPM ,不管是安裝、移除、或是升級,APT 都做的到,可是我們選用 APT 最大的理由是:它能夠自動處理 RPM 相依性的問題,例如:當我們要安裝 A rpm,而 A rpm 和 B rpm 又有相依關係的時候,傳統作法是先下載 B rpm 安裝之後,再下載 A rpm 安裝之;可是我們若有安裝 APT,則只要下一行「apt-get install A」指令就可以了,這樣 APT 就會幫我們下載 A rpm,且會自動下載相依性檔案(B rpm)幫我們安裝,如此一來我們對於 RPM 的安裝、移除、或是升級都可以不用去管煩人的相依性問題了。
1-3. APT 簡易運作原理
我們的機器安裝了 APT 套件之後就成了 APT 的使用者端,當我們在安裝、升級 RPM 的時候,事實上,都是透過網路連到遠端的 APT 伺服器去下載 RPM 回來安裝的,APT 伺服器我們是可以自己指定的,而 APT 使用者端也可以同時成為 APT 伺服器(在第二節我們會講到 APT 伺服器的架設)
apt-get update 指令會同步使用者端和 APT 伺服器的 RPM 索引清單(package list),APT 伺服器的 RPM 索引清單置於 base 資料夾內,使用者端電腦取得 base 資料夾內的 bz2 RPM 索引清單壓縮檔後,會將其解壓置放於 /var/state/apt/lists/,而使用者使用 apt-get install 或 apt-get dist-upgrade 指令的時候,就會將這個資料夾內的資料和使用者端電腦內的 RPM 資料庫比對,如此一來就可以知道那些 RPM 已安裝、未安裝、或是可以升級的。
1-4. APT 的安裝
以下所有範例都是以 網站所維護的 APT 為範例
(若對 所維護的 APT 有興趣,請參考:)
請到這個網站尋找適合自己 Red Hat Linux 版本的 APT 下載(以下將以 Red Hat Linux 9 當範例)
線上安裝:rpm -ivh
1-5. 安裝 Red Hat Linux、freshrpms 的 GPG KEY :
rpm --import
rpm --import
1-6. APT 的使用 -- 底下列出幾個常用的指令
apt-get update
更新:這指令是用來取得記錄在 /etc/apt/sources.list 內的遠端伺服器的套件檔案清單, 在使用 「apt-get dist-upgrade」指令升級套件前,一定要記得先用這指令將套件檔案清單更新
apt-get dist-upgrade
升級:這裡的升級,並不是指由 8.0 變成 9 這樣的升級,而是當 Red Hat 有出升級的 rpm 的時候,我們就可以透過這個指令,升級我們已經安裝的 rpm
Red Hat Linux 9 有出那些升級套件,由這個網站可以得知:
註:
APT 源自 Debian GNU/Linux,Debian 在同一個版本編號下,依軟體成熟度又分 stable testing unstable。若我們現在用的是 Debina 3.0r1 stable,使用 apt-get upgrade 就可以升級 for stable 的軟體,而使用 apt-get dist-upgrade 則可以選擇將系統由 stable 升級到 testing 或是 unstable,可是在 Red Hat linux 中並沒有這樣分,所以,使用 apt-get upgrade 和 apt-get dist-upgrade 的結果是一樣的
apt-cache search
搜尋:我們可以用這個指令來搜尋 rpm,例如:apt-cache search httpd,這樣檔名內有 httpd 字眼的 rpm 都會出現了
apt-cache depends
相依性:我們可以用這個指令來看到某個 rpm 的所有相依性檔案,例如:apt-cache depends httpd,這樣 httpd 的所有相依性檔案就會出現了,有時候不確定某個相依性檔案是屬於那個 rpm 時,這個指令就很有用
apt-get install
安裝:當我們知道 rpm 名稱的時候,就可以用這指令安裝套件,例如:apt-get install httpd,這樣 apt 就會自動上網下載 httpd rpm 回來安裝,若 httpd 有相依性套件的時候,apt 也會自動下載安裝
apt-get clean
清除:當使用 apt-get install 指令安裝套件,下載下來的 rpm 會放置於 /var/cache/apt/archives,使用 apt-get clean 指令可以將之清除,避免佔用硬碟空間
apt-get remove
移除:假如我們想要移除某個 rpm 的時候就可以使用此指令,例如:apt-get remove httpd,就會移除 httpd 了,假如這個 rpm 有相依性套件的時候,apt 也會一併移除
以上這幾個指令應該就夠用了,若想要得到更進一步的指令,請善用 man:)
1-7. 定期更新:
vi /etc/cron.daily/upgrade
#!/bin/sh
apt-get update
apt-get -y dist-upgrade
apt-get clean
chmod 755 /etc/cron.daily/upgrade
啟動 crond:chkconfig --level 345 crond on
這樣電腦就會每天定時 upgrade了(要結束前請執行 /etc/cron.daily/upgrade,檢查看看有沒有錯誤)
假如想要直接使用 freshrpms 網站來當作自己的 APT server 來源,沒有要自己架設伺服器,下面就不用看了:)
第二節 架設 APT 伺服器
注意:在進行下面操作前請先確認自己的 apache 已經在正常運做,且 /var 分割區下至少還有 5G 的空間
2-1. 為什麼要架設 APT 伺服器
當我們安裝 freshrpms 的 apt,安裝、升級都是透過網路連線到 freshrpms 網站下載檔案。若只維護一台伺服器,還好,可是若有十台伺服器,就需要花原本十倍的時間和頻寬來做同樣的事情,再加上若和國外的連線頻寬不充裕,這要如何是好,所以當有多台伺服器要維護的時候,架設一台 APT 伺服器,似乎是不錯的選擇。
2-2. 安裝 apt:
請安裝這網站內最新的 apt 套件
線上安裝:rpm -ivh
2-3. 建置放置 Red Hat Linux 9 相關 source 的資料夾
mkdir -p /var/ftp/pub/redhat/linux/9/en/os/i386
#建立放置 Red Hat Linux 9 的資料夾
mkdir -p /var/ftp/pub/redhat/linux/updates/9/en/os
#建立放置 Red Hat Linux 9 updates 的資料夾
2-4. mirror Red Hat Linux 9 source
(底下提供三種方法,請依自己狀況挑選一種方法執行)
方法一:從光碟片複製(當手上有 Red Hat Linux 9 光碟片的時候可以用這個方法)
mount /mnt/cdrom
cp -rf /mnt/cdrom/* /var/ftp/pub/redhat/linux/9/en/os/i386
umount /mnt/cdrom
依照上面方法,複製第二片、第三片光碟片內的 rpm
方法二:從 iso 檔複製(當電腦內有 Red Hat Linux 9 iso 檔的時候可以用這個方法用)
mkdir /mnt/iso
mount -o loop shrike-i386-disc1.iso /mnt/iso
cp -rf /mnt/iso/* /var/ftp/pub/redhat/linux/9/en/os/i386
umount /mnt/iso
mount -o loop shrike-i386-disc2.iso /mnt/iso
cp -rf /mnt/iso/* /var/ftp/pub/redhat/linux/9/en/os/i386
umount /mnt/iso
mount -o loop shrike-i386-disc3.iso /mnt/iso
cp -rf /mnt/iso/* /var/ftp/pub/redhat/linux/9/en/os/i386
umount /mnt/iso
方法三:直接從中研院下載(當手頭沒有光碟片,且電腦內也沒有 iso 檔的時候可以用這個方法)
cd /var/ftp/pub/redhat/linux/9/en/os/i386
wget -r -nH --cut-dirs=6 ftp://linux.sinica.edu.tw/pub1/redhat/redhat-9/en/os/i386/
(包含 SRPMS,約 3.5 G,若網路頻寬不高,會花很久時間,請耐心等候:P)
2-5. mirror Red Hat Linux 9 updates
cd /var/ftp/pub/redhat/linux/updates/9/en/os
wget -r -nH --cut-dirs=6 ftp://linux.sinica.edu.tw/pub1/redhat/updates/9/en/os/
(2003.11.01 止約 600 MB)
2-6. 建立 apt 的資料夾
mkdir -p /var/ftp/pub/redhat/apt/9/i386
2-7. 建立連結
ln -s /var/ftp/pub/redhat/linux/9/en/os/i386/RedHat/RPMS /var/ftp/pub/redhat/apt/9/i386/RPMS.os
ln -s /var/ftp/pub/redhat/linux/9/en/os/i386/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.os
ln -s /var/ftp/pub/redhat/linux/updates/9/en/os/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.updates
# 將 Red Hat Linux 9 的 RPMS、SRPMS 資料夾和 updates 的 SRPMS 資料夾連結到 /var/ftp/pub/redhat/apt 資料夾下,且取名為RPMS.os、SRPMS.os、SRPMS.updates
2-8. 建立 RPMS.updates 資料夾和產生 rpm 相關連結
mkdir /var/ftp/pub/redhat/apt/9/i386/RPMS.updates
cd /var/ftp/pub/redhat/apt/9/i386/RPMS.updates
find /var/ftp/pub/redhat/linux/updates/9/en/os/ -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln -sf {} \;
#使用 find 指令搜尋 updates 資料夾下副檔名為 rpm 的檔案,然後做連結
#有些檔案安裝的時候若用的是 i386(或i686)的檔案,升級的時候也必須要用相同架構的檔案才可以,否則會出現錯誤,而最常出現錯誤的地方就是升級 glibc 的時候,所以上面的 script 就是為了避免發生這樣的錯誤而寫,他會將不同架構的 updates rpm 全部連結到同一個資料夾內,這樣 apt 才有辦法取得適合機器架構的 updates rpm 來升級套件
2-9. 使用 genbasedir 指令產生 base 資料夾和檔案索引清單
genbasedir --flat --bloat --bz2only /var/ftp/pub/redhat/apt/9/i386 os updates
執行過程:(過程會有點久,請耐心等候)
Creating base directory... done
Components: os updates
Processing pkglists... os updates [done]
Processing srclists... [done]
Creating component releases... os updates [done]
Creating global release file... [done]
Appending MD5Sum... os updates [done]
All your base are belong to us!!!
註:
要有安裝 atp 套件,才會有 genbasedir 指令,以上指令列會在 /var/ftp/pub/redhat/apt/9/i386 資料夾下建立 base 資料夾,然後產生相關的檔案索引清單 bz2 壓縮檔和 release 檔
註:
以後只要 /var/ftp/pub/redhat/linux/updates/9/en/os/ 資料夾內的 rpm 有更動過,就需要執行這個指令,以產生新的檔案索引清單
2-10. 建立連結
ln -s /var/ftp/pub/redhat /var/www/html/redhat
#將 ftp 和 html 內的資料連結,這樣才可以用 http 的方式使用 apt server
2-11. 修改 /etc/httpd/conf/httpd.conf
vi /etc/httpd/conf/httpd.conf 在最後面加上這一段
Options Indexes FollowSymLinks MultiViews
重新啟動 httpd:service httpd restart
註:
要不要修改 httpd.conf 隨你,並不會影響 APT server 的功能,只是修改過後,從網頁就可以看到 RPM 的情形
2-12. 定期 mirror updates rpm
安裝 mirrordir:
mirrordir 官方網站:
線上安裝:rpm -ivh
mirror updates rpm:
mirrordir -v /var/ftp/pub/redhat/linux/updates/9/en/os/
定期 mirror:
vi /etc/cron.daily/mirrorupdates
#! /bin/sh
mirrordir ftp://linux.sinica.edu.tw/redhat/updates/9/en/os/ /var/ftp/pub/redhat/linux/updates/9/en/os/
rm -rf /var/ftp/pub/redhat/apt/9/i386/RPMS.updates/*
cd /var/ftp/pub/redhat/apt/9/i386/RPMS.updates
find /var/ftp/pub/redhat/linux/updates/9/en/os/ -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln -sf {} \;
genbasedir --flat --bloat --bz2only /var/ftp/pub/redhat/apt/9/i386 os updates
修改權限:chmod 755 /etc/cron.daily/mirrorupdates
啟動 crond:chkconfig --level 345 crond on
這樣伺服器就會每天定時去 mirror updates rpm 和產生 rpm 索引清單了
(要結束前請執行/etc/cron.daily/mirrorupdates,檢查看看有沒有錯誤)
2-13. client 端電腦的設定、操作
安裝 apt:
請安裝這網站內最新的 apt
線上安裝:rpm -ivh
修改 sources.list:
vi /etc/apt/sources.list
# Red Hat Linux 9
rpm redhat/9/i386 os updates freshrpms
rpm-src redhat/9/i386 os updates freshrpms
修改成這樣
# Red Hat Linux 9
#rpm redhat/9/i386 os updates freshrpms
#rpm-src redhat/9/i386 os updates freshrpms
rpm http://YOUR_IP/redhat/apt/9 i386 os updates
rpm-src http://YOUR_IP/redhat/apt/9 i386 os updates
#其中的 YOUR_IP,請換成自己的伺服器
註:sources.list 是設定 APT 伺服器來源的設定檔,每行設定最後的
os 代表 Red Hat Linux 9 的原始 rpm
updates 代表 Red Hat 所出的更新(updates)rpm
freshrpms 代表 freshrpms.net 維護的 add-on rpm()
而 rpm-src 代表 source rpm
定期更新:
vi /etc/cron.daily/upgrade
#!/bin/bash
apt-get update
apt-get -y dist-upgrade
apt-get clean
chmod 755 /etc/cron.daily/upgrade
啟動crond:chkconfig --level 345 crond on
這樣電腦就會每天定時 upgrade 了(要結束前請先執行 /etc/cron.daily/upgrade,檢查看看有沒有錯誤)
結語:
目錄結構:/var/ftp/pub/redhat
/var/ftp/pub/redhat/
|-- apt
| `-- 9
| `-- i386
| |-- RPMS.os -> /var/ftp/pub/redhat/linux/9/en/os/i386/RedHat/RPMS
| |-- RPMS.updates(在i386資料夾下只有此資料夾是自己所建立)
| |-- SRPMS.os -> /var/ftp/pub/redhat/linux/9/en/os/i386/SRPMS
| |-- SRPMS.updates -> /var/ftp/pub/redhat/linux/updates/9/en/os/SRPMS
| `-- base(此資料夾是由genbasedir 指令所產生)
`-- linux
|-- 9(此資料夾下是放原始的Red Hat Linux 9 source)
| `-- en
| `-- os
| `-- i386
| |-- RedHat
| | `--RPMS
| `--SRPMS
`-- updates(此資料夾下是放Red Hat Linux 9 的更新檔案)
`-- 9
`-- en
`-- os
|-- SRPMS
|-- athlon
|-- i386
|-- i586
|-- i686
`-- noarch
註:
目錄結構我儘量參照 Red Hat 的 ftp 官方網站建立,所以才會這麼多層,我們是可以依照自己的意思來建立的。
freshrpms 網站的一些連結:
可供參考資料:
FAQ
1. 如何為 apt 設定 proxy?
答:vi /etc/apt/apt.conf
找到
Proxy ""; //
加進你可用的 proxy
Proxy "ur_proxy:port"; //
2. 我自己不想架設 apt server,freshrpms.net 又很難連的上去,有沒有其他的 apt server 可供使用?
答:vi /etc/apt/sources.list 將以下 apt server 加進去即可(fro Red Hat Linux 9)
rpm i386 os updates drbl firefly
#國家高速網路中心維護的 apt server:此站台的特色在於有 mirror firefly(螢火飛)的套件,另外還有國家高速網路中心在推廣的 DRBL 相關套件
#有碰 X window 的人,螢火飛大的字型 patches 是一定要裝的;另外 DRBL 是建置無硬碟系統的方案,有興趣的人可以試試看
#firefly:
#DRBL:
rpm ftp://cle.linux.org.tw pub/shrike/RedHat os updates cle freshrpms
#CLE 維護的 apt server:此站台最大的特色不用說,是有放 CLE 的套件,另外它還有 mirror freshrpms 的套件,所以若我們對外頻寬不是很好的話,可以以此站台取代
#有玩 X window 的人,一定要試看看 freshrpms 維護的一些套件,像 mplayer、xine、xmms-mp3、xmule、synaptic ..........都是很實用的軟體,不用四處搜尋下載,可以節省很多時間
#freshrpms 維護的套件:
#底下是幾個國外的網站
rpm i386 os updates
rpm i386 os updates
rpm redhat/9/en/i386 os updates
rpm ftp://ftp.stw-bonn.de/pub/apt redhat/9/en/i386 os updates
rpm ftp://apt-rpm.tuxfamily.org/apt redhat/9/en/i386 os updates
|
| |
|
|
|