APT 服务器对于管理一整个具有 Linux 主机群的管理员来说,真的是顶重要的!因为他可以让我们更方便来管理 RPM 套件的升级喔!
/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 主机的相关设置请参考前面的章节。