ubuntu下从源码制作安装包deb包与更改deb包信息

我的之前的一篇博客尝试了从源码制作安装包.deb文件,通过checkinstall命令从源码编译打包了PCL库。然后我想如果我需要更改这个包的一些信息怎么办,比如这个包需要其他一些依赖项而我之前打包的时候忘了添加这个依赖项。我查了checkinstall的手册和一些博客,但貌似checkinstall并不提供更改deb包的功能(也有可能是我没有发现)。然后我发现可以使用dpkg命令进行deb包的信息查看、更改等,dpkg这个命令可以说非常强大了,具体的请man dpkg,这里只介绍我用到的功能。

查看deb包信息

使用dpkg-deb相关命令可以查看deb包的相关信息:

  • dpkg-deb -c:列出包所含的内容
  • dpkg-deb -W:打印安装包的简明信息
  • dpkg-deb -I:打印控制信息

修改deb包信息

  1. 解压deb包内容与控制信息
    • mkdir extract,在当前目录下新建文件夹,用于存放解压后的内容
    • mkdir extract/DEBIAN,新建DEBIAN目录用于存放包的控制信息
    • dpkg -X ./opencv_4.2.0_amd64.deb extract/,将要修改的deb包解压到extract目录下,可以看到:
      在这里插入图片描述
      类似这样的目录结构(这里只列出了三层目录结构)。我猜想安装软件包其实就是按照这个目录结构将相关的共享库文件、头文件以及文档之类的复制到根目录下对应目录层次下。
    • dpkg-deb -e ./opencv_4.2.0_amd64.deb extract/DEBIAN/,将deb包的控制信息提取到DEBIAN目录下,然后更改该目录下的控制信息即可。该目录下会有一个conffiles和一个control,control内容与dpkg-deb -I opencv_4.2.0_amd64.deb打印出来的内容相似:
      在这里插入图片描述
      该文件指定该软件包的包名、版本、依赖等信息。
  2. 修改相关文件
    想要更改包的依赖项直接在control中改就可以,比如我上面打包opencv时Depends缺了个jasper,jasper-dev,然后我在这里添上。实际上DEBIAN目录下保存包的控制信息,不仅可以修改这个control中有的信息,还有设置安装之前执行的脚本,安装之后执行的脚本以及卸载前后执行的脚本,比如在DEBIAN目录下新建:
    • preinst文件:指定安装之前执行的脚本命令,一般为正在被升级的包停止相关服务,直到升级或安装完成,参考。这里因为jasper与libjasper-dev安装时需要添加一个安装源,我的preinst脚本如下——
    #!/bin/bash
    if cat /etc/apt/sources.list |grep '^deb http://security.ubuntu.com/ubuntu xenial-security main$';then 
      echo 'the source already added in /etc/apt/source.list file';
    else
      sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
      sudo apt update
    fi
    
    • postinst文件:在deb包安装完毕后执行一些配置工作等。这里我没有创建
    • prerm文件:卸载钱执行的脚本
    • postrm文件:卸载后执行脚本

另外如果创建了脚本,需要更改其权限,给其添加执行权限sudo chmod a+x preinst

使用dpkg重新打包

完成了一上更改之后需要将其打包回一个deb文件,dpkg-deb -b ./extract opencv_4.2.0_amd64.deb
现在dpkg-deb -I opencv_4.2.0_amd64.deb查看其更改后的信息:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值