鸟哥的 Linux 私房菜
目录 | Linux 基础篇 | Linux 服务器篇 | Linux 企业应用篇 | 安全管理
     
 
最近更新日期:2006/09/10
在现在的 Internet 上面,Cracker 实在是太多了!这些 Cracker 会利用已经存在的系统漏洞,来进行探测、入侵您的主机, 因此,除了未来搭建防火墙之外,最重要的 Linux 日常管理工作,莫过于套件的升级了! 不过,经由每日观察网络安全通报所告知的套件漏洞,以及等待各大 distribution 针对这些漏洞来提供 RPM 文件,以使 Client 来升级的过程中,实在是有点缓慢啊!因此, 目前就有很多线上直接更新的机制出现了!有了这些线上直接更新 RPM 的手段与方法,我们系统管理员在管理主机系统上面,可就轻松的多啰!赶紧来看看吧!


大标题的图示为何需要进行软件升级
很多朋友在网络上面常常会这样留言: ‘大家好,我的 Linux 好像怪怪的,因为没有办法以 root 的身份登入了’, 呵呵!几乎可以直接告诉这位朋友:‘你的系统被入侵了’!嗄~真假?早上才装好,下午被入侵? 没错啊~但~对方是如何办到的呢?

在前一章我们不是有提到‘网络连线的 port 其实是由软件所开启的’, 所以,如果该软件本身就有问题的话,那么当然你的系统就容易被攻破了! 咦!那自由软件干嘛开发出有问题的程序啊?这是因为程序是人写出来的, 在设计之初有些奇怪的用法可能没有考虑到,或者是某些安全问题没有考虑到, 而造成程序的疏失。当这样的程序发布后,很多人会针对这些程序进行检验,如果发现问题就会回报给社群。 那么当回报后直到程序更新之前,总会有一段空窗期,这期间可能就会有些 cracker 开发出具有攻击码的程序, 如果这些攻击程序散布出来的话,那么随便一个小朋友拿到这样的程序,就能攻击你啦!

这个问题并非仅存在于某个单一作业系统,而是所有的作业系统都存在这样的问题, 而且套件的漏洞倒不是一定是会被利用来进行入侵,有的时候,某些套件的漏洞可能导致您 Linux 主机的运行不良或者是容易产生系统当机等等的问题呢!所以,一个好的 Linux 主机, 他的套件最好是随时保持在较新的版本上面,这样还是比较好一点的啦!关于安全漏洞的通报您可以参考底下的网站:
所以啊,并不是有防火墙就万事 OK !你还必须要更新你的软件才行, 通常建议你,安装 Linux 完毕后的第一项工作那就是..... 立刻进行整体软件的升级!
Tips:
事实上,自由软件的安全性还是比较好的!因为有太多人帮忙检验程序码与更新程序码, 并且,万一程序真的有问题,在发现问题到推出修补程序的期间是比较短的, 也就是说,攻击者可以利用的时间相对缩短,当然使用自由软件的我们就比较安全啦! ^_^
鸟哥的图示

小标题的图示如何进行软件升级
还记得你是如何安装你 Linux 上面的软件吗?不就是 rpm, tarball 与 dpkg 吗? 所以啰,你的软件如果想要升级,那就得依据当时你安装该软件的方式来进行升级啊! 而每种方式都有其适用性:
  • RPM:这是目前最常见于 Linux distribution 当中的套件安装管理方式, 包括 CentOS / Fedora / SuSE / Red Hat / Mandriva 等等,都是使用这个方式来管理的;

  • Tarball:利用软件的官方网站所释出的原始码在您的系统上面编译与安装, 一般来说,由于软件是直接在自己的机器上面编译的,所以效能会比较好一些。 不过,升级的时候就比较麻烦,因为又得要下载新的原始码并且重新编译一次。 这种安装模式常见于某些特殊软件 (没有包含在 distribution 当中),或者是 Gentoo 这个强调效能的 distribution;

  • dpkg:是 debian 这个 distribution 所使用的套件管理方式,与 RPM 很类似,都是透过预先编译的处理,可以让 end user 直接使用来升级与安装。
举例来说,如果你的系统是 CentOS ,我们知道他使用的是 RPM 类型的套件管理模式,那如果你想要安装 B2D 的软件怎办?要注意, B2D 是使用 debian 的 dpkg 来管理套件的,两者并不相同啊!要互相安装太难了! 所以说,要升级的话,得先了解到你系统上的套件安装与管理的方法才行。

不过,有个特殊案例,那就是旧版本的 Linux (例如 Red Hat 9) 的软件升级该如何是好? 由于旧版本的软件支援度本来就比较差,商业公司或者是社群也没有这么多心力放在旧版本的支援上, 所以,你这个时候可以选择: (1)升级到较新的版本,例如 CentOS 4.3 或者是 SuSE 10 等等,或者是 (2)利用 Tarball 来自行升级核心与软件 。不过,比较建议升级到新版本啦,因为要自行以手动方式由 Tarball 安装到最新的版本,实在是很费时费力,而且还得要常常查阅官方网站所推出的最新消息, 漏过一则都可能发生无法预期的状况。

但不管怎么说,单纯使用 RPM / Tarball / dpkg 的方式来安装与升级软件时, 你都必须要由原版光碟或者是由官方网站下载可安装的套件文件,然后再手动来实际安装到你的系统上。 如此一来,你还是得要盯着官方网站提供的资讯,才能够在第一时间进行升级的动作。 唉!怎么这么麻烦?

我们都晓得在 Windows 的环境下,他有提供一个 Live update 的项目可以自动的线上升级, 甚至很多的防毒软件与防木马软件也都有推出即时的线上更新,如此一来可以让您的软件维持在最新版的状况, 真是好啊!咦!那我们的 Linux 是否有这样的功能?如果有的话,那么系统自动进行软件升级, 不就可以轻松又快乐了?没错!确实是这样的!所以就让我们来谈一谈 Linux 的线上升级机制吧!


