Linux系统软件包的管理(4)

Linux 是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件、应用程序和网络协议.它支持32位和64位硬件.Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.

虽然使用源码编译安装可以具有提高速度个性化的定制等优点,但对于 Linux发行商来说,则不容易管理软件包,毕竟不是每个人都会进行源码编译的,如果能够将软件预先在相同的硬体与系统上面编译好在发布的话,不就能够让相同的 Linux 发行版,同时拥有相投的版本了吗,如果再加上简易的安装/移除/管理等机制的话,对于软体控管就会更加简单,大多数现代类 Unix 操作系统都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件,而软件通常以「包」的形式存储在仓库「repository」中,对软件包的使用和管理被称为包管理,本章我们将介绍 RedHat 系统中为我们提供的解决方案,RPM和YUM包管理机制.

由于自由软件的蓬勃发展,加上大型 Unix-Like 主机的强大性能,让很多软件开发者将他们的软件发布出来,后来 Linux 发展起来后,由一些企业或社区打包成为特定的发行版,RedHat就是这方面的龙头老大,但后来发现这些发行版的软件管理机制相当的混乱,没有一种统一的管理方式,这时候各大厂商开始着力研究如何有效的管理这些文件,RedHat提出了rpm和Yum仓库的解决方案,时至今日Yum已成为服务器上使用最多的软件管理工具.此外还有一种dpkg格式的软件安装包,是社区来维护的,下面我们来具体介绍这两种软件包吧.

目前在 Linux 界软件安装方式最常见的有两种,分别是:

● DPKG 包
这个机制最早是由 Debian Linux 社区所开发出来的,通过 dpkg 的包管理, Debian 打包软件就能够简单的安装,同时还能提供安装后的软件维护与更新,只要是衍生于 Debian 的其他 Linux 发行版都 dpkg 这个机制来管理软件的,包括 B2D,Ubuntu,Kali Linux 等.

● RPM 包
这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 Linux 发行版,就使用这个机制来作为软件安装的管理方式,包括 RedHat,Fedora,CentOS,SuSE等知名厂商都在使用它.

如前所述,不论是DPKG还是RPM,这些软件包或多或少都会有依赖关系问题,那么各大 Linux 发行商是如何解决这个问题的呢 ?

目前的 Linux 发行商,在dpkg管理机制上就开发出 APT 包管理工具, RPM 则依开发商的不同,有RedHat系统的YUM,以及SuSE系统的YOU,Mandriva系统的urpmi都在使用RPM下面我们使用的是RedHat系统,所以说使用的管理机制为 RPM 机制,所以我们使用YUM,下面就让我们来谈谈 RPM 与 YUM 的关系吧.

软件管理之RPM

RPM 全名是 "RedHat Package Manager" 简称则为 RPM 顾名思义,当初这个软件管理的机制就是由 Red Hat 这家公司开发出来的 RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制.

RPM命令是RPM软件包的管理工具,rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎,逐渐受到其他发行版的采用,RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度.

那么 RPM 包的特点有哪些呢 ?

⦁ 有专门的工具进行安装、卸载、升级和管理软件,管理起来更加方便.
⦁ 安装简洁、速度快,由于使用RPM无需编译所以安装效率非常高.
⦁ RPM包由于经过了封装,所以我们无法直接获取其源代码.
⦁ 由于经过了封装,所以其功能选择性差,功能定制不灵活.

RPM包的命名方式有哪些 ? i386,i586,i686,noarch,x86_64代表的含义是 ?

[root@localhost ~]# ls -lh
total 3.1M
-r--r--r--. 1 root root 1.8M Jan 17  2018 bind-9.9.4-61.el7.x86_64.rpm
-r--r--r--. 1 root root 1.2M Jan  8  2018 httpd-2.4.6-80.el7.x86_64.rpm

bind      .9.9.4    -61    .el7    .x86_64    .rpm
↑           ↑        ↑       ↑        ↑        ↑
①           ②        ③       ④        ⑤        ⑥

1.软件名称:本例软件名为bind
2.软件版本:本例软件版本为9.9.4-61
3.发布次数:本例修改了61次
4.编译平台:编译平台有(el8=RHEL8,el7=RHEL7,el6=RHEL6)
5.适合平台:平台有(i386,i586,i686,noarch,x86_64)
6.打包格式:这里是rpm包,还有一种gpkg包.

