zoukankan      html  css  js  c++  java
  • linux下deb包的管理及制作 | 一次成功

    1.deb包介绍

    在debian/ubuntu环境下,很多情况下,我们安装已经开发的程序运用,可以通过deb包的命令进行程序的部署,对应的项目目录文件也会同步到某些目录下,
    有些情况下将程序做成service启动,这样会更方便运用的管理,如通过service xxx start|stop|status|restart。

    deb 是 Unix 系统(其实主要是 Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。

    deb 包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,文件名为 control.tar.gz;最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。

    deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这里 XXX 就是经过压缩后的后缀名。

    deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时间都比较长。

    data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。

    而 control.tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件:

    • control,用了记录软件标识,版本号,平台,依赖信息等数据,这是最主要的文件配置,必不可少;
    • preinst,在解包data.tar.gz 前运行的脚本;
    • postinst,在解包数据后运行的脚本;
    • prerm,卸载时,在删除文件之前运行的脚本;
    • postrm,在删除文件之后运行的脚本;在 Cydia 系统中,Cydia 的作者 Saurik 另外添加了一个脚本,extrainst_,作用与 postinst 类似。
    • rules,通常是给命令dpkg-buildpackage使用

    dpkg与apt-get区别

    使用 dpkg 命令安装软件时,可以使用 -i 选项并指定 deb 安装包的路径。和 Ubuntu 下的另一个包管理工具 apt-get(Advanced Package Tool)有所不同。

    apt-get 命令并不直接操作 deb 安装包文件,而是从 /etc/apt/sources.list 配置文件中定义的软件镜像源里下载软件包并安装,使用时也只需指定软件的名称(或者也可以附加上版本号)。

    apt-get 命令安装软件:

    $ apt-get install <package_name[=version]>
    

    dpkg 命令安装软件:

    $ dpkg -i <package_file_path>
    

    因此,dpkg 主要是用来安装已经下载到本地的 deb 软件包,或者对已经安装好的软件进行管理。而 apt-get 可以直接从远程的软件仓库里下载安装软件。

    2.deb常用命令

    1).安装deb包
    dpkg -i 包名
    
    2).删除deb包,删除安装的文件
    dpkg -r 包名
    # e.g. 如hello_1.0_linux_amd64.deb, 就是hello
    
    3).提取deb包文件到指定目录
    dpkg -x 包名 dirname
    # e.g. dpkg -x hello_1.0_linux_amd64.deb ./hello
    # 解释,提取deb包信息到当前的hello目录中,但是DEBIAN包不会提取到hello中
    
    4).查看包中的文件信息
    dpkg -c 包名
    # stout会列出所有目录文件信息
    
    5).制作deb包
    dpkg|dpkg-deb -b source-pakage pakageName
    # 在做包前还有些工作是要完成的,见下文
    

    3.deb包的制作

    首先介绍下基本流程。

    主要流程分以下三步:
    
    1).编辑文件信息 
    
    2).编写control信息,单写这个也可以成功打出deb包,如果配置文件较多,比如加入系统服务的那些文件,需要加在xxxxinst文件脚本中
    
    3).构建deb包
    

    下面通过一个简单的例子说明。

    dpkg-deb方式构建deb包

    1.首先生成项目目录
    # mkdir -p hello/opt
    
    2.进入目录中
    # cd hello/opt
    
    3.生成编辑文件-简单做个python例子
    # touch hello.py
    # vim hello.py
    以下是文件内容
    ------
    #!/usr/bin/python
    print "hello"
    ------
    保存后退出
    
    4.加执行权限
    # chmod +x hello.py
    
    5.回到hello主目录下,生成DEBIAN目录
    # mkdir DEBIAN
    
    6.编写control信息
    # cd DEBIAN
    # touch control
    # vim control
    
    以下是control内容
    ------
    Package: hello
    Version: 1.0
    Section: BioInfoServ
    Priority: optional
    Depends:
    # 此处是相关的依赖包,多个用逗号隔开,如有确切版本,则可以 python-django (= 1.11.5)
    Suggests:
    Architecture: amd64
    Installed-Size: 4096
    Maintainer: gatieme
    Provides: bioinfoserv-arb
    Description: A test for using dpkg cmd
    ------
    
    7.回到hello目录
    ------
    root@test:/data/test/hello# ls -R
    .:
    DEBIAN  opt
    
    ./DEBIAN:
    control
    
    ./opt:
    hello.py
    ------
    
    8.接下来执行做包命令
    # 回到hello目录上层,
    # cd ..
    # ls   # hello目录
    # dpkg-deb -b hello hello_1.0_linux_amd64.deb # dpkg-deb命令,-b表示构建deb包, hello表示源文件包, hello_1.0_linux_amd64.deb表示构建后的deb包
    # 下面是输出
    ------
    dpkg-deb: building package 'hello' in 'hello_1.0_linux_amd64.deb'.
    ------
    
    # 更多
    我们可以通过以下命令来提取deb包的DEBIAN信息
    dpkg-deb -e xx包
    # 提取对应deb包的DEBIAN目录到当前目录,内部含control,confile,postinst等等信息
    

    到了这里,deb包就完成了,接下来可以通过dpkg相关命令管理deb包。

    4.写在后面

    deb包的目录树

    |——mydeb
         |————usr
               |————lib
                     |——可执行文件(安装后,就在你的/usr/lib生成相应的可执行文件)
               |————share
                     |————icons 
                             |——deb.png(图标文件生成到/usr/share/icons/)
                     |————applications                           
                             |——deb.desktop(桌面文件生成到/usr/share/applications/)
         |————DEBIAN(大写、用来制作打包文件)
                |————control(描述deb包的信息必须的文件)
    
    

    DEBIAN目录下可用的文件如下

    这个目录下面的文件很多,不能一一解释。这里列举几个重要的,也是绝大部分软件必须的:
    
    control文件: 声明很多重要的变量,dpkg通过这些变量来管理软件包
    copyright文件: 不用说,版权信息,相当重要
    changelog文件: 这是一个必需文件,包含软件版本号,修订号,发行版和优先级。
    rules文件: 这实际上是另外一个Makefile脚本,用来给dpkg-buildpackage用的.
    compat文件: 这个文件留着是有用的
    dirs文件:这个文件指出我们需要的但是在缺省情况下不会自动创建的目录
    

    conrol文件

    //包名
    Package: Internet-of-things
    //版本
    Version: 1.0.0-2017.05.03
    //包分类
    Section: tuils 
    //优先级
    Priority: optional
    //依赖软件包
    Depends:
    //建议
    Suggests: 
    //目标机架构
    Architecture: i386 | amd64
    //安装后大小
    Installed-Size: 
    //维护者
    Maintainer: papa
    //原维护者
    Original-Maintainer: papa
    //提供
    Provides:  
    //包描述
    Description: 欢迎来到万物智联
    //软件主页
    Homepage: http://blog.csdn.net/qq_27818541/
    

    参考
    https://blog.csdn.net/gatieme/article/details/52829907
    https://blog.csdn.net/youlinhuanyan/article/details/99574723

  • 相关阅读:
    理解构造器
    if与switch的性能比较
    Java对象的内存(一)
    shell编程_条件判断if
    shell编程_基础&变量
    集群架构篇:Nginx架构演进<拆分数据库 多台web节点共享静态资源>
    集群架构篇:Nginx流行架构LNMP
    集群架构篇:Nginx常用模块
    LInux系统@安装CentOS7虚拟机
    docker pull越来越慢的解决方法
  • 原文地址:https://www.cnblogs.com/davis12/p/14365981.html
Copyright © 2011-2022 走看看