小标题的图示各种 distributions 的自动升级机制
在 Linux 最常见的套件安装方式: RPM / Tarball / dpkg 当中,Tarball 由于取得的是原始码, 所以要用 Tarball 来作线上自动更新是不太可能进行的,所以仅能用 RPM 或 dpkg 这两种套件管理的方式来进行线上更新了。

但 RPM 与 dpkg 不是有所谓的相依属性吗? 这倒不需要担心呐!因为我们的 RPM 与 dpkg 套件文件都有一些套件的基本资讯, 并同时记录了套件的相依属性 (记得使用 rpm -q 的查询吗), 所以当分析这些基本资讯并使用一些机制将这些相依资讯记录下来后, 再透过一些额外的网络功能,就能够自动的分析你的系统与修补套件之间的差异, 并可进一步帮你分析所需要升级与相依属性的套件,就可达成自动升级的理想啦!

由于各家 distributions 在管理系统上都有自己独特的想法,所以在分析 RPM 或 dpkg 套件与方式上面就有所不同, 也就有底下这些不同的线上升级机制啦:
  • yum
    CentOS 与 Fedora 所常用的自动升级机制,透过 FTP 或 WWW 来进行线上升级以及线上直接安装套件;

  • up2date
    这是 Red Hat 所使用的自动升级机制,需要注册才能使用,并且依据付费与否而管制其流量;

  • apt
    最早由 debian 这个 distribution 所发展,现在 B2D 也是使用 apt ,同时由于 apt 的可移植性, 所以只要你的 RPM 可以使用 apt 来管理的话,就可以自行建立 apt 服务器来提供其他使用者进行线上安装与升级。

  • you
    所谓的 Yast Online Update (YOU) 是由 SuSE 所自行开发出来的线上安装升级方式, 经过注册取得一组帐号密码后,就能够使用 you 的机制来进行线上升级。不过如果是免费的版本, 则仅有 60 天的试用期!

  • urpmi
    这个则是 Mandriva 所提供的线上升级机制!
讲了这些升级机制并且与 distribution 作了对应,你就该了解到:‘每个 distribution 可以使用的线上升级机制都不相同’的啊!所以请参考你的 distribution 所提供的文件来进行线上升级的设定喔!否则就得要自行手动下载安装了! @_@

底下鸟哥以 CentOS 4.3 提供的 yum 线上升级架构来进行说明,同时亦简单的介绍一下 B2D 这个 distribution 的 APT 来说明说明! ^_^!那为什么不选择其他的版本来介绍呢? 就如同区域网络那个章节里面的 distribution 选择提到的, 越稳定的版本就不容易发生程序臭虫,不断升级的情况就比较不会发生,所以,鸟哥这里再次的说明一下, 如果要做为主机服务器之用的话,尽量选择较稳定且支援较多的版本,例如 CentOS, SuSE, Red Hat, B2D 及 debian 等 distribution 啊!

大标题的图示CentOS 的 yum 自动升级
我们知道 CentOS 主要是以 RPM 来作为套件的管理机制,那么 RPM 本身就有一些表头资料记录了这个套件本身的资讯, 包括了相依属性之类的讯息等等, yum 这个咚咚就是藉由分析这些 RPM 套件的表头资料,并且将这些表头资料事先记录下来, 当使用者要求升级或者是安装的时候, yum 就会透过分析这些表头资料来决定下载的文件, 这些下载的文件当然包括了相依属性的套件了,所以说,yum 已经主动克服了套件之间的属性相依问题啰!很棒吧!

那么 yum 是如何动作的呢?基本上是这样的:
  • 先由设定档判断 yum server 所在处;
  • 连接到 yum server 后,先下载新的 RPM 文件的表头资料;
  • 分析比较使用者所欲安装/升级的文件,并提供使用者确认;
  • 下载使用者选择的文件到系统中的 /var/cache/yum ,并进行实际安装;
所以说,找到合适的 yum server 是挺重要的一件事啊!


小标题的图示yum 的设定档
基本上,在你一安装完 CentOS 之后,系统就主动的帮你建立好 CentOS 的 yum server 设定了, 他的设定档在:
  • /etc/yum.conf
  • /etc/yum.repos.d/CentOS-Base.repo
其中,那个 yum.conf 是主要设定档,可以设定一些环境参数之类的,至于 CentOS-Base.repo 则是主要的 yum server 选择的资料,你可以直接修改 CentOS-Base.repo 这个文件即可。 另外,台湾地区的 CentOS 镜像站台 (mirror) 可以选择义守大学的 FTP 网站, 例如底下的连结:
截至目前为止 (2006/09/xx),最新的 CentOS 是 4.4 版,所以上头这个连结你可以进入 4.4 那个目录, 就能够看到很多 CentOS 提供的各项套件资料了。其中比较重要的两个目录是:‘ o s’以及‘ update ’ ,分别是基础套件以及修补过后的套件啦!既然知道了台湾地区的 FTP 网站后,自然就不需要连接到美国去下载文件, 那么连线下载的速度当然就会比较快啦!不过,你就得要自行修改修改设定档了!

