软件包管理

rpm,yum,源码编译安装


rpm

1、rpm工具的安装、升级、卸载平时都是很少使用的。对于安装来说,它经常需要认为的解决依赖关系。yum经常用于安装或升级软件包

2、但是,虽然rpm的安装功能很少使用,但rpm的查询功能非常实用。

rpm -qf

rpm -ql

rpm -qRp

...

3、说到查询,yum-utils包中的repoquery也很强大

rpm -ivhUe --nodeps --test --force --prefix
选项说明:
-i 表示安装,install的意思
-v 显示安装信息,还可以"-vv"、"-vvv",v提供的越多显示信息越多
-h 显示安装进度,以#显示安装的进度
-U 升级或升级包
-F 只升级已安装的包
-e 卸载包,卸载也有依赖性,"--erase"
--nodeps 忽略依赖性强制安装或卸载(no dependencies)
--test 测试是否能够成功安装指定的rpm包
--prefix 新路径 自行指定安装路径而不是使用默认路径,基本上都不支持该功能,功能极其简单的软件估计才支持重定位安装路径
--force 强制动作
--replacepkgs 替换安装,即重新覆盖安装。
-q[p] -q查询已安装的包,-qp查询未安装的包。它们都可接下面的参数
    -a 查询所有已安装的包,也可以指定通配符名称进行查询
    -i 查询指定包的信息(版本、开发商、安装时间等)。从这里面可以查看到软件包属于哪个包组。
    -l 查询包的文件列表和目录(包在生产的时候就指定了文件路径,因此可查未装包)
    -R 查询包的依赖性(Required)
    -c 查询安装后包生成的配置文件
    -d 查询安装后包生成的帮助文档
    -f 查询系统文件属于哪个已安装的包(接的是文件而不是包)
    --scripts 查询包相关的脚本文档。脚本文档分四类:安装前运行、安装后运行、卸载前运行、卸载后运行

1、rpm -qi查询包的详细信息

[root@centos7 tmp]# rpm -qi tree
Name        : tree
Version     : 1.6.0
Release     : 10.el7
...
[root@centos7 tmp]# rpm -qi nginx
Name        : nginx
Epoch       : 1
Version     : 1.16.0
...

2、rpm -qf查询某个文件来自那个软件包

[root@centos7 tmp]# rpm -qf /etc/nginx/nginx.conf 
nginx-1.16.0-1.el7.ngx.x86_64
[root@centos7 tmp]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.60-1.el7_5.x86_64

3、rpm -ql列出某个包的相关文件(安装时生成的文件)

repoquery -l nginx也可以

[root@centos7 tmp]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
...

4、rpm -e卸载,有依赖卸载不了

[root@centos7 tmp]# rpm -e rpm
error: Failed dependencies:
    rpm = 4.11.3-35.el7 is needed by (installed) rpm-libs-4.11.3-35.el7.x86_64
    rpm is needed by (installed) color-filesystem-1-13.el7.noarch
    rpm = 4.11.3-35.el7 is needed by (installed) rpm-python-4.11.3-35.el7.x86_64
    rpm >= 0:4.11.3-22 is needed by (installed) yum-3.4.3-161.el7.centos.noarch
    rpm >= 4.1.1 is needed by (installed) createrepo-0.9.9-28.el7.noarch
    rpm is needed by (installed) policycoreutils-2.5-29.el7.x86_64

5、rpm -e --nodeps 忽略依赖性,强制卸载

[root@centos7 tmp]# rpm -e rpm --nodeps
# 救援请参考:https://blog.51cto.com/14012942/2426136
# 救援模式注意事项:要指定系统的根安装,如下所示
# [root@centos7 tmp]# rpm -ivh /run/initall/repo/rpm-4.11.3-35.el7.x86_64.rpm --root=/mnt/sysimage
[root@centos7 cd]# rpm --help
-r, --root=ROOT                  use ROOT as top level directory (default: "/")

6、rpm --import导入密钥

7、查询某个未安装包的依赖性

rpm -qRp packagename

[root@centos7 ~]# repoquery -R nginx

8、提取包中的文件rpm2cpio

rpm2pcio 结合cpio -idv

rpm2cpio是将rpm转换为cpio格式归档文件的命令,有了cpio文件,就可以使用cpio命令对其进行相关的操作。

rpm2cpio package_full_name|cpio -idv dir_name

该命令可以修复误删的命令:删除/bin/ls并修复

[root@xuexi cdrom]# which ls     # 查找需要删除的ls文件位置
alias ls='ls --color=auto'
        /bin/ls

[root@xuexi cdrom]# rpm -qf /bin/ls   # 查找ls命令属于哪个包
coreutils-8.4-37.el6.x86_64

[root@xuexi cdrom]# rm -f /bin/ls      # 删除ls命令
[root@xuexi cdrom]# ls                           # ls命令已不可用
-bash: /bin/ls: No such file or directory

[root@xuexi ~]# yumdownloader coreutils         # 下载所需的rpm包

[root@xuexi ~]# rpm2cpio coreutils-8.4-37.el6.x86_64.rpm | cpio -id ./bin/ls   # 提取bin/ls到当前目录下

[root@xuexi ~]# dir ~/bin     # 使用dir命令查看已经提取成功,dir命令功能等价于ls
ls

[root@xuexi tmp]# cp bin/ls /bin/      # 复制ls命令到/bin下
[root@xuexi tmp]# ls                     # 测试,ls已经可用

实战:tree命令删除后如何恢复:

https://blog.51cto.com/14012942/2426136

