从脚本或二进制文件创建一个.deb包


73

我搜索了一种简单的方法来创建.deb包,以查找没有源代码可以编译的东西(配置,shellscripts,专有软件)。这是一个很大的问题,因为大多数软件包教程都假设您具有要编译的源tarball。然后,我找到了这个简短的教程(德语)。

之后,我创建了一个小脚本来创建一个简单的存储库。像这样:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

我将密钥添加到了apt密钥环中,并包含了如下代码:

deb http://my.default.com/my-repository/ ./

好像仓库本身运行良好(我遇到了一些问题,要解决这些问题,我需要两次添加软件包,并使Release文件的临时文件变通)。我还把一些下载的.deb放到了仓库中,看来它们也可以正常工作。但是我自己创建的程序包没有...温妮,我这样做sudo apt-get update,它们引起如下错误:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

有谁知道我做错了什么?

2012年3月6日更新:另一个正在寻找创建DEB简便方法的人的提示:看一下FPM


您是否在包中添加了DEBIAN / control文件,其中包含字段Depends :?
Bilal Akhtar

5
顺便说一句。现在,我正在使用FPM来满足包装需求:github.com/jordansissel/fpm
Thomas Deutsch

FWIW,我在构建的软件包上收到了相同的错误消息,因为我错误地指定了一个依赖项。我写的“ foo> = 2.1”应该是“ foo(> = 2.1)”。我花了一个多小时,看着错误的后半段我才意识到错误上半年告诉我什么是错的......(PS:FPM岩你看看适宜地,太)
马克·E. Haase

2
我强烈同意,没有教程或指南来打包不是来自tar球和make文件等内容的东西。很难做到这一点。对于像Java开发人员这样的人,他们希望通过一些脚本(也许还有liquibase)来分发战争,但他们不是debian sys管理员或debian维护者,则需要这样的指南。FPM在这种情况下无济于事,因为它也要求您已经知道如何创建可以打包的东西。
约翰·利特尔

1
非常感谢您分享有关fpm的信息。它就像魅力!
Damian Nadales

Answers:


70

您链接的教程使用低级方法来构建软件包。通常不建议采用这种方法,如果不仔细进行操作,可能会导致各种问题。

了解包装基础知识后,为脚本创建.deb非常简单。简而言之:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

添加更多脚本需要将它们复制到目录并添加到debian / install文件中-然后重新运行debuild。您还应该根据需要检查并更新debian / *文件。

你应该阅读的手册页:dh_makedh_install,和debuild


3
编辑debian / control,“架构:任意”必须更改为“架构:全部”。不要忘记将问题设置为回答;)
JoãoPinto

3
除了重命名目录并更新debian / changelog外,您还必须创建与新版本相对应的.orig档案,这是源目录内容(不包括debian /)的档案。
若奥·平托

1
随着目录包括,我通常做的是一样的东西:CP sourcedir sourcedir.orig &&室射频sourcedir.orig / Debian的&&焦油czvf filename.orig.tar.gz sourcedir.orig
若奥·平托

1
添加--indep标记dh_make将使软件包“ Architecture:all”同样-b在11.04及更高版本中不存在该标记。
2011年

1
建立.deb软件包后,你应该检查错误和增强与lintian somescripts_0.1-1_i386.deblintian package-source.changes: -见packaging.ubuntu.com/html/...
rubo77
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.