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. (转)word2vec前世今生

    word2vec 前世今生 2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效 ...

  2. 论文笔记之:Asynchronous Methods for Deep Reinforcement Learning

    Asynchronous Methods for Deep Reinforcement Learning ICML 2016 深度强化学习最近被人发现貌似不太稳定,有人提出很多改善的方法,这些方法有很 ...

  3. Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)

    Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)  部分翻译自“Monte Carlo Tree Search and Its Applicati ...

  4. C#的委托 Action<>和Func<>

    其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: [csharp]  public delegate vo ...

  5. Integer.parseInt()和Integer.valueOf()有什么区别

    jdk的源代码的时候注意到Integer.parseInt(s) 和 Integer.valueOf(s)的具体代码的实现有所区别: Java代码 public static int parseInt ...

  6. unity, OnTriggerStay/OnTriggerStay2D not called every fixedUpdate frame

    ref: http://answers.unity3d.com/questions/1268607/ontriggerstay2d-do-not-called-every-fixedupdate-un ...

  7. maxsdk sample中3dsexp.rc点不开并提示specstrings.h中找不到sal.h解法

    在网上下载sal.h文件并拷贝到specstrings.h所在目录(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include)即可. sa ...

  8. .net 开源 JavaScript 解析引擎

    1. Javascript .NET 地址为:http://javascriptdotnet.codeplex.com/ 使用方法: Quick Start This section provides ...

  9. 墨刀 手机app原型工具

    https://modao.io 并且墨刀对开放项目永久免费!

  10. mysql 远程访问授权

    给mysql改了密码了,程序就不让登录了: mysql 网外链接 Access denied for user 这不能忍啊!咋办?授权呗! 命令行: GRANT ALL PRIVILEGES ON * ...