实战:删除linux依赖库后如何恢复:

https://blog.51cto.com/14012942/2426097


yum

1、/etc/yum.conf是yum的默认文件,里面配置的也是全局默认项

7、yum group list 列出包组

[root@centos7 ~]# yum group list
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * extras: mirror.jdcloud.com
 * updates: mirror.lzu.edu.cn
Available Environment Groups:
   Minimal Install
   Compute Node
   ...

8、yum group info "包组名" 查看包组信息

[root@centos7 ~]# yum group info "Minimal Install"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * extras: mirror.jdcloud.com
 * updates: mirror.lzu.edu.cn

Environment Group: Minimal Install
 Environment-Id: minimal
 Description: Basic functionality.
 Mandatory Groups:
   +core
 Optional Groups:
   +debugging

9、yum group install "Development Tools安装开发工具包

[root@centos7 ~]# yum group install "Development Tools"

10、卸载包组:yum group remove

11、createrepo创建仓库

12、yum安装mariadb-server,测时间

[root@centos7 dnf]# time yum install mariadb-server.x86_64 -y
Complete!

real    0m17.482s
user    0m6.337s
sys 0m3.311s

13、使用yum history undo卸载

[root@centos7 dnf]# yum history 
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     9 | root               | 2019-08-03 20:19 | Install        |   10   
     8 | root               | 2019-08-03 20:15 | Install        |   11   
     7 | root               | 2019-08-03 20:07 | Install        |    1   
     6 | root               | 2019-08-03 19:02 | Install        |    5   
     5 | root               | 2019-08-03 09:15 | Reinstall      |    1   
     4 | root               | 2019-08-02 16:30 | Install        |    1   
     3 | root               | 2019-07-29 19:21 | Install        |    4   
     2 | root               | 2019-07-29 14:14 | Install        |    1 E<
     1 | System            | 2019-07-17 16:27 | Install        | 1382 > 
history list
[root@centos7 dnf]# yum history undo 9

14、dnf安装mariadb,time侧时间

[root@centos7 dnf]# time dnf install mariadb-server.x86_64 -y
Complete!

real    0m23.413s
user    0m9.023s
sys 0m4.995s

15、程序包编译

  • 源代码->预处理->编译->汇编->链接->执行
  • c、C++ make项目管理器
  • java:maven

16、yum源配置

1、mirrors.aliyun.com去下载

2、手动配

[base] # 仓库ID,ID必须保证唯一性
name # 仓库名称,可随意命名
mirrorlist # 该地址下包含了仓库地址列表,包含一个或多个镜像站点,和baseurl使用一个就可以了
#baseurl # 仓库地址。网络上的地址则写网络地址,本地地址则写本地地址,格式为“file://”后接路径,如file:///mnt/cdrom
gpgcheck=1 # 指定是否需要签名,1表示需要,0表示不需要
gpgkey= # 签名文件的路径
enable # 该仓库是否生效,enable=1表示生效,enable=0表示不生效
cost= # 开销越高,优先级越低
【repo配置文件中可用的宏:】
$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
$arch:系统架构
$basharch:系统基本架构,如i686,i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用

3、切记,repodata这一级的目录就是需要配置的baseurl

示例、手动配置阿里云的epel源(最好备份原有的源文件)

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basharch
enabled=1
gpgcheck=0

实战:配置基于httpd的yum源:

https://blog.51cto.com/14012942/2426285

17、yum常用命令

很多时候,yum 操作失败的原因是repo配置错误,或者缓存未更新

Usage: yum [options] COMMAND

List of Commands:
clean           清除缓存数据,如yum clean all
makecache       生成元数据缓存数据,如yum makecache
history         查看yum事务信息,yum是独占模式的进程,yum undo 可以撤销某个操作
insall          安装包
list            列出包,一般结合grep,如yum list all | grep nginx
provides        搜索给定的内容是谁提供的。如yum provides lsof,查lsof来自哪个包
resinstall      重新安装,某个文件命令误删修复
search          搜索给定关键字的包
update          更新包

options:

-q, --quiet     安静模式
-y, --assumeyes       对所有问题回答yes
--enablerepo=[repo]   启用一个或多个仓库,可用通配符通配仓库ID
--disablerepo=[repo]  禁用一个或多个仓库,可用通配符通配仓库ID
--downloadonly        仅下载包,不安装或升级。默认下载在yum的缓存目录中,默认为/var/cache/yum/$basearch/$releasever

源码编译

一、源码编译的步骤

首先拿到包要解压

1.1、阅读INSTALL/README,看看要怎么安装

1.2、解压后目录一般有configure文件,用于检查环境,生成makefile

configure一般的参数

--prefix=          :指定安装的路径
--sysconfdir=      :指定配置文件目录
--enable-feature   :启用某个特性
--disable-fecture  :禁用特性
--with-function    :启用某功能
--without-function :禁用某功能

1.3、执行make进行编译,主要是调用编译器(gcc等)将源码编译为可执行文件,通常会调用一些函数库

1.4、make install 将上一步的编译好的数据复制到指定目录下面

二、源码编译实战实战

2.1、实战

实战:CentOS7编译httpd-2.4.25:

https://blog.51cto.com/14012942/2427580

实战:CentOS7脚本一键编译和卸载httpd-2.4.25

https://blog.51cto.com/14012942/2427694

**实战:源码编译cmatrix,实现*帝国的桌面

https://blog.51cto.com/14012942/2428339

参考:https://www.cnblogs.com/f-ck-need-u/p/7049750.html