diagnose-tools软件包打包和安装源码分析

        起源于我看到/usr/下有diagnose-tools目录,且可以执行diagnose-tools命令,但是在我理解的makefile中并没有做这些事情,我看用户态makefile只是在在目录下生成diagnose-tools可执行文件,内核态只是在目录下生成.ko可插入模块,不明白这里是怎么做的。

        他用的是dpkg和rpm两种方式安装。Ubuntu使用.deb格式软件包,其他使用.rpm(原因是红帽支持rpm,其他不支持)。统一生成.rpm软件包,如果是Ubuntu,则使用alien软件将.rpm转换成.deb使用dpkg安装。在顶层Makefile中:

(1)pkg伪指令用于构建软件包:

只做了两件事情,执行./rpmbuild/rpmbuild.sh、如果是Ubuntu转成.deb。

pkg:
        cd rpmbuild; sh rpmbuild.sh # 执行rpmbuild.sh
        ls rpmbuild/RPMS/*/*
ifneq ($(findstring Ubuntu,$(UNAME_A) $(shell test -e /etc/os-release && head -1 /etc/os-release)),)    # 如果是Ubuntu,先删原有.deb再转成.deb
        #sudo dpkg-reconfigure dash !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        cd rpmbuild; rm -f diagnose-tools*.deb
ifneq ($(findstring aarch64,$(ARCH)),)
        cd rpmbuild; sudo alien -d --target=arm64 ./RPMS/aarch64/diagnose-tools*.rpm
else
        cd rpmbuild; sudo alien -d ./RPMS/x86_64/diagnose-tools*.rpm
endif
endif
​

看一下./rebuild/rpmbuild.sh文件

  • 删除原有目录结构,建立目录结构(为了清空)

  • 写一个文件diagnose-tools.spec,在rpm中,会根据spec中的文件内容来生成和安装软件包。

    cat > $RPMBUILD_DIR/diagnose-tools.spec <<EOF
    .....(文件内容)
    EOF
  • 构建软件包.rpm。该命令会根据.spec文件的内容去构建软件包,并存放在./rebuild/RPMS/$(uname -i)/目录下。

    rpmbuild -bb $RPMBUILD_DIR/diagnose-tools.spec --define "%_topdir $RPMBUILD_DIR"

(2)all伪指令下安装软件包

删除原有安装;Ubuntu采用dpkg安装,其他采用rpm安装。

这里只了解了rpm,执行指令后会执行原.spec文件中%install中的内容。

all: module tools java_agent pkg
ifneq ($(findstring Ubuntu,$(UNAME_A) $(shell test -e /etc/os-release && head -1 /etc/os-release)),)
        dpkg -P diagnose-tools || echo "remove diagnose-tools error"
        cd rpmbuild; sudo dpkg -i diagnose-tools*.deb
else
        yum remove -y diagnose-tools
        yum localinstall -y rpmbuild/RPMS/${ARCH}/diagnose-tools-*.rpm
        diagnose-tools -v
endif

(3)查看.spec文件内容

.spec文件内容是rpm软件包构建的核心,其实整个过程就是执行了这个代码。

%install
mkdir -p $RPM_BUILD_ROOT/usr/diagnose-tools/
mkdir -p $RPM_BUILD_ROOT/usr/bin/
​
/bin/cp -rf /home/yj/project/diagnose-tools/build/lib $RPM_BUILD_ROOT/usr/diagnose-tools/
/bin/cp -rf /home/yj/project/diagnose-tools/build/bin $RPM_BUILD_ROOT/usr/diagnose-tools/
/bin/cp -rf /home/yj/project/diagnose-tools/rpmbuild/../SOURCE/diagnose-tools/diagnose-tools $RPM_BUILD_ROOT/usr/bin/
/bin/cp -rf /home/yj/project/diagnose-tools/rpmbuild/../prebuild/modules/* $RPM_BUILD_ROOT/usr/diagnose-tools/lib/
/bin/cp -rf /home/yj/project/diagnose-tools/rpmbuild/../SOURCE/diagnose-tools/java_agent/libperfmap.so $RPM_BUILD_ROOT/usr/diagnose-tools/
/bin/cp -rf /home/yj/project/diagnose-tools/rpmbuild/../SOURCE/perf-tools $RPM_BUILD_ROOT/usr/diagnose-tools/
/bin/cp -rf /home/yj/project/diagnose-tools/rpmbuild/../SOURCE/script/diagnose-tools.sh $RPM_BUILD_ROOT/usr/diagnose-tools/
...

这里主要看%install的内容,可以看到:

  • 创建了/usr/diagnose-tools目录,将一些脚本等文件放到里面了。

  • 将tool生成的可执行文件diagnose-tools移动到了/usr/bin/,所以命令才可以不加路径执行。

参考:Alien :RPM 和 DEB 互转 - Awakenedy - 博客园 (cnblogs.com)

如何打一个RPM包 - 亚楠老猎人 - 博客园 (cnblogs.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值