NO.8-rpm程序包管理、yum的使用和源代码的编译安装配置

1.rpm程序包管理器

1. rpm包命名方式:
name-VERSION-release.arch.rpm
zlib-1.2.7-13.el7.i686.rpm
name:包名
VERSION: 主版本号.次版本号.发行版号
release:rpm包的发行号
arch:OS平台如i386、x86_64

2. 包之间:存在依赖关系(后面用yum安装容易解决)
查看二进制程序所依赖的库文件:ldd
ldd /PATH/TO/BINARY_FILE
这里写图片描述
管理及查看本机装载的库文件:ldconfig
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

3. 程序包管理:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作.
包组成部分(已经打包好的,一般看不见):
1、程序的组成组成清单 (每个包独有)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包名称及版本
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
4. rpm工具
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE …
-v: verbose显示安装过程
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
安装组合rpm -ivh PACKAGE_FILE …

[install-options]
–test: 测试安装,但不真正执行安装过程;dry run模式;
–nodeps:忽略依赖关系;
–replacepkgs: 重新安装;
–nosignature: 不检查来源合法性;
–nodigest:不检查包完整性;
–noscipts:不执行程序包脚本片断;
%pre: 安装前脚本; –nopre
%post: 安装后脚本; –nopost
%preun: 卸载前脚本; –nopreun
%postun: 卸载后脚本; –nopostun
简单安装示例:先挂载/dev/cdrom 到 /media/cdrom
先测试依赖关系,也可以用 yum install gcc-4.4.7-18.el6.x86_64.rpm 省去麻烦
这里写图片描述
升级
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
使用:
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降级;
–force: 强行升级;
示例:
这里写图片描述
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;因为linux支持多内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
查询:
基于数据库查询的 /var/lib/rpm
rpm {-q|–query} [select-options] [query-options]

    [select-options]  
        -a: 所有包   rpm -qa
        -f: 查看指定的文件由哪个程序包安装生成
                  rpm –qf  /bin/ls
        -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;

        --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
        --whatrequires  [内容]包名等:查询指定的CAPABILITY被哪个包所依赖;

    [query-options]   PACKAGE_NAME(查询已经安装完的程序,用包名查)
        --changelog:查询rpm包的changlog
        -c: 查询程序的配置文件
        -d: 查询程序的文档
        -i: information  
        -l: 查看指定的程序包安装后生成的所有文件;
        --scripts:程序包自带的脚本片断
        -R: 查询指定的程序包所依赖的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;

一般组合用法:
-qi PACKAGE_NAME, -qf FILE, -qc PACKAGE_NAM, -ql PACKAGE_NAM,
-qd PACKAGE_NAM ,-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …
-qa
示例:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
测试下:
这里写图片描述
校验:
校验安装后的配置文件是否发生变化
rpm {-V|–verify} [select-options] [verify-options]

       S file Size differs
       M Mode differs (includes permissions and file type)
       5 digest (formerly MD5 sum) differs
       D Device major/minor number mismatch
       L readLink(2) path mismatch
       U User ownership differs
       G Group ownership differs
       T mTime differs
       P caPabilities differ

这里写图片描述
我稍微修改下gcc相关的文件
包的来源合法性验正及完整性验正
一般加密用:
非对称加密:密钥是成对儿的,
public key: 公钥,公开所有人
secret key: 私钥, 不能公开

rpm –K PACKAGE_FILE
这里写图片描述
导入所需要公钥
rpm –import /PATH/FROM/GPG-PUBKEY-FILE
CentOS 6发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-6
这里写图片描述
这里写图片描述
数据库重建
rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建
无论当前存在与否,直接重新创建数据库;

2.yum的使用

  1. yum介绍
    yum:rpm包管理器的前端工具,基于C/S模式的。好比我们手机安装软件一样,rpm管理器就像本地离线安装,yum就像在线下载安装。
    原理图:画的有点丑
    这里写图片描述

