最近更新日期:2006/09/10
1. 为何需要进行软体升级
1.1 如何进行软体升级 1.2 各种 distributions 的自动升级机制 2. CentOS 的 yum 自动升级 2.1 yum 的设定档 2.2 yum 的安装、升级、移除、查询等功能与安装套件群组 2.3 不同版本间的升级: CentOS 4.2 to 4.3, FC1 to CentOS 4.3 3. Debian 的 apt 自动升级:以 B2D 为例 3.1 APT 的设定档 3.2 实际使用 APT: apt-get, apt-cache 4. 重点回顾 5. 课后练习 6. 参考资料 7. 针对本文的建议:http://phorum.vbird.org/viewtopic.htm?t=26298 ![]()
很多朋友在网路上面常常会这样留言:
‘大家好,我的 Linux 好像怪怪的,因为没有办法以 root 的身份登入了’,
呵呵!几乎可以直接告诉这位朋友:‘你的系统被入侵了’!嗄~真假?早上才装好,下午被入侵?
没错啊~但~对方是如何办到的呢?
在前一章我们不是有提到‘网路连线的 port 其实是由软体所开启的’, 所以,如果该软体本身就有问题的话,那么当然你的系统就容易被攻破了! 咦!那自由软体干嘛开发出有问题的程式啊?这是因为程式是人写出来的, 在设计之初有些奇怪的用法可能没有考虑到,或者是某些安全问题没有考虑到, 而造成程式的疏失。当这样的程式发布后,很多人会针对这些程式进行检验,如果发现问题就会回报给社群。 那么当回报后直到程式更新之前,总会有一段空窗期,这期间可能就会有些 cracker 开发出具有攻击码的程式, 如果这些攻击程式散布出来的话,那么随便一个小朋友拿到这样的程式,就能攻击你啦! 这个问题并非仅存在于某个单一作业系统,而是所有的作业系统都存在这样的问题, 而且套件的漏洞倒不是一定是会被利用来进行入侵,有的时候,某些套件的漏洞可能导致您 Linux 主机的运行不良或者是容易产生系统当机等等的问题呢!所以,一个好的 Linux 主机, 他的套件最好是随时保持在较新的版本上面,这样还是比较好一点的啦!关于安全漏洞的通报您可以参考底下的网站:
![]()
还记得你是如何安装你 Linux 上面的软体吗?不就是 rpm,
tarball 与 dpkg 吗?
所以啰,你的软体如果想要升级,那就得依据当时你安装该软体的方式来进行升级啊!
而每种方式都有其适用性:
不过,有个特殊案例,那就是旧版本的 Linux (例如 Red Hat 9) 的软体升级该如何是好? 由于旧版本的软体支援度本来就比较差,商业公司或者是社群也没有这么多心力放在旧版本的支援上, 所以,你这个时候可以选择: (1)升级到较新的版本,例如 CentOS 4.3 或者是 SuSE 10 等等,或者是 (2)利用 Tarball 来自行升级核心与软体 。不过,比较建议升级到新版本啦,因为要自行以手动方式由 Tarball 安装到最新的版本,实在是很费时费力,而且还得要常常查阅官方网站所推出的最新消息, 漏过一则都可能发生无法预期的状况。 但不管怎么说,单纯使用 RPM / Tarball / dpkg 的方式来安装与升级软体时, 你都必须要由原版光碟或者是由官方网站下载可安装的套件档案,然后再手动来实际安装到你的系统上。 如此一来,你还是得要盯着官方网站提供的资讯,才能够在第一时间进行升级的动作。 唉!怎么这么麻烦? 我们都晓得在 Windows 的环境下,他有提供一个 Live update 的项目可以自动的线上升级, 甚至很多的防毒软体与防木马软体也都有推出即时的线上更新,如此一来可以让您的软体维持在最新版的状况, 真是好啊!咦!那我们的 Linux 是否有这样的功能?如果有的话,那么系统自动进行软体升级, 不就可以轻松又快乐了?没错!确实是这样的!所以就让我们来谈一谈 Linux 的线上升级机制吧! ![]()
在 Linux 最常见的套件安装方式: RPM / Tarball / dpkg 当中,Tarball 由于取得的是原始码,
所以要用 Tarball 来作线上自动更新是不太可能进行的,所以仅能用 RPM 或 dpkg
这两种套件管理的方式来进行线上更新了。
但 RPM 与 dpkg 不是有所谓的相依属性吗? 这倒不需要担心呐!因为我们的 RPM 与 dpkg 套件档案都有一些套件的基本资讯, 并同时记录了套件的相依属性 (记得使用 rpm -q 的查询吗), 所以当分析这些基本资讯并使用一些机制将这些相依资讯记录下来后, 再透过一些额外的网路功能,就能够自动的分析你的系统与修补套件之间的差异, 并可进一步帮你分析所需要升级与相依属性的套件,就可达成自动升级的理想啦! 由于各家 distributions 在管理系统上都有自己独特的想法,所以在分析 RPM 或 dpkg 套件与方式上面就有所不同, 也就有底下这些不同的线上升级机制啦:
底下鸟哥以 CentOS 4.3 提供的 yum 线上升级架构来进行说明,同时亦简单的介绍一下 B2D 这个 distribution 的 APT 来说明说明! ^_^!那为什么不选择其他的版本来介绍呢? 就如同区域网路那个章节里面的 distribution 选择提到的, 越稳定的版本就不容易发生程式臭虫,不断升级的情况就比较不会发生,所以,鸟哥这里再次的说明一下, 如果要做为主机伺服器之用的话,尽量选择较稳定且支援较多的版本,例如 CentOS, SuSE, Red Hat, B2D 及 debian 等 distribution 啊! ![]()
我们知道 CentOS 主要是以 RPM 来作为套件的管理机制,那么 RPM 本身就有一些表头资料记录了这个套件本身的资讯,
包括了相依属性之类的讯息等等, yum 这个咚咚就是藉由分析这些 RPM 套件的表头资料,并且将这些表头资料事先记录下来,
当使用者要求升级或者是安装的时候, yum 就会透过分析这些表头资料来决定下载的档案,
这些下载的档案当然包括了相依属性的套件了,所以说,yum
已经主动克服了套件之间的属性相依问题啰!很棒吧!
那么 yum 是如何动作的呢?基本上是这样的:
![]()
基本上,在你一安装完 CentOS 之后,系统就主动的帮你建立好 CentOS 的 yum server 设定了,
他的设定档在:
截至目前为止 (2006/09/xx),最新的 CentOS 是 4.4 版,所以上头这个连结你可以进入 4.4 那个目录, 就能够看到很多 CentOS 提供的各项套件资料了。其中比较重要的两个目录是:‘ o s’以及‘ update ’ ,分别是基础套件以及修补过后的套件啦!既然知道了台湾地区的 FTP 网站后,自然就不需要连接到美国去下载档案, 那么连线下载的速度当然就会比较快啦!不过,你就得要自行修改修改设定档了! 不过 CentOS 官方网站则是建议使用国码来作为镜相网站的选择依据, 如此一来在大版本相同的环境下 (4.3 -> 4.4) 咱们的 CentOS 是可以自动升级到不同版本中的! 所以,鸟哥的设定档是改成这个样子的:
另外最要注意的是,在设定档当中所指定的镜像站台 (mirror) 离你越近越好,而且频宽越大越好, 这样你就可以比较方便快速的下载啊!而且,你必须已经成功的连结到该镜像站台才行, 否则在执行 yum 时会发生某些问题喔!另外,你必须是 root 的身份才能使用 yum 啊! 也就是说:
![]()
yum 可不止能够线上自动升级而已,他还可以作查询、套件群组的安装、整体版本的升级等等,好用的哩!
先来谈论一下 yum 这个 client 端的指令用法吧:
什么是‘套件群组’呢?还记得在安装的时候有出现套件选择的地方吧?
在那个时候你选择的资料可不是‘套件名称’喔,而是一堆‘套件群组’,举例来说,
你会看到‘KDE 桌面环境’之类的,而不是每个 KDE 桌面的各项套件名称,对吧!那个咚咚就是‘套件群组’啦!
由于各大 distributions 预设都没有选择发展工具 (Development Tools),
这些工具包含了 gcc, kernel-devel 等等,那么你如何使用 yum 一口气安装呢?
看看底下的范例:
![]()
什么!不同的版本之间可以直接‘网路’升级了喔?没错!而且整个流程还挺简单的,
升级完成之后,绝大部分的服务都还不会有困扰!真是很不错啊!那什么是‘不同版本?’举例来说,
CentOS 4.2 升级到 CentOS 4.3 算是一种,而 Fedora Core 1 升级到 CentOS 4.3 则又是另外一种,
同样是 CentOS 的升级比较容易,尤其 4.3 本来就是架构在 4.2 上面持续发展的结果;
不过如果是 Fedora Core 的话,可能就比较麻烦一点点。底下我们分别谈一谈这两种方式的升级吧!
在 CentOS 的发展理念当中,如果推出了 4.3 ,那么 4.2 以前的 4.x 版本就不会继续发展,
所以使用者必须要将原本的 4.2 直接提升到 4.3 才行。那么需要作些什么动作呢?
不需要啊!只要修改一下 yum 的设定档就好了。首先,同样需要找到最近的镜像站台,
我们依旧以义守大学的 FTP 网站来提供所需要的套件资料,修改成这样:
上面的动作你可以参考底下这一篇官方说明文件:
如果你使用的是旧版的 Linux distributions ,例如 Fedora core release 1, Red Hat 9 等等的系统,
这些系统已经旧到没有什么更新的软体出来,所以如果套件有臭虫而需要更新时,
你可能就得要使用 Tarball 的方式手动的给他‘ configure, make, make install ’等等的,
好累啊~那如果我安装 CentOS 呢?如果需要主动重新安装的话,那旧的资料不是会不见吗?
又得要备份,重新处理等等的,还是很累啊!
没关系!有 yum 就搞定了!你可以将你的 FC1 升级到 CentOS 4.3 了,而且是‘线上更新’喔! 厉害吧!不过,因为 FC1 使用的核心是 2.4 版,但 CentOS 4.3 使用的是新的 2.6.x , 这两种核心可不能互相更新啊!所以啰,我们还需要一些额外的动作来进行升级,而不像前面 CentOS 4.2 升级到 4.3 那么简单!鸟哥底下的动作是参考这几篇:
那如果真的空间不足怎么办?你可以将一些不需要的套件先移除啊!举例来说, 你可以利用‘ yum groupremove "Development Tools" ’之类的指令先将这些不是必备的套件群组移除, 以及其他 X 相关的套件也可以先移除,等到升级完毕后再以 yum 来重新安装即可, 这样可以节省很多升级时分析相依属性所花费掉的时间喔! 同时你得要确认你的镜像站台,以及 CentOS 的数位签章档案已经安装到 RPM 资料库当中才行, 同样的,鸟哥还是以义守大学的 FTP 站为主要的来源镜像站,但是你必须要先取得一些 RPM 相关的档案, 这些档案由于会与 FC1 原本的套件产生不相符合的特性,所以需要先捉下来并且强制安装才行! 请你自行连上: 然后选择最新的版本,例如鸟哥使用 4.3 (2006/08/10 以前) 这个版本,所以直接点选他, 然后依序选择‘os’->‘i386’->‘CentOS’->‘RPMS’,然后下载底下这些档案 (注:套件的版本号码可能会有些不同喔!):
基本上这样已经处理完毕了!也就是说,你的系统应该是由 FC1 顺利的转成 CentOS 4.3 才对! 不过,有些小细节你依旧需要注意喔:
![]()
APT 最早是 debian 这个社群的 Linux distribution 用来作为套件管理的一项机制,
后来实在很方便又好用,所以就被利用来做为其他 distributions 的线上升级管理机制了!
所以你会在很多地方看到有 FC 系列的 APT 伺服器、或者是自订的 APT 伺服器等等的。
这个 APT 的使用与 yum 很类似呐!同样也是透过套件的表头分析后,然后与系统本身资料比对,
因此同样也克服了属性相依的困扰了,非常方便!底下我们就分别来谈一谈吧!
![]()
如同前面提到的 yum 一样,既然是线上升级,那么我们自然得要找到相对应的伺服器啰!
而一般有提供 apt 服务的 distributions 事实上他们都已经做好设定档内相关的伺服器选择了,
例如 B2D 就是一个例子。不过,
如果你是使用类似 Red Hat 9, Fedora Core Release 等版本的话,
可能由于种种原因让你不能将该主机升级到类似 CentOS 等较新的版本时,那你就可以尝试到底下的网站找找看
APT 主机了:
找到属于你的 Linux 版本后,安装 apt 就可以使用 apt 伺服器所提供的套件升级机制啰! 底下赶紧谈一谈,那么如何处理 APT 的设定档呢? APT 的设定档都放在 /etc/apt 目录下,而在该目录下,规范 APT 主机的设定则放到 /etc/apt/sources.list 当中。 以 B2D 为例,他的 sources.list 是这样的:
![]()
APT 的使用也实在是很简单!只要利用 apt-get 即可!不过,不同于 yum 每次都会进行 RPM 档案表头的分析,
APT 则是将套件表头的下载与实际的安装分成两个动作分别执行,先来谈一谈 apt-get 这个指令的用法吧!
当然,还是那句老话,除非您的主机上面有专属的软体需要该版本的 distribution 才能执行, 当转成其他版本可能会发生无法执行的困扰时,那你只好使用旧版的 distribution, 并且找到对应的 APT 或 yum 伺服器,或者是‘你自己建立一个 APT/yum 伺服器’来提供自己升级! 比较能够免除一些程式臭虫的困扰。如果没有以上的困扰,那就直接升级到比较新的版本吧! ‘比较新的版本不一定比较好,不过,在大部分的情况下, 较新版本对硬体的支援以及安全性方面,都会比较好一些。’但是,如果你的主机明明运作的很好, 短期你也不需要什么新硬体的增加,而且你自己有在注意各个套件的安全性时,那不需要升级也是没有问题的啦! ![]()
![]()
如果设定档已经被改过,则更新的设定档会被储存成为 *.rpmnew 的副档名。
并建议使用者应该要将旧的设定档备份,然后以新的设定档来进行重新设定。对于该软体的执行稳定性会较佳。
你可以利用‘ locate rpmnew ’来找出已经安装的新版本设定档,并据以处理该资料;
也可以利用 rpm -Va 来观察系统上面所有的已经被更动过的档案资料!
利用‘ yum grouplist ’找出相关的套件群组,利用‘ yum groupinfo "Develop Tools" ’找出该套件是否为您所需要,
最后用‘ yum groupinstall "Develop Tools" ’安装即可!
可以使用‘ yum search gcc ’找出所需要的套件,然后用‘ yum install xxx ’来安装即可!
![]()
2002/08/02:第一次完成日期! 2003/06/29:加入自己写的自动更新 RPM 的 bash scripts 功能! 2003/07/01:重新编写一些内容介绍,此外,由于 Red Hat 6.x 有点老旧了,已经将 up2date 关于 Red Hat 6.x 以前的资料消除了! 2003/08/22:加入 Mandrake 的 urpmi 以及 APT Client 的设定方法 2006/08/08:将旧的文章移动到 此处。 2006/08/09:由于已经有这么多的线上升级机制,所以鸟哥自己写的 bash shell 不需要使用的啦!将他取消了! 2006/08/10:需要付费的 up2date 也取消了,有需要的话请自行前往旧文章处查阅啦! 2006/08/11:连 Mandriva 所需要的 urpmi 也拿掉了先! ^_^ 2006/09/10:本来 yum 的设定档当中是以义守大学的 FTP 设定为主,改为 CentOS 建议的国码为主! 2002/08/02以来统计人数 |
||||||||||||||||||||||||||||