Linux程序包管理之yum及源代码安装

时间:2023-03-08 21:03:14

第十六章、Linux程序包管理之yum及源代码安装

目录

  • yum介绍
  • yum配置文件
  • yum的repo配置文件中可用的变量
  • yum命令的使用
  • 使用光盘作为本地yum仓库
  • 如何创建yum仓库
  • 编译安装的三步骤
  • 开源程序代码的获取方式
  • 安装后的配置

16.1、yum简介

Yum(全称为 Yellow dog Updater, Modified)是redhat系列linux系统的包管理工具。就是类似windows下安装软件那个下一步下一步的东西。由于linux的开源,所以linux下的软件有大量组件依赖。这导致了linux安装一个软件必须先安装各依赖包,yum就是帮助我们解决这个的。

yum的基础是RPM,RPM是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是RPM软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。 于是,yum基于rpm包管理,做到了能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包的功能,无须繁琐地一次次下载、安装。

16.2、yum repository是什么?

存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录:repodata);

通过配置repo文件中指定远程文件服务器的地址来安装指定的程序包,repo文件中文件服务器的格式:

ftp://
http://
nfs://
file:///指向到repodata所在目录;

16.3、yum客户端

配置文件

/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置

仓库的定义

[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/ # 指定仓库的路径
enabled={1|0} # 是否启用此仓库
gpgcheck={1|0} # 是否对程序包进行验证
gpgkey=URL # 指定程序包的签名
enablegroups={1|0} # 是否允许安装包组
failovermethod={roundrobin | priority}
当baseurl指定多个仓库时的次序,默认为:roundrobin,随机挑选;
cost=
定义多个repo时访问开销默认为1000;

16.4、yum命令的使用方法

使用格式

yum [options] [command] [package ...]

[command]列表


command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-
or-distribution-synchronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist |
groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐
back|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all
| check-running-kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]

16.4.1、常用方法示例

显示仓库列表

yum repolist [all | disabled] # 默认只显示以启用的repo

示例:

[root@www yum.repos.d]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 9,363
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,976
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 435
localbase local base repo 9,007
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 399
repolist: 30,180

显示程序包

yum list [all | glob_exp1] [glob_exp2] [...]
yum list available| updates| installed [glob_exp1] [...]

示例:

# 1、显示以ansible开头的所有的包
[root@www yum.repos.d]# yum list ansible*
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可安装的软件包
ansible.noarch 2.2.0.0-4.el7 epel
ansible-inventory-grapher.noarch 2.3.2-1.el7 epel
ansible-lint.noarch 3.4.1-1.el7 epel
ansible-openstack-modules.noarch 0-20140902git79d751a.el7 epel
ansible-review.noarch 0.12.2-1.el7 epel
ansible1.9.noarch 1.9.6-2.el7 epel
# 2、显示所有已经安装的包
[root@www yum.repos.d]# yum list installed

安装程序包

yum install package1 [package2] [...]
# 默认安装最新版本,如果希望安装老版本则指定版本号

示例:

# 1、安装tree命令和htop命令
[root@www yum.repos.d]# yum install tree htop

重新安装程序包

yum reinstall package1 [package2] [...]

示例:

# 重新安装tree,htop命令
[root@www yum.repos.d]# yum reinstall tree htop

升级程序包

yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] #(降级安装)

示例:

# 练习1、升级centos7系统vim编辑器
[root@www yum.repos.d]# yum update vim-common
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 vim-common.x86_64.2.7.4.160-1.el7 将被 升级
--> 正在处理依赖关系 vim-common = 2:7.4.160-1.el7,它被软件包 2:vim-enhanced-7.4.160-1.el7.x86_64 需要
---> 软件包 vim-common.x86_64.2.7.4.160-1.el7_3.1 将被 更新
--> 正在检查事务
---> 软件包 vim-enhanced.x86_64.2.7.4.160-1.el7 将被 升级
---> 软件包 vim-enhanced.x86_64.2.7.4.160-1.el7_3.1 将被 更新
--> 解决依赖关系完成

检查可用升级

yum check-update

卸载程序包

yum remove | erase package1 [package2] [...]
# 生产环境中不建议使用remove去卸载,会同时卸载依赖包,影响其它程序;

示例:

[root@www ~]# yum remove tree

查看程序包信息

yum info [...]

示例:

[root@www ~]# yum info htop
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
已安装的软件包
名称 :htop
架构 :x86_64
版本 :2.0.2
发布 :1.el7
大小 :207 k
源 :installed
来自源:epel
简介 : Interactive process viewer
网址 :http://hisham.hm/htop/
协议 : GPL+
描述 : htop is an interactive text-mode process viewer for Linux, similar to
: top(1).

查看指定的特性(可以是某文件)是由哪个程序包所提供

yum provides | whatprovides feature1 [feature2] [...]

示例:

[root@www ~]# yum provides /bin/htop
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
htop-2.0.2-1.el7.x86_64 : Interactive process viewer
源 :@epel
匹配来源:
文件名 :/bin/htop

