Debianが提供するものよりも新しいバージョンのソフトウェアをインストールするにはどうすればよいですか?


26

現在のバージョンのオペレーティングシステムで利用できるよりも新しいバージョンのソフトウェアが必要な場合、どうすればよいですか?

考慮すべきケース:

  1. そのバージョンのOSで利用可能な追加パッケージの準公式/公式ソースがあります。たとえば、Debianの場合はbackports.org、Ubuntuの場合はPPAです。
  2. そのバージョンのOSで利用できるパッケージの最新バージョンはありませんが、最新バージョンのOSで利用できる最新バージョンはあります。これは、バックポートの標準的なケースです。
  3. 利用可能なソフトウェアの最新バージョンのパッケージバージョンはありません。利用可能なオプションは、より新しいバージョンをパッケージ化することです。

あたりの標準的なQのレッツ・コンパイルリスト&としてこれを次のために標準的な答えを置く場所として意図されています。回答はおそらくコミュニティwikiにしてください。


これは、ディストリビューション固有です。ディストリビューションごとに質問を1つ作成してください。
ジル 'SO-悪であるのをやめる' 14

2
@Gilles質問はディストリビューション固有ではありません。ディストリビューションごとに答えを1つ質問する方が良いと思います。
ファヒムミタ14

何が機能し、何が機能しなかったかの一例: Debian 8にはMySQL 5.6が必要でした。(通常、MySQL 5.5はDebian 8にのみインストール可能です。他の作業との比較のために5.6が必要でした。) 5.6バックポートをインストールしようとしましたが、壊れていました。何らかの種類の重複ファイルが読み込まれているというエラーメッセージ。私はそれを報告しましたが、その後何をすべきですか?解決策: Debian 8専用のMySQL 5.6をMySQLサイトから直接ダウンロードできることを発見しました。うまくいき
楕円ビュー

回答:


33

(この回答について質問/コメントがある場合は、コメントを追加してください。または、十分な担当者がいる場合は、チャットで私にpingを送信できます。)

Debianの新しいバージョンからバイナリパッケージを直接インストールする-答えではありません。

Debianベースのディストリビューションのあるバージョンを実行しているとします。使用可能なパッケージよりも新しいバージョンが必要です。Debianのバージョンにバイナリパッケージを直接インストールするために、すべての初心者が最初にやろうとすること。これは、実行しているバージョンとパッケージの新しさによって、動作する場合と動作しない場合があります。一般に、この手順はうまく機能しません。

たとえば、testing / unstableから安定版に直接バイナリパッケージをインストールしようとしている場合を考えます。その時点でテスト/不安定が安定に非常に近い場合を除き、これはおそらくうまくいきません。その理由は、DebianのようなLinuxベースのバイナリディストリビューションの性質に関係しています。このようなオペレーティングシステムは共有ライブラリに大きく依存しており、これらの依存関係は多くの場合、バージョンに非常に厳密に依存しています。多くの場合、必要以上です。Debianには現在、バージョンの依存関係を「タイト」にする良い方法がありません。これは、バージョンの依存関係が必要に応じて厳密に制限されていることを示す簡単な方法です。