yum客户端:
配置文件:rpm –qc yum
/etc/yum.conf:为所有仓库提供公共配置 (很少配置)
/etc/yum.repos.d/ * .repo:为仓库的指向提供配置(记住这个配置文件)
仓库指向的定义:/etc/yum.repos.d/CentOS-Base.repo(先重命名备份再重新创建个以.repo结尾的文件)
[repositoryID] //如[base] 、[epel]
name=Some name for this repository
baseurl=url://path/to/repository/ //ftp fttp file
enabled={1|0} //1为启动该仓库,默认启用
gpgcheck={1|0} //1为验正包来源合法性验正及完整性
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
默认为:roundrobin,意为随机挑选url;
cost=1000:开销
默认为1000
例如
这里写图片描述
2. yum使用
yum命令的用法:
yum [options] [command] [package …]
重要的子命令:
显示仓库列表:获取仓库的元数据表
repolist [all|enabled|disabled] //enabled显示可用的yum源
这里写图片描述
显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […] //支持glob通配符查找
# yum list {available|installed|updates} [glob_exp1] […]
这里写图片描述
安装程序包:
install package1 [package_name] […]
reinstall package1 [package2] […] (重新安装)
yum install gcc
我已经安装gcc了,它会检查时候有更新包,按回车默认取消安装。
这里写图片描述
检查可用升级:
check-update
这里写图片描述
升级程序包:
update [package1] [package2] […]
downgrade package1 [package2] […] (降级)
并不是越新版越好,服务器最求的是稳定
这里写图片描述
查看指定包所依赖的capabilities:
deplist package1 [package2] […]
yum deplist gcc
这里写图片描述
卸载程序包:
remove | erase package1 [package2] […]
yum remove cpp //删除cpp,也会删除依赖它的程序gcc
这里写图片描述
查看程序包information:
info […]
这里写图片描述

查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] […]
这里写图片描述
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
这里写图片描述
构建缓存:即是去下载yum源仓库的元数据表到本地cache中
makecache
这里写图片描述
搜索:
search string1 [string2] […]
以指定的关键字搜索程序包名及summary简单信息;
这里写图片描述

查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
这里写图片描述
注意:用yum安装程序会启动个事情务,这个事务是单独隔离开的,最好不要在其它shell进程上同时使用yum命令安装其它软件或终止安装,以免产生不必要的麻烦。
包组管理的相关命令:
即把经常用的rpm包打包成一个组来安装;
yum grouplist //显示包组
* groupinstall group1 [group2] […]
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
* groupremove group1 [group2] […]
* groupinfo group1 […]
这里写图片描述
这里写图片描述
安装这两个包组“Desktop Platform Development” “Development tools”
这里写图片描述
这里写图片描述
这里写图片描述

安装及升级本地程序包:(自动解决依赖关系)//centos6以后
yum install package.rpm
安装时遇到点问题.libgomp包有冲突,卸载它再装gcc
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.创建yum仓库: //createrepo命令要自己安装
createrepo [options] < directory >
这里写图片描述
配置/etc/yum.repos.d/*.repo
这里写图片描述

4. 源码程序包编译安装*.src.rpm
testapp-VERSION-release.src.rpm –> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;
(1)rpm –ivh gcc-4.4.7-18.el6.src.rpm
(2)cd /root/rpmbuild/SPECS/
(3)rpmbuild –bb gcc.spec //安装时依赖关系太多,本人无力测试,如果你测试成功的话发个链接给我
(4)rpm –ivh /usr/src/redhat/RPMS/i386/gcc-4.4.7-18.el6.rpm

3.*.tar.gz源代码的编译安装配置make

源代码 –> 预处理 –> 编译(gcc) –> 汇编 –> 链接 –> 执行
C、C++: make 项目管理器(configure –> Makefile.in –> makefile)
C代码编译安装三步骤:
./configure:
安装路径设定:
–prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/
–sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile文件;
(2) 检查依赖到的外部环境;
make:
根据makefile文件,构建应用程序;
make install

示例:编译安装apache 2.2,启用,安装后配置
tar -zxf httpd-2.2.26.tar.gz

./configure –prefix=/usr/local/apache2 –sysconfdir=/etc/http2

这里写图片描述

make

这里写图片描述

make install

这里写图片描述
关闭虚拟机Centos 的防火墙: service iptables stop 才能访问apache
启用 cd /usr/local/apache2/bin
#apachectl start
查看80端口
这里写图片描述
访问
这里写图片描述

安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;(自定义安装后要用觉得路径启用关闭apache服务器)
创建编辑文件vim /etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
这里写图片描述

(2) 导出库文件路径(调用/bin/apachectl需要库文件)
创建编辑vim /etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;(这里我添加错了,导致后面重启出错,正确的是新的库文件所在目录/usr/local/apache2)

让系统重新生成缓存:
ldconfig [-v]
这里写图片描述
(3) 导出头文件到/usr/include(也需要头文件)
基于链接的方式实现:
ln -sv /usr/local/apache2/include /usr/include/http_s
这里写图片描述
(4) 导出帮助手册(需要最新的man文件)
编辑/etc/man.config文件
添加一个MANPATH
这里写图片描述
重启后:
[root@localhost apache2]# apachectl start
httpd: Syntax error on line 163 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_ldap.so into server: /etc/httpd/modules/mod_ldap.so: undefined symbol: apr_ldap_ssl_init
出错是,找不到库文件

修改下vim /etc/ld.so.conf.d/apache2.conf
/usr/local/apache2
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39587157/article/details/80034198