好了,看了这么多内容,下面我们开始进入正题,分别来介绍这些命令的含义吧.

◆RPM 安装软件◆

因为安装软件是ROOT的工作,因此你得要是ROOT的身份才能够使用RPM这个命令的,用RPM来安装很简单,下面我们就来先看他的参数说明吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -i              #安装一个新的rpm软件包
        -v              #显示安装详细过程
        -h              #以"#"号显示安装的进度

        --nodeps        #不检测依赖安装
        --force         #强制安装,不管软件是否存在,都强制重新安装(修复软件)
        --test          #测试安装,不真正安装,检测软件依赖关系
        --prefix        #指定安装路径,不按照默认路径安装
        --replacefiles  #以覆盖写入方式安装
        --replacepkgs   #重复安装软件
        --justdb        #更新软件在数据库内的相关信息
        --nosignature   #忽略数字证书检测
        --noscripts     #禁止软件安装过程中执行某些命令

一般来说RPM的安装选项与参数大约就是这些了,通常建议直接使用 -ivh 就好了,如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用 "暴力安装" ,就是通过 --force 去强制安装,因为可能会发生很多不可预期的问题,除非你很清楚的知道使用上面的参数后,安装的结果是你预期的.

◆RPM 查询信息◆

RPM在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据文件,另外RPM也可以查询未安装的RPM软件资料,下面我们先来看看可用的参数吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

[查询已安装软件]

        -q 软件名        #查看指定软件是否安装
        -qa              #查看系统中所有已安装的软件
        -qi 软件名       #查看指定软件的详细信息
        -qc 软件名       #列出软件所以设置文件
        -qd 软件名       #列出软件所以帮助文件
        -ql 软件名       #查看指定软件安装的目录和文件列表
        -qR 软件名       #查看指定软件的依赖关系
        –qf 文件或目录   #查询文件或者目录,是由哪个软件包安装产生的

[查询未安装软件]

        -qpi 包全名      #查看指定未安装软件的详细信息
        -qpl 包全名      #查看指定未安装软件的默认安装位置(预览)
        -qpR 包全名      #查看指定未安装软件的依赖关系

实例1:使用rpm -qi查看一个软件的详细说明.

[root@localhost ~]# rpm -qi tree

Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: Thu 15 Nov 2018 07:18:16 AM EST
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, Wed 02 Apr 2014 05:33:48 PM EDT, Key ID 199e2f91fd431d51
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : Mon 27 Jan 2014 12:29:58 PM EST
Build Host  : x86-020.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.

实例2:使用rpm -ql查看软件安装释放的目录.

[root@localhost ~]# rpm -ql tree

/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

实例3:使用rpm -qR查看软件依赖关系.

[root@localhost ~]# rpm -qR tree

libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

实例4:使用rpm -qf查看指定文件是由那个包安装的.

[root@localhost ~]# rpm -qf /bin/bash
bash-4.2.46-30.el7.x86_64

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64

实例5:使用rpm -qpi查看一个未安装软件详细信息.

[root@localhost ~]# rpm -qpi bind-9.9.4-61.el7.x86_64.rpm

warning: bind-9.9.4-61.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Name        : bind
Epoch       : 32
Version     : 9.9.4
Release     : 61.el7
Architecture: x86_64
Install Date: (not installed)
Group       : System Environment/Daemons
Size        : 4556343
License     : ISC
Signature   : RSA/SHA256, Wed 17 Jan 2018 05:28:47 AM EST, Key ID 199e2f91fd431d51
Source RPM  : bind-9.9.4-61.el7.src.rpm
Build Date  : Wed 17 Jan 2018 04:15:44 AM EST
Build Host  : x86-034.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://www.isc.org/products/BIND/
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
Description :
BIND (Berkeley Internet Name Domain) is an implementation of the DNS
(Domain Name System) protocols. BIND includes a DNS server (named),
which resolves host names to IP addresses; a resolver library
(routines for applications to use when interfacing with DNS); and
tools for verifying that the DNS server is operating properly.

◆RPM 升级软件◆

使用 RPM 来升级真是太简单了,就以 -Uvh 或 -Fvh 来升级即可,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样的,不过 -U 与 -F 的意义还是不太一样的,下面我们来开一下它的配置信息吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -v              #显示安装详细过程
        -h              #以"#"号显示安装的进度
        -U              #升级安装,若没安装,则直接安装,若安装有旧版本,则升级安装
        -F              #升级安装,若没安装,则不安装,必须有旧版本,才进行升级安装

