问题描述
我想创建一个全新的deb软件包来安装一系列文件。如果可能的话,作为安装的一部分,我想将包含这些文件的文件夹解压缩到一个已知的文件夹位置。失败的话,了解一些如何打包源文件夹和文件的知识将非常有用。
问题是-这可能吗?
让我们举个例子:
~/mypluginfolder/
包含文件x
,y
,一个名为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文件/文件和文件夹结构) )。
最佳答案
在下面,我假设源是开放的(例如Python脚本),因此未绑定到任何体系结构(例如amd64或i386),因此”all”。如果您有C语言源,则需要在源control
文件中使用Architecture: amd64 i386
。
创建准备用于启动板的软件包
This will eventually will become a series of individual launchpad PPA packages.
What I prefer (but may not be able to achieve…) is to keep my packaging to a minimum – create a series of packages from a template and adjust the bare minimum (changelog etc + the tar file).
Launchpad仅接受源程序包,因此创建一个rules
,将文件安装在正确的位置。为了方便起见,我将使用debhelper。文件所在的目录应类似于:
debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...
debian/copyright
文件对于通知用户与软件包相关联的许可证也可能有用。我认为您不需要postinst
脚本,因为您只需要提取一些文件即可。 compat
应该包含debhelper兼容性级别,例如”8″。 (有关更多详细信息,请参考the manual page of debhelper)
可以使用dch
命令编辑changelog
文件,该命令可从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
命令的更多信息,可以在its manual page上找到。
Debian New Maintainers’ Guide对我来说很有价值,可以理解这一点,建议阅读。示例包装可在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
的so-called 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
。