現在のバージョンのオペレーティングシステムで利用できるよりも新しいバージョンのソフトウェアが必要な場合、どうすればよいですか?
考慮すべきケース:
- そのバージョンのOSで利用可能な追加パッケージの半公式/公式ソースがあります
。例えば。 Debianの場合はbackports.org
またはUbuntuの場合はPPA。 - そのバージョンのOSで利用できるパッケージの最新バージョンはありませんが、
より新しいバージョンのOSで利用できる最新バージョンがあります。これは、
バックポートの標準的なケースです。 - 利用可能な
ソフトウェアの最新バージョンのパッケージバージョンはありません。利用可能なオプションは、最新の
バージョンをパッケージ化することです。
承認された回答:
(この回答について質問/コメントがある場合は、コメントを追加してください。または、十分な担当者がいる場合は、チャットで私にpingを送信できます。)
新しいバージョンのDebianからバイナリパッケージを直接インストールする-答えではありません。
Debianベースのディストリビューションのいくつかのバージョンを実行していると仮定します。利用可能なパッケージよりも新しいバージョンのパッケージが必要です。すべての初心者が最初にやろうとするのは、ご使用のバージョンのDebianに直接バイナリパッケージをインストールすることです。これは、実行しているバージョン、およびパッケージがどれだけ新しいかによって、機能する場合と機能しない場合があります。一般的に、この手順はうまく機能しません。
たとえば、stableに直接testing/unstableからバイナリパッケージをインストールしようとしている場合を考えてみます。その時点でテスト/不安定が安定に非常に近い場合を除いて、これはおそらくうまくいきません。その理由は、DebianのようなLinuxベースのバイナリディストリビューションの性質に関係しています。このようなオペレーティングシステムは共有ライブラリに大きく依存しており、これらの依存関係はバージョンに非常に厳密に依存していることがよくあります。多くの場合、必要以上にそうです。 Debianには現在、バージョンの依存関係を「タイト」にする良い方法がありません。バージョンの依存関係が必要なだけ制限されているという簡単な言い方です。
これはユーザーにとって何を意味しますか?たとえば、たとえばslrn
をインストールしようとしているとします。 Debian不安定版からDebian安定版へ。これはどのように見えますか?
# 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
GNUCライブラリです。 CライブラリはUnixライクなオペレーティングシステムの中心であり、GNUCライブラリはLinuxベースのオペレーティングシステムが一般的に使用するバージョンです。)
したがって、不安定なslrn
libc6
のより高い番号のバージョンが必要です 安定のために利用できるより。パッケージはより高いバージョンのライブラリに対してコンパイルされているため、必ずしもそのライブラリのより高いバージョンが必要なわけではありませんが、多くの場合そうです。
構文
apt-get install slrn/unstable
意味:不安定なslrn
を使用する ただし、他のすべてのパッケージでは、stableのバージョンのみを使用してください。より正確には、優先順位番号を使用します。 man apt_preferences
を参照してください 詳細については。
できること
apt-get install -t unstable slrn
これはうまくいく可能性がはるかに高いですが、一般的にはやりたくないでしょう。なぜですか?
つまり、すべてを一時的に処理します 安定したパッケージと同等の立場で不安定なパッケージ。したがって、これは不安定なslrn
を取り込みます の依存関係は、バージョン番号が大きい場合は不安定であり、通常はそうなります。これには通常、すでに説明した理由からGNUCライブラリが含まれます。現在、このアプローチは一般的に「成功」し、依存関係は定義によって満たされます(不安定なslrn
不安定な状態で満たされる依存関係があります)が、パッケージが混在することになり、それらが構築されたものとは異なるバージョンのライブラリで突然実行を余儀なくされます。これはおそらくうまく終わらないでしょう。
答えは…バックポートです!
それで、これを行う正しい方法は何ですか?これは、システム上でより新しいバージョンのDebianソースを再構築することであり、一般に「バックポート」として知られています。
次の場合を考慮してください。
そのバージョンのDebianで利用可能な追加パッケージの半公式/公式ソースがあります。
最初に見る場所は、Debianバックポートの公式サイトである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
これにより、stretchに含まれている安定版よりも便利な新しい機能を備えた最新の安定版のgitが取得されます(例:複数の構成ファイルを組み合わせたり、〜/ work / projects /と〜/personal/のユーザー名を変更したりできる「include」プロジェクト/)。
もう1つの注目すべき場所は、UbuntuメンテナによるさまざまなPPAです。 「packagenamePPA」を検索できます。
そのバージョンの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 --bpo
を実行します 、debian/changelog
にエントリを自動的に追加します たとえば、適切なバージョン番号のファイル
slrn (1.0.1-10~bpo10+1) UNRELEASED; urgency=low
* Backport to buster.
-- User <[email protected]> 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パッケージャーのリストに関係なく、依存関係の特定のバージョンに依存しません。
関連:Debian –次の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
にあります。 ディレクトリ。
ただし、これらの問題の詳細な説明は、この投稿の範囲外です。