问题:
当前我们各主机都是用REDHAT LINUX,原先如果要更新RPM包时以及时的为系统中使用的一些软件打上补丁或者使用新功能,以增强系统的安全性,我们现在都是使用REDHAT公司提供的UP2DATE程序,但你必须得到REDHAT公司网站去注册帐号,以及填写相关资料,并且要定时到他们网站去看,否则将不让你up2date,因此给我们更新RPM包带来了许多不便,用了Debian之后,发现在Debian 中的软件包更新非常方便(使用up2date),令人爱不释手!并且上次在网站上有听说,rpm也可以用atp了,因此,今天用google搜索一下,发现真有其事,并找到了atp的主站,并将pt.cjcht.com,以及和sunroll.com安装atp,然后使用apt-get update后,再使用apt-get upgrade,将所有未更新的软件包更新到最新,现简要的操作说一下,与大家共享!
其实你如果有使用Debian的话,我想也不必说了太多,如果你没用过Debian的话,没关系,你看完我给你的资料后,我想也很简单!
apt介绍及文章资料:
APT(Advanced Package Tool)是 Debian GNU/Linux 用來管理套件的工具,Conectiva 這家巴西的 Linux 套件公司將它移植到使用 RPM 系統的 Linux 套件上,所以現在我們才可以在 Red Hat Linux 上使用 APT 來管理我們的 RPM.
atp主站: http://freshrpms.net/
atp介绍: http://freshrpms.net/apt/
下载APT在各种LINUX发行版的主页: http://apt.freshrpms.net/
其实要使用atp,不外乎是要安装一下apt的包,你到apt的主站上下载apt的包就可以了:
我们pt.cjcht.com和sunroll.com上是安装Redhat Linux 7.3因此你到apt主页上Download相应的RPM包,并安装之,我下载的是:
apt-0.5.5cnc5-fr0.rh73.2.i386.rpm 和 apt-devel-0.5.5cnc5-fr0.rh73.2.i386.rpm(不是必需的)
然使用里面的atp-get apt-cache等命令去更新的或其它的动作,我就不说了,附档的资料里已经说的非常清楚,你再使用man,将会更清楚,atp server就没去弄了,我们做server没有什么意义!
看一下附档以及上面的atp主站的资料就很快速的掌apt了。
祖彬
使用 APT 管理 Red Hat Linux RPM | ||
|
| Since 2003-05-31 by 楊錦昌 |
前言
你使用什麼方法在管理你的 RPM,從光碟片安裝,從網路下載安裝、還是使用 Red Hat 的 up2date(Red Hat Network)在維護,這些都是解決問題的方法,可是你可以有更好的選擇 -- APT
此文件包含兩個章節,第一節:APT 的安裝、使用,第二節:APT伺服器架設
(註:所有操作皆是在 Red Hat Linux 9 下完成)
1-1. 什麼是 APT
APT(Advanced Package Tool)是 Debian GNU/Linux 用來管理套件的工具,Conectiva 這家巴西的 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 的安裝
以下所有範例都是以 http://freshrpms.net/ 網站所維護的 APT 為範例
(若對 CLE 所維護的 APT 有興趣,請參考:http://cle.linux.org.tw/~candyz/APT-HOWTO_CLE.txt)
請到這個網站尋找適合自己 Red Hat Linux 版本的 APT 下載(以下將以 Red Hat Linux 9 當範例)
線上安裝:rpm -ivh http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm
1-5. 安裝 Red Hat Linux、freshrpms 的 GPG KEY :
rpm --import ftp://linux.sinica.edu.tw/redhat/redhat-9/en/os/i386/RPM-GPG-KEY
rpm --import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
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 有出那些升級套件,由這個網站可以得知:https://rhn.redhat.com/errata/rh9-errata.html
註:
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 來源,沒有要自己架設伺服器,下面就不用看了:)
注意:在進行下面操作前請先確認自己的 apache 已經在正常運做,且 /var 分割區下至少還有 5G 的空間
2-1. 為什麼要架設 APT 伺服器
當我們安裝 freshrpms 的 apt,安裝、升級都是透過網路連線到 freshrpms 網站下載檔案。若只維護一台伺服器,還好,可是若有十台伺服器,就需要花原本十倍的時間和頻寬來做同樣的事情,再加上若和國外的連線頻寬不充裕,這要如何是好,所以當有多台伺服器要維護的時候,架設一台 APT 伺服器,似乎是不錯的選擇。
2-2. 安裝 apt:
http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/
請安裝這網站內最新的 apt 套件
線上安裝:rpm -ivh http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm
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 在最後面加上這一段
<Directory "/var/www/html/redhat">
Options Indexes FollowSymLinks MultiViews
</Directory>
重新啟動 httpd:service httpd restart
註:
要不要修改 httpd.conf 隨你,並不會影響 APT server 的功能,只是修改過後,從網頁就可以看到 RPM 的情形
2-12. 定期 mirror updates rpm
安裝 mirrordir:
mirrordir 官方網站:http://mirrordir.sourceforge.net/
線上安裝:rpm -ivh http://mirrordir.sourceforge.net/mirrordir-0.10.49-1.i386.rpm
mirror updates rpm:
mirrordir -v ftp://linux.sinica.edu.tw/pub1/redhat/updates/9/en/os/i386/ /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:
http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/
請安裝這網站內最新的 apt
修改 sources.list:
vi /etc/apt/sources.list
# Red Hat Linux 9
rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
修改成這樣
# Red Hat Linux 9
#rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
#rpm-src http://ayo.freshrpms.net 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(http://shrike.freshrpms.net/)
而 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,檢查看看有沒有錯誤)
結語:
- 有點複雜:P做成功了嗎?~~~~事實上,上面的作法不過將 Red Hat Linux 9 六片光碟片(包含 source rpm)和 updates 全部複製到 /var/ftp/pub 下,然後將需要用到的部分用 link 的方式連結到 apt 資料夾,比較特別的是 RPMS.updates 這個資料夾,因為針對不同架構的機器, updates 的 rpm 也有所區別,所以用 find 指令,找到所有 updates 的 rpm,將他們 link 到 RPMS.updates,最後再用 genbasedir 指令產生相關檔案清單壓縮檔。
- 照上面的作法做完之後,我們不只架設了 APT 伺服器,只要啟動匿名(anonymous)FTP,同時也得到 FTP 和 HTTP 模式的網路安裝伺服器,可以讓使用者透過網路安裝 Red Hat Linux(網路安裝過程參考)
- http://www.redhat.com/download/mirror.html
在 Red Hat 的網站上列有兩個台灣的 mirror 站,我挑中央研究院的 ftp 站做為我的 mirror 來源,要是你對美頻寬充足的話,也可以直接使用Red Hat 的站台為 mirror 來源。
Red Hat Linux 9 updates:ftp://ftp.redhat.com/pub/redhat/linux/updates/9/en/os/i386/ - 假如有玩 X Window,可以下載 synaptic 套件回來安裝,這是 apt 的圖形介面,有點像是 Debian GNU/Linux 的 aptitude(事實上,Debian 也有 synaptic)。(附圖)
- 如果對影音有興趣,強力推薦 freshrpms 維護的其他 rpm,網路上常看到的影音相關軟體大概都找得到,這樣就不用四處找來找去的,且還有幾個不錯玩的遊戲,很難想像 freshrpms 相關網站和套件全部都是由 Matthias Saou 一個人所維護。
freshrpms 的 Red Hat Linux 9 add-on packages:http://shrike.freshrpms.net/ - 上面所架設的 APT 伺服器,是用 HTTP 的方式在服務,若想要改成 FTP 的方式也是可以的,不過必須要先將匿名(anonymous)FTP 架設好。使用 FTP 的方式,可以限制同時登入的人數,作較嚴格的控管,不過 FTP 會有登入的過程(即使是匿名登入),速度不若 HTTP 來的好。
- 假如現在用的是 Red Hat Linux 8.0、7.3.........,稍微修改一下,就可以架設出適合自己版本的 APT 伺服器了,假如有需要的話:)
目錄結構:/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 網站的一些連結:
- freshrpms首頁:http://freshrpms.net/
- freshrpms APT 伺服器建置說明:http://freshrpms.net/apt/server/
- freshrpms 維護者 Matthias Saou 的首頁:http://www.marmotte.net/thias/
- 構成 freshrpms.net 的機器(有照片喔!):http://freshrpms.net/about/systems/
- 所有的 ftp.freshrpms.net 目錄:http://ftp.freshrpms.net/pub/freshrpms/
- freshrpms 的 mirrors:http://freshrpms.net/mirrors/
可供參考資料:
- http://freshrpms.net/apt/server/(此篇文章主要是參考這篇寫出來的)
- http://cle.linux.org.tw/~candyz/
- http://www.study-area.org/tips/security.txt
- http://phorum.study-area.org/viewtopic.php?t=14087&highlight=apt
FAQ
1. 如何為 apt 設定 proxy?
答:vi /etc/apt/apt.conf
找到
Proxy ""; // http://user:pass@host:port/
加進你可用的 proxy
Proxy "http://Your_proxy:port"; // http://user:pass@host:port/2. 我自己不想架設 apt server,freshrpms.net 又很難連的上去,有沒有其他的 apt server 可供使用?
答:vi /etc/apt/sources.list 將以下 apt server 加進去即可(fro Red Hat Linux 9)
rpm http://opensource.nchc.org.tw/redhat/apt/redhat/9/en i386 os updates drbl firefly
#國家高速網路中心維護的 apt server:此站台的特色在於有 mirror firefly(螢火飛)的套件,另外還有國家高速網路中心在推廣的 DRBL 相關套件
#有碰 X window 的人,螢火飛大的字型 patches 是一定要裝的;另外 DRBL 是建置無硬碟系統的方案,有興趣的人可以試試看
#firefly:http://firefly.idv.tw/test/Forum.php?Board=1
#DRBL:http://drbl.nchc.org.tw/rpm ftp://cle.linux.org.tw pub/shrike/RedHat os updates cle freshrpms
#CLE 維護的 apt server:此站台最大的特色不用說,是有放 CLE 的套件,另外它還有 mirror freshrpms 的套件,所以若我們對外頻寬不是很好的話,可以以此站台取代 http://ayo.freshrpms.net
#有玩 X window 的人,一定要試看看 freshrpms 維護的一些套件,像 mplayer、xine、xmms-mp3、xmule、synaptic ..........都是很實用的軟體,不用四處搜尋下載,可以節省很多時間
#freshrpms 維護的套件:http://shrike.freshrpms.net/
#底下是幾個國外的網站
rpm http://apt.au.freshrpms.net/redhat/9/en i386 os updates
rpm http://ftp-stud.fht-esslingen.de/apt/redhat/9 i386 os updates
rpm http://redhat.usu.edu/mirrors/apt 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