[其他] linux环境下rpm安装包管理 (rpm、rpmbuild),如何从iso文件中提取rpm包

案例(以pam包为例)

制作patch(1~5)
    –1  准备需要的rpm源码包,最终会获得一个src.rpm包
        yumdownload –source pam
或者            wget http://xxxx.xxxx.com/pam-1.1.5-0.17.2.src.rpm
    –2  解压,并把已经有的补丁打到源码中(可见,rpm包的构成就是 基线代码+针对基线代码各版本的patch)
                rpm -ivh pam-1.1.5-0.17.2.src.rpm           (生成~/rpmbuild目录)
        rpmbuild -bp ~/rpmbuild/SPECS/anaconda.spec (在rpmbuild中生成BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS)
    –3  备份BUILD中的源码
                cp -R ~/rpmbuild/Linux-PAM-1.1.5 ~/rpmbuild/Linux-PAM-1.1.5.bak
    –4  在~/rpmbuild/Linux-PAM-1.1.5中进行想做的修改
    –5  制作patch
                diff -Nur ~/rpmbuild/BUILD/Linux-PAM-1.1.5.bak  ~/rpmbuild/BUILD/Linux-PAM-1.1.5  >  new.patch

把patch打入生成新的rpm包(6~7)
    –6  重构项目
                mv new.patch ~/rpmbuild/SOURCES
        vim ~/rpmbuild/SPECS/pam.spec        【修改版本 ,patch信息,changelog等】
        rpmbuild -ba ~/rpmbuild/SPECS/pam.spec        (把当前的所有patch打到基线上)
    –7  获取所有输出
                重构后,会生成如下rpm包(这里把新版本定为0.17.99)
                /var/tmp/build-root/standard-x86_64/usr/src/packages/SRPMS/pam-1.1.5-0.17.99.src.rpm
                /var/tmp/build-root/standard-x86_64/usr/src/packages/RPMS/x86_64/pam-devel-1.1.5-0.17.99.x86_64.rpm
                /var/tmp/build-root/standard-x86_64/usr/src/packages/RPMS/x86_64/pam-doc-1.1.5-0.17.99.x86_64.rpm
                /var/tmp/build-root/standard-x86_64/usr/src/packages/RPMS/x86_64/pam-1.1.5-0.17.99.x86_64.rpm

使用新的rpm包(8)
    –8  更新pam(更新动作不要解析依赖关系,所以只要基线版本OK,即使目标环境上什么都没有,也能更新!)
                rpm -Uvh pam-1.1.5-0.17.99.x86_64.rpm

 

rpm的使用

1)yum search xxx
    使用此命令罗列成出来的所有软件中,后缀表示适用于不同的架构。
    而其中以noarch结尾的表示,软件和架构无关,一般情况下,这样的包都是“脚本”。
    
2)xxx.rpm      —    编译好的软件包
    xxx.src.rpm  —    未编译的软件包(源码包)

3)xxx-1.1.1-n.i386.rpm
    软件名-版本 -第n此对外发布.架构.rpm包类型
    
4) rpm的优点:
        1)rpm包里面有编译好的程序和配置文件,不需要重新编译;
        2)rpm包解压的时候会检查系统硬盘容量、操作系统版本等,确保可用性;
        3)rpm包里面有相关文档
        
5)rpm包中有记录依赖关系的文件,包在解压的时候会去验证以来关系,并在本机上查找相应的依赖是否安装,如果没有则 错!等待解决依赖关系
        (这就是rpm让人诟病的“软件的属性依赖”)

6)如何解决rpm的属性依赖问题  —–>  yum
    为了方便软件的重复利用,很多软件都是以动态库的方式对外提供,比如pam
    这也是为什么很多时候能看到xxx.rpm和xxx-devel.rpm两个包,带devel的是给开发者使用的,里面有“静态库”或者“动态库”
    同属于某个软件,rpm是可直接使用的编译好的软件,devel.rpm是开发使用的相关库
    
7)yum的工作流程
    yum会先下载目标rpm包;然后解析rpm包中的依赖关系文件,再把依赖关系发送到yum源(服务器)上;服务器端会根据依赖关系文件下发所有相关的
    依赖包;最后把所有的依赖rpm包按照顺序安装好。
    
8)/var/lib/rpm:rpm的数据库就在这个目录下
    1)软件升级时,各个版本之间的比较,在这里找;
    2)系统已经安装了哪些软件,在这里找;
    3)软件的数字签名,也在这里找;
        其实就相当于rpm的私有数据库
        
