web-dev-qa-db-ja.com

ソースからDebian / Ubuntuパッケージをビルドする方法は?

プログラムのソースがあり(cvs/svn/git/...から取得)、そのためのDebian/Ubuntuパッケージをビルドしたいと思います。パッケージはリポジトリにありますが、次のとおりです。

  • 古いバージョンです(必要な機能がありません)
  • デフォルトとは少し異なるコンパイルオプションが必要です。

最も簡単な方法は何ですか?私はいくつかのことを心配しています

  • すべての依存関係を正しくリストしたかどうかを確認するにはどうすればよいですか? (古いバージョンが依存していたものを調べることでいくつかのヒントを得ることができますが、新しい依存関係が追加された可能性があります。)
  • 更新システムが古いバージョンを更新のリポジトリにインストールするのを防ぐにはどうすればよいですか?
  • システムが新しいバージョンをインストールするのを防ぎ(カスタムパッケージが上書きされた場合)、カスタムパッケージを上書きするにはどうすればよいですか?
113
Ryszard Szopa

最初に、タイトルの質問:debianディレクトリが既に存在すると仮定して、ソースディレクトリ(debianディレクトリを含むディレクトリ)にあり、dpkg-buildpackageを呼び出します。私はこれらのオプションでそれを実行したい:

dpkg-buildpackage -us -uc -nc

つまり、結果に署名せず、クリーンアップしません。

すべての依存関係を正しくリストしたかどうかを確認するにはどうすればよいですか?

依存関係を取得することは、ブラックアートです。 「公式」な方法は、ビルドがベースシステム、「ビルド必須」パッケージ、および指定したビルド依存関係のみでビルドされるかどうかを確認することです。通常の依存関係の一般的な答えがわからない、ただ歩いてください:)

更新のレポに古いバージョンをインストールする更新システムを防ぐにはどうすればよいですか?システムが新しいバージョンをインストールするのを防ぎ(そのバージョンが出たとき)、カスタムパッケージを上書きする方法を教えてください。

私の知識はこれについては時代遅れかもしれませんが、両方に対処するには:dpkg --set-selectionsを使用します。 nullidentdがあなたが置いておきたいパッケージだと仮定し、rootとして実行する

echo 'nullidentd hold' | dpkg --set-selections

あるいは、ソースからビルドしているため、 Epoch を使用して、バージョン番号を人為的に高く設定し、二度と煩わされることはありません。エポックを使用するには、debian/changelogファイルに新しいエントリを追加し、バージョン番号の前に99:を入力します。 nullidentdの例では、更新された変更ログの最初の行は次のようになります。

nullidentd (99:1.0-4) unstable; urgency=low

Bernardのリンク は、特にdebianディレクトリを自分で作成する必要がある場合に適しています- 開発者リファレンス および 一般リソースページ も役立ちます アダムのリンク も良さそうですが、私はそれに慣れていません。

26
Daniel Bungert

CcacheのサンプルUbuntuベースのビルド

Sudo apt-get update
Sudo apt-get build-dep ccache
apt-get -b source ccache
Sudo dpkg -i ccache*.deb

詳細: http://blog.aplikacja.info/2011/11/building-packages-from-sources-in-debianubuntu/

6
Dariusz Cieslak

あなたがしたいことのために、おそらくdebianソースdiffを使用したいので、あなたのパッケージは使用されているアップストリームバージョンを除いて公式のものに似ています。 packages.debian.org からソースdiffをダウンロードするか、「apt-get source」を使用して.dscおよび元のソースアーカイブと一緒に入手できます。

次に、新しいバージョンのアップストリームソースを解凍し、そのディレクトリに移動して、ダウンロードした差分を適用します。

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

次に、オプションをコンパイルするために必要な変更を行い、以下を実行してパッケージをビルドします

dpkg-buildpackage -rfakeroot -us -uc
6
Mark Baker
  • 「debian」ディレクトリを元のパッケージからソースディレクトリに配置します
  • パッケージのバージョンを更新するには、「 dch 」を使用します
  • 「debuild」を使用してパッケージをビルドします
3
zowers

this はDebianパッケージの「聖書」だと思います。

まあ、それはDebianの新しいメンテナーのガイドなので、その多くは当てはまりませんが、どこに行くのかをカバーしています。

2
Bernard

Ubuntuを使用している場合は、pkgcreatorプロジェクトを確認してください。 http://code.google.com/p/pkgcreator

2
LRMAAX

すべての依存関係を正しくリストしたかどうかを確認するにはどうすればよいですか?

pbuilderは、chroot環境内でクリーンなベースシステムをセットアップすることにより、ビルドの依存関係と依存関係の両方をチェックするための優れたツールです。 pbuilder内でパッケージをコンパイルすることにより、ビルドの依存関係を簡単に確認でき、pbuilder環境内でテストすることにより、依存関係を確認できます。

1
thiton

ここ は、Debianパッケージを構築するためのチュートリアルです。

基本的に、次のことが必要です。

  1. フォルダー構造をセットアップする
  2. controlファイルを作成する
  3. オプションで、postinstまたはprermスクリプトを作成します
  4. Dpkg-debを実行する

私は通常、Makefileでこれをすべて実行するので、makeと入力するだけでバイナリを吐き出し、一度にパッケージ化できます。

1
Adam Pierce

ビルドの依存関係をすばやく汚い方法でインストールする場合は、次を使用します。

apt-get build-dep

これにより、依存関係がインストールされます。このためには、sources.listにソース行が必要です。

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

パッケージをテストから安定版にバックポートする場合は、依存関係が変更されている可能性があることに注意してください。コマンドapt-get build-debは、現在のリポジトリにソースパッケージの依存関係をインストールします。

しかし、もちろん、dpkg-buildpackage -us -ucはアンインストールされた依存関係を表示します。

より頻繁にコンパイルする場合は、cowbuilderを使用します。

apt-get install cowbuilder

次に、ビルド領域を作成します。

Sudo DIST = squeeze Arch = AMD64 cowbuilder --create

次に、ソースパッケージをコンパイルします。

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

カウビルダーが結果のパッケージをどこに置くかを見てください。

幸運を!

1
Allard Hoeve