117

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

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

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

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

10 に答える 10

79

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
于 2008-11-21T14:40:08.907 に答える
27

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

dpkg-buildpackage -us -uc -nc

つまり、結果に署名したり、クリーンアップしたりしないでください。

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

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

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

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

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

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

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

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

于 2008-09-25T02:00:51.597 に答える
7

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/

于 2012-09-18T21:16:43.690 に答える
6

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

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

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

次に、オプションをコンパイルするために必要な変更を加え、次のようにしてパッケージをビルドします

dpkg-buildpackage -rfakeroot -us -uc
于 2008-09-25T15:00:57.510 に答える
3

これは Debian パッケージの「バイブル」だと思います。

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

于 2008-09-25T01:06:32.913 に答える
3
  • 元のパッケージの「debian」ディレクトリをソースディレクトリに置きます
  • dch」を使用してパッケージのバージョンを更新します
  • 「debuild」を使用してパッケージをビルドします
于 2009-07-29T03:55:38.410 に答える
2

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

于 2011-03-06T00:10:09.990 に答える
1

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

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

  1. フォルダ構造を設定する
  2. 制御ファイルを作成する
  3. 必要に応じて、 postinstまたはprermスクリプトを作成します
  4. dpkg-deb を実行

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

于 2008-09-25T01:27:07.153 に答える
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 カウビルダー --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

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

幸運を!

于 2012-03-08T16:01:31.077 に答える
1

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

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

于 2011-11-03T14:29:11.303 に答える