不过 CentOS 官方网站则是建议使用国码来作为镜相网站的选择依据, 如此一来在大版本相同的环境下 (4.3 -> 4.4) 咱们的 CentOS 是可以自动升级到不同版本中的! 所以,鸟哥的设定档是改成这个样子的:
[root@linux ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch
&repo=os&cc=tw
# 注意!上面两行是同一行!
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4

#released updates
[update]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch
&repo=updates&cc=tw
# 注意!上面两行是同一行!
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
......(底下省略).....
主要是将 mirrorlist 那个变数的最后面加上国码‘&cc=tw’就可以了!如果未来有较新的版本时, 那么你的 yum 就能够自动升级啰!另外,除了 [base] 与 [update] 之外,其实 CentOS 还提供很多的额外套件, 这包括了: addons, extras, centosplus, contrib 等等,这些资料你也可以加入到设定档当中, 来帮助你容易安装某些非正规支援的套件资料啊! ^_^

另外最要注意的是,在设定档当中所指定的镜像站台 (mirror) 离你越近越好,而且频宽越大越好, 这样你就可以比较方便快速的下载啊!而且,你必须已经成功的连结到该镜像站台才行, 否则在执行 yum 时会发生某些问题喔!另外,你必须是 root 的身份才能使用 yum 啊! 也就是说:
  • 你必须使用 root 的身份来执行 yum ;
  • 设定档内指定的镜像站台必须能与你进行网络连接;
  • 镜像站台频宽越大越好,所以选择离你越近的镜像站越好!

小标题的图示yum 的安装、升级、移除、查询等功能
yum 可不止能够线上自动升级而已,他还可以作查询、套件群组的安装、整体版本的升级等等,好用的哩! 先来谈论一下 yum 这个 client 端的指令用法吧:
[root@linux ~]# yum [option] [工作项目] [套件]
参数:
option:主要的参数,包括有:
   -y :当 yum 询问使用者的意见时,主动回答 yes 而不需要由键盘输入;
   --installroot=/some/path :安装在其他的路径,而不在目前目录树的架构中;
        对于建立虚拟机器相当有帮助!不过,一般使用者应该用不到。
[工作项目]:由于不同的使用条件,而有一些选择的项目,包括:
   install :指定安装的套件名称,所以后面需接‘ 套件名称 ’
   update  :进行整体升级的行为;当然也可以接某个套件,仅升级一个套件;
   remove  :移除某个套件,后面需接套件名称;
   search  :搜寻某个套件或者是重要关键字;
   list    :列出目前 yum 所管理的所有的套件名称与版本,有点类似 rpm -qa;
   info    :同上,不过有点类似 rpm -qai 的执行结果;
   clean   :下载的文件被放到 /var/cache/yum ,可使用 clean 将他移除,
             可清除的项目:packages | headers | metadata | cache 等;
另外,在[工作项目]部分还可以具有整个群组套件的安装方式,如下所示:
   grouplist   :列出所有可使用的‘套件组’,例如 Development Tools 之类的;
   groupinfo   :后面接 group_name,则可了解该 group 内含的所有套件名;
   groupinstall:这个好用!可以安装一整组的套件群组,相当的不错用!
                 更常与 --installroot=/some/path 共用来安装新系统
   groupupdate :升级整个套件群组;
   groupremove :移除某个套件群组;

范例一:搜寻 CentOS 的更新主机上是否有 RAID 磁碟阵列相关套件?
[root@linux ~]# yum search raid
.....前面省略.....
mdadm.i386                               1.6.0-3                base
Matched from:
mdadm controls Linux md devices (software RAID arrays)
mdadm is used to create, manage, and monitor Linux MD (software RAID)
.....后面省略.....
# 看到否?输出资料的特殊字体那一行就显示了你可以安装的套件名称然后你可以这样:

[root@linux ~]# yum info mdadm
Name   : mdadm
Arch   : i386
Version: 1.6.0
Release: 3
Size   : 84 k
Repo   : base
Summary: mdadm controls Linux md devices (software RAID arrays)
Description:
.....后面省略.....
# 瞧一瞧啊!套件的版本名称、资料大小、还有该套件出处 (base)!
# 需要注意看的是 Summary 与 Description 这两个注意事项内容!
yum 真是个很好用的东西,他可以直接查询是否有某些特殊的套件, 你可以利用‘ yum search "一些关键字" ’或者是‘ yum list ’列出所有的套件名称, 然后再以正规表示法取得关键字,或者是‘ yum list "套件名称" ’ 就能够知道该套件的用途, 最后再决定要不要安装啊!上面的范例一就是在找出磁碟阵列的管理软件, 如果确定要安装时,那就可以这样处理:
范例二:安装某个套件吧!以 mdadm 为例:
[root@linux ~]# rpm -q mdadm
package mdadm is not installed
# 鸟哥的主机并没有安装这个玩意儿~所以底下开始安装先!

[root@linux ~]# yum install mdadm
Setting up Install Process
Setting up repositories
update                    100% |=========================|  951 B    00:00
base                      100% |=========================| 1.1 kB    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
# 上面这个阶段在读取 RPM 文件的档头资料;

--> Populating transaction set with selected packages. Please wait.
---> Downloading header for mdadm to pack into transaction set.
mdadm-1.6.0-3.i386.rpm    100% |=========================| 8.2 kB    00:00
---> Package mdadm.i386 0:1.6.0-3 set to be updated
--> Running transaction check
# 上面这个阶段则是在下载文件以及准备更新的阶段

Dependencies Resolved
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 mdadm                   i386       1.6.0-3          base               84 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 84 k
Is this ok [y/N]: y
# 至于这个阶段则在分析相依属性,并且让使用者确认下载开始

wnloading Packages:
(1/1): mdadm-1.6.0-3.i386 100% |=========================|  84 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: mdadm                        ######################### [1/1]

Installed: mdadm.i386 0:1.6.0-3
Complete!
# 最终则下载与安装的结果!
瞧!经过 yum 我们可以很轻松的就安装好一个软件,并且这个软件已经主动的帮我们做好相依属性的克服了, 真是方便到爆!另外,你必须要知道,刚刚那个被下载安装的 mdadm 文件被放置到 /var/cache/yum 里面去了, 如果你要节省硬碟空间的话那么可以在安装完毕后将该文件移除,就用:
[root@linux ~]# yum clean packages
Cleaning up Packages
2 packages removed
这样就能够清除掉已下载的文件啰~节省一下硬碟空间啊!OK~那如何进行整体的更新呢? 比如说鸟哥刚刚装完了 CentOS 4.3 ,但这个版本已经推出若干时间,所以也已经作了很多更新了, 那鸟哥如何整体更新啊?很简单,就用如下的指令:
[root@linux ~]# yum -y update
加一个‘ -y ’的参数可以让系统自动帮你回答‘ yes ’,在背景处理时会比较方便一点。 如果你是第一次执行,那就会发现:哇!怎么下载的资料量到达数百 MB 之谱!没错啊! 所以记得 /var/ 这个目录的容量要给大一点才行! 否则就会出现无法完整下载所有更新文件的问题啊! @_@


  • 安装套件群组的功能
    什么是‘套件群组’呢?还记得在安装的时候有出现套件选择的地方吧? 在那个时候你选择的资料可不是‘套件名称’喔,而是一堆‘套件群组’,举例来说, 你会看到‘KDE 桌面环境’之类的,而不是每个 KDE 桌面的各项套件名称,对吧!那个咚咚就是‘套件群组’啦! 由于各大 distributions 预设都没有选择发展工具 (Development Tools), 这些工具包含了 gcc, kernel-devel 等等,那么你如何使用 yum 一口气安装呢? 看看底下的范例:
    范例三:查询与安装‘套件群组’
    [root@linux ~]# yum grouplist
    Installed Groups:
       Administration Tools
       Authoring and Publishing
       Compatibility Arch Support
    .....中间省略.....
    Available Groups:
       Development Tools
       XFCE-4.2
    .....中间省略.....
    Done
    # 看到没!上面就列出来你已经安装的套件群组,还有尚可安装的其他套件群组,
    # 真是非常的方便!那么如何知道 Development Tools 里面有啥咚咚?
    
    [root@linux ~]# yum groupinfo "Development Tools"
    Group: Development Tools
     Required Groups:         <==所需要的相依属性资料
       Development Libraries
     Default Metapkgs:        <==预设内部所需要的中继套件
       Emacs
     Optional Metapkgs:       <==最好还含有这些套件较佳
       Ruby
       XEmacs
    .....中间省略.....
     Mandatory Packages:      <==一些所需要的套件资料
       pkgconfig
       gcc-ppc32
       make
       gcc
       autoconf
    .....中间省略.....
     Default Packages:
       gcc-g77
       cscope
    .....中间省略.....
     Optional Packages
       dejagnu
       ElectricFence
       gcc-gnat
    .....中间省略.....
    # 总共会列出来这个‘套件群组’内含有的各项资料,如果你需要安装的话,就可以:
    
    [root@linux ~]# yum groupinstall "Development Tools"
    
    利用这个‘ yum groupinstall "套件群组名" ’可以让你一口气安装很多的套件, 而不必担心某个套件忘记装了!实在是很不错啦~而且利用 groupinfo 的功能你也可以发现一些不错的套件资料, 如此一来,你就可以更方便的管理你的 Linux 系统了,很不错吧!

    例题:请设定一下工作排程,让你的 centOS 可以每天自动更新系统

    答:
      可以使用‘ crontab -e ’来动作,也可以编辑‘ vi /etc/crontab ’来动作, 由于这个更新是系统方面的,所以鸟哥习惯使用 vi /etc/crontab 来进行指令的说明。 其实内容很简单:
      40 5 * * * root yum -y update && yum clean packages
      这样就可以自动更新了, 时间订在每天的凌晨 5:40 ,并且更新完成后会主动的将下载的套件资料移除喔!


  • 小标题的图示不同版本间的升级
    什么!不同的版本之间可以直接‘网络’升级了喔?没错!而且整个流程还挺简单的, 升级完成之后,绝大部分的服务都还不会有困扰!真是很不错啊!那什么是‘不同版本?’举例来说, CentOS 4.2 升级到 CentOS 4.3 算是一种,而 Fedora Core 1 升级到 CentOS 4.3 则又是另外一种, 同样是 CentOS 的升级比较容易,尤其 4.3 本来就是架构在 4.2 上面持续发展的结果; 不过如果是 Fedora Core 的话,可能就比较麻烦一点点。底下我们分别谈一谈这两种方式的升级吧!


  • CentOS 4.2 升级到 CentOS 4.3
    在 CentOS 的发展理念当中,如果推出了 4.3 ,那么 4.2 以前的 4.x 版本就不会继续发展, 所以使用者必须要将原本的 4.2 直接提升到 4.3 才行。那么需要作些什么动作呢? 不需要啊!只要修改一下 yum 的设定档就好了。首先,同样需要找到最近的镜像站台, 我们依旧以义守大学的 FTP 网站来提供所需要的套件资料,修改成这样:
    1. 先修改 /etc/yum.conf
    [root@linux ~]# vi /etc/yum.conf
    .....前面省略.....
    # 直接在文件的最底下加入这一行来增加一些额外的功能:
    plugins=1
    
    2. 再修改 /etc/yum.repos.d/CentOS-Base.repo
    [root@linux ~]# vi /etc/yum.repos.d/CentOS-Base.repo
    # 内容与‘ yum 的设定档’说明相同,请回到本小节的最前面查阅该设定
    
    因为 /etc/yum.repos.d/CentOS-Base.repo 的内容与前面相同, 所以鸟哥在这里不再浪费篇幅,请往前翻阅吧!设定好了之后,接下来给他进行:
    [root@linux ~]# yum upgrade
    
    记得是‘ upgrade ’而不是‘ update ’喔!两者用法不同啊! 然后接下来就是一段时间的等待啊!没办法,因为从网络上面捉资料下来是需要时间的! 还好鸟哥的环境是在学术网络内,所以连结同样是学术网络的义守大学还挺快的就是了! ^_^! 整个升级的时间大约花费 20 分钟以内,升级完毕之后,重新开机瞧一瞧登入画面!哇!变成 CentOS 4.3 了, 真是快速又方便!而且原本有启动的服务几乎没有任何问题,同样可以正常的启动呐!^_^

    上面的动作你可以参考底下这一篇官方说明文件:

  • Fedora Core Release 1 升级到 CentOS 4.3
    如果你使用的是旧版的 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 那么简单!鸟哥底下的动作是参考这几篇:
    鸟哥底下以 FC1 为例来进行整个升级的动作,不过你得要了解的是,每个人的 Linux 都不相同, 因此虽然鸟哥实作是成功的,不过不代表你的环境一定会成功, 所以,重点是....‘请做好备份!’ 以免升级不成功时,导致整个资料的损毁,那就得不偿失了!
    0. 前处理:先准备好你的资料,以及删除不需要的资料
    [root@linux ~]# yum clean packages headers
    # 先删除原本的 yum  资料,因为 FC1 使用的也是 yum ,
    # 所以最好先将之前 FC1 的 yum 资料删除,比较不会有问题;
    
    在这个步骤当中,你最好先将一些重要资料备份起来,包括 /etc 与 /home 整个目录, 还有其他你有开启的服务的资料,包括 MySQL 或者是 WWW 的网页资料等,请自行备份喔。 另外,我们的 yum 预设是将下载的套件通通放置到 /var/cache/yum 当中,所以你的 /var 目录所在 partition 的容量也需要至少 1GB 以上的容量,而且安装软件所在目录 /usr 所在的 partition 最好也能够有 2GB 以上的空间,否则容易出现空间不足的错误讯息而无法继续。

    那如果真的空间不足怎么办?你可以将一些不需要的套件先移除啊!举例来说, 你可以利用‘ yum groupremove "Development Tools" ’之类的指令先将这些不是必备的套件群组移除, 以及其他 X 相关的套件也可以先移除,等到升级完毕后再以 yum 来重新安装即可, 这样可以节省很多升级时分析相依属性所花费掉的时间喔!

    同时你得要确认你的镜像站台,以及 CentOS 的数位签章文件已经安装到 RPM 资料库当中才行, 同样的,鸟哥还是以义守大学的 FTP 站为主要的来源镜像站,但是你必须要先取得一些 RPM 相关的文件, 这些文件由于会与 FC1 原本的套件产生不相符合的特性,所以需要先捉下来并且强制安装才行! 请你自行连上:
    然后选择最新的版本,例如鸟哥使用 4.3 (2006/08/10 以前) 这个版本,所以直接点选他, 然后依序选择‘os’->‘i386’->‘CentOS’->‘RPMS’,然后下载底下这些文件 (注:套件的版本号码可能会有些不同喔!):
    • centos-release-4-3.2.i386.rpm
    • centos-yumconf-4-4.5.noarch.rpm
    • kernel-2.6.9-34.EL.i686.rpm
    • udev-039-10.12.EL4.i386.rpm
    假设我的这些文件捉下来后放到 /root 下,那接下来的动作是:
    1. 安装升级所需要的 RPM 文件:
    [root@linux ~]# rpm --import  \
    > http://ftp.isu.edu.tw/pub/Linux/CentOS/4.3/os/i386/RPM-GPG-KEY-centos4
    [root@linux ~]# rpm -Uvh centos-release-4-3.2.i386.rpm
    [root@linux ~]# rpm -Uvh centos-yumconf-4-4.5.noarch.rpm
    [root@linux ~]# rpm -ivh --force --nodeps kernel-2.6.9-34.EL.i686.rpm
    # 在这个动作时,由于我们的核心并非是 CentOS ,所以这个动作会发生一些错误,
    # 先不要理他,待会儿的动作再重新处理即可。
    [root@linux ~]# rpm -ivh --force --nodeps udev-039-10.12.EL4.i386.rpm
    
    由于 kernel 2.6 使用的装置管理是以 udev 这个套件来处理的,与原本的 kernel 2.4 并不相同, 为了避免使用者进行错误的安装,所以 yum 会主动的分析核心与装置管理套件的差异, 如果两者无法配合就产生错误讯息且强制中断 yum ,那结果就是导致无法以 yum 进行升级啦! 要躲过这个困扰,你就得要先手动的安装上头那几个 RPM 文件。同时安装 kernel 的过程当中会发生错误讯息, 先不要理他,等到后续步骤再来重新处理即可! 既然 kernel 2.6 会与 2.4 版冲突,而鸟哥的原本的 FC1 本来就有 2.4 版的核心嘛! 那即使安装了新的 kernel-2.6.9-34.EL.i686.rpm 核心,但核心版本冲突的问题还是没有解决的, 所以啊,你就得要这样做了:
    2. 移除会有冲突的 2.4 版核心,连同其原始码
    [root@linux ~]# rpm -qa | grep kernel
    kernel-2.4.22-1.2197.nptl
    kernel-2.4.22-1.2115.nptl
    kernel-2.4.22-1.2199.nptl
    kernel-source-2.4.22-1.2197.nptl
    kernel-source-2.4.22-1.2199.nptl
    .....其他省略.....
    [root@linux ~]# rpm -e kernel-source-2.4.22-1.2199.nptl
    [root@linux ~]# rpm -e kernel-source-2.4.22-1.2197.nptl
    [root@linux ~]# rpm -e kernel-2.4.22-1.2115.nptl
    [root@linux ~]# rpm -e kernel-2.4.22-1.2197.nptl
    [root@linux ~]# rpm -e kernel-2.4.22-1.2199.nptl
    # 反正就是找到核心与核心原始码的套件后,就将他移除!记得套件名为:
    # kernel 与 kernel-source  ,其他的不用动!
    [root@linux ~]# rpm --rebuilddb
    
    将一些旧版本的核心给他移除后,你的系统就只有剩下刚刚安装的那个 CentOS 的新核心, 所以核心版本的冲突当然就不存在了。要注意的是,你现在绝不可重新开机,否则你的系统就挂了! 因为没有核心了喔!切记切记!然后开始要设定好升级时要使用的 yum 设定档了!
    3. 规范设定档
    [root@linux ~]# vi /etc/yum.upgrade
    [main]
    cachedir=/var/cache/yum
    debuglevel=2
    logfile=/var/log/yum.log
    pkgpolicy=newest
    distroverpkg=fedora-release
    installonlypkgs=kernel kernel-smp kernel-hugemem kernel-unsupported
    tolerant=1
    exactarch=1
    plugins=1
    
    [upgrade]
    name=CentOS-4.3 - upgrade
    baseurl=http://ftp.isu.edu.tw/pub/Linux/CentOS/4.3/os/i386/
    
    [update]
    name=CentOS-4.3 - Updates
    baseurl=http://ftp.isu.edu.tw/pub/Linux/CentOS/4.3/updates/i386/
    
    设定档里面先只要有这两个项目即可,因为我们仅注视在整体版本的升级, 所以其他的额外功能部分先不要理他!以后再来处理即可啊!接下来就准备要升级了!这样做吧:
    4. 开始升级的动作:
    [root@linux ~]# yum -y -t -c /etc/yum.upgrade upgrade
    
    理论上,如果你的 FC1 没有安装什么奇怪的软件,而且‘硬碟空间也足够’ ,那么 yum 应该会开始帮你一个一个的下载软件并且分析属性相依问题后,就开始进行安装的步骤。 不过,如果发现一些软件冲突的问题时,那么你就得要先以 rpm -e 将旧的软件先移除, 等到升级完毕后再安装回来即可。只不过这个动作将依你的环境而有所不同。 鸟哥的 FC1 实在是旧的可以,所以很多软件都有冲突,因此事先移除了很多的套件, 忙了快要半小时后,系统才顺利的开始进行安装。由于鸟哥主机所在环境的网络下载的速度尚可而已, 所以由开始下载到升级完毕,大概花了一个半小时左右! @_@
    5. 重新安装核心,并处理 RPM 资料库与更新其他套件
    [root@linux ~]# rpm -ivh --force --nodeps kernel-2.6.9-34.EL.i686.rpm
    [root@linux ~]# rpm --rebuilddb
    [root@linux ~]# yum update
    
    透过这三个指令我们可以再将刚刚没有完成的核心安装一遍,同时再以新的 yum 来进行升级, 这个时候我们的系统应该是很 OK 的啦!不过,有的小问题,那就是‘开机的设定档还没有更新’喔! 所以你还得要这样做:
    6. 设定开机设定档
    [root@linux ~]# vi /boot/grub/menu.lst
    default=0
    timeout=10
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    title CentOS (2.6.9-34.0.2)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.9-34.0.2.EL ro root=/dev/hda1 hdd=ide-scsi rhgb
            initrd /boot/initrd-2.6.9-34.0.2.EL.img
    title CentOS (2.6.9-34.EL)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.9-34.EL ro root=/dev/hda1 hdd=ide-scsi rhgb
            initrd /boot/initrd-2.6.9-34.EL.img
    
    在今日 (2006/08/10) 能够安装的最新核心版本是 2.6.9-34.0.2.EL ,所以上面的第一个 title 才会是这样的设定资料,要记得与你的环境符合啊(如果你不是使用 4.3 来升级)!如果忘记上面各项资料的意义, 请参考‘鸟哥的 Linux 私房菜 基础篇 boot loader ’的介绍啊! 如果设定好了这个开机资讯,嘿嘿!请重新开机试看看吧! ^_^

    基本上这样已经处理完毕了!也就是说,你的系统应该是由 FC1 顺利的转成 CentOS 4.3 才对! 不过,有些小细节你依旧需要注意喔:
    • 观察您的系统是否有启动原有的服务,亦可利用 chkconfig --list;
    • 如果你的旧系统曾有使用 tarball 的方式来安装软件,则升级完毕后你必须要重新安装一次该软件;
    • 系统可能会产生很多的 .rpmnew 的文件,请使用 locate 搜寻,并且重新处理设定档。
    毕竟之前的版本太旧了,所以 RPM 升级时会将新套件的设定档存成 *.rpmnew , 你最好不要使用旧的设定档,而是以新的设定档来重新修改比较好!这样服务的运作应该会比较顺畅一些啊! 到此为止,恭喜您啊! ^_^

  • 大标题的图示Debian 的 apt 自动升级:以 B2D 为例
    APT 最早是 debian 这个社群的 Linux distribution 用来作为套件管理的一项机制, 后来实在很方便又好用,所以就被利用来做为其他 distributions 的线上升级管理机制了! 所以你会在很多地方看到有 FC 系列的 APT 服务器、或者是自订的 APT 服务器等等的。 这个 APT 的使用与 yum 很类似呐!同样也是透过套件的表头分析后,然后与系统本身资料比对, 因此同样也克服了属性相依的困扰了,非常方便!底下我们就分别来谈一谈吧!


    小标题的图示APT 的设定档
    如同前面提到的 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 是这样的:
    1. 先处理 APT 服务器来源的设定资料:
    [root@linux ~]# vi /etc/apt/sources.list
    deb ftp://debian.tnc.edu.tw/pub/debian/ stable main non-free contrib
    deb http://security.debian.org/ sarge/updates main contrib non-free
    deb ftp://debian.tnc.edu.tw/pub1 b2d/
    deb http://ftp2.de.debian.org/debian-volatile sarge/volatile main
    # 上面的格式是这样的:
    # <deb 的标头格式> <APT服务器网址> <相对网址路径> <目录一> <目录二> ...
    
    其实设定档的内容很简单,第一个栏位指的是‘用哪一种套件管理员’的意思,主要有 deb 以及 rpm 还有 rpm-src 等,deb 是 debian 专属的套件管理方式啦! ^_^!第二栏以后就得要一起看才行! 以上表的第一行为例,其实他是说,提供 deb 的网址有三个,分别是:
    • ftp://debian.tnc.edu.tw/pub/debian/stable/main
    • ftp://debian.tnc.edu.tw/pub/debian/stable/non-free
    • ftp://debian.tnc.edu.tw/pub/debian/stable/contrib
    这样看懂了吗?第二栏与第三栏要加在一起,那就是个完整的服务器网址! 后面接的几个资料则是在该网址底下的数个目录,那就很容易看懂了吧! ^_^ 应该是不难啦~如果您是使用 b2d 的话,那恭喜你!不用修改就能用 apt 啰! ^_^
    Tips:
    事实上, /etc/apt/apt.conf 还可以提供其他额外的设定喔,例如使用 Proxy 以及规范下载后的套件在安装完毕后应该进行的处理步骤,举例来说,是否需要将该套件移除! 你应该要使用 man apt.conf 查询一下该文件的用法喔!
    鸟哥的图示

    小标题的图示实际使用 APT
    APT 的使用也实在是很简单!只要利用 apt-get 即可!不过,不同于 yum 每次都会进行 RPM 文件表头的分析, APT 则是将套件表头的下载与实际的安装分成两个动作分别执行,先来谈一谈 apt-get 这个指令的用法吧!
    [root@linux ~]# apt-get [-qy] [-c config_file] [更新项目] [套件名称]
    参数:
    -q :不要在荧幕上输出讯息,常用在背景环境的执行当中喔!
    -y :自动在进行 apt-get 时回答 y 的回应;
    -c :后面接的是设定档,一般系统会主动的以 /etc/apt 内的设定档为依据。
    [更新项目]:要 apt-get 进行的工作,主要有这几项:
       update      :就是更新服务器与用户端的套件表头清单,这个动作务必要进行!
       install     :后面需要加上要安装的套件名称才行!
       upgrade     :进行‘已安装套件’的完整升级,不过未安装套件则不予安装;
       dist-upgrade:以 upgrade 相似,但是当新版本的套件有其他相依属性的套件加入时,
                     单纯的 upgrade 将无法进行安装,此时就得要使用 dist-upgrade 了!
       clean       :清除已经下载到 /var/cache/apt/archives/ 的套件文件。
       remove      :移除某个套件啊!
    
    范例一:进行套件标头更新后,进行整体套件的更新动作
    [root@linux ~]# apt-get update
    下载:1 ftp://debian.tnc.edu.tw stable/main Packages [3349kB]
    下载:2 http://ftp2.de.debian.org sarge/volatile/main Packages [3893B]
    .....中间省略.....
    读取 3868kB 用了 24s (159kB/s)
    读取套件清单中... 完成
    
    [root@linux ~]# apt-get dist-upgrade
    读取套件清单中... 完成
    了解套件依存关系中... 完成
    筹画升级套件中...完成
    下列的套件都将被【删除】:
      blt-common ettercap-plugins libgdbmg1-dev
    下列的【新】套件都将被安装:
      dictionaries-common ettercap-common .....后面省略.....
    下列的套件都将维持旧版本:
      fontconfig libxft-dev libxft2 libxft2-dbg .....后面省略.....
    下列的套件都将更新:
      apache apache-common apache-utils apache2 .....后面省略.....
    更新 105 个套件,新安装 32 个套件,删除 3 个套件,另不更新 7 个套件。
    需要下载 122MB 的文件。
    解压缩后将消耗 39.6MB 的空间。
    继续执行吗? 是按 [Y] 键,否按 [n] 键 y
    下载:1 ftp://debian.tnc.edu.tw stable/main libc6-dev 2.3.2.ds1-22sarge3 [2535kB]
    下载:2 http://security.debian.org sarge/updates/main login 1:4.0.3-31sarge8 [576kB]
    .....中间省略.....
    读取 122MB 用了 11m47s (172kB/s)
    正在预先设定套件 ...
    (正在读取资料库 ... 系统目前总共安装有 112550 个文件和目录。)
    正预备替换 libc6-dev 2.3.2.ds1-22 (使用 .../libc6-dev_2.3.2.ds1-22sarge3_i386.deb)
    正在解压缩替换的套件档 libc6-dev ...
    .....中间省略.....
    Please *restart* your Apache2 !
    Y/N ?
    y
    .....中间省略.....
    
    [root@linux ~]# apt-get clean
    # 这个动作会将刚刚下载的几个 deb 的套件给他移除!节省硬碟空间!
    
    请记得,那个 update 的参数并不是在进行更新, 而是在进行服务器与用户端的套件表头清单更新而已, 但这个动作相当重要,如果你没有作这个动作的话,你的套件就不会更新了! 在 apt-get update 后,再使用 apt-get dist-upgrade 这样就能够将整个系统给他升级了!很快乐吧!不过,由于我们没有加上‘-y’这个参数, 所以在上表当中,我们会老是需要输入一些有的没有的指令, 这样的话,就不适合作为背景的自动升级了!所以,如果你想要在背景以 crontab 的方法自动的帮你升级的话,在 B2D 的环境下使用:
    [root@linux ~]# vi /etc/crontab
    40 5 * * * root /usr/bin/apt-get update && /usr/bin/apt-get -y dist-upgrade
    
    这样每天的凌晨 5:40 就会自动的进行整体升级,而且会主动的克服相依属性的问题喔! 另外,除了完整的将套件给他全部升级之外,我们还可以利用 apt 服务器的功能来进行查询的动作喔! 这个时候就得要 apt-cache 来帮忙了!
    [root@linux ~]# apt-cache [搜寻项目]
    参数:
    [搜寻项目]:apt-cache 可以搜寻 apt 所列出的套件标头资料喔!可用项目有:
    pkgnames:列出本系统上面的所有套件名称!!有点类似 (rpm -qa);
    dump    :列出所有的套件标头以及其相关的相依属性套件!
    search  :后面可接要搜寻的字串,例如 apt-cache search postfix
    show    :后面接套件名称,可以显示出该套件的主要内容的描述!
    showpkg :列出后面所接套件的相依属性以该其套件提供的相关功能!
    depends :可以列出与后面所接套件有相依属性或者是冲突的相关资料!
    
    范例一:找出与 grep  有关的套件
    [root@linux ~]# apt-cache search grep
    .....前面省略.....
    grep - GNU grep, egrep and fgrep
    grep-dctrl - Grep Debian package information
    .....后面省略.....
    
    [root@linux ~]# apt-cache show grep
    Package: grep
    Essential: yes
    Priority: required
    Section: base
    Installed-Size: 660
    Maintainer: Ryan M. Golbeck <rmgolbeck@debian.org>
    Architecture: i386
    Version: 2.5.1.ds1-4
    Provides: rgrep
    Pre-Depends: libc6 (>= 2.3.2.ds1-4)
    Conflicts: rgrep
    Filename: pool/main/g/grep/grep_2.5.1.ds1-4_i386.deb
    Size: 170290
    MD5sum: 68196ad14b098b0eb4b91f4a7cfa8ff2
    Description: GNU grep, egrep and fgrep
     'grep' is a utility to search for text in files; it can be used from the
     command line or in scripts.  Even if you don't want to use it, other packages
     on your system probably will.
    
    [root@linux ~]# apt-cache depends grep
    grep
      特别依存关系: libc6
      冲突: <rgrep>
    
    瞧!利用 apt-cache 就能够找到很多有用的资讯!包括利用 show 这个参数也能够将该套件重要的项目给他列出来! 以上面的 grep 这个套件为例, apt-cache 就列出很多例如版本资讯、冲突资讯 (conflicts) 等等, 尤其是描述 (Description) 的部分,就更可以让使用者了解该套件的用途了! ^_^!另外, 那个 depends 则可以特别列出与该套件有冲突或者是相依属性的文件名称!也是个很有帮助的参数喔! 至于如果你想要安装一个套件的话,例如 zlibc 这个套件时,就可以这样做:
    [root@linux ~]# apt-get install zlibc
    
    如同前面提到的,如果你原本的系统并不是使用 apt 来进行线上升级的机制,而你想要使用 apt 的话, 目前很多服务器都有提供相对应版本的升级,其中以 RPM 套件管理的 Red Hat 与 Fedora 最常见! 台湾杨锦昌老师也提供了完整的 APT 教学,您可以看看:
    当然,还是那句老话,除非您的主机上面有专属的软件需要该版本的 distribution 才能执行, 当转成其他版本可能会发生无法执行的困扰时,那你只好使用旧版的 distribution, 并且找到对应的 APT 或 yum 服务器,或者是‘你自己建立一个 APT/yum 服务器’来提供自己升级! 比较能够免除一些程序臭虫的困扰。如果没有以上的困扰,那就直接升级到比较新的版本吧! ‘比较新的版本不一定比较好,不过,在大部分的情况下, 较新版本对硬体的支援以及安全性方面,都会比较好一些。’但是,如果你的主机明明运作的很好, 短期你也不需要什么新硬体的增加,而且你自己有在注意各个套件的安全性时,那不需要升级也是没有问题的啦!

    大标题的图示重点回顾
    • 由于程序是由人所撰写的,因此程序在执行的过程中难免可能会出现一些安全性的问题或者是程序臭虫的问题。 所以,绝大部分的情况下,将套件保持在最新的版本较能够避免被 cracker 所入侵的问题
    • 绝大部分的自由软件之维护的人员比专属软件还要多,所以程序发生臭虫后的除错与更新时间较快速!!
    • 你不一定要将你的 distribution 更新到最新,不过,更新到最新可以保有较佳的硬体支援与网络安全。
    • 由于 distribution 发展的不同,基本的套件安装可以分为 rpm, dpkg 及 tarball 三种常见模式;
    • 各个 distribution 均有推出自家的线上升级机制,如 CentOS 的 yum, Debian 的 apt, Red Hat 的 up2date 以及 SuSE 的 YOU 等等。各种版本均不可混用。
    • yum 这个升级方案在使用时,会主动的 (1)下载表头资料与 (2)进行使用者所需要的更新动作;
    • apt-get 必须要使用 apt-get update 更新表头资料后,才能够进行使用者所要求的动作!
    • 线上升级机制常常需要使用到 crontab 的工作排程支援;

    大标题的图示课后练习
    • 请找到您的 distribution 所提供的线上升级机制,立刻进行全部更新的动作。
    • 请前往台湾电脑危机处理小组注册,并取得各项危险通告的电子邮件通知!
    • 在 RPM base 的系统当中,如果升级的套件所含有的设定档在系统当中已经被更动过,则该设定档会如何被安装到系统中?
    • 如果设定档已经被改过,则更新的设定档会被储存成为 *.rpmnew 的副档名。 并建议使用者应该要将旧的设定档备份,然后以新的设定档来进行重新设定。对于该软件的执行稳定性会较佳。
    • 承上题,如何找出系统上面含有被更动过的设定档?以 rpm base 的系统为例?
    • 你可以利用‘ locate rpmnew ’来找出已经安装的新版本设定档,并据以处理该资料; 也可以利用 rpm -Va 来观察系统上面所有的已经被更动过的文件资料!
    • 请找出 CentOS 内的 "Development Tools" 相关的资料,如果您尚未安装,请安装他!
    • 利用‘ yum grouplist ’找出相关的套件群组,利用‘ yum groupinfo "Develop Tools" ’找出该套件是否为您所需要, 最后用‘ yum groupinstall "Develop Tools" ’安装即可!
    • 你在进行 CentOS 安装时,选择的是预设安装,装完毕后才发现没有 gcc 这个编译器。 请问你如何安装 gcc ?
    • 可以使用‘ 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 建议的国码为主!

     
         
    中国存储网 ChinaStor.com排版整理
    原文作者鸟哥,主页,更多Linux学习资料在线看:Linux系统管理员手册 - Linux命令大全 - Linux调用大全- Linux专栏 - 国产Linux