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. hrbust 1328 相等的最小公倍数(数论)

    Description 定义An为1,2,-,n的最小公倍数,例如,A1 = 1,A2 = 2,A3 = 6,A4 = 12,A5 = 60,A6 = 60. 请你判断对于给出的任意整数n,An是否等 ...

  2. html标签data大写获取不到值:只能小写+横杠命名

    html标签data大写获取不到值:只能小写+横杠命名 例如: <i class="glyphicon glyphicon-question-sign" data-tip-t ...

  3. html锚点

    ID模式 <h3><a href="#start">开始</a></h3> <div> 你好 <b/> &l ...

  4. Poco之ftp目录切换与创建

    TEMPLATE = app QT += qml quick widgets#LIBS += -lPocoFoundation -lPocoXML -lPocoNetSOURCES += main.c ...

  5. DataTable,DataSet,DataRow与DataView

    DataTable和DataSet可以看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?原因是,这 ...

  6. nRF52系列——nRF52832来袭

    nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...

  7. 【转】【Top 100 Best Blogs for iOS Developers】

    原文地址:http://www.softwarehow.com/best-blogs-for-ios-developers/ (by JP Zhang | Last updated: Apr 5, 2 ...

  8. java中关于移位运算符的demo与总结

    首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种. << 左移运算符,表示将左边的操作数的二进制数据向左移动*位,移动后空缺位以0 ...

  9. 【技术贴】解决QQ空间发表文章手机不显示换行

    采用HTML模式,在需要换行的地方加入如下代码. <div><span style="font-family:微软雅黑;font-size:16px"> & ...

  10. nc 命令汇总

    转自: http://blog.chinaunix.net/uid-20068039-id-359170.html 1.远程拷贝文件从server1拷贝文件到server2上.需要先在server2上 ...