• Linux系统管理技术手册——第12章 软件安装和管理


    12.1 安装Linux和OpenSolaris

    12.1.1 从网络引导PC

    大规模安装时,不适合用GUI页面安装系统,可以使用网络安装方式。

    PXE(Pre-boot eXecution Environment,预引导执行环境)是英特尔公司制定的一项标准,它可以让系统从一个网络接口进行引导。PXE 的作用就像是在网卡上的 ROM 里驻留一个小小的操作系统。它通过一个标准化的API把自己的网络功能提供给系统 BIOS 使用。有了 PXE 和 BIOS 两者的配合,就可以在不需要给每个网卡提供专门驱动程序的情况下,让一个引导加载程序通过网络引导任何有 PXE 的 PC 机。

    12.1.2 为 Linux 设置 PXE

    现在有几种基于 PXE 的网络引导系统,但是目前效果最好的是 PXELINUX。这是他写的通用引导加载程序 SYSLINUX 的一部分。

    PXELinux 提供了一个引导文件,用户把这个文件安装到服务器的 tftpboot 目录下,当 PXE 起作用的时候,这个文件就会被下载到正在启动的PC上。这台PC接着执行这个引导文件,从服务器下载它的配置。下载的配置规定了该使用哪个内核。

    12.1.3 非 PC 的网络引导

    PXE 是英特尔公司的一个产品,它仅限于在 IA-32 和 IA-64 的硬件上使用。其他体系结构有他们自己的网络引导方法,而且几乎都比PXE为完善。

    12.1.4 Kickstart:RHEL的自动安装程序

    12.1.5 AutoYaST: SUSE的自动安装工具

    12.1.6 用 Ubuntu 的安装程序自动安装

    Ubuntu 依靠下层的 Debian 安装程序。所有交互性步骤都采用 cdebconf 这个工具。这个工具可以预先给他提供一个默认配置文件,叫做 preseed.cfg

    12.2 安装 Solaris

    12.3 安装 HP-UX

    12.4 使用 NIM 安装 AIX

    12.5 软件包管理

    Unix和Linux的各种版本都采用了某种形式的软件包系统来简化配置管理工作。软件包传统上一直用来发布软件,但它也可以封装配置文件和管理数据。他们比起传统结构的 .tar.gz 存档文件有几个优势,其中最重要的可能要算他们能让安装过程尽可能成为不可分割的原子操作。如果发生错误,可以卸载软件包或者重新安装软件包。

    软件包的安装程序一般都知道配置文件,正常情况下不会覆盖由系统管理员所做的本地定制信息。软件包系统规定了一种依赖模型要求软件包的维护程序,保证其应用软件所依赖的所有库和支持构造都已经正确的安装好了。

    12.6 Linux 的高级软件包管理系统

    在Linux系统上常用的软件包格式有两种,Red Hat、SUSE和其他几种发行版本使用。而RPM,即 Red Hat Package manager(Red Hat软件包管理器)。Ubuntu 使用的 .deb 是另一种但同样流行的格式(它得名于 Debian 发行版本,Ubuntu最初就以Debian为基础)。这两种格式的功能类似。

    合适的情况下,可以用 alien在两种软件包格式之间进行转换。

    RPM 和 .deb 这两种打包系统现在都是两层的全能配置管理工具。下面一层是安装、卸载和查询软件包的工具:RPM 的工具就 rpm,.deb 的工具叫 dpkg

    以这些命令为基础建立了多种系统。他们懂得如何在 Internet 上找软件包、分析软件包间依赖关系,以及升级系统上所有软件包。配合 RPM 体系运行的 yum (yellowdog Updater,Modified)就是这样的一个系统。 Red Hat Enterprise Linux 也是一个,它专用于 Red Hat Enterprise Linux,也使用 RPM。还有源自于 .deb 世界的 APT(advanced Package Tool,高级软件包工具)。不过他现在能很好的平等处理 .deb 和 RPM 软件包。

    12.6.1 rpm:管理 RPM 软件包

    rpm 命令安装软件包、核实和查询软件包的状态。它以前也可以构造软件包,但是这项功能现在已经拆分出来交由 rpmbuild 命令负责。不过 RPM 的选项仍然有复杂的相互关系,他们只能按某些组合一起使用。最好把 RPM 想成是碰巧有相同名字的几个不同命令。

    用户告诉 rpm 进入的模式(比如 -i-q),指出了用户希望访问到 rpm 多种特性中的哪一个。rpm 的基本选项有:-i(install)-U(update)-e(erase)-q(query)-q 选项稍微有点复杂,因为它只用于启用其他选项,必须再给一个命令行标志来提出特定的问题。例如,命令 rpm -qa 会显示出系统已经安装的软件包的完整清单。

    假如要更新 OpenSSH,一旦已经把软件包下载到了本地计算机上,那么只需要一条命令 rpm -U 用新版本替换老版本:

    rpm -upgrade openssh-2.9p2-12.i386.rpm
    
    error:failed dependencies:
    openssh = 2.9p2-7 is needed by openssh-askpass-2.9p27
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以看到,有若干其它软件包需要当前安装的 OpenSSH 版本,所以 rpm 命令不让我们升级 OpenSSH。工作中经常会遇到这种情况,这也是开发类似于 ATP 和 yum 这样的软件的主要动机。

    我们也可以用 --force 选项强行升级,但往往是个糟糕的想法。我们可以在升级之前就获取到哪些软件包依赖 OpenSSH:

    rpm --query --whatrequires openssh
    
    openssh-askpass-2.9p2-7
    ...
    
    • 1
    • 2
    • 3
    • 4

    如果我们已经得到了所有软件包更新后的副本。我们可以一次一个地来安装它们。但是RPM足够聪明,我们能一次把他们全部装上。如果在命令行列出多个RPM,rpm 会在安装它们之前根据依赖关系对它们进行排序。

    sudo rpm -U openssh-*
    
    • 1

    12.6.2 dpkg:管理 Debian 的软件包

    就像 RPM 软件包有个全能的 rpm 命令一样,Debian 软件包也有 dpkg 命令。dpkg 命令比较有用的选项有:--install--remove,还有-l,它会列出您的系统上已经安装的软件包。注意,dpkg --install 安装软件包之前会把系统上已经有的老版本删除掉。

    运行 dpkg -l | grep package 这条命令时判断某个软件包是否安装的方便途径。

    12.7 Linux 的高级软件包管理系统

    APT 比 Red Hat Network 有更好的文档说明,移植性更强,而且是免费的。在可以用它来做什么这方面,它也更为灵活。APT 源自于 Debian 和 dpkg 但是它已经扩展到能够支持 RPM,在我们举例的发行版本上, 都有合适的 APT 版本可用,对于软件发布来说,APT 是目前我们可以有的最接近通用标准的工具。

    12.7.1 软件包的库

    12.7.2 RHN:Red Hat 网络

    12.7.3 APT:高级软件包工具

    APT 是最成熟的软件包管理系统。用一条 apt-get 命令就可以更新整个一个系统的所有软件。

    各种发行版本一边都包含几个空的软件包,之所以存在这样的软件包,只是为了把其他软件包当作前提条件列出,因为 apt-get 会根据需要,自动下载和升级作为前提的软件包,所以这样的软件包就能很容易地把几个软件包当作一个整体来安装或者升级。例如,安装 gnome-desktop-environment 这个软件包就会保证您获得安装和运行 GNOME 用户界面所需的全部软件包。

    已经建好了自己的 /etc/apt/sources.list 文件,而且知道想要的软件包的名字之后,剩下来的唯一任务就是运行 apt-get update 来刷新 apt-get 缓存的软件包信息。在那之后,只需运行 apt-get install package-name 来安装软件包就行了。同样的命令也会更新已经安装过的软件包。

    12.7.4 配置 apt-get

    apt-get 最重要的配置文件是 /etc/apt/source.list,它告诉 apt-get 到哪里去找它的软件包。这个文件里每行规定的内容如下:

    • 软件包的类型,目前 Debian 类型的软件包用 deb 或者 deb-src,RPM 用 rpm 或者 rpm-src;
    • 指向一个文件、CD-ROM、HTTP服务器或者FTP服务器的URL,从那里可以能够取得软件包;
    • “发布(release,实际上是一个发布的名字)”,它可以提供软件包的多个版本。发行版本提供方使用这个字段来给自己的发行版本指定版本。但是也可以将它用于用户自己的内部发行系统;
    • 组件可能的清单——其实是发行版本内的软件包分类;

    除非想要建立自己的 APT 软件库或者缓存,否则默认配置一般就够用了。下载源代码的话,就要用以 deb-src 开头的那些行。

    12.7.5 /etc/apt/sources.list 文件的例子

    type uri distribution [components]

    deb http://us.archive.ubuntu.com/ubuntu/ karmic main restricted
    deb-src http://us.archive.ubuntu.com/ubuntu/ karmic main restricted

    12.7.6 创建本地的库镜像

    使用 apt-mirror 这个软件包可以创建本地镜像库,可以用 sudo apt install apt-mirror 安装,然后执行 sudo apt-mirror 命令,就会在 /var/spool/apt-mirror 中下载所有的软件。如果要改变这个目录,需要把 /etc/apt/mirror.list 文件中的 set base_path 指令前面的注释去掉(注意,新镜像的根目录下面必须创建 mirrorskelvar 三个子目录)。

    apt-mirror 第一遍执行的时候要花很长时间,以后就会快很多,应该放在 cron 里自动执行。可以运行 clean.sh 这个脚本,把镜像里的 var 子目录下的过期文件都删除干净。

    要开始使用自己的镜像,就要将基础目录通过 HTTP 用本地选用的 web 服务器共享出去。我们喜欢使用符号链接把它连接到 web 的根上,例如:

    ln -s /var/spool/apt-mirror/us.archive.ubuntu.com/ubuntu /var/www/ubuntu
    
    • 1

    12.7.7 自动执行 apt-get

    如果不信然软件包的来源,可以只自动下载,不自动安装,使用 --download-only 选项来达到目的。下载的软件包都保存在 /var/cache/apt 里,可以用 apt-get autoclean 命令可以从这个目录中清理掉没有用的文件。

    12.7.8 yum:管理 RPM 的发布

    12.7.9 Zypper:SUSE 的软件包管理

    12.8 UNIX 的软件包管理

    12.9 版本控制

    12.9.1 创建备份文件

    修改配置之前,尽量创建好备份,可以创建一个自定义函数,用来执行备份操作,在备份的文件名上自动添加日期,方便后续恢复。

    12.9.2 正规的版本控制系统

    有很多,最流行的是 subversion 和 git。

    12.9.3 Subversion

    12.9.4 Git

    12.10 软件的本地化和配置

    12.11 配置管理工具

    12.12 通过 NFS 共享软件

  • 相关阅读:
    redux太繁琐?一文入门学会使用mobx简化项目的状态管理
    Failed to create Spark client for Spark session/30041Code
    NUWA论文阅读
    Excel函数2
    android红外信号
    猿创征文|瑞吉外卖——移动端_订单明细
    微服务中的相关概念
    vue2中组件间通讯
    拓展卡尔曼滤波(Kalman)附Matlab代码
    代码随想录图论 第二天 | 695. 岛屿的最大面积 1020. 飞地的数量
  • 原文地址:https://blog.csdn.net/github_39312212/article/details/127679377