1. 概述

有时候我们向用户提供软件时,并不希望提供源码(虽然这挺狗的...),而是只希望提供一些可执行文件。小程序还好说,可以轻易地提取有用的信息出来。

但对于一些比较庞大的程序,尤其是需要配置文件,并且需要内核的支持等条件的时候,就会因为程序内部各个文件与程序的复杂性,在搞清其中关系上花上不少的时间了。

这样就需要一个办法将其中的可执行文件提取出来并且能够保证其能够正常执行,当然,你可以将你编译源代码的目录中的代码都删掉,只留下中间产物和可执行文件,是可以的。但这里我们讨论的是如何通过制作deb软件包来达到目的。

而做成deb包还有另一个好处,就是方便软件的安装与卸载,这是源码安装的很多软件无法做到的。

2. 需要工具

完成刚才所描述的操作只需要一个工具:checkinstall,是一个将源码转化成deb或者rpm包的工具,操作也比较简单。

而完成安装包并不是最终目的地,我们有时还需要对安装包进行适当的修改,此时则需要dpkg,debian下强大的包管理工具。

有的系统可能会不提供checkinstall在线安装的,下载地址如下:http://asic-linux.com.mx/~izto/checkinstall/。但是我真没搞明白怎么用,应该是直接用的,但会报错,也没系想去深究,不要鄙视我。

我在debian上直接用apt-get装的。

==== 操作流程 ====

3. 制作包过程

我们在正常编译软件源码是通过 ./configure ; make ; make install 来完成的。

而我们要做的就是用checkinstall去替换make install这步,然后我们就会得到一个deb包了...

整个过程将像如下显示

在通过./configure && make之后,输入sudo checkinstall命令
经过很短时间的初始化之后,系统会提示你

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]:

选择y

然后会让你对包做一定的描述,以空行结尾

Please write a description for the package.
End your description with an empty line or EOF.
>> i am description
>>

然后会提示你完成一些描述性的输入

This package will be built according to these values:

0 - Maintainer: [ root@debian ]
1 - Summary: [ i am the summary ]
2 - Name: [ name ]
3 - Version: [ 1.0 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ amd64 ]
8 - Source location: [ nameofthesrc ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ command ]
12 - Conflicts: [ ]
13 - Replaces: [ ]

此处的requires可以指定所需要的包

比如,我需要libxml2-dev,pkg-config的支持,输入

10 #回车
>> libxml2-dev,pkg-config #回车

当然,你也可以在适用checkinstall命令的时候加一个参数

checkinstall --requires="libxml2-dev,pkg-config"

这里,如果你加了要求,别人在安装你的包的时候,如果没有相应的库,或者软件,程序就检查并提示,否则不会检查的,直接去安装,最后程序没法用,而且谁也不知道为什么。除非你能够提供一个说明。

如果没有这里直接回车就好了,然后就可以完成deb包的创建了。

正常情况下,此时这个deb包就可以拿去给别人装软件了,安装过程需要使用命令

sudo dpkg -i name.deb

4. 通过dpkg管理deb包

有时我们可能需要对这个deb先进行一定的处理,因为制作包的过程是通过替换make install过程完成的,可能有些东西我不想放在包里,我要把它删除。我也希望向里面添加一些其它的东西。比如是两个不同系统的程序,你希望你的系统同时拥有他们,但不希望通过多个步骤。

这个过程需要dpkg命令来实现,dpkg的一些基本功能如下所示

dpkg -i name.deb #安装软件包
dpkg -I name.deb #从包里获取deb包的信息
dpkg -i name #移出所安装的软件包,名字可以通过查看包信息得到
dpkg -c name.deb #查看包内的内容,看起来就跟压缩包一样
dpkg -s name #查看已安装的包裹信息
dpkg -r name #删除一个已安装的包裹
dpkg -P name #删除一个已安装的包裹,包括配置文件

其实就是重新组装一下目录,大概就是这个意思。

其实dpkg已经强大到无以复加的地步,如果想了解更详细的信息,请看这里
http://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.zh-cn.html
http://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.en.html

这里向说明的是dpkg的一些其他功能,解包和重新打包