清理本地缓存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
# 通常清理缓存时使用yum clean all

构建缓存

yum makecache

搜索

yum search string1 [string2] [...]

示例:

[root@www ~]# yum search ansible

查看指定包所依赖的程序

yum deplist package1 [package2] [...]

示例:

# 查看ansible依赖哪些包
[root@www ~]# yum deplist ansible
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包:ansible.noarch 2.2.0.0-4.el7
依赖:/usr/bin/python2
provider: python.x86_64 2.7.5-48.el7
依赖:PyYAML
provider: PyYAML.x86_64 3.10-11.el7
依赖:python(abi) = 2.7
provider: python.x86_64 2.7.5-48.el7
依赖:python-httplib2
provider: python-httplib2.noarch 0.7.7-3.el7
依赖:python-jinja2
provider: python-jinja2.noarch 2.7.2-2.el7
依赖:python-keyczar
provider: python-keyczar.noarch 0.71c-2.el7
依赖:python-paramiko
provider: python2-paramiko.noarch 1.16.1-1.el7
provider: python-paramiko.noarch 1.12.4-1.el7.centos
依赖:python-setuptools
provider: python-setuptools.noarch 0.9.8-4.el7
依赖:python-six
provider: python-six.noarch 1.9.0-2.el7
依赖:sshpass
provider: sshpass.x86_64 1.05-5.el7

查看yum事务历史

yum history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐back|new|sync|stats]

示例:

[root@www ~]# yum history
已加载插件:fastestmirror
ID | 登录用户 | 日期和时间 | 操作 | 变更数
-------------------------------------------------------------------------------
15 | root <root> | 2016-12-29 08:33 | Update | 2
14 | root <root> | 2016-12-29 08:26 | Reinstall | 2
13 | root <root> | 2016-12-29 08:25 | Install | 2 <
12 | root <root> | 2016-12-29 08:16 | Install | 1 ><
11 | root <root> | 2016-12-26 15:07 | Install | 1 >
10 | root <root> | 2016-12-24 15:34 | Install | 1
9 | root <root> | 2016-12-24 15:32 | Install | 2
8 | root <root> | 2016-12-18 15:18 | Install | 1
7 | root <root> | 2016-12-13 11:12 | Install | 1
6 | root <root> | 2016-12-06 22:10 | Install | 4
5 | root <root> | 2016-12-05 21:48 | Install | 1
4 | root <root> | 2016-12-04 18:44 | Install | 1
3 | root <root> | 2016-12-04 18:43 | Install | 1
2 | root <root> | 2016-12-04 18:40 | Install | 1
1 | 系统 <空> | 2016-12-04 18:13 | Install | 387
history list

安装本地程序包

yum install  xxx-VERSION.release.arch.rpm

示例:

[root@www Packages]# yum install  tree-1.6.0-10.el7.x86_64.rpm

包组管理的相关命令

yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

示例:

[root@www ~]# yum grouplist
已加载插件:fastestmirror
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
MATE 桌面环境
基本网页服务器
虚拟化主机
带 GUI 的服务器
GNOME 桌面
KDE Plasma Workspaces
开发及生成工作站
[root@www ~]# yum groupinstall "Development Tools"

16.4.2、yum的命令行选项

--nogpgcheck:禁止进行gpg check
-y:自动回答为yes
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件;

16.5、yum的repo配置文件中可用的变量

$releasever:当前os的发行版的主版本号;
$arch:平台;
$basearch:基础平台;
$YUM0-$YUM9

16.6、创建yum仓库

16.6.1、将本地光盘作为yum仓库

  1. 挂在本地光盘
  2. 编辑repo文件
  3. 查看可用仓库
# 挂载本地光盘
[root@www ~]# mount /dev/cdrom /media/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@www ~]# ls /media/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
# 编辑repo文件
[root@www ~]# cd /etc/yum.repos.d/
您在 /var/spool/mail/root 中有新邮件
[root@www yum.repos.d]# vim localbase.repo
[localbase]
name=local yum repository
baseurl=file:///media
enbaled=1
gpgcheck=0
# 查看可用仓库
[root@www yum.repos.d]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 9,363
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,976
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 435
localbase local yum repository 9,007
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 399
repolist: 30,180

16.6.2、创建指定程序包目录创建为仓库

  1. 安装createrepo命令
  2. 切换至程序包所在目录
  3. 创建repodata数据
  4. 配置repo文件
