为shell脚本构建debian包

时间:2014-01-06 21:31:34

标签: shell build package debian dpkg

什么:我有一个shell脚本,我想分发给我的LUG。 我相信debian软件包将是分发它的最简单方法。我想为the script in this repository

创建一个.deb文件

其中:我希望将它放在某个目录中,例如/ usr / local / bin,以便它易于执行并可能创建一些符号链接

问题:如何为其创建make文件和/或执行此操作所需的其他文件和文件夹。几个月前我尝试做的时候研究了很多但是没有运气。以下是the files from my previous attempt现在我正在尝试将此包装在我的LUG中的shell脚本教程中,并再次遇到类似情况。

如果有人足够耐心指导我,我会很高兴的。

非常感谢任何类型的资源或细节。

PS:我还打算尽快将脚本移植到perl。

5 个答案:

答案 0 :(得分:5)

正如mirabilos所说,你至少应该看看现任Debian项目负责人Lucas Nussbaum撰写的包装教程。您可以直接从Debian存储库安装它:

# apt-get install packaging-tutorial

然后,打开并浏览位于/usr/share/doc/packaging-tutorial/packaging-tutorial.pdf的PDF。浏览它之后,您将掌握了解Debian软件包结构所需的基本知识。

现在让我们弄清楚。 {1}}您的脚本到新目录。目录的名称必须遵循 upstreamname - * version *。

的命名法。
mv

rul@helicon:/tmp/a$ mkdir script-0.1 rul@helicon:/tmp/a$ mv script.sh script-0.1 到您脚本所在的目录并运行cd。选择dh_make --createorig。您现在将拥有一个single binary目录,其中包含大量文件。这些文件是您制作包装所需的文件。在您的情况下,大多数(如果不是全部)debian/个文件都可以安全删除。在需要时读取并修改剩余文件。

现在让我们编写包的核心。您想在*.ex中安装脚本。好消息是已经有一个程序可以帮到你。您只需指定文件名和放置位置即可。该计划为/usr/local/bin。它有一个非常完整的man page。阅读之后,您现在应该明白必须在dh_install目录中创建install文件。

debian/

Here你有一个这个文件用法的真实例子。

就是这样!您拥有构建软件包所需的一切。 rul@helicon:/tmp/a/script-0.1$ echo "script.sh usr/local/bin/" > debian/install 到您的包的根目录并运行cd。如果一切顺利,您将在dpkg-buildpackage中获得全新的.deb

答案 1 :(得分:2)

您真的应该按照这个顺序查看the inofficial packaging tutorialDebian New Maintainers' GuideDebian Developer's ReferencePolicy。 (订单也越来越干燥,并因形式而逆转。)

可能需要两天左右的时间,但确实值得。

此外,请查看仅发送脚本的其他小型软件包,或其他仅仅是“文件安装程序”(例如php-htmlpurifier,这是我写这篇文章时记得的第一个例子。)

答案 2 :(得分:2)

如果你的软件包中只包含一个文件(或少量文件),那么浏览完整的Debian工具链可能会有点过分。

要打包单个文件,建议您使用equivs工具。安装equivs包,然后运行equivs-control以创建模板文件。

编辑模板文件(为您的包提供名称,版本号等)。

将脚本名称添加到模板中的Files:属性,例如:

Package: my-awesome-script
Version: 4.2
Files: my-awesome-script.sh /usr/local/bin
Section: misc
Priority: optional
Standards-Version: 3.9.2
Maintainer: Me <me@gmail.com>
Description: An awesome script doing stuff
 Lorem ipsum etc. pp.

将脚本文件放在模板文件旁边。

运行equivs-build,这将创建您的Debian软件包。

对于这些简单的案例而言,这比其他任何事情都要容易得多 - 而且你获得的软件包符合标准,不会诉诸任何黑客或跳过篮球。

答案 3 :(得分:0)

使用checkinstallfpm在几分钟内构建您的软件包,而不是几小时或几天!:

sudo checkinstall --fstrans=yes --install=no -D --pkgname=script \
    --maintainer='Name <name@domain.tld>' --pkgarch=all --pkgversion=0.1 \
    --nodoc cp script.sh /usr/local/bin

fpm -s dir -t deb --prefix /usr/local/bin -n script -v 0.1 -a all ./script.sh

注意:checkinstall需要dpkg / dpkg-deb(仅适用于Debian / Ubuntu),fpm与平台无关,但需要ruby。

答案 4 :(得分:0)

对于预安装,将脚本写入文件 DEBAIN/preinst;

对于安装后,将脚本写入文件 DEBAIN/postinst;