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


116

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

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

それを行う最も簡単な方法は何ですか?いくつかのことが心配です

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

回答:


78

まだdebian / ubuntuにないすべてのパッケージには、特別なパッケージ「checkinstall」を使用できます。

"uupdate"(apt-get install devscripts)を使用して、既存のdebianソースを持つソースからパッケージをビルドできます。

libdrm2の例:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

ありがとう!私はこれを使用して、Subversion 1.6.6を最新の利用可能なバージョンとして1.6.5しかないUbuntuインストールに移植したところ、問題なく動作しました。いじくり回す時間をかなり節約してくれました!:)
Carlos Villela、2010年

これらのコマンドについてもう少しコンテキストを教えてもらえますか?libdrm-2.3.1正確にはどこですか?また、libdrm-2.4.1.tar.gzどこから来たのか(私の最初の仮定は、debにパッケージ化するアプリケーションのコンパイル済みバイナリであるということですが、既存のバージョンを置き換えますが、それは正しいですか?)
wheeler

エラーが発生した場合はYou must put some 'source' URIs in your sources.list、deb-src行のコメントを外してください/etc/apt/sources.list
Christian

27

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

dpkg-buildpackage -us -uc -nc

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

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

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

更新時にリポジトリの古いバージョンが更新システムにインストールされないようにするにはどうすればよいですか?システムが新しいバージョンをインストールしないようにするには(それがリリースされたとき)、カスタムパッケージが上書きされることはありますか?

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

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

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

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

Bernardのリンクは、特に自分でdebianディレクトリを作成する必要がある場合に役立ちます。また、開発者のリファレンス一般的なリソースページも役立ちますAdamのリンクも見た目は良いのですが、よくわかりません。


1
「dpkg --set-selections」は引き続き機能しますが、最近のより適切な方法は「aptitude hold nullidentd」です。
マークベイカー

6

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

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

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

次に、オプションをコンパイルしたい変更を行い、次のようにしてパッケージをビルドします

dpkg-buildpackage -rfakeroot -us -uc


3
  • 「debian」ディレクトリを元のパッケージからソースディレクトリに置きます
  • dch」を使用してパッケージのバージョンを更新します
  • 「debuild」を使用してパッケージをビルドします

2

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

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



1

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

基本的に、次のことを行う必要があります。

  1. フォルダ構造を設定する
  2. 制御ファイルを作成する
  3. オプションでpostinstまたはprermスクリプトを作成する
  4. dpkg-debを実行します

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


1

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

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


1

ビルドの依存関係をすばやく簡単にインストールする方法が必要な場合は、次を使用します。

apt-get build-dep

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

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

cowbuilderが結果のパッケージをどこに置くかを観察します。

幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.