如何手动创建DEB文件?


46

我想手动创建一个DEB文件。我只想提供一个包含要安装的数据的文件夹,以及一个要在安装后执行的脚本。

这可能吗?


您选择的答案不是很好吗?
Gigamegs 2012年

@David,实际上我使用“ dpkg-deb”做到了,这要容易得多,这就是为什么我选择Gilles的原因,方法是在package文件夹中列出文件,从而使我可以清晰地看到文件放置在那里。所以,我认为他的回答比较好..
菊花

我也列出了软件包中的所有文件。
Gigamegs 2012年

11
@David我的意思是说他的答案是微分是一回事,但是“不是一个很好的答案”吗?吉尔斯的回答很好。不管您的答案是第一个,他的答案都更完整。采取现有的答案并加以扩展并没有错。那是一件好事
Michael Mrozek

Answers:


57

制作源码包

我的建议是制作一个源码包。安装build-essentialdebhelperdh-make。更改到要安装文件所在的目录(该目录名必须是形式的$PACKAGE-$VERSION,例如myapp-4.2-1在包装MYAPP V4.2你的第一次尝试),并运行dh_make --createorig。回答问题。Debhelper将通过在名为的子目录中生成文件(debian一些必需文件和可选文件模板)来创建构建软件包所需的基本基础结构。您可能需要修改其中一些文件:

  • 编辑debian/rules以构建需要构建的文件,并将文件安装在正确的位置。如果您只需要复制一些文件而不是编译内容,则只需编辑文件debian/install以指定需要在何处安装哪些文件。
  • 编辑debian/copyright以添加有关您的软件包的许可证信息以及有关从何处获取最新版本的信息(如果有)。
  • 编辑debian/changelog以删除对ITP的引用(仅在您正在处理Debian项目时才相关)。重命名debian/postinst.exdebian/postinst和你的安装后命令在那里。如果以后更新软件包,请运行debchange -i以添加更改日志条目或在Emacs中编辑文件(已安装dpkg-dev-el)。

运行dpkg-buildpackage -rfakeroot -us -uc以生成.deb软件包(-us -uc如果要使用PGP密钥对软件包签名,请删除)。

直接制作二进制包

如果您决定直接制作一个二进制程序包而不从源程序包构建二进制程序包,这并不是一件容易的事,因为没有太多工具可以简化该过程,因此您需要对deb程序包的格式有一些基本的了解。它在描述Debian策略手册,特别是CH。3(二进制软件包的格式)ch。5(控制文件)ch。6(安装脚本)附录B(二进制软件包操作)

您确保您的软件包安装了预期的文件/usr/share/doc/copyright(包含软件包内容的许可证以及在何处可以找到软件包的最新版本)和/usr/share/doc/changelog.Debian.gz(包含deb软件包的变更日志)。如果仅在内部使用该软件包,则不需要这些,但最好使用它们。

关于Debian及其衍生产品

如果您有可用的Debian工具,请使用dpkg-deb来构建软件包。在包含要安装的数据的目录中,添加一个DEBIAN顶层目录,其中包含控制文件和维护者脚本。

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

艰难的道路

如果您没有Debian工具,请建立要打包的文件的档案,建立一个data.tar.gz名为control.tar.gz(没有子目录)的控制文件的单独档案,并建立一个debian-binary包含text 的文本文件2.0

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

你至少需要一个控制文件与领域PackageMaintainerPriorityArchitectureInstalled-SizeVersion,和任何必要的依赖声明。

安装后要执行的脚本称为postinst。确保使其可执行。它并存control

从其他格式转换二进制包

如果您已经拥有另一个发行版中的二进制包,则可以使用Alien进行转换。


3
IMO,那是我的助手的副本?你怎么看?
Gigamegs 2012年

1
答案是前提是OP知道如何使用emacs。这里真的需要emacs吗?对于编辑变更日志,我认为可以使用dch -i
Faheem Mitha 2012年

那是ar做什么的tar呢?
mmstick

@mmstick这是一种不同的格式。我不知道为什么deb格式的设计师选择在这里使用ar。
吉尔斯(Gilles)'所以

1
如果你想改变这个名字和电子邮件dh_make --createorig使用,你需要export DEBEMAIL="me@example.com"export DEBFULLNAME="Firstname Lastname"提前。
瑞安

10

首先,您需要创建一个构建文件夹和一个文件存档: tar czvf data.tar.gz files

然后,必须在构建文件夹中创建一个包含一些所需信息的控制文件:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

然后,您可以独立添加preinst,postint,prerm和postrm Shell脚本来控制.deb文件的安装前和安装后以及安装和删除后的行为,然后可以使用tar创建控件存档: tar czvf control.tar.gz control preinst postinst prerm postrm

然后,您需要一个debian-binary文件:echo 2.0 > debian-binary。现在,您的build文件夹中应该包含以下文件:debian-binary control.tar.gzdata.tar.gz

最后,您需要ar打包来创建.deb文件:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz


1
关于ar -r xxx.deb debian-binary control.tar.gz data.tar.gz它,值得强调一下顺序很重要:控制必须先于数据。
Hibou57年

@Bytemain,票数最高的答案的确确实部分基于您的文本,但是它添加了详细信息,并且可读性更好。我们可以复制/粘贴的顺序使其特别美观。
mariotomo

3

我做了很多包装,要做一个完整的包装并不是一件容易的事。积极的一点是,文件和脚本的工作量要少得多。您可以使用称为debreate的工具非常简单地创建此类软件包。

Debreate是一个非常简单的GUI,仅用于创建简单的DEB包。您可以仅指定哪些文件,它们在哪里以及在后/预安装/卸载时是否执行/什么执行。我以前只是以标准方式处理所有程序包,但是开始使用此工具后,只有在必要时才返回。



1

使用Debian上的Zimbra 7使用Ubuntu软件包来解决这个问题。(我固执,尽管Zimbra仅针对Ubuntu发布,但我还是喜欢Debian> bUbuntu。)不确定我以前是如何解决此问题的,我肯定在以前安装此工具时不必这样做!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

您所有的新.deb文件都将位于中new/

注意:这是在挤压-Wheezy上的dpkg现在具有--force-bad-version。


1

为了快速创建软件包,您可以用户检查安装程序。它安装程序,观察更改-并为其创建deb或rpm包。


这听起来像是跟踪您必须从源代码安装的软件包的绝佳选择。您能否提供更多详细信息?例如,在安装过程中,您可以更改符号链接,删除文件,编辑配置文件,添加守护程序等... ...人员在多大程度上检查了安装跟踪并撤消了这些更改?您可以轻松地修改其输出以添加prerm和postrm脚本吗?
AatG 2015年

查看wiki.debian.org/CheckInstall如果要在安装过程中进行更改-最简单的方法是修改Makefile来更改安装部分。prerm / postrm-我没有找到修改它的方法。仅允许小型程序进行简单卸载。
不确定

-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.