如何手动创建DEB文件?

如何手动创建DEB文件?

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

这可能吗?

答案1

制作源码包

我的建议是制作一个源码包。安装构建必需的,德布帮助者,dh-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-binary2.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

你至少需要一个控制文件包含字段PackageMaintainerPriorityArchitecture、 、Installed-SizeVersion以及任何必要的依赖项声明。

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

从不同格式转换二进制包

如果您已经有其他发行版的二进制包,则可以使用外星人来转换它。

答案2

首先,您需要创建一个构建文件夹和文件存档: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 <[email protected]>
 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 二进制文件:echo 2.0 > debian-binary.在您的构建文件夹中,您现在应该有以下文件:debian-binary control.tar.gzdata.tar.gz.

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

答案3

我做了很多包,要做一个完整的包可不是一件小事。从积极的方面来说,文件和脚本的工作量要少得多。您可以使用名为的工具非常简单地创建这样的包辩论

Debreate 是一个非常简单的 GUI,仅用于创建简单的 DEB 包。您只需指定哪些文件、它们的位置以及在安装后/预安装/卸载时是否/执行什么。我以前只是以标准方式完成所有包,但在我开始使用这个工具后,我只会在必要时才回去。

答案4

在 Debian 上使用 Ubuntu 软件包的 Zimbra 7 时遇到了这个问题。 (我很固执,我喜欢 Debian > bUbuntu,尽管 Zimbra 仅针对 Ubuntu 发布。) 不确定我之前是如何解决这个问题的,我确信我之前安装这个时不需要这样做!

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

笔记:这是挤压 - dpkg on wheezy 现在有 --force-bad-version 。

相关内容