スクリプトまたはバイナリから.debパッケージを作成します


73

コンパイルするソースコードを持たないもの(config、shellscripts、プロプライエタリソフトウェア)の.debパッケージを作成する簡単な方法を探しました。ほとんどのパッケージチュートリアルでは、コンパイルするソース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/ ./

リポジトリ自体がうまく機能しているようです(いくつかの問題に遭遇しました。それらを修正するには、パッケージを2回追加し、リリースファイルの一時ファイルを回避する必要がありました)。また、ダウンロードした.debをリポジトリに入れましたが、問題なく動作しているようです。しかし、私の自己作成したパッケージは... Wennは、私はしませんでした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-03-06: DEBを作成する簡単な方法を探している別の人へのヒント:FPMを見てください。


パッケージにDEBIAN / controlファイルを追加しましたか。このファイルにはDepends:フィールドが含まれていますか?
ビラルアフタール

5
ところで 現在、パッケージのニーズにFPMを使用しています:github.com/jordansissel/fpm
Thomas Deutsch

FWIW、依存関係の1つを誤って指定したため、ビルドしたパッケージで同じエラーメッセージが表示されました。「foo(> = 2.1)」になるはずのときに「foo> = 2.1」と書きました。私は、エラーの最初の半分は...間違っていた正確に何を私に言っていたが実現する前に私は、エラーの後半を見ている時間以上を費やし:(PS FPM岩あなたも、適切には、見てください。)
マーク・E.ハセ14

2
メイクファイルなどでtarボールから来ていないものをパッケージ化するためのチュートリアルやガイドがないことに強く同意します。これを行う方法を見つけることは非常に困難です。いくつかのスクリプトとおそらくliquibaseで戦争を配布したいが、debianシステム管理者やdebianメンテナーではないjava開発者のような人々のために、このようなガイドが必要です。この場合、FPMは、パッケージ化できるものを作成する方法を既に知っている必要があるため、役に立ちません。
ジョンリトル

1
fpmに関する情報を共有していただき、ありがとうございます。それは魅力のように機能します!
ダミアンナダレス

回答:


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 / *ファイルを確認および更新する必要があります。

あなたのためのmanページをお読みください:dh_makedh_install、およびdebuild


3
debian / controlを編集し、「Architecture:any」を「Architecture:all」に変更する必要があります。質問に答えられたとおりに設定することを忘れないでください;)
ジョアンピント

3
ディレクトリの名前を変更してdebian / changelogを更新することとは別に、新しいバージョンに対応する.origアーカイブを作成する必要があります。これはソースディレクトリの内容からのアーカイブです(debian /は含まれません)。
ジョアンピント

1
ディレクトリには、と、私は通常行うことのようなものがあります。cp SOURCEDIR sourcedir.orig &&のrm -rf sourcedir.orig / Debianの&&タールczvf filename.orig.tar.gz sourcedir.orig
ジョアン・ピント

1
--indepフラグを追加dh_makeすると、パッケージが「アーキテクチャ:すべて」に-bなります。また、11.04以降ではフラグは存在しません。
-andrewsomething

1
.debパッケージを作成した後、あなたがエラーや機能強化のためにチェックすべきlintian somescripts_0.1-1_i386.deblintian package-source.changes-参照:packaging.ubuntu.com/html/...
rubo77
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.