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. FreeSWITCH在呼叫失败的情况下播放语音提示

    看到好多网友问到这个问题.一般我们在打电话时会听到“您拨的电话正在通话中,请稍后再拨....”,或“电话无应答...”之类的提示,我们在 freeswitch 里也可以这样做. 其实很简单,默认的配置 ...

  2. 开源App之MyHearts(二)

    前言 小弟技术有限,有的地方也是自己摸索出来的,可能和大神们写的好的代码没法比,但是我会努力的.要对自己说下,加油!! 此次更新 1.集成QQ登录完成 集成QQ登录网上写的介绍已经很多了,这里就不详细 ...

  3. Oracle数据库——基本操作

    一.涉及内容 1.掌握Oracle 10g 相关服务的启动.停止. 2.熟练掌握数据库配置助手(DBA).企业管理器(OEM).SQL*Plus等工具的使用. 3.掌握使用STARTUP和SHUTDO ...

  4. python-ansible

    http://sofar.blog.51cto.com/353572/1579894 http://www.aikaiyuan.com/6299.html http://docs.ansible.co ...

  5. 1134 铺地毯【2011年NOIP全国联赛提高组】

    http://codevs.cn/problem/1134/ 题目描述 Description 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地 ...

  6. Jquery使用ajax以及angularjs 动态模板加载并进行渲染

    1. 源码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  7. python数据类型之 set

    set是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object set(iterabl ...

  8. tengine安装

    下载地址: http://tengine.taobao.org/download_cn.html $tar -xvzf tengine-2.1.2.tar.gz $./configure$ make$ ...

  9. mysql edit

    表外键5个相关性: cascade,restrict,set null,no action,default   show character set ;   show collation like ' ...

  10. 【oracle】 linux 下oracle 启动监听错误

    Message 1070 not found; No message file for product=network, facility=TNSTNS-12545: Message 12545 no ...