如何创建安装一系列文件的Deb软件包


23

我想创建一个全新的deb软件包来安装一系列文件。如果可能的话,作为安装的一部分,我想将包含这些文件的文件夹解压缩到一个已知的文件夹位置。失败的话,了解一些如何打包源文件夹和文件的知识将非常有用。

问题是-这可能吗?

让我们举个例子:

~/mypluginfolder/包含文件xy名为的子文件夹abc和在另一个文件名为的内部z

我要压缩此文件夹: tar -cvf myfiles.tar ~/mypluginfolder

我想我的debian软件包看起来像

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

是否有可能以某种方式解压缩myfiles.tar到已知的文件夹位置

/usr/share/rhythmbox/plugins/

因此,最终结果将是:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

如果-假设启动板需要源代码,则建议我将源文件夹和文件放到deb包结构中的位置。


这最终将成为一系列单独的启动板PPA程序包。

我更喜欢(但可能无法实现...)是将包装减至最少-从模板创建一系列包装并调整最低限度(更改日志等内容+ tar文件/文件和文件夹结构) 。


嗯...为什么要用.deb 提取焦油?为什么不只 tar中获取源代码并从源头开始创建deb?
托马斯·沃德

2
一种可能是您从另一个地方获取了tarball,这是Adobe Flash风格的。
jrg 2012年

@jrg,它下载.bin安装程序,而不是tarball。adobe包装样式不提供源(其封闭源)。但是,概念仍然相同,请从其他位置下载代码,然后解压缩/安装(我在这里很讨厌:P)
Thomas Ward

@LordofTime同样的区别。; p
jrg 2012年

Answers:


31

在下面,我假设源是开放的(例如Python脚本),因此未绑定到任何体系结构(例如amd64或i386),因此为“全部”。如果您有一些C源代码,则需要Architecture: amd64 i386在源control文件中使用。


创建准备用于启动板的软件包

这最终将成为一系列单独的启动板PPA程序包。

我更喜欢(但可能无法实现...)的是将包装减至最少-从模板创建一系列包装并调整最低限度(更改日志等内容+ tar文件)。

Launchpad仅接受源软件包,因此创建一个rules将文件安装在正确位置的软件包。为了方便起见,我将使用debhelper。文件所在的目录应类似于:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

debian/copyright文件也可以是用于通知与所述包相关联的许可证的用户是有用的。我认为您不需要postinst脚本,因为您只需要提取一些文件即可。compat应该包含debhelper兼容性级别,例如“ 8”。(有关更多详细信息,请参阅debhelper的手册页

changelog可以使用dch命令来编辑该文件,该命令可从devscripts软件包中获得。在rules(使用debhelper的)应包含以下内容:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

使用使其可执行chmod 755 debian/rules。可以使用构建源码包debuild -S。确保位于名为的目录中<package-name>-<version>。有关该override_行为和dh命令的更多信息,请参见其手册页

Debian新维护人员指南》对我理解这一点非常有价值,建议阅读。示例包装可在https://github.com/Bumblebee-Project/bumblebee-ppa上找到。


从现有文件树创建包

dpkg-deb -b可用于从现有文件树创建tarball。首先,首先创建一个目录,该目录应以您的软件包命名。我假设您要命名myplugin,然后放入/usr/share/rhythmbox/plugins/mypluginfolder。另外,创建DEBIAN用于存储软件包信息的目录(大写!):

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

复制文件:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

接下来,您将需要一个所谓的控制文件,myplugin/DEBIAN/control该文件描述了程序包。此类文件的内容如下:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

现在,您可以选择验证软件包中的内容。下一条命令列出以下文件和目录条目的内容myplugin

find myplugin -ls

如果满意,请在当前目录中构建软件包:

dpkg-deb -b myplugin .

将会出现一个新文件,名称如<package>_<version>_<architecture>.deb本例所示myplugin_1.0-1_all.deb。您可以使用该less程序偷看文件。例如,less myplugin_1.0-1_all.deb


3
+1绝对天才-先生,我向你鞠躬。谢谢!
fossfreedom

感谢您的大力帮助!尽管控制文件遇到了一些麻烦,但最终还是奏效了,但不要问我如何;)
Gerhard Burger
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.