软件包管理
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