(この回答について質問/コメントがある場合は、コメントを追加してください。または、十分な担当者がいる場合は、チャットで私にpingを送信できます。)
Debianの新しいバージョンからバイナリパッケージを直接インストールする-答えではありません。
Debianベースのディストリビューションのあるバージョンを実行しているとします。使用可能なパッケージよりも新しいバージョンが必要です。Debianのバージョンにバイナリパッケージを直接インストールするために、すべての初心者が最初にやろうとすること。これは、実行しているバージョンとパッケージの新しさによって、動作する場合と動作しない場合があります。一般に、この手順はうまく機能しません。
たとえば、testing / unstableから安定版に直接バイナリパッケージをインストールしようとしている場合を考えます。その時点でテスト/不安定が安定に非常に近い場合を除き、これはおそらくうまくいきません。その理由は、DebianのようなLinuxベースのバイナリディストリビューションの性質に関係しています。このようなオペレーティングシステムは共有ライブラリに大きく依存しており、これらの依存関係は多くの場合、バージョンに非常に厳密に依存しています。多くの場合、必要以上です。Debianには現在、バージョンの依存関係を「タイト」にする良い方法がありません。これは、バージョンの依存関係が必要に応じて厳密に制限されていることを示す簡単な方法です。
これはユーザーにとって何を意味しますか?たとえば、slrn
Debian不安定版からDebian安定版にsayをインストールしようとしているとします。これはどのように見えるでしょうか?
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
によって生成されたエラーにもかかわらず、apt
ここには壊れたパッケージはありません。それで、何が間違っていたのでしょうか?問題はlibc6
、不安定版slrn
がコンパイルされたバージョンがDebian安定版で利用可能なバージョンと異なる(そしてバージョン番号が大きい)ことです。(libc6
GNU Cライブラリです。CライブラリはUnixライクなオペレーティングシステムの中心であり、GNU CライブラリはLinuxベースのオペレーティングシステムが一般的に使用するバージョンです。)
そのため、不安定slrn
版にlibc6
は安定版よりも高いバージョンのバージョンが必要です。パッケージがより高いバージョンのライブラリに対してコンパイルされているため、必ずしもそのライブラリのより高いバージョンが必要なわけではありませんが、多くの場合そうであることに注意してください。
構文
apt-get install slrn/unstable
意味:不安定slrn
版を使用しますが、他のすべてのパッケージでは安定版のバージョンのみを使用します。より正確には、優先順位番号を使用します。詳細man apt_preferences
を参照してください。
できること
apt-get install -t unstable slrn
これは動作する可能性がはるかに高くなりますが、通常は実行したくないでしょう。どうして?
つまり、unstableのすべてのパッケージを、stableのパッケージと同じ立場で一時的に扱います。したがって、これはslrn
、バージョン番号がより高い場合に、unstableからunstableの依存関係を取得し、通常はそうなります。これには通常、すでに説明した理由のためにGNU Cライブラリが含まれます。現在、このアプローチは一般に「成功」し、定義によって依存関係が満たされます(不安定版には不安定な状態で満たされるslrn
依存関係があります)が、ライブラリのバージョンで突然実行を強制されるパッケージが混在することになりますそれらが何のために構築されたかとは異なります。これはおそらくうまく終わらないでしょう。
答えは...バックポートです!
それで、これを行う正しい方法は何ですか?それは、一般的に「バックポート」として知られている、システム上のより新しいバージョンのDebianソースを再構築することです。次の場合を考慮してください。
そのバージョンのDebianで利用可能な追加パッケージの準公式/公式ソースがあります。
最初に見るべき場所はDebian Backportsです。これはDebianバックポートの公式サイトです。
具体的な例:
ご使用のリリースに適切なバックポート行を追加して新しいパッケージを検索し、バックポートから何かを明示的にインストールします(デフォルトではバックポートが無効になっているため)。
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
これにより、最新の安定バージョンのgitが得られます。これには、stretchに含まれる安定バージョンよりも便利な新しい機能があります(たとえば、複数の構成ファイルを組み合わせたり、〜/ work / projects / vs〜/ personal /のユーザー名を変更できる 'include'プロジェクト/)。
注目すべきもう1つの場所は、UbuntuメンテナーによるさまざまなPPAです。「packagename PPA」を検索できます。
そのバージョンのOSで使用できるパッケージの最新バージョンはありませんが、OSの最新バージョン/リリースで使用できる最新バージョンがあります。これは、バックポートの標準的なケースです。
バックポートとは、実行中のバージョンでDebianの新しいバージョンからDebianソースを再構築することを意味します。この手順は、パッケージによって簡単または複雑で困難な場合があります。これを行う方法の概要を次に示します。
初心者向けの簡単なバックポートチュートリアル
具体的には、現在のDebian安定版、現在はwheezyを実行していると仮定します。パッケージslrn
を例として使用します。
まず、すべてのDebianパッケージングファイルdebian/
がソースディレクトリのサブディレクトリにあることに注意してください。
最初のステップは、より新しいバージョンが利用可能かどうかを確認することです。これはを使用して実行できますapt-cache policy
。
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
バックポートしたいと思い1.0.1-10
ます。
ステップ1:
注:deb-src
ダウンロードするソースバージョンの行がに表示されていることを確認してください/etc/apt/sources.list
。たとえば、の不安定版をダウンロードする場合は、不安定版の行slrn
が必要deb-src
です。そうしないと機能しません。deb
ソースをダウンロードするために対応する行は必要ありませんが、apt-cache policy
その情報を使用するため、対応するdeb
行apt-cache policy
がない場合、関連するバージョンは表示されないことに注意してください。行がある場合はdeb
、入力/etc/apt/preferences
などを使用して新しいバージョンを固定することを忘れないでください。/etc/apt/preferences
たとえば、このようなエントリ(不安定版の場合)は機能します。
Package: *
Pin: release a=unstable
Pin-Priority: 50
に行を追加する場合は/etc/apt/sources.list
、apt-get update
後で実行することを忘れないでください。
のソースをダウンロードしますslrn
。良い場所は/usr/local/src/slrn
。
apt-get source slrn=1.0.1-10
ステップ2:
バックポートをアップストリームバージョンと区別するために、バージョン番号をわずかに変更します。を実行dch -i
すると、debian/changelog
ファイルにエントリが自動的に追加されます。次に、たとえば次のようにエントリを変更します。
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
ステップ3:
ソースの構築を試みます。ビルドに必要なパッケージが利用できない場合、試行は失敗します。ディレクトリをソースディレクトリに変更します。パッケージdebuild
から使用しdevtools
ます。
cd slrn-1.0.1/
debuild -uc -us
ビルドの依存関係が満たされると、ソースはソースディレクトリの上のレベルでいくつかのデバッグをビルドして生成します。この場合/usr/local/src/slrn
。
ステップ4:
ビルドの依存関係が満たされていないとします。次に、ビルドの依存関係をインストールする必要があります。これは機能する場合と機能しない場合があります。依存関係はご使用のバージョンで使用できない場合や、使用可能な場合は適切なバージョンで使用できない場合があります。
注:残念ながら、Debianパッケージが必要以上に高いバージョンのビルド依存関係を要求することは珍しくありません。Debianでこれをチェックする自動化された方法はなく、多くの場合、パッケージメンテナは対応するバージョン/リリースで動作する限り気にしません。したがって、依存関係のバージョンには懐疑的な態度を取り、常識を使用してください。たとえば、PythonやGNUツールなどの広く使用されているパッケージは、Debianパッケージャーのリストに関係なく、依存関係の特定のバージョンに依存しません。
いずれにしても、あなたはそれらをインストールしようとすることができます
apt-get build-dep slrn=1.0.1-10
これが成功したら、パッケージを再度ビルドしてみてください(ステップ2)。失敗した場合は、さらに作業が必要です。ファイルdebuild
内のビルドの依存関係を確認し、debian/control
必要に応じてこれらを変更できることに注意してください。それでは今それについて話しましょう。slrnのビルドの依存関係は次のとおりです。
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
使用する代わりにapt-get build-dep
、これらを手動でインストールすることです。
apt-get install debhelper libslang2-dev ...
制御ファイルでこれらの値の変更を開始する場合は、手動インストールに切り替える必要があります。そうするとapt-get build-dep
、正しいことを実行できなくなります。
利用可能なソフトウェアの最新バージョンのパッケージバージョンはありません。利用可能なオプションは、より新しいバージョンをパッケージ化することです。
多くの場合、ソフトウェアの以前のバージョンのパッケージを新しいソースと組み合わせて再利用できます。このアプローチでは問題が発生する可能性があります。特に、以前のバージョンのソフトウェアに適用されたパッチはここでは適用されない可能性があるため、ソースと再同期する必要があります。現在標準になっている3.0(キルト)ソース形式ではキルトが使用され、パッチはdebian/patches
ディレクトリにあります。
ただし、これらの問題の詳細な議論は、この投稿の範囲外です。