由上面的说明来看,如果你想要大量的升级系统旧版本的软件,使用 -Fvh 则是比较好的作法,因为没有安装的软件不会安装到你的系统,但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的机器上没有安装该软件,那么该软件并不会被安装在你的 Linux 主机上面,所以请重新以 ivh 来安装吧.

◆RPM 验证证书◆

验证(Verify)的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是使用 "/var/lib/rpm" 下面的数据库数据内容来比对目前 Linux 系统的环境下的所有软件信息,也就是说当你有文件不小心遗失,或者因为你误删除掉了某软件的文件,我们就用这个简单的方法来验证一下原本的软件系统吧,好让你了解这一阵子到底是修改到哪些文件,下面我们先来看一下它的常用参数吧.

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -V 软件名        #验证指定软件安装后的完整性,及文件的元数据是否发生变化
        -Va             #列出目前系统上所有被改动过的文件
        -Vf 文件名       #验证指定文件是否被修改过
        -Vp 文件名       #列出该软件内可能被改动过的文件

下面,我们通过验证一个文件,看其是否被修改过吧.

[root@localhost ~]# rpm -Vf /etc/profile

S.5....T.      c           /etc/profile
#↑ 验证结果     ↑ 文件类型   ↑ 文件位置

你会发现在文件名 /etc/profile 之前有个 c 然后就是一堆奇怪的文字了,那个c代表的是配置文件,至于最前面的八个选项,我们在下面说明一下吧:

验证结果具体的信息:

s -------------> 文件大小是否改变
M -------------> 权限是否被改变
5 -------------> 文件的MD5校验和是否改变(即文件内容)
D -------------> 主从设备号是否改变(/dev/)
L -------------> 文件路径是否改变
U -------------> 文件的属主是否改变
G -------------> 文件的属组是否改变
T -------------> 文件的修改时间是否改变

文件类型具体分类:

c -------------> 配置文件
d -------------> 普通文件
g -------------> 鬼子文件,该文件不应在RPM包中
l -------------> 授权文件
r -------------> 描述文件

经过验证的功能,你就可以知道那个文件被更动过,那么如果该文件的变更是预期中的,那么就没有什么大问题,但是如果该文件是非预期的,那么是否被入侵了了呢,所以说一般配置文件被改动比较正常,要是二进制文件被改动,可能是被入侵了,我们就要提高警惕了啊,毕竟对于一个运维人员来说,背黑锅还是很不爽的啊.

谈完了程序的验证后,不知道你有没有发现一个问题,那就是,验证只能验证程序内的数据与 /var/lib/rpm/里面的数据是否对应而已,如果该程序数据库所提供的数据本身就有问题,那你使用验证的手段也无法确定该软件的正确性啊.下面就出现了数字证书的概念.

就像你自己的签名一样,我们的软件开发商原厂所推出的软件也会有一个厂商自己的证书系统,只是这个证书被数字化了而已,厂商可以生成一个专属的数字证书,并将该证书的公钥(public key) 放入其发行版中,当你要安装一个RPM时,系统会执行以下流程:

⦁ 首先必须找到原厂的公钥文件,然后进行安装
⦁ 然后安装RPM包时,会去提取RPM包中的证书信息,然后和本机安装的原厂证书进行验证
⦁ 如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告

我们 RedHat 使用的数字证书系统为 GNU 计划的 GnuPG (GNU Privacy Guard, GPG)可以通过加密运算,算出独一无二的专属金钥系统或者是数字证书系统,我们也会知道首先必须要安装原厂的GPG数位证书的公钥才行,以下是数字证书的存放位置,其有两份,操作系统中有一份,原厂光盘里也有一份.

[root@localhost ~]# ls -lh /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

-rw-r--r--. 1 root root 3.2K Feb 28  2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[root@localhost ~]# ls -lh /mnt/RPM-GPG-KEY-redhat-release

-r--r--r--. 1 root root 3.2K Feb 28  2018 /mnt/RPM-GPG-KEY-redhat-release

从上面的输出结果,可知证书的位置,下面我们开始安装它.

