From:http://yysfire.github.io/linux/%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%B6%E4%BD%9Cdeb%E5%8C%85%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95%E4%BB%A5%E5%8F%8A%E4%BF%AE%E6%94%B9%E5%B7%B2%E6%9C%89deb%E5%8C%85.html

1. 原理

1) deb包通常包含两部分:控制信息(DEBIAN目录)、安装内容(模拟"/"目录)

2) 通过解开已有的deb包看其中内容

i. 释放安装内容到dirname目录中

  1. $ dpkg -X xxx.deb dirname

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

  1. $ dpkg -e xxx.deb

2. 准备

1) 安装相关工具

  1. $ sudo apt-get install dh-make checkinstall

2) 下载示例软件源码包

以游戏模拟器为例(也可使用其它源码包),制作它的deb包,下载地址:

http://prdownloads.sourceforge.net/fceultra/fceu-0.98.12.src.tar.bz2

3. 方法一: 使用checkinstall方法创建deb包

checkinstall不仅可以生成deb包,还可以生成rpm包,使用简单。

  1. $ tar xvjf fceu-0.98.12.src.tar.bz2 # 解包
  2. $ cd fceu;./configure;make # 编译
  3. $ checkinstall -D -install=no--pkgversion=0.98--pkgname=fceuxy make install # 制作deb包

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

4. 方法二: 使用dpkg方法创建deb包

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

  1. $ tar xvjf fceu-0.98.12.src.tar.bz2 # 解包
  2. $ mv fceu fceu-0.98# 改目录名为 包名-版本号
  3. $ cd fceu-0.98
  4. $ dh_make -f ../fceu-0.98.12.src.tar.bz2 # 生成制作deb包所需的默认信息

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

  1. 修改debian/control文件,配置你的信息,具体字段见参考资料部分
  2. 修改debian/rules脚本,它决定编译参数(也可以不改)
  1. $ dpkg-buildpackage -rfakeroot

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

修改已有deb包

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

  1. $ mkdir -p test
  2. $ dpkg -X xxx.deb test # 解包安装内容
  3. $ cd test
  4. $ dpkg -e ../xxx.deb # 解包控制信息

修改DEBIAN目录下的内容,然后重新打包:

  1. $ cd ../
  2. $ dpkg -b test xxx_new.deb # 重新打包

关于deb包的常用命令

1. 查看deb包含有哪些文件

  1. $ dpkg -c xxx.deb # 安装前根据deb文件查看
  2. $ dpkg -L debname # 安装后根据包名查看

2. 安装deb包

  1. $ dpkg -i xxx.deb

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

  1. $ dpkg -S filefullpath

4. 卸载deb包

  1. $ dpkg -r debname

5. 完全卸载deb包(包含配置文件)

  1. $ dpkg -P debname

6. 下载源码包

  1. $ apt-get source packagename

7. 根据软件包名模糊检索

  1. $ dpkg -l|grep xxx #在已安装的软件包列表中搜索
  2. $ apt-cache search xxx #在源中的所有软件包列表中搜索

参考资料

  1. debian/control文件中信息说明
    1. Package 包名
    2. Version 版本
    3. Architecture 目标机架构(i386,arm,amd64等)
    4. Maintainer 维护者
    5. Depends 依赖软件包
    6. Description 描述
  2. checkinstall详细例程
  3. 官方的debian制作手册

