Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3178547
  • 博文数量: 797
  • 博客积分: 10134
  • 博客等级: 上将
  • 技术积分: 9335
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 22:57
个人简介

1

文章分类

全部博文(797)

文章存档

2022年(1)

2021年(2)

2017年(2)

2016年(1)

2015年(4)

2014年(1)

2013年(6)

2012年(6)

2011年(10)

2010年(26)

2009年(63)

2008年(61)

2007年(51)

2006年(563)

我的朋友

分类: 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 installapt-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,檢查看看有沒有錯誤)


結語:

  1. 有點複雜:P做成功了嗎?~~~~事實上,上面的作法不過將 Red Hat Linux 9 六片光碟片(包含 source rpm)和 updates 全部複製到 /var/ftp/pub 下,然後將需要用到的部分用 link 的方式連結到 apt 資料夾,比較特別的是 RPMS.updates 這個資料夾,因為針對不同架構的機器, updates 的 rpm 也有所區別,所以用 find 指令,找到所有 updates 的 rpm,將他們 link 到 RPMS.updates,最後再用 genbasedir 指令產生相關檔案清單壓縮檔。
  2. 照上面的作法做完之後,我們不只架設了 APT 伺服器,只要啟動匿名(anonymous)FTP,同時也得到 FTP 和 HTTP 模式的網路安裝伺服器,可以讓使用者透過網路安裝 Red Hat Linux()

  3. 在 Red Hat 的網站上列有兩個台灣的 mirror 站,我挑中央研究院的 ftp 站做為我的 mirror 來源,要是你對美頻寬充足的話,也可以直接使用Red Hat 的站台為 mirror 來源。
    Red Hat Linux 9 updates:
  4. 假如有玩 X Window,可以下載 套件回來安裝,這是 apt 的圖形介面,有點像是 Debian GNU/Linux 的 aptitude(事實上,Debian 也有 synaptic)。()
  5. 如果對影音有興趣,強力推薦 freshrpms 維護的其他 rpm,網路上常看到的影音相關軟體大概都找得到,這樣就不用四處找來找去的,且還有幾個不錯玩的遊戲,很難想像 freshrpms 相關網站和套件全部都是由 一個人所維護。
    freshrpms 的 Red Hat Linux 9 add-on packages:
  6. 上面所架設的 APT 伺服器,是用 HTTP 的方式在服務,若想要改成 FTP 的方式也是可以的,不過必須要先將匿名(anonymous)FTP 架設好。使用 FTP 的方式,可以限制同時登入的人數,作較嚴格的控管,不過 FTP 會有登入的過程(即使是匿名登入),速度不若 HTTP 來的好。
  7. 假如現在用的是 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首頁:
  • freshrpms APT 伺服器建置說明:
  • freshrpms 維護者 的首頁:
  • 構成 freshrpms.net 的機器(有照片喔!):
  • 所有的 ftp.freshrpms.net 目錄:
  • freshrpms 的 mirrors:

可供參考資料:

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




 

 

 

阅读(2428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~