これはユーザーにとって何を意味しますか?たとえば、slrnDebian不安定版から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安定版で利用可能なバージョンと異なる(そしてバージョン番号が大きい)ことです。(libc6GNU 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その情報を使用するため、対応するdebapt-cache policyがない場合、関連するバージョンは表示されないことに注意してください。行がある場合はdeb、入力/etc/apt/preferencesなどを使用して新しいバージョンを固定することを忘れないでください。/etc/apt/preferencesたとえば、このようなエントリ(不安定版の場合)は機能します。

Package: *
Pin: release a=unstable
Pin-Priority: 50

に行を追加する場合は/etc/apt/sources.listapt-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ディレクトリにあります。

ただし、これらの問題の詳細な議論は、この投稿の範囲外です。


これは実際には一般的なディストリビューションです(新しいもののコードリポジトリは別の方法で呼び出すことができるか、特別な場所からのものを取得する必要があります)。ディストリビューションのガイドを確認してください。
フォンブランド14

2

Debianだけでなく、常に機能する1つの方法は、必要なソフトウェアを自分でコンパイルすることです。(利用可能な新しいバージョンが必要なときと、ソフトウェアがまったく提供されなかったときの両方で、Debianで何年もこれを行ってきました)。

/use/localusingにローカルにコンパイルされたパッケージを保存しますstow。これにより、パッケージに関連するすべてのファイルをサブディレクトリツリーに保存し、そのツリーへのシンボリックリンクを作成できます。これにより、コンパイルされたパッケージの管理が簡単になります。インストールされたファイルはDebianが提供するファイルと衝突せず、1つのコマンドでパッケージを削除できます。

たとえばsome_software、パッケージをコンパイルしてインストールする手順は、通常、次のバリエーションです。

  1. .tarファイルなどをにダウンロードします/usr/local/src/

  2. /usr/local/packages/some_softwareソフトウェアをダウンロードした場所、その機能、バージョンを説明するファイルを作成します。このファイルには、コンパイルするために何をする必要があるかが記載されています(以下を参照)。

  3. .tarファイルの内容をに解凍し/usr/local/tmp/some_softwareます。

  4. または、リポジトリからコンパイルする場合は、適切なサブディレクトリ(例:)でリポジトリをチェックアウトし、/usr/local/git/some_softwareそこでコンパイルします。

  5. cdこのディレクトリを見てREADMEINSTALLなどを見てください。

  6. ほとんどの場合、configureパッケージにはautotoolsスクリプトがあります。./configure --prefix /usr/local/stow/some_software-versionこのサブディレクトリにファイルがインストールされるように呼び出します。それ以外の場合は、Makefileインストールされたファイルのパスを設定する方法を読んで理解してください。

  7. でコンパイルしmakeます。

  8. でインストールしmake installます。

  9. cd /usr/local/stow、その後 stow some_software-version

  10. 動作するかどうかをテストします。

多くの場合、最初の試みではコンパイルが機能しません。パッケージにはライブラリと対応するインクルードファイルが必要な場合があるため...-dev、Debianから正しいパッケージをインストールする必要があります。または、パッケージの作者が使用しgccた異なるバージョンが文句を言わないものについて文句を言うかもしれgccません。そのため、コードを読んで修正しなければならないこともありますが、そうなることはあまりありません。


この質問の意図は、おそらくこれは明らかではありませんでしたが、Debian用ソフトウェアのパッケージをインストールする方法を説明することでした。質問をもっと明確にする必要があるかもしれません。んstowDebianパッケージを作成しますか?manページからは、このようには見えません。
ファヒムミサ

@FaheemMitha StowはDebianパッケージについて知りません。個別のインストールディレクトリのセットから単一のディレクトリへのシンボリックリンクのみを管理します。
クサラナナンダ

@FaheemMitha:自己コンパイルされたソフトウェアをDebianパッケージに変換する場合、Debianパッケージメンテナーのように自分でパッケージ化する必要があります。しかし、それがあなただけのユーザーである場合、それ/usr/localは非常に面倒です。インストールは非常に簡単で、stowそこに保存されているファイルの管理に役立ちます。別の言い方をすれば、ソフトウェアをDebianで使用するためにDebianパッケージに入れる必要はありません。
Dirkt

一つの大きな利点は、だけでもローカルでの使用のために、Debianパッケージなどのソフトウェアをパッケージにあります:あなたがインストールされたままの依存性を確保するインストールパッケージを持つ、正しく依存関係を記述した場合...
スティーブン・キット

@StephenKitt:Debianパッケージとしてソフトウェアを適切にパッケージ化することが優れたソリューションである場合。欠点は、適切にパッケージ化するために時間を
費やさなけれ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.