下实现自动打补丁的方法《网管员世界》曾经在以前的杂志上详细介绍过,得到了大家的一致好评,不过,对于Linux方面自动打补丁的方法,却没有涉及,本文将帮助您打造Linux网络中的自动补丁机。
笔者是一个Red Hat Linux系统管理员,管理着网络中几十台Redhat Linux 9主机。对于Linux这样的开放式系统,和其他私有操作系统(/Solais)相比, 发行商的短期支持策略使得网管经常需要上相应的网站看,是否有补丁,是否有了bug 修复,是否需要升级。千万不要报侥幸心理,否则一个Shell脚本就可能拿下您的网站。套用一句名言:您的永远可能在第二天被黑客接管。
没有经过很好整合和测试的补丁,的维护工作将是一个非常繁重的任务。这是因为系统管理员必须跟踪系统里安装的每一个软件包,有时当补丁发布时还要对子系统进行改造。如果把每个Linux主机分别连接到RadHat的升级网站更新补丁,首先会造成企业网络出口阻塞、浪费宽带资源,另外也不。这里笔者建立一个独立的APT服务器,管理员可以自己先软件包,然后通过网络其他用户可以方便的进行定期升级。 APT服务器上面可以安装多个版本Linux 发行版本的RPM 套件,并且需要提供 WWW服务,因为客户端是通过服务器的 WWW进行 软件包和内核更新。网络拓扑机构见图1。
APT工作原理基本介绍
Debian GNU/Linux 是APT(Advanced Package Tool)的缔造者。初衷是利用工具来解决软件安装时候的依赖性问题。其工作原理大致为:用户安装APT客户端工具,查寻APT服务器端的资料库(repositories)上的RPM软件包信息,并分析软件包之间的依赖性然后并进行安装。APT 除了可以让您很方便且快速地安装 RPM 软件外,也可以用它来更新系统。虽然APT是基于Debian的软件包管理工具,但是已经被一个巴西公司Conectiva移植到基于RPM的系统上。因此对于基于RPM软件包管理的平台,如Red Hat、 TurboLinux、SuSe、Mandrake等Linux发行版本,APT是一个非常优秀的软件管理工具。
服务器端APT安装配置
1. 运行APT之前需要确认服务器上Apache 已经可以提供WWW服务,并且 /var 分分区至少还有 5G 的空间。
2. 安装APT套件,接着需要加入freshrpms.net的公共钥匙GPG-KEY, 然后在/etc/apt下建立一个/gpg文件夹,将GPG-KEY保存在那里,以便日后管理。
# rpm --import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
3、修改配置文件/etc/apt/sources.list,这是APT服务器上最重要的配置文件,记载了软件仓库服务器的地址等信息,这里只需要把需要升级的版本对应的路径信息打开,其它版本的路径信息则可以关闭。
# Red Hat Linux 9.0
rpm http://apt.freshrpms.net redhat/9/en/i386 os updates freshrpms
rpm-src http://apt.freshrpms.net redhat/9/en/i386 os updates freshrpms
4.使用APT前的准备
(1)安装好APT软件包以后,管理员需要做的第一个工作就是从默认服务器下载软件包数据库运行:
#apt-get update
#apt-get upgrade
(2)验证本地系统的完整性和一致性,判断本地系统的软件包依赖性是否一致运行:
# apt-get check
如果希望定期升级系统,保证系统及时升级,弥补漏洞,只需要apt-get update、apt-get dist-upgrade或apt-get upgrade就可以了。
(3)安装图形前端
freshrpms.net站点提供了一个图形界面的apt-rpm接口Synaptic,使用图形界面的apt更加方便,可以直接利用apt安装Synaptic:
[root@Linux root]# apt-get install synaptic
在几行提示之后Synaptic就安装好了,进入Xwindow,Synaptic会出现在“系统设置”菜单里面。界面见图2。
5.主要命令
APT主要有apt-cache、apt-cdrom、apt-config和apt-get四个命令,用户使用最多的就是apt-get命令。APT常用命令功能见表1。
6.建立放置相关source 的目录:
#mkdir -p /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386
#mkdir -p /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os
7.制作mirror Red Hat Linux 9 source。
使用CD-ROM光盘复制所需的 .os 的 到RPM 文件目录:
mount /mnt/cdrom
cp -rf /mnt/cdrom/* /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386
umount /mnt/cdrom
依照上面方法,复制第二片、第三片CD-ROM片内的rpm文件。
8.mirror Red Hat Linux 9 updates
cd /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os
wget -r -nH --cut-dirs=6 ftp://ftp.redhat.com/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/i386/
9. 建立 apt 的目录和相关链接
mkdir -p /var/ftp/pub/redhat/apt/9/i386
ln -s /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386/RedHat/RPMS /var/ftp/pub/redhat/apt/9/i386/RPMS.os
ln -s /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.os
ln-s /var/ftp/pub/redhathttp://Linux.chinaitlab.com/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。
10. 建立 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/redhathttp://Linux.chinaitlab.com/updates/9/en/os/ -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln -sf {} ;
有些软件安装的时候若用的是 i386(或i686),升级的时候也必须要用相同结构的软件包才可以,否则会出现错误,而最常出现错误的地方就是升级glibc的时候,所以上面的script就是为了避免发生这样的错误而写,它会将不同架构的updates rpm全部连结到同一个目录,这样apt才有办法取得适合计算机架构的updates rpm来升级。
11. 使用 genbasedir 指令产生 base 目录和文件索引清单。
genbasedir --flat --bloat --bz2only /var/ftp/pub/redhat/apt/9/i386 os updates
以上指令列会在 /var/ftp/pub/redhat/apt/9/i386 目录下建立 base子目录,然后产生相关的文件索引清单 bz2 压缩文件和 release文件。
12. 建立链接关系
ln -s /var/ftp/pub/redhat /var/www/html/redhat
只有将ftp和html内的文件建立软链接,才可以用http的方式使用apt服务器。
13. 定期 mirror updates rpm
到此为止Apt服务器已经安装结束。上的update套件是随时在更新的,所以我们的APT服务器上的RPMS.updates目录也应该要随时更新。这个时候,我们可以利用映射 (mirror) 的方式来进行更新:
rpm -ivh http://mirrordir.sourceforge.net/mirrordir-0.10.49-1.i386.rpm
mirrordir v /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/ f tp://ftp.redhat.com/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/i386/
vi /etc/cron.daily/mirrorupdates
#! /bin/sh
mirrordir ftp://ftp.redhat.com/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/i386/
/var/ftp/pub/redhathttp://Linux.chinaitlab.com/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/redhathttp://Linux.chinaitlab.com/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 _disibledevent=1>
命令 |
描述 |
apt-get update |
更新本地apt-get的本地数据库,使其与服务器的pkglist文件同步。在升级以前一般都要执行本命令实现与服务器的一致。 |
apt-get check |
验证本地系统的完整性。 |
apt-get dist-upgrade |
安装所有的基础软件包,并升级一切软件包,并在需要时安装新软件包。 |
apt-get remove package_name |
删除该软件包,同时会删除依赖于它的软件包。 |
apt-get install package_name |
安装某个软件包及其相关软件包。 |
apt-get source package_name |
下载软件包的source rpm。 |
apt-get clean |
删除保存在缓存目录下(/var/cache/apt/archives)的被下载的软件包。 |
apt-get upgrade package_name |
升级指定的软件包,并升级其依赖的软件包。 |
apt-cdrom add |
自动mount安装光盘并建立列表。 |
apt-cache depends package_name |
显示软件包的依赖性关系。 |
apt-cache package_name |
在网络上搜索指定的软件包 |
apt-config dump |
显示目前的配置信息。 |