# 安装createrepo
[root@www repo]# yum -y install createrepo # 创建/yum/repo目录存放程序包
[root@www ~]# mkdir -p /yum/repo
[root@www ~]# cp /media/Packages/php* /yum/repo/
[root@www ~]# ll /yum/repo/|wc -l
28
您在 /var/spool/mail/root 中有新邮件
[root@www ~]# cd /yum/repo/
[root@www repo]# ls
php-5.4.16-36.el7_1.x86_64.rpm php-mysqlnd-5.4.16-36.el7_1.x86_64.rpm
php-bcmath-5.4.16-36.el7_1.x86_64.rpm php-odbc-5.4.16-36.el7_1.x86_64.rpm
php-cli-5.4.16-36.el7_1.x86_64.rpm php-pdo-5.4.16-36.el7_1.x86_64.rpm
php-common-5.4.16-36.el7_1.x86_64.rpm php-pear-1.9.4-21.el7.noarch.rpm
php-dba-5.4.16-36.el7_1.x86_64.rpm php-pecl-memcache-3.0.8-4.el7.x86_64.rpm
php-devel-5.4.16-36.el7_1.x86_64.rpm php-pgsql-5.4.16-36.el7_1.x86_64.rpm
php-embedded-5.4.16-36.el7_1.x86_64.rpm php-process-5.4.16-36.el7_1.x86_64.rpm
php-enchant-5.4.16-36.el7_1.x86_64.rpm php-pspell-5.4.16-36.el7_1.x86_64.rpm
php-fpm-5.4.16-36.el7_1.x86_64.rpm php-recode-5.4.16-36.el7_1.x86_64.rpm
php-gd-5.4.16-36.el7_1.x86_64.rpm php-snmp-5.4.16-36.el7_1.x86_64.rpm
php-intl-5.4.16-36.el7_1.x86_64.rpm php-soap-5.4.16-36.el7_1.x86_64.rpm
php-ldap-5.4.16-36.el7_1.x86_64.rpm php-xml-5.4.16-36.el7_1.x86_64.rpm
php-mbstring-5.4.16-36.el7_1.x86_64.rpm php-xmlrpc-5.4.16-36.el7_1.x86_64.rpm
php-mysql-5.4.16-36.el7_1.x86_64.rpm # 生成repodata数据
[root@www ~]# cd /yum/repo/
[root@www repo]# createrepo ./
Spawning worker 0 with 7 pkgs
Spawning worker 1 with 7 pkgs
Spawning worker 2 with 7 pkgs
Spawning worker 3 with 6 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@www repo]# ll repodata/
总用量 72
-rw-r--r-- 1 root root 7642 12月 29 10:23 1f2790b2f5cb011b0ee50480f1a734b1cfef3fcf8cb5c56715c56ab8b373f928-primary.xml.gz
-rw-r--r-- 1 root root 5091 12月 29 10:23 5bfd453ae038a5befb57f483a0cf16fa2b33c3efbbd5d08102750e751a9dadd6-other.xml.gz
-rw-r--r-- 1 root root 10581 12月 29 10:23 7f3365a22053bad95693995eb31c88102ba25f9c404e88123226dd19a5fdd29e-other.sqlite.bz2
-rw-r--r-- 1 root root 19721 12月 29 10:23 861e8e2872ef3faf07613bba90135feeb4128ce850085544c5e51444d9c7e731-primary.sqlite.bz2
-rw-r--r-- 1 root root 11285 12月 29 10:23 96c960d58f47cc8dd0ecee902139dae3af6c2c5242d9a063549ae54d8cd99548-filelists.sqlite.bz2
-rw-r--r-- 1 root root 6526 12月 29 10:23 ad31846122b77a0150a5eb6f3434d260d30fabd18d211351ceeb7945c310cddd-filelists.xml.gz
-rw-r--r-- 1 root root 2980 12月 29 10:23 repomd.xml # 配置repo文件
[root@www yum.repos.d]# vim local-php.repo
[localphp]
name=local php repository
baseurl=file:///yum/repo
enbaled=1
gpgcheck=0 # 查看可用仓库是否又localphp
[root@www ~]# yum repolist
已加载插件:fastestmirror
localphp | 2.9 kB 00:00:00
localphp/primary_db | 19 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
源标识 源名称 状态
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 9,363
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 10,976
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 435
localbase local yum repository 9,007
localphp local php repository 27
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 399
repolist: 30,207

16.7、程序包编译安装

16.7.1、开源程序源代码的获取方式

  1. 官方自建站点获取;
  2. 代码托管;常用代码托管机构有:
    1. sourceforge
    2. GitHub.com
    3. code.google.com

16.7.2、编译安装前准备工作

编译C源代码

前提:提供开发工具及开发环境;

开发工具:make, gcc等;

开发环境:开发库,头文件;

通过包组提供开发组建

centos6: "development tools", "server platform development"

16.7.3、编译安装的三个步骤

第一步:./configure

1、通过选项传递参数,指定启用特性,安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;

2、检查各依赖到的外部环境;

3、通过—help:获取其支持使用的选项

第二步:make

根据makefile文件,构建应用程序;

第三步:make install

是一个复制文件,生成链接的过程;

建议:安装前查看INSTALL及README文件;

16.7.4、安装后的配置


# 1、导出二进制程序目录至PATH环境变量中;
编辑:/etc/profile.d/NAME.sh
export PATH=/path/to/bin:$PATH # 2、导出库文件路径
编辑:/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;让系统重新生成缓存
ldconfig [-v] # 3、导出头文件
基于链接的方式实现:将安装路径下include目录软链接至/usr/include/与程序对应的名称
ln -sv /PATH/TO/APPDIR/include /usr/include/APP_NAME # # 4、导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH