1  认识deb包

1.1   认识deb包

deb是Unix系统(其实主要是Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。 由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。

1.2   使用deb包

查看deb包含有哪些文件(不安装)

dpkg -c xxx.deb // 安装前根据deb文件查看 dpkg -L debname // 安装后根据包名查看12

安装deb包

dpkg -i xxx.deb1

注意,如果提示错误,可以加参数—force-all强制安装,但不推荐这样做

移除deb包

dpkg -r debname1

查看某个文件属于哪个deb包

dpkg -S filepath1

释放安装内容到dirname目录中

dpkg -X xxx.deb dirname1

释放控制信息到当前目录下的DEBIAN子目录中

dpkg -e xxx.deb1

1.3   deb包的组成结构

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   在删除文件之后运行的脚本

2  制作deb包

首先我们需要准备好我们待打包的软件, 这里我们采用了

下载示例软件包, 直接对二进制包或者进行打包 对源码编译后进行打包需要有make的编译脚本, 或者对于自己写的代码制做deb包, 建议用autoconf, automake生成编译脚本

2.1   最基础的方式dpkg-deb

最基础的方式需要我们自己编写和创建脚本, 不使用其他辅助工具, 而只使用标准的dpkg-deb打包命令

我们以之前的微信电脑版的代码为例子, 为其创建一个deb安装包

首先我们为我们创建一个工作目录electronic-wechat

然后我们创建一个名为EBIAN的目录, 用于存放控制信息

然后我们创建对应的二进制包安装安装完成后的路径信息放置在DEBIAN的同级目录下, 也就是说我们把当前的目录当成根目录, 制作完成后安装时, 当前目录下除DEBIAN目录的其他目录都会被默认安装到系统的/目录下

在DEBIAN里新建一个文本文档, 名为control, 编码为utf-8, 内容如下所示

Package: electronic-wechat Version: 1.4.0-2016.08.24 Section: BioInfoServ Priority: optional Depends: Suggests: Architecture: i386 Installed-Size: 4096 Maintainer: gatieme Provides: bioinfoserv-arb Description: A better WeChat on macOS and Linux. Built with Electron by Zhongyi Tong1234567891011

然后我们回到工作目录上级, 使用dpkg-deb命令创建deb包

使用dpkg-deb --help查看使用帮助的信息, 可以使用-b选项生成deb包

dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb1

验证打包好的deb, 我们可以使用dpkg -i安装或者dpkg -X解压命令验证我们的deb包

2.2   方法二: 使用checkinstall方法创建deb包

如果你已经从它的源码运行”make install”安装了linux程序. 想完整移除它将变得真的很麻烦, 除非程序的开发者在Makefile里提供了uninstall的目标设置. 否则你必须在安装前后比较你系统里文件的完整列表,然后手工移除所有在安装过程中加入的文件. 这时候Checkinstall就可以派上使用。Checkinstall会跟踪install命令行所创建或修改的所有文件的路径(例如:”make install”、”make install_modules”等)并建立一个标准的二进制包,让你能用你发行版的标准包管理系统安装或卸载它,(例如Red Hat的yum或者Debian的apt-get命令)

apt-get install checkinstall1

可以使用checkinstall --help来查看帮助信息

checkinstall不仅可以生成deb包, 还可以生成rpm包,使用简单,但是不灵活,功能粗糙,只做介绍,不推荐使用

但是他适合从源代码直接构建我们的deb包, 我们下载到待打包的源代码以后, 先使用make和make install编译安装, 然后运行checkinstall即可完成deb的打包

git clone git@github.com:chinaran/color-compile.git   # 下载源代码 cd color-compile   make && make install # 构建123

checkinstall -D --pkgname=color-compile --pkgversion=2014-12-20 --install=no  --pkgsource=../color-compile  # 制作deb1

首先提示输入安装包的描述信息

接着checkinstall提示用户填入或者修改deb的控制信息, 其本质就是control文件的内容

最后等待生成deb完成

此时当前目录下生成了deb包

2.3   方法三: 使用dh_make方法创建deb包

deb包所需的默认信息

dh_make -s -e gatieme@163.com -p color-compile_2014-12-20  -f ./color-compile_2014-12-20.tar.gz # 生成制作1

此时当前目录下生成了debian目录, 此时通常修改两个文件:

修改debian/control文件,配置你的信息,具体字段见参考部分 修改debian/rules脚本,它决定编译参数(也可以不改)

dpkg是最基本的制作deb包的方法, 推荐使用

dpkg-buildpackage -rfakeroot1

此时可以看到,上层目录中已建立了deb包

2.4   方法四: 修改已有deb包

自己创建deb所需目录结构(控制信息和安装内容),然后打包,一般使用这种方法来修改已有的deb包,而不是新建deb包,命令如下:

dpkg -X xxx.deb test #  解包安装内容 cd test dpkg -e ../xxx.deb #  解包控制信息123

修改其中内容

cd ../ dpkg -b dirname xxx_new.deb #  重新打包12

3  参考

debian/control文件中信息说明

1) Package 包名 2) Version 版本 3) Architecture 目标机架构(i386, arm等) 4) Maintainer 维护者 5) Depends 依赖软件包 6) Description 描述123456

checkinstall详细例程

自己制作deb包例程

官方的debian制作手册(比较长)

linux/ubuntu中制作deb安装包

制作Ubuntu的deb格式包 从Hello World做起 --------------------- 作者:JeanCheng 来源:CSDN 原文:https://blog.csdn.net/gatieme/article/details/52829907 版权声明:本文为博主原创文章,转载请附上博文链接!

Ubuntu下制作deb包的方法详解的更多相关文章

  1. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  2. Ubuntu下Git从搭建到使用详解

    Ubuntu下Git从搭建到使用详解 一.git的搭建 (1).sudo apt-get update (2).sudo apt-get -y install git 符:安装最新版本方法: add- ...

  3. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  4. Ubuntu 静默安装DEB包(非交互式)~解决Ubuntu下安装DEB包弹窗交互的问题

    在Ubuntu环境下安装DEB包时,比如安装MySQL式经常会弹出交互式要输入密码的操作.有时候我们期望编写Shell脚本一键部署MySQL时不想要弹窗交互时,则可以使用以下方式实现自动化安装Deb软 ...

  5. Ubuntu下安装deb包命令

    原文地址:http://www.xitongzhijia.net/xtjc/20150206/37464.html 1.下载需要安装的deb包,输入以下命令安装: sudo dpkg -i packa ...

  6. 关于Python安装官方whl包和tar.gz包的方法详解

    Windows环境: 安装whl包:pip install wheel -> pip install **.whl 安装tar.gz包:cd到解压后路径,python setup.py inst ...

  7. ubuntu下安装.deb包的安装方法

    ubuntu16.04的软件中心应该是有bug,安装不了第三方.deb文件,我们只有使用dpkg -i 或者gdebi的方式安装,我使用的是后者,因为后者功能更加强大.要使用gdebi命令先要安装它: ...

  8. 在Ubuntu下安装deb包需要使用dpkg命令

    Dpkg 的普通用法: 1.sudo dpkg -i <package.deb> 安装一个 Debian 软件包,如你手动下载的文件. 2.sudo dpkg -c <package ...

  9. Ubuntu下Apache+php+mysql网站架设详解

    目录 1 基础 2 安装 2.1 安装LAMP 2.2 图形化管理软件(可选) 2.2.1 安装webmin 2.2.2 安装phpmyadmin 3 配置文件路径 3.1 常用命令 3.2 配置ap ...

随机推荐

  1. multer实现图片上传

    multer实现图片上传: ejs代码: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. 将现有vue项目基于electron打包成桌面应用程序

    一.前言 项目本来打算采用B/S架构去做的,浏览器网址方式打开还是让用户不方便: 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目 ...

  3. 用pythoninstall cefpython打包exe,制作自己的浏览器

    cefpython浏览器 介绍 用pythoninstall cefpython打包exe,制作自己的浏览器, 软件架构 PyInstaller: 3.4 Python: 3.5.4 Platform ...

  4. Orion (system-on-a-chip)

      From Wikipedia: Orion is a system-on-a-chip manufactured by Marvell Technology Group and used in n ...

  5. (转载)关于FLASH寿命的读写方法

    NOR(或非)和NAND(与非)是市场上两种主要的Flash闪存,sNORFLASH 和CPU之间不需要其他电路控制,NOR flash可以芯片内执行程序,而NAND FLASH 和CPU 的接口必须 ...

  6. PL/SQL查询,字段名添加中文别名,查询结果的字段名会显示问号,处理方法:

    一开始查询出来的字段名显示的是???,下面说说解决方法(本人也是在网上看到的,算是重复编辑一下): -------------------------------------------------- ...

  7. IntelliJ IDEA 生成类注释和方法注释

    1.类注释 settings-> file and code templates-> files(Class) 代码: #if (${PACKAGE_NAME} && ${ ...

  8. mysql 5.5 编码设置为utf8 转载自:http://outofcontrol.ca/thoughts/comments/change-mysql-5.5-default-character-set-to-utf8

    Change MySQL 5.5 default character-set to UTF8 连接里是linux下的 在window下my.ini Add under [client]  the fo ...

  9. 类对象传输到jsp页面。需要转换为js的json对象时,这么做。

    场景:要从一个列表中选择信息,填写入父页面的表单中,但是字段非常多... 后台查询,得到结果,放在列表中. 效果:点击选择产品.. 弹出页面:点击后面的选择产品 选择产品后:信息自动填充.. 实现:点 ...

  10. docker的网络服务

    docker提供 网络服务,主要通过两种方式: 1.外部访问 2.容器互联 通过外部访问Docker容器,主要通过端口映射的方式. [root@docker ~]# docker run -t -P ...