我的问题很简单,但我认为它会产生广泛的答案、建议等等;)
如何为 Ubuntu 或 Debian 等 Linux 系统创建软件包并通过根服务器发布它们?
答案1
Debian 软件包系统是安装、升级和删除公共存储库中可用的软件的最优雅的方法之一。如果您需要构建和维护非官方 Debian 软件包存储库,您可以考虑一些技巧。在这里,我将简要介绍获取公共 Debian 存储库的一些步骤。
首先,安装一些必要的软件包:
sudo apt-get install build-essential devscripts debhelper dh-make diff patch gnupg fakeroot lintian linda pbuilder
如果您打算在规则文件中使用它,则可能是 cdbs:
sudo apt-get install cdbs
创建工作目录,并移入你打算构建的包的源代码
mkdir packages
cp mypackage-0.1.tar.gz packages
cd packages
设置维护者电子邮件和全名,该信息将用于包元数据信息。
export DEBEMAIL="user@address"
export DEBFULLNAME ="full name"
运行 dh_make 后,会弹出几个问题,需要您做出相应的回答,此工具会将一些模板提取到 packages/debian 目录中。有关更多信息,请运行 dh_mahe -h
dh_make
创建 .deb 包需要许多文件,这些文件存储在项目的根目录 packages/debian 中。要设置这些文件所需的更改,您必须了解有关包的一些信息:依赖项、版权、更改日志、makefile...请参阅本教程
下一步是构建二进制包,它是在 ./debian 目录中调用以下命令构建的:
cd debian
debuild -rfakeroot
这将为您完成所有工作。它将:
- 使用 fakeroot 清理源树 (debian/rules clean)
- 构建源包(dpkg-source -b)
- 构建程序(debian/rules build)
- 使用 fakeroot 构建二进制包 (debian/rules binary)
- 使用 gnupg 对源 .dsc 文件进行签名
- 使用 dpkg-genchanges 和 gnupg 创建并签署上传的 .changes 文件
假设我们的存储库只包含两个子目录:二进制和源
dpkg-scanpackages 扫描 .deb 包;dpkg-scansources 扫描 .dsc 文件。
因此,需要将 .orig.gz、.diff.gz 和 .dsc 文件放在一起。不需要 .changes 文件。
像这样在 www 中创建存储库目录:
sudo mkdir -p /var/www/repository/{binary,source}
将您的 deb 和源包移入 /var/www/repository/{binary,source} 并生成索引。
$ cp mypackage-0.1-1.deb /var/www/repository/binary/
$ cp mypackage-0.1-1.tar.gz /var/www/repository/source/
$ cd /var/www/repository
$ dpkg-scanpackages binary /dev/null | gzip -9c > /var/www/repository/binary/Packages.gz
$ dpkg-scansources source /dev/null | gzip -9c > /var/www/repository/source/Sources.gz
最后,添加此 source.lst 以便能够从存储库中获取您的包。
deb http://yourwebserver/repository binary/
deb-src http://yourwebserver/repository source/
我希望这能有所帮助,有关更多信息,请参阅完整文档:
答案2
您可以使用以下文档创建软件包
当您的软件包准备好后,您可以使用 dpkg-scanpackage 来创建 apt 需要列出您的软件的软件包文件。
或者,你可以使用 apt-ftparchive,它需要更多配置,但可以用于具有不同架构等的更大的存储库。你可以找到一个很好的指南apt-ftparchive
也许你也应该看看 ubuntu 的苯丙胺。这是针对 ubuntu 和 debian 的自动构建服务和存储库。
答案3
这检查安装工具将通过观察安装脚本或 makefile 执行的操作来自动创建 .deb / .rpm 和 slackware 包。对于不太复杂的包(没有大量安装前/安装后脚本的包),它可以做得相当好。
但是,我不会盲目地将使用 checkinstall 制作的软件包发布给公众。我只用它来捆绑我们在本地办公网络上安装的东西。
尽管如此,它还是值得一试。去年我们投入了大量精力来让它能够正确构建甚至复杂的软件包,并且不会出现 lint 问题。
我喜欢它,因为它很容易放入任何构建系统并填充简单的存储库。
答案4
如果你主要使用 ubuntu,你应该阅读这个:
https://help.launchpad.net/Packaging
我建议你使用 launchpad 来托管你的软件包,除非这些软件包是公司私有的。你还应该阅读Ubuntu 基本打包指南,获取有关如何从源代码构建包的详细说明。