从源代码制作deb包的两种方法以及修改已有deb包(转载)的更多相关文章

  1. springboot打成jar包和war包的两种方式,并引入第三方jar包!

    springboot打成jar包和war包的两种方式,并引入第三方jar包! 首先把需要引入的第三方jar包引入到本地项目中,在引用的模块下加一个lib文件夹 一.打成jar包 1.修改pom文件里的 ...

  2. Linux 下操作GPIO(两种方法,驱动和mmap)(转载)

    目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...

  3. Win8.1RTM英文版安装中文语言包的两种方法

    Windows 8.1和Windows Server 2012 R2 RTM出来了,下载了个英文版的安装上了,发现远景上有朋友提供中文语言包,以下提供两种语言包的安装方法: 一.使用lpksetup命 ...

  4. 安装python包的两种方法

    1.在 anaconda 环境中安装包 selenium conda install selenium 2.python 下安装包 selenium pip install selenium 3.测试 ...

  5. jar包生制作几种方法,jar包导出三种方法:eclipse导出、jar命令、FatJar插件

    Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三 ...

  6. 自学Linux Shell9.4-基于Red Hat系统工具包存在两种方式之二:源码包

    点击返回 自学Linux命令行与Shell脚本之路 9.4-基于Red Hat系统工具包存在两种方式之二:源码包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方式 ...

  7. python安装第三方包的两种方式

    最近研究QQ空间.微博的(爬虫)模拟登录,发现都涉及RSA算法.于是需要下一个RSA包(第三方包).折腾了很久,主要是感觉网上很多文章对具体要在哪里操作写得不清楚.这里做个总结,以免自己哪天又忘了. ...

  8. python第三方包安装方法(两种方法)

    具体有以下两种方法: 第一种方法(不使用pip或者easy_install): Step1:在网上找到的需要的包,下载下来.eg. rsa-3.1.4.tar.gz Step2:解压缩该文件. Ste ...

  9. Unity调用Android的两种方式:其一、调用jar包

    unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...

随机推荐

  1. Python-正则零宽断言及命名捕获(类PHP)

    (一)零宽断言 说明:本文的例子使用python描述      首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置.      正则表达式中有很多这样的断言 ...

  2. struts2标签整理

    在JSP2.1中#被用作了JSP EL(表达式语言)的特殊记好,所以对OGNL的使用可能导致问题,   一个简单的方法是禁用JSP2.1的EL特性,这需要修改web.xml文件:   Java代码   ...

  3. 简单实用的Android ORM框架TigerDB

    TigerDB是一个简单的Android ORM框架,它能让你一句话实现数据库的增删改查,同时支持实体对象的持久化和自动映射,同时你也不必关心表结构的变化,因为它会自动检测新增字段来更新你的表结构. ...

  4. Web前端开发笔试&面试_04

    >>XDL: 1.在CSS中,选择器的优先级?(如important,id,class 这些……) 2.如何消除行内间隙? Inline-block 3. 如何清除浮动? —— 4. CS ...

  5. 从代码看 asp.net 处理过程

    从这里开始 先是一个 对Com接口的导入.   /// <internalonly/>    /// <devdoc>    /// </devdoc>    [C ...

  6. C++流格式控制符的使用【来自网络】

    注意添加<iomanip>头文件. 使用控制符控制输出格式 控制符 作用 dec 设置整数的基数为10 hex 设置整数的基数为16 oct 设置整数的基数为8 setbase(n) 设置 ...

  7. 【转载】onclick与onCommand的区别

    这两个事件没有本质区别,都是点击执行一个事件.不同在于传递的参数不一 样,OnClick (object sender, EventArgs e),OnCommand (object sender, ...

  8. 【转】.NET 安装和部署(Installer) 如何卸载上一个版本

    前言 当使用.NET“安装项目”打包的安装文件,再次安装的时候会弹出如下提示,这个时候会让我们很郁闷,怎样才能自动卸载上一个安装的版本呢?方法很简单,只需简单的两个操作步骤即可解决. 操作步骤 主要由 ...

  9. Saiku操作界面的简化

    在安装完毕Saiku后,由于是社区版本,所以界面上存在很多升级为商业版的文字.为了使得系统不那么碍眼,可通过如下方式更改来去除相应的内容: 1.去除查询页面的升级为商业版的提示 You are usi ...

  10. ASP.NET 4.0的ClientIDMode属性

    时光流逝,我们心爱的ASP.NET也步入了4.0的时代,微软在ASP.NET 4.0中对很多特性做了修改.比如我将要讨论的控件ID机制就是其中之一. 在ASP.NET 4.0之前我们总是要为控件的Cl ...