文章目录
一,RPM 命令管理
1.1 RPM 基础原理
rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
1.2 RPM包管理
1.2.1 RPM包命令规则
rpm包的命令规则方式如下图所示
包:分类和拆包
- Application-VERSION-ARCH.rpm: 主包
- Application-devel-VERSION-ARCH.rpm 开发子包
- Application-utils-VERSION-ARHC.rpm 其它子包
- Application-libs-VERSION-ARHC.rpm 其它子包
1.2.2 RPM包依赖
- 树形依赖:a->b->c 解决方法:从后往前安装
- 环形依赖:a->b->c->a 解决方法:放在一条命令中安装即可
- 模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就 是以结尾,它依赖的其实是一个文件,而不是软件包。该文件藏身在某一个软件包当中。我们只要将该文件所在的软件包安装上,该文件也就安装了。解决方法:登录www.rpmfind.net网站,输入库文件名称查询到对应的rpm包,然后安装即可。
- 查看二进制程序所依赖的库文件
- ldd /PATH/TO/BINARY_FILE
- 管理及查看本机装载的库文件
- ldconfig 加载库文件
- /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件 名及文件路径映射关系
- 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
- 缓存文件:/etc/ld.so.cache
注:在配置文件/etc/ld.so.conf.d/*.conf文件中 直接写明需要加载的库文件的路径就好
解决依赖包管理工具:
- yum:rpm包管理器的前端工具
- apt-get:deb包管理器前端工具
- zypper: suse上的rpm前端管理工具
- dnf: Fedora 18+ rpm包管理器前端管理工具
1.2.3 包管理器
- 功能:将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作
- 包文件组成 (每个包独有)
- RPM包内的文件
- RPM的元数据,如名称,版本,依赖性,描述等
- 安装或卸载时运行的脚本
- 数据库(公共):/var/lib/rpm
- 程序包名称及版本
- 依赖关系
- 功能说明
- 包安装后生成的各文件路径及校验码信息
1.3 RPM包来源
- 管理程序包的方式:
- 使用包管理器:rpm
- 使用前端工具:yum, dnf
- 获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL: Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性, 来源合法性,程序包的完整性
1.4 RPM包管理
CentOS系统上使用rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护
1.4.1 安装
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE ...
[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
1.4.2 升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级
--force: 强制安装
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此 ,对直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本 的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而 把新版本的文件重命名(FILENAME.rpmnew)后保留
1.4.3 卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [-noscripts] [--notriggers] [--test] PACKAGE_NAME ...
这个命令不同于安装和升级,它可以在任何目录运行,原理是去/var/lib/rpm目录中的数据库(如__db0)中查找对应的软件包(已经安装过的rpm包都在这些数据库中),然后卸载。
1.4.4 RPM包查询
rpm {-q|--query} [select-options] [query-options]
- [select-options]
- -a: 所有包
- -f: 查看指定的文件由哪个程序包安装生成
- -p rpmfile:针对尚未安装的程序包文件做查询操作
- –whatprovides CAPABILITY:查询指定的CAPABILITY 由哪个包所提供
- –whatrequires CAPABILITY:查询指定的CAPABILITY被 哪个包所依赖
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –idv “*.conf” 释放包内文件 >rpm2cpio tree-1.60-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree 指定生成的文件 至生出对应的文件目录
- [query-options]
- –changelog:查询rpm包的changelog
- -c: 查询程序的配置文件
- -d: 查询程序的文档
- -i: information
- -l: 查看指定的程序包安装后生成的所有文件
- –scripts:程序包自带的脚本
- –provides: 列出指定程序包所提供的CAPABILITY
- -R: 查询指定的程序包所依赖的CAPABILITY
常见用法:
-qi PACKAGE -qf FILE
-qc PACKAGE -ql PACKAGE
-qd PACKAGE -qpi PACKAGE_FILE
-qpl PACKAGE_FILE, ... -qa
1.4.5 包校验
rpm {-V|--verify} [select-options] [verify-options]
S: 文件大小是否改变
M: 文件的类型或文件的权限( rwx )是否被改变
5: 文件MD5 校验和是否改变( 可以看成文件内容是否改变 )
D: 设备的主从代码是否改变
L: 文件路径是否改变
U: 文件的属主( 所有者 ) 是否改变
G: 文件的属组是否改变
T: 文件的修改时间是否改变
实例:
执行 rpm -V httpd 后, 无任何提示, 代表该文件没有被做任何修改
- 判断本地的apache 与官方给出的是否一致, 从而判断是否被人修改。
- 修改文件 /etc/httpd/conf/httpd.conf ,
- 在注释行添加任意内容后, 再次执行,执行结果如下图所示
c(config file) : 配置文件
d(documentation) : 普通文档
g(ghost file) : "鬼"文件, 很少见, 就是该文件不应该被这个RPM包包含
L(license file) : 授权文件
r(read me) : 描述文件
MD5校验
- 包来源合法性验正及完整性验正
- 完整性验正:SHA256
- 来源合法性验正:RSA
- 公钥加密 对称加密:加密、解密使用同一密钥 非对称加密:密钥是成对儿的
- public key: 公钥,公开所有人
- secret key: 私钥, 不能公开
- 导入所需要公钥
- rpm -K|checksig rpmfile 检查包的完整性和签名
- rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
- CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*” 查询安装的公钥软件
1.4.6 RPM数据库重建
rpm数据库目录: /var/lib/rpm
- rpm {–initdb|–rebuilddb}
- initdb: 初始化 如果事先不存在数据库,则新建之 否则,不执行任何操作
- rebuilddb:重建已安装的包头的数据库索引目录
二,yum
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具
yum repository : yum repo,存储了众多rpm包,以及包 的相关的元数据文件(放置于特定目录repodata下)
2.1 配置文件:
- /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}
- roundrobin:意为随机挑选,默认值
- priority:按顺序访问
- cost= 默认为1000
2.2 配置文件中变量
yum的repo配置文件中可用的变量:
- $releasever: 当前OS的发行版的主版本号
- $arch: 平台,i386,i486,i586,x86_64等
- $basearch:基础平台;i386, x86_64
- $YUM0-$YUM9:自定义变量
示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
- 生成172.16.0.1_cobbler_ks_mirror_CentOS-X_x86_64_.repo
- yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
使用示例如下图所示
- yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
- yum-config-manager --disable “仓库名" 禁用仓库
- yum-config-manager --enable “仓库名” 启用仓库
直接将对应库中的enable =1/0
2.3 yum 命令
yum [options] [command] [package ...]
2.3.1 对仓库操作
- 显示仓库列表:
- yum repolist [all|enabled|disabled]
- 清理本地缓存:
- 清除/var/cache/yum/ releasever缓存
- yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
- 构建缓存: yum makecache
- 显示程序包:
- yum list
- yum list [all | glob_exp1] [glob_exp2] […]
- yum list {available|installed|updates} [glob_exp1] […]
2.3.2 程序包操作
-
安装程序包:
- yum install package1 [package2] […]
- yum reinstall package1 [package2] […] (重新安装)
-
安装及升级本地程序包:
- yum localinstall rpmfile1 [rpmfile2] […] (用install替代)
- yum localupdate rpmfile1 [rpmfile2] […] (用update替代)
-
升级程序包:
- yum update [package1] [package2] […]
- yum downgrade package1 [package2] […] (降级)
-
检查可用升级:
- yum check-update
-
卸载程序包:
- yum remove | erase package1 [package2] […]
-
查看程序包information:
- yum info […]
2.3.3 功能查找
-
查看指定的特性(可以是某文件)是由哪个程序包所提供:
- yum provides | whatprovides feature1 [feature2] […]
-
搜索:yum search string1 [string2] […]
- 以指定的关键字搜索程序包名及summary信息
-
查看指定包所依赖的capabilities:
- yum deplist package1 [package2] […]
2.3.4 历史功能
- 查看yum事务历史:
- yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats]
- yum history [list]
- yum history info 6
- yum history undo 6
使用
yum history
之后显示所有的安装,卸载过程,按照图片中序号进行的,undo/redo 命令涉及到的序号则是history中ID值
- 日志 :/var/log/yum.log
2.3.5 包组管理
- 包组管理的相关命令:
- yum groupinstall group1 [group2] […]
- yum groupupdate group1 [group2] […]
- yum grouplist [hidden] [groupwildcard] […]
- yum groupremove group1 [group2] […]
- yum groupinfo group1 […]
2.3.6 命令行选项:
- –nogpgcheck:禁止进行gpgcheck
- -y: 自动回答为“yes”
- -q:静默模式
- –disablerepo=repoidglob:临时禁用此处指定的repo
- –enablerepo=repoidglob:临时启用此处指定的repo
- –noplugins:禁用所有插件
创建yum仓库: createrepo [options]
参考链接:
三,程序包编译
- 程序包编译安装:
- Application-VERSION-release.src.rpm --> 安装后,使 用rpmbuild命令制作成二进制格式的rpm包,而后再安装
- 源代码–>预处理–>编译–>汇编–>链接–>执行
- 源代码组织格式:
- 多文件:文件中的代码之间,很可能存在跨文件依赖关系
- C、C++:make 项目管理器
- configure脚本 --> Makefile.in --> Makefile
- java: maven
3.1编译安装
- C语言源代码编译安装三步骤:
1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执 行时会参考用户的指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
2、make 根据Makefile文件,构建应用程序
3、make install 复制文件到相应路径 - 开发工具:
- autoconf: 生成configure脚本
- automake:生成Makefile.in
注意:安装前查看INSTALL,README
3.2 编译步骤
第一步:configure脚本
选项:指定安装位置、指定启用的特性
- –help: 获取其支持使用的选项
- 选项分类:
- 安装路径设定
- –prefix=/PATH: 指定默认安装位置,默认为/usr/local/
- –sysconfdir=/PATH:配置文件安装位置
- System types:支持交叉编译
- Optional Features: 可选特性
- –disable-FEATURE
- –enable-FEATURE[=ARG]
- Optional Packages: 可选包
- –with-PACKAGE[=ARG],依赖包
- –without-PACKAGE,禁用依赖关系
- 安装路径设定
注意:通常被编译操作依赖的程序包,需要安装此程序包的“开 发”组件,其包名一般类似于name-devel-VERSION
第二步: make
第三步: make install
安装后配置
(1) 二进制程序目录导入至PATH环境变量中 编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导入库文件路径 编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中 让系统重新生成缓存: ldconfig [-v]
(3) 导入头文件 基于链接的方式实现:
ln -sv
(4) 导入帮助手册 编辑/etc/man.config|man_db.conf文件 添加一个MANPATH
通过编译安装软件httpd
第一步 ./config
可以通过命令 ./confing --help 查看这个脚本如何使用
提示Apr not found
这个需要安装apr-devel包
需要安装apr-util-devel
需要安装gcc
需要安装prce-devel
第二步 make
在使用这个命令时,提示
此时报错: mod_proxy_balancer.c:25:24: fatal error: apr_escape.h: No such file or directory
这个命令需要在./configure --disable-proxy
配置时使用这个禁用该模块。保证编译可以正常运行
第三步 make install
之后就可以直接使用
使用源码编译安装时可以参考源码包里面的README ,INSTALL 等文档来进行编译