什么:我有一个shell脚本,我想分发给我的LUG。 我相信debian软件包将是分发它的最简单方法。我想为the script in this repository
创建一个.deb文件其中:我希望将它放在某个目录中,例如/ usr / local / bin,以便它易于执行并可能创建一些符号链接
问题:如何为其创建make文件和/或执行此操作所需的其他文件和文件夹。几个月前我尝试做的时候研究了很多但是没有运气。以下是the files from my previous attempt现在我正在尝试将此包装在我的LUG中的shell脚本教程中,并再次遇到类似情况。
如果有人足够耐心指导我,我会很高兴的。
非常感谢任何类型的资源或细节。
PS:我还打算尽快将脚本移植到perl。
答案 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 tutorial,Debian New Maintainers' Guide,Debian Developer's Reference和Policy。 (订单也越来越干燥,并因形式而逆转。)
可能需要两天左右的时间,但确实值得。
此外,请查看仅发送脚本的其他小型软件包,或其他仅仅是“文件安装程序”(例如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)
使用checkinstall或fpm在几分钟内构建您的软件包,而不是几小时或几天!:
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
;