dpkg -x name.deb name #得到包内的文件
dpkg -e name.deb name/DEBIAN #得到包内的控制信息
dpkg -b name name.deb #创建一个deb包

这样,我们就可以对包的内容进行修改,向里面添加,或者移出一些内容了。

:-)

自由非争取而得到,自由是与生俱来的。

利用checkinstall制作deb或rpm工具包的更多相关文章

  1. 从源代码制作deb包的两种方法以及修改已有deb包(转载)

    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% ...

  2. Ubuntu下制作deb包的方法详解

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

  3. 【linux】制作deb包方法 **

    目录 前言 概念 ** 创建自己的deb包 文件源码 前言 制作deb的方式很多 使用 dpkg-deb 方式 使用 checkinstall 方式 使用 dh_make 方式 修改原有的 deb 包 ...

  4. 利用TabHost制作QQ客户端标签栏效果(低版本QQ)

    学习一定要从基础学起,只有有一个好的基础,我们才会变得更加的perfect 下面小编将利用TabHost制作QQ客户端标签栏效果(这个版本的QQ是在前几年发布的)…. 首先我们看一下效果: 看到这个界 ...

  5. ubuntu 制作deb 包

    ubuntu下打包制作deb安装包 http://www.th7.cn/system/lin/201406/61012.shtml   2014-06-22 20:16:45CSDN-yangbing ...

  6. 利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片

    利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片.代码如下 import java.awt.Color;import java.io.File;import java.util.H ...

  7. C#利用API制作类似QQ一样的右下角弹出窗体

    C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...

  8. 【百度地图API】如何利用PhoneGap制作地图APP

    原文:[百度地图API]如何利用PhoneGap制作地图APP 摘要:百度地图API是一套由javascript编写的地图程序接口,按说它应该运行在浏览器上.现在,只要利用PhoneGap,我们就能开 ...

  9. [deb]制作deb包

    转自:http://www.cnblogs.com/Genesis-007/p/5219960.html 查看系统安装了哪些deb包: dpkg -l 打包: dpkg -b dir result.d ...

随机推荐

  1. Scala - error: not found: value SortedMap

    先 IMPORT!!!! scala> import scala.collection._import scala.collection._ scala>  SortedMap(" ...

  2. 水晶报表显示到aspx页面中

    1.在前台添加水晶报表显示控件. <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server&q ...

  3. 表格table样式布局设置

    <style> table{ border-collapse:collapse; margin:0 auto;} table tr td{ border:1px solid #000; l ...

  4. 字符串匹配的python实现

    所有字符串匹配算法的核心问题是,当出现不匹配时,如何向后移动模式串 一.暴力匹配算法 如果要匹配一个字符串s 和一个模式串p,则从i=0开始依次匹配s[i:(i+len(p))],简单粗暴,代码如下: ...

  5. IT从业人员必看的十几个论坛

    IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多,往哪里去,新浪论坛,网易是经常去的,人多啊,好几十万,去了以后才发现没有意思,没有共同的语言,于是逛专 ...

  6. 集合工具类 - CollectionUtil.java

    集合工具类,提供数组转LIST.数组转SET.合并集合.计算笛卡儿积等方法. 源码如下:(点击下载 -  CollectionUtil.java.ArrayUtil.java.commons-lang ...

  7. ASP.NET State Service服务

    ASP.NET State Service服务是用来管理 Session 的,正常来说,Session 位于IIS进程中(其实可以理解成在服务器的内存中),当IIS重启或程序池回收会自动清空Sessi ...

  8. The state of Web Components

    Web Components have been on developers’ radars for quite some time now. They were first introduced b ...

  9. 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)

    [题意] 假设有 n 根柱子, 现要按下述规则在这 n 根柱子中依次放入编号为 1, 2, 3, ¼的球.( 1)每次只能在某根柱子的最上面放球.( 2)在同一根柱子中,任何 2 个相邻球的编号之和为 ...

  10. 嵌入式C语言不可不用的关键字

    1.static关键字 这个关键字前面也有提到,它的作用是强大的. 要对static关键字深入了解,首先需要掌握标准C程序的组成. 标准C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部 ...