[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

那安装完成之后,那我们先列出金钥软件名称后,再以 -qi 的方式来查询看一下软件的信息吧.

[root@localhost ~]# rpm -qa |grep pubkey
gpg-pubkey-2fa658e0-45700c69
gpg-pubkey-fd431d51-4ae0493b

[root@localhost ~]# rpm -qi gpg-pubkey-2fa658e0-45700c69
Name        : gpg-pubkey
Version     : 2fa658e0
Release     : 45700c69
Architecture: (none)
Install Date: Thu 15 Nov 2018 09:39:17 AM EST
Group       : Public Keys
Size        : 0
License     : pubkey
Signature   : (none)
Source RPM  : (none)
Build Date  : Fri 01 Dec 2006 06:05:13 AM EST
Build Host  : localhost
Relocations : (not relocatable)
Packager    : Red Hat, Inc. (auxiliary key) <[email protected]>
Summary     : gpg(Red Hat, Inc. (auxiliary key) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11.3 (NSS-3)

mQGiBEVwDGkRBACwPhZIpvkjI8wV9sFTDoqyPLx1ub8Sd/w+YuI5Ovm49mvvEQVT
VLg8FgE5JlST59AbsLDyVtRa9CxIvN5syBVrWWWtHtDnnylFBcqG/A6J3bI4E9/A
UtSL5Zxbav0+utP6f3wOpxQrxc+WIDVgpurdBKAQ3dsobGBqypeX6FXZ5wCgou6C
=d/bm
-----END PGP PUBLIC KEY BLOCK-----

重点就是最后面出现的那一串乱码啦,那可是作为数字证书非常重要的一环,如果你忘记加上数字证书,很可能很多原版软件就不能让你安装,除非你利用 rpm 时选择略过证书.

◆RPM 卸载软件◆

移除的选项很简单,直接通过 -e 即可移除,不过经常发生由于软件依赖关系而无法卸载的情况,下面看一下他的参数吧

[root@localhost ~]# rpm --help

命令语法:[ rpm [选项] 包名称 ]

        -e        #卸载软件(注意卸载顺序)
        --nodeps  #不检测依赖卸载

由于 RPM 软件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的数据损坏,果真如此的话,我们可以使用 --rebuilddb 这个选项来重建一下数据库文件.

◆RPM 提取文件◆

例如提取tree目录下的文件并恢复到指定文件

[root@localhost ~]# ls -l
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm

[root@localhost ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv     #提取tree包中的文件
./usr/bin/tree
./usr/share/doc/tree-1.6.0
./usr/share/doc/tree-1.6.0/LICENSE
./usr/share/doc/tree-1.6.0/README
./usr/share/man/man1/tree.1.gz
177 blocks

[root@localhost ~]# ll
total 48
-rw-rw-r-- 1 root root 47508 Jul  4  2014 tree-1.6.0-10.el7.x86_64.rpm
drwxr-xr-x 4 root root    30 Sep 20 05:17 usr


软件管理之SRPM

谈完了 RPM 类型的软件之后,再来我们谈一谈包含了 Source code 的 SRPM 该如何使用呢,最需要注意的是,新版的 rpm 已经将 RPM 与 SRPM 的命令分开了,SRPM 使用的是 rpmbuild 这个命令,而不是 rpm 如果你是 Red Hat 7.0 以前的用户,那么请使用 rpm 来替代 rpmbuild.

SRPM 既然含有 source code 那么其中必定有配置,所以首先我们必需要知道,这个 SRPM 在进行编译的时候会使用到哪些目录,其实在我们编译RPM包时,需要自己手动创建以下几个目录,缺一不可,在哪里创建都行.

目 录 目 录 作 用
/rpmbuild 主目录,rpmburld命令会默认寻找这个目录
/rpmbuild/SPECS 放置软件设置文件,也就是编译脚本
/rpmbuild/SOURCES 放置软件源文件,*.tar.gz
/rpmbuild/BUILD 编译过程中产生的缓存文件
/rpmbuild/RPMS 编译完成后产生的RPM包文件
/rpmbuild/SRPMS 编译完成后生成的,RPM源码文件

除了使用 SRPM 内默认的参数来进行编译之外,我们还可以修改这些参数后再重新编译,下面我们来看一下.spec的文件字段的解释吧.

参 数 参 数 作 用
Summary 软件的说明信息
Name 软件名称
Version 软件版本
Release 软件打包次数
License 授权协议,GPL
Group 软件开发团体名称
Url 官方网站
Source 软件的来源
Patch 补丁文件
BuildRoot 编译时使用的临时目录
ExclusiveArch 说明软件适合的安装平台
Requires 说明依赖属性主要来源
Prereq 需要的前置程序
BuildRequires 编译过程中所需要的软件
Packager 软件是经由谁来打包的
Vender 发展的厂商

上面几个数据通常都必需要写,但是如果你的软件没有相依属性的关系时,那么就可以不需要那个Requires,根据上面的配置,最终的档名就会是『{Name}-{Version}-{Release}.{ExclusiveArch}.rpm』的样式,除了上面的字段解释,还有一些编译参数,在下面我们列举出来吧.

参 数 参 数 作 用
%description 软件的简短说明(必须写)
%prep 编译预处理
%setup 解压与后期配置
%configure 配置
%build 创建可执行文件
%install 安装,这里是模拟
%clean 清除缓存
%files 安装文件所需目录
%changelog 记录日志

◆SRPM 编译小实验◆

下面的小实验以打包一个Nginx为例子,来实现对Nginx的封装,以及后续的使用.

1.第一步首先要安装rpmbuild这个编译软件,并创建好相应的目录.

[root@localhost ~]# yum install -y rpm-build
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package rpm-build-4.11.3-32.el7.x86_64 already installed and latest version
Nothing to do

[root@localhost ~]# rm -fr /tmp/*

[root@localhost ~]# mkdir -p /tmp/rpmbuild
[root@localhost ~]# mkdir -p /tmp/rpmbuild/SPECS
[root@localhost ~]# mkdir -p /tmp/rpmbuild/SOURCES
[root@localhost ~]# mkdir -p /tmp/rpmbuild/BUILD
[root@localhost ~]# mkdir -p /tmp/rpmbuild/RPMS
[root@localhost ~]# mkdir -p /tmp/rpmbuild/SRPMS

[root@localhost ~]# ls -lh /tmp/*
total 0
drwxr-xr-x. 2 root root 6 Nov 15 15:59 BUILD
drwxr-xr-x. 2 root root 6 Nov 15 15:59 RPMS
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SOURCES
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SPECS
drwxr-xr-x. 2 root root 6 Nov 15 15:59 SRPMS

2.接着进入/tmp/rpmbuild/SOURCES这个目录,将Nginx的源码包放进这个目录里.

[root@localhost ~]# cd /tmp/rpmbuild/SOURCES
[root@localhost SOURCES]#
[root@localhost SOURCES]# wget http://nginx.org/download/nginx-1.13.12.tar.gz

[root@localhost SOURCES]# ls -lh
total 996K
-rwxr-xr-x. 1 root root 993K May  2  2018 nginx-1.13.12.tar.gz

3.现在开始在/tmp/rpmbuild/SPECS目录下创建一个main.spec文件,并编辑.

[root@localhost SPECS]# cd /tmp/rpmbuild/SPECS/
[root@localhost SPECS]# touch main.spec
[root@localhost SPECS]# vim main.spec

Summary:   nginx
Name:      nginx
Version:   1.13
Release:   12
License:   GPL
Group:     Nginx Server
Source:    nginx-1.13.12.tar.gz
Url:       http://www.mkdirs.com
Packager:  lyshark
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root


Requires: pcre >= 1
Requires: pcre-devel >= 1
Requires: zlib >= 1
Requires: zlib-devel >= 1
Requires: openssl >= 1
Requires: openssl-devel >= 1


%description

this is nginx server test page

%prep

useradd-s /sibn/nologin nginx

%setup -q

%configure --prefix=/usr/local/nginx --user=nginx --group=nginx

%build
make

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin
make install RPM_INSTALL_ROOT=%{buildroot}   <==这项目也很重要!

%files
/usr/local/bin/main

%changelog
* Wed Jul 01 2009 VBird Tsai <[email protected]> 0.1
- build the program


软件管理之YUM

我们在本章一开始开始的地方谈到过 YUM 这个东西,这个 YUM 是通过分析 RPM 的标头数据后,根据各软件的相关性,制作出软件依赖解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或移除与升级的问题,事实上RedHat在放出系统时,已经搭建好了提供给全球使用的软件源,所以理论上,我们不需要处理任何设定值,只要能够连接上Intelnet,就可以使用Yum来更新数据了.

◆YUM 源配置◆

虽然Yum工具,只需要你的主机连接互联网,就可以直接使用,但是有些时候我们需要自定义Yum源实现加速,下面我们将配置一个本地Yum源,来使用光盘中的软件,其他网络配置操作步骤相同,只是会在baseurl参数后面会有所区别.

1.首先默认情况下,我们的系统是没有给我们配置Yum源的,在这里我们需要在指定配置文件中创建一个以.repo结尾的文件.

[root@localhost ~]# cat /etc/yum.repos.d/redhat.repo

[server]
name="redhat yum"
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=file:///mnt
enabled=1
gpgcheck=0

>>[server]   ----------> 代表容器的名称,可以随便写
>>name       ----------> 给容器起的名字,可自定义
>>mirrorlist ----------> 列出容器可以使用的镜像站点,不用可屏蔽
>>baseurl    ----------> 默认镜像地址,可写本地地址,也可写FTP地址
>>enabled=1  ----------> 就是让容器启动
>>gpgcheck=0 ----------> 关闭证书检测
>>gpgkey     ----------> 证书保存位置

2.第一步配置完毕以后,接下来我们来检查一下配置是否生效,和生成缓存文件.

[root@localhost ~]# yum repolist all
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
repo id   repo name                                               status
Server   "rhel7"                                                  enabled: 5,099
repolist: 5,099


[root@localhost ~]# yum makecache
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                             | 4.3 kB  00:00:00
Metadata Cache Created

到此本地Yum仓库就配置好啦,下面是一些拓展信息.

阿里云Yum源仓库地址
wget http://mirrors.aliyun.com/repo/Centos-6.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo

网易Yum源仓库地址

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

常用RPM包查询网站

curl https://centos.pkgs.org/
curl http://rpmfind.net/
curl https://dl.fedoraproject.org/pub/

◆YUM 的查询◆

[root@localhost ~]# yum --help

命令语法:[ yum [选项] 包名称 ]

        -y              #自动化安装,无需应答
        installroot     #安装时指定安装位置
        search          #搜索指定包文件
        list            #显示全部可用列表
        info            #显示软件相关信息
        grouplist       #查询所有已安装和可安装的软件组
        groupinfo       #列出软件组中包含的软件
        provides        #通过关键字查找安装包

实例1:使用installroot指定软件安装位置.

[root@localhost ~]# yum install -y --installroot=/tmp/ tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Server                                                                  | 4.3 kB  00:00:00
(1/2): Server/group_gz                                                  | 145 kB  00:00:00
(2/2): Server/primary_db                                                | 4.1 MB  00:00:00
Package tree-1.6.0-10.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]#

实例2:使用yum info命令查看软件具体信息.

[root@localhost ~]# yum info tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Installed Packages
Name        : tree
Arch        : x86_64
Version     : 1.6.0
Release     : 10.el7
Size        : 87 k
Repo        : installed
From repo   : Server
Summary     : File system tree viewer
URL         : http://mama.indstate.edu/users/ice/tree/
License     : GPLv2+
Description : The tree utility recursively displays the contents of directories in a
            : tree-like format.  Tree is basically a UNIX port of the DOS tree
            : utility.

实例3:使用 provides通过关键字查询指定包.

[root@localhost ~]# yum provides tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : Server

tree-1.6.0-10.el7.x86_64 : File system tree viewer
Repo        : @Server

◆YUM 清缓存◆

yum clean packages       #清除缓存目录下的软件包
yum clean headers        #清除缓存目录下的 headers
yum clean oldheaders     #清除缓存目录下旧的 headers

yum clean all            #清除下载的临时软件包和缓存
yum makecache            #建立软件包缓存,提高查询速度
yum update               #更新所有需要更新的软件&内核

◆yum安装和卸载◆

yum install [软件名]              #全部安装
yum groupinsall [软件组名]        #安装程序组

yum  remove [软件名]              #删除软件
yum  groupremove [软件组名]       #删除软件组

◆yum更新和升级◆

yum update [软件名]              #全部更新
yum check-update                #检查可更新的程序
yum upgrade [软件名]             #升级指定程序包
yum groupupdate [组软件名]       #升级程序组

◆通过YUM命令为纯字符系统,安装图形化界面◆

[root@localhost ~]# yum -y install xorg*
[root@localhost ~]# yum -y groupinstall "X Window System"
[root@localhost ~]# yum -y groupinstall Desktop
[root@localhost ~]# yum -y groupinstall "Chinese Support"
[root@localhost ~]# startx  


猜你喜欢

转载自www.cnblogs.com/LyShark/p/10127677.html