用不惯 Tarball 安装套件却又担心 RPM 的属性相依问题吗?如果有一种套件管理工具可以克服 RPM 属性相依的方法该有多好!有没有这种工具?呵呵!有的,那就是 APT 与 YUM 这两个服务器了。APT (Advanced Package Tool) 是由 debian 这个 distribution 所发展的一个套件管理工具,其目的在克服 RPM 套件的属性相依问题,让使用者可以透过 APT 的分析直接安装/升级/删除相关联的套件喔。另一个很好用的就是 YUM (Yellow dog Updater, Modified) 这个咚咚,他是由 Duke University 所发起的计划,目的则与 APT 相似,都是在克服 RPM 的属性相依问题,方便使用者进行套件的安装、升级等等工作。由于 APT/YUM 这一类的服务器在『系统升级/管理』上面的功能发挥的很好,所以目前很多的 distributions 都把这两个服务器作为预设的服务喔。在这个章节当中,我们要介绍如何在您的 Linux 服务器上面建置一个 ATP 或 YUM 服务器,并且提供更新的 RPM 套件给 Client 端来使用! |
/var/www/html/apt/redhat9
|--RPMS.os |--RPMS.updates |--SRPMS.os (非必备目录) |--SRPMS.updates (非必备目录) `--base |--pkglist.os.bz2 |--pkglist.updates.bz2 |--release |--release.os `--release.updates /var/www/html/apt/mdk9.1 |--RPMS.os |--RPMS.updates |--SRPMS.os (非必备目录) |--SRPMS.updates (非必备目录) `--base |--pkglist.os.bz2 |--pkglist.updates.bz2 |--release |--release.os `--release.updates |
[root@test
root]# vi /etc/apt/apt.conf
APT //第一个大群组 { // Options for apt-get Get //第一个大群组里面的第一个参数 { Download-Only "false"; //第一个参数的项目与该项目之设定值 Show-Upgraded "true"; //第二个参数的项目与该项目之设定值 }; }; |
1. 利用原本的设定技巧:
[root@test root]# vi /etc/apt/apt.conf // 找到底下的参数 Acquire { // 底下加入这些数据: Http { Proxy "http://proxy.ncku.edu.tw:3128"; }; Retries "0"; }; 2. 或者您也可以改用底下的参数设定: [root@test root]# vi /etc/apt/apt.conf //在最后一行加入,注意,不要被括号 {} 括住了! Acquire::Http::Proxy "http://proxy.ncku.edu.tw:3128"; |
[root@test
root]# 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 # 里面料的格式为: # rpm <APT服务器地址> <相对于服务器的路径> <目录一> <目录二> <目录三> ... # 以上面的例子来说,事实上 RPM 放置的目录在: # http://ayo.freshrpms.net/redhat/9/i386/RPMS.os # http://ayo.freshrpms.net/redhat/9/i386/RPMS.updates # http://ayo.freshrpms.net/redhat/9/i386/RPMS.freshrpms # 而至于 rpm-src 则是放置 SRPM 档案的服务器与目录喔! |
[root@test
root]# apt-get <options> <更新项目>
<套件名称>
参数说明: options:关于参数有底下几个较常见的: -q 不要显示 apt-get 运作时的输出讯息,安静一点比较好吗?! ^_^ -y 如果 apt-get 在工作过程中需要使用者响应,这个参数可以直接回答 yes 更新项目:更新的动作有底下几个: update:这个动作很重要,就是我们上面有提到的,Client 端要更新与 APT Server 套件相关性档案的清单对应表,就得要使用这个项目了!基本上, 每次进行 apt-get 来下载 APT Server 的档案前,最好都先 apt-get update install:安装某个套件,后面接套件名称 dist-upgrade:自动升级我们系统上面已经安装的所有 RPM 套件喔 clean:将下载自 APT 主机的的 RPM 档案删除哩! remove:移除已经安装在我们系统的某个套件! 范例: [root@test root]# apt-get update # 将 RPM 档案相关性清单更新! [root@test root]# apt-get install tcpdump # 安装 tcpdump 这个套件 [root@test root]# apt-get -y dist-upgrade # 升级我们系统上面的所有 RPM 套件 [root@test root]# apt-get clean # 至于每日更新的话,可以写入 /etc/crontab 喔 [root@test root]# vi /etc/crontab 40 5 * * * root apt-get update; apt-get -y dist-upgrade ; apt-get clean |
1. 建置所需目录:
[root@test root]# mkdir -p /var/www/html/apt/redhat9/RPMS.os [root@test root]# mkdir -p /var/www/html/apt/redhat9/RPMS.updates [root@test root]# mkdir -p /var/www/html/apt/mdk9.1/RPMS.os [root@test root]# mkdir -p /var/www/html/apt/mdk9.1/RPMS.updates 2. 利用原版 CD 来复制所需的 .os 的 RPM 档案 [root@test root]# cd /var/www/html/apt/redhat9/RPMS.os # 先放入 Red Hat 9 的原版光盘片 [root@test RPMS.os]# mount /dev/cdrom [root@test RPMS.os]# cp /mnt/cdrom/RedHat/RPMS/* . [root@test RPMS.os]# umount /dev/cdrom # 重复上面的步骤,将三片 i386 的 RPM 档案都复制进去! # 至于 Mandrake 的原版光盘复制方法也是相同的步骤! 3. 利用 ftp.nsysu.edu.tw 来下载所需要的 RPM 档案 [root@test RPMS.os]# cd /var/www/html/apt/redhat9/RPMS.updates [root@test RPMS.updates]# ncftp \ > ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/ NcFTP 3.0.2 (October 19, 2000) by Mike Gleason (ncftp@ncftp.com). Connecting to 140.117.11.7... ==================================================================== 欢迎光临【国立中山大学】档案服务器 : FTP.NSYSU.edu.tw Welcome to National Sun Yat-Sen University FTP Server. 右列网址提供本站档案搜寻引擎 http://ftp.nsysu.edu.tw/ File Search Engine on the URL http://ftp.nsysu.edu.tw/ 目前 FTP 部份有 313 人正在在线,最高限制 5000 人. There are currently 313 users out of 5000 possible. ==================================================================== Only anonymous FTP !!!! Please press [ENTER] key. Logging in... ======================================================================== !!!! Important Function !!!! (重要功能介绍) o 'cd key*word' or 'cd prefix*' or 'cd *suffix' provided (case-insentive). (例:cd freebsd 可以打成 cd fr 或 cd *sd 或 cd f*e*d 都通用,大小写都行) ======================================================================== 请多多利用 <A HREF="http://ftp.nsysu.edu.tw">http://ftp.nsysu.edu.tw</A> 可以使用方便的档案搜寻引擎喔!!!!!!!!!!!!!!!!! ======================================================================== ADM.Email: ftpadm@cc.nsysu.edu.tw Anonymous user (163.28.112.1) logged in Logged in to ftp.nsysu.edu.tw. Current remote directory is /pub/Linux/RedHat/linux/updates/9/en/os/i386. ncftp ...x/updates/9/en/os/i386 > mget * ..... |
[root@test
root]# genbasedir <最上层目录> <相对目录一>
<相对目录二> ...
参数说明: 最上层目录:以我们的 APT 主机为例,最上层目录有两个,分别就是: /var/www/html/apt/redhat9 /var/www/html/apt/mdk9.1 相对目录一:那就是 RPMS.os 与 RPMS.updates ,但是记得 RPMS 不要写, 只要 os 以及 updates 即可! 范例: [root@test root]# genbasedir /var/www/html/apt/redhat9 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!!! [root@test root]# genbasedir /var/www/html/apt/mdk9.1 os updates # 动作真是给他有点久~耐心等候吧! ^_^ |
[root@test
root]# vi /etc/apt/sources.list
# 这是我们主机的 Red Hat 9 范例: rpm http://192.168.1.2 apt/redhat9 os updates # 这是 Mandrake 的范例 # rpm http://192.168.1.2 apt/mdk9.1 os updates [root@test root]# apt-get update Get:1 http://192.168.1.2 apt/redhat9 release [543B] Fetched 543B in 0s (1359B/s) Get:1 http://192.168.1.2 apt/redhat9/os pkglist [420kB] Get:2 http://192.168.1.2 apt/redhat9/os release [121B] Get:3 http://192.168.1.2 apt/redhat9/updates pkglist [55.1kB] Get:4 http://192.168.1.2 apt/redhat9/updates release [126B] Fetched 475kB in 8s (57.0kB/s) Reading Package Lists... Done Building Dependency Tree... Done # 这个步骤在测试我们上面的 sources.list 是否正确! # 并且可以同时更新我们 Client 端的 RPM 属性档案记录! # 要出现上面的讯息才对,如果出现错误讯息,很有可能是 WWW 设定错误! |
1. 先在线安装
mirror 吧!
[root@test root]# rpm -ivh \ > http://mirrordir.sourceforge.net/mirrordir-0.10.49-1.i386.rpm 2. mirrordir 的语法 [root@test root]# mirrordir <来源网址> <目标目录> [root@test root]# mirrordir -v \ > ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/ \ > /var/www/html/apt/redhat9/RPMS.updates # 用 -v 来察看一下 mirrordir 的检查状态,如果以 cron 来进行时,就不需要了! 3. 定期进行映像并且同时更新 RPM 档案相关性: [root@test root]# vi /etc/crontab # 加入这一行: 30 5 * * * root mirrordir ftp://ftp.nsysu.edu.tw/Linux/RedHat/linux/updates/9/en/os/i386/ /var/www/html/apt/redhat9/RPMS.updates && genbasedir /var/www/html/apt/redhat9 os updates # 注意喔!上面为连续的一行啊! ^_^ |
谈完了 APT 服务器之后,接下来我们就来谈一谈目前被 Red Hat 及 Fedora 列为预设的 RPM 套件安装/升级机制的 yum 这个服务器啦。
YUM 服务器利用的机制与 APT 类似的, yum 并没有开发新的网络传输机制,同样仅是利用原本主机就提供的 WWW 或者是 FTP 服务,来让 server/client 进行档案的传输。所以在您 yum 服务器上的 RPM 档案同样的需要放置在 WWW 或 FTP 服务可以存取的所在目录才行。这里鸟哥同样以 /var/www/html 这个 WWW 的目录作为说明。
一般来说,我们需要的 RPM 档案就是原本光盘所提供的套件,以及后来厂商提供的升级套件,这两种 RPM 档案我分别将他放置在底下所示的目录内:
表二、APT 主机相关 RPM 档案放置的目录示意表
/var/www/html/yum/fedora/core1
|--base
| `--headers
`--update
`--headers/var/www/html/yum/mandarke/10.0
|--base
| `--headers
`--update
`--headers
如同上表二所示,每一个版本的 Linux 内仅有两个目录,其中 base 是原版光盘的 RPM 档案,至于 update 则是升级的 RPM 档案。比较有趣的地方在于『经过 yum 分析 RPM 档案后的纪录数据是放置在该目录下的 headers 目录内。』举例来说,我们的 mandrake 10.0 升级用的 RPM 档案是放置在 /var/www/html/yum/mandrake/10.0/update 下,则在该目录下的 RPM 被分析后,每一个 RPM 档案的纪录文件则放置在 /var/www/html/yum/mandrake/10.0/update/headers 目录下喔。至于整个 yum 的机制为:
- 先将所有来自 Linux 原版光盘的 RPM 档案复制到 /full/path/base 档案中;
- 再将来自原 Linux 版本公司释出的 RPM 修补套件由 Internet 下载到 /full/path/update 当中;
- 利用 yum 的功能去分析每个目录下的 RPM 档案;
- 在 Client 端上面,每次进行 RPM 套件的升级/安装功能时, yum 会自动的读取 headers 内的纪录文件,并自动分析 RPM 套件的属性相依问题。
与 APT 相比, yum 少了一个 Client 端同步化的步骤了,所以,可以避免使用者不小心遗忘了资料同步化而导致无法取得最新 RPM 纪录的问题喔。
安装 yum 软件yum 在 Red Hat 及 Fedora 是标准配备,所以您无须伤脑筋。但如果您是其它的 distributions 而想要利用这个好用的 yum 功能,那么可以到底下的网站搜寻适合您的 yum 版本: 找到后,直接安装即可。
yum 服务器的套件结构鸟哥觉得, yum 服务器的套件结构要比 apt 简单一些些,基本上只有底下几个咚咚:yum 相关的咚咚就只有这样,是否真的很简单啊? ^_^
- 设定档:不要怀疑,只有一个设定档。
- /etc/yum.conf:这个档案是给 yum client 用的设定档,里面主要规定了要取用 RPM 档案的 yum server 的信息,内容有点像这样:
[root@test root]# vi /etc/yum.conf
# 在这个档案当中,批注符号是 # ,而每一个大项目则以 [] 作为开始
# 除了 [main] 是用在针对本机相关参数的说明之外,要取用服务器的目录时,
# 则需要额外的规定。我们以上述的 base/update 两个目录作为说明:
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1
# 上面主要规定了执行 yum 时所会使用到的目录。例如 /var/cache/yum。
[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://127.0.0.1/yum/fedora/core1/base
# 这里就重要了,那个中括号[]里面就是『目录名称』需要对应正确喔
# name 仅只是说明该目录下的咚咚而已,并不重要;
# baseurl 则是完整的 URL 了!这里请千万填写正确!
[update]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://127.0.0.1/yum/fedora/core1/update
看到了吗?事实上,我们只要设定好 [base] 与 [update] 里面的网址,呵呵!就可以使用 yum server所提供的更新功能啦。- 执行档:
- yum:这个指令是给 yum client 用来作为更新之用的,简单的操作如下:
[root@test root]# yum <options> <更新项目> <套件名称>
参数说明:
options:这里仅列出常见的参数而已。
-y 如果 yum 在工作过程中需要使用者响应,这个参数可以直接回答 yes
更新项目:更新的动作有底下几个:
install :安装某个套件,后面需要接套件名称;
update :这就是升级啦!如果 update 后面接套件名称,表示只要 yum 升级该套件
而已,如果 update 后面不接套件名称,表示 yum 针对目前该主机所有已
经安装的套件进行升级的动作!这是最常使用的项目了。
list :列出目前在 yum server 上面有的 RPM 套件;
info :某个套件的内容,类似 rpm -qi packages 的内容。
clean :将已将下载到本机的 packages 或 headers 移除。
remove :移除已经安装在我们系统的某个套件!
范例:
[root@test root]# yum install hdparm # 安装 hdparm 这个套件
[root@test root]# yum update hdparm # 更新 hdparm 这个套件
[root@test root]# yum -y update # 更新目前本机上面的所有套件,并自动回复 yes
[root@test root]# yum clean packages # 将下载至本机的 RPM 档案删除(放在
/var/cache/yum 里面。
# 至于每日更新的话,可以写入 /etc/crontab 喔
[root@test root]# vi /etc/crontab
40 5 * * * root yum -y update; yum clean packages- yum-arch:这个指令则是给 yum server 使用的!重点在分析 RPM 套件的 header 喔!用法真是很简单,同样已 /var/www/html/yum/fedora/core1/base 为例:
[root@test root]# yum-arch <options> <目录>
参数说明:
options:这里仅列出常见的参数而已。
-q : yum 分析 RPM 过程中不显示讯息。
范例:
[root@test root]# yum-arch /var/www/html/yum/fedora/core1/base
# 只要经过这个步骤, yum 就会自动在 /var/www/html/yum/fedora/core1/base 底下新增
# 一个名为 headers 的目录,并将分析的 RPM 纪录数据都放置在里面喔!- 相关目录:
- /var/cache/yum:我们在 yum 这个指令里面谈到当使用 yum 进行升级时,下载下来的 rpm 档案并不会自动被删除的,那么这些 rpm 档案放在哪里呢?就是放在 /var/cache/yum 这个目录内。这些档案在升级完成后就可以移除了,所以我们可以使用『yum clean packages』来移除这些 rpm 档案喔。
yum 服务器设定yum 服务器的设定真是简单!最重要的是 WWW/FTP 的设定必须要正确才行。整个步骤是这样的:
1. 先建立所需要的目录:
[root@test root]# mkdir /var/www/html/yum/fedora/core1/base
[root@test root]# mkdir /var/www/html/yum/fedora/core1/update
2. 复制原版光盘的内容:
# 利用 mount 与 cp umount 等功能,将原本光盘的内容整个复制到
# /var/www/html/yum/fedora/core1/base 当中。
3. 利用 mirrordir 下载升级套件。鸟哥这里建议使用中山大学的 FTP 网站:
[root@test root]# mirrordir -v \
> http://linux.cdpa.nsysu.edu.tw/Linux/Fedora/linux/core/updates/1/i386/ \
> /var/www/html/yum/fedora/core1/update
4. 进行 RPM 套件分析:
[root@test root]# yum-arch /var/www/html/yum/fedora/core1/base
[root@test root]# yum-arch /var/www/html/yum/fedora/core1/update
5. 为 client 建立 yum.conf 内容:
[root@test root]# vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://127.0.0.1/yum/fedora/core1/base[update]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://127.0.0.1/yum/fedora/core1/update
6. 开始自我升级:
[root@test root]# yum -y update
没错!别怀疑!整个 yum 服务器的架设就是这么简单啊!
建立自己的更新套件如果您曾经自己修改一些 SRPM 的档案,并且重新打包成为 RPM 套件,然后发行给自己的 Linux 机器来安装,此外,您也可能取得一些计划所释出的 RPM 档案,例如 opnewebmail 所释出的 RPM 套件,这些 RPM 档案您又想放置在自己的服务器上面,以方便自己未来升级与查询之用,那么应该怎么放置呢?最简单的方法就是将这些档案放置在 /var/www/html/yum/fedora/core1/update 里面,不过可能会有问题,例如如果您使用 mirrordir 进行数据的映像时,那么您放置的 RPM 档案将会被删除喔!
事实上,我们可以自己设定好额外的升级目录啊!举例来说,鸟哥自己所制作出来的 RPM 档案都是放置在:/var/www/html/yum/fedora/core1/myself当然,该目录是自己建立的,然后将自己新增的 RPM 档案通通给他复制进去该目录下,之后,就是制作 header 档案啦:yum-arch /var/www/html/yum/fedora/core1/myself最后只要在 /etc/yum.conf 里面新增一个目录:[myself]当然啦,要利用您的 RPM 档案的 client ,他的 /etc/yum.conf 就需要加入上面的设定,(注意:127.0.0.1 是在自己的机器上面跑的缘故,您必须要填写正确的 yum server 的主机名称或 IP 才行。)如此一来,您的 RPM 档案就可以被利用啦!
name=My personal RPM files
baseurl=http://127.0.0.1/yum/fedora/core1/myself
如何取得网络上的更新组件上面提到的服务器几乎都是以 FTP 的方式在 internet 上面取得最新的 RPM 套件档案。那如果您的内部网域本身并不提供 FTP 对外联机时,该如何是好?鸟哥曾经遇过一个特别的状况,在该网域内仅提供 port 80 的对外联机,除此之外,一切都是关闭的!而我们使用的 mirrordir 及 ncftp 都是以 ftp 来对外联机,这该如何是好?
好在天无绝人之路啊!记得鸟哥在前面 网络升级套件 那个章节里面提到的 zzgetrpm.sh 档案吗?您只要下载该档案,然后填写正确的 URL ,就可以透过 port 80 下载网络上最新的更新套件了!而后在内部网域当中,您当然就可以透过各方式来进行 yum/apt 的升级噜!^_^
那么架设一部 APT/YUM 主机需要注意哪些事项呢?因为您的 APT 主机还需要运行 WWW ,所以您可能需要独立出一个 partition 以进行虚拟主机的设定,或者是在 /var/www/html 这个预设的 WWW 主页的硬盘空间要足够!反正 APT 主机需要注意的地方最主要还是在于硬盘的空间了!此外, APT 主机最好可以放置在对外频宽较高的网段内,因为还需要对 Internet 取得 update 的 RPM 档案嘛!
而如果您的 APT 主机仅作为 APT 的 update 之用时,而 WWW 仅是附属的功能,那么您在安置 RPM 的所在目录最好额外的限制使用者的浏览网段,避免被外部的人(来自 Internet)作为联机升级的主要主机,那可能会占据掉您的连外频宽吶!所以,可能的话,使用虚拟主机,并且加以设定浏览的属性,例如使用 iptables 设定防火墙,或以 httpd.conf 里面的 ACCEPT/DENY 功能来抵挡,也是一个不错的想法喔!至于 WWW 主机的相关设定请参考前面的章节。