9)rpm下载软件的相关内容都放在什么地方:
    /etc        :   配置文件存放的地方
    /usr/bin    :   可执行文件
    /usr/lib    :   动态库
    /usr/share/doc  :   基本的软件使用手册和说明文件
    /usr/share/man  :   man page文件
        (注:可见,rpm是按照linux的套路来分配一个软件的相关文件的)
        
10)rpm的基本命令

11) rpm的其他命令(放在最后)

12)从光盘安装某个软件的流程
        挂载光盘,使用: mount /dev/cdrom /media
        找出档案的实际路径:find /media -name ‘pam-devel*’
        测试此软件是否具有相依性: rpm -ivh pam-devel… –test
        直接安装: rpm -ivh pam-devel…
        卸除光盘: umount /dev/cdrom

13)使用rpm更新软件(而不是yum,一般还是使用yum)
        -Uvh 如果未安装,则安装,并更新;如果已安装,则更新
        -Fvh 如果未安装,不安装,
            一般是先下载最新版本的rpm包,然后使用上面的命令执行最新版本的包

14)数字签名
[root@www ~]# rpm -Va
[root@www ~]# rpm -V 已安装的软件名称
[root@www ~]# rpm -Vp 某个 RPM 档案的档名
[root@www ~]# rpm -Vf 在系统上面的某个档案
        选项不参数:
-V :后面加的是软件名称,若该软件所吨的档案被更劢过,才会列出来;
-Va :列出目前系统上面所有可能被更劢过的档案;
-Vp :后面加的是文件名,列出该软件内可能被更劢过的档案;
-Vf :列出某个档案是否被更劢过~
范例一:列出你的 Linux 内的 logrotate 这个软件是否被更劢过r> [root@www ~]# rpm -V logrotate
# 如果没有出现仸何讯息,恭喜你,该软件所提供的档案没有被更劢过。
# 如果有出现仸何讯息,才是有出现状况啊!
范例二:查询一下,你的 /etc/crontab 是否有被更劢过r> [root@www ~]# rpm -Vf /etc/crontab
S.5….T c /etc/crontab
# 瞧!因为有被更劢过,所以会列出被更劢过的信息类型!

15) 使用rpm卸载软件
        rpm -e 
        如果要卸载的软件被其他软件使用,那么会 错,当然,可以使用–nodeps来强制卸载,但是别的软件可能就用不了了
        
        使用rpm更新数据库
        rpm –rebuilddb

 

rpmbuild(使用 软件源码构建rpm包)

1) rpm命令处理rpm包,rpmbuild处理srpm包

2) rpmbuild –rebuild xxx.src.rpm      ———-   把src.rpm整体编译并打包成rpm包,不安装!
       rpmbuild –recomplie xxx.src.rpm    ———-   把src.rpm整体编译并打包成rpm包,并且安装!

yumdownloader下载之后
#rm -rf /root/rpmbuild
#rpm -i ***.src.rpm
#cd /root/rpmbuild
#rpmbuild -bp SPECS/**.spec

 

修改部分rpm包,并重新发布iso

1)下载目的ISO,装机
2)找到对应的rpm包

3)修改
        3.1   解压
                rpm -ivh config-os-cloudedge-1.0-2.src.rpm
        3.2    修改
                (可选)查询filename属于哪个rpm包:rpm -qf filename                    
                (可选)安装所有依赖:yum-builddep -y config-os-cloudedge.spec
                (可选)展开源码:rpmbuild -bp config-os-cloudedge-1.0-2.src.rpm
                (可选)vim /SPEC/
        3.3 制作新rpm包
                rpmbuild -ba config-os-cloudedge.spec
                新的包出现在RPMS目录中,这里为config-os-cloudedge-1.0-2.h1.x86_64.rpm

4) 安装新的rpm包
        4.1    送到自验机器
                scp config-os-cloudedge-1.0-2.src.rpm 自验IP:/自验目录
        4.2    安装rpm包
                rpm -Uvh config-os-cloudedge-1.0-2.src.rpm

=============================问题==============================
warning: user mockbuild does not exist – using root
warning: group mockbuild does not exist – using root

不用管,只是缺少了相关的组,不影响使用,代码已经安装完成了

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门在线安装软件25126 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月22日
下一篇 2020年4月22日

相关推荐