web-dev-qa-db-ja.com

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

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

考慮すべきケース:

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

あたり 正規のQ&Aのリストをコンパイルしましょう これは、以下の正規の回答を置く場所として意図されています。答えはおそらくコミュニティwikiにする必要があります。

28
Faheem Mitha

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

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

Debianベースのディストリビューションのいくつかのバージョンを実行しているとします。利用可能なものよりも新しいバージョンのパッケージが必要です。すべての初心者がバイナリパッケージをDebianのバージョンに直接インストールすることを試みる最初のこと。これは、実行しているバージョン、およびパッケージがどれだけ新しいかによって、機能する場合と機能しない場合があります。一般に、この手順は適切に機能しません。

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

これはユーザーにとって何を意味しますか?たとえば、Debian不安定版からDebian安定版にslrnをインストールしようとしているとします。これはどのように見えますか?

# 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によって生成されたエラーにもかかわらず、壊れたパッケージはありません。それで、何が悪かったのですか?問題は、unstable slrnがコンパイルされたlibc6のバージョンが、Debian安定版で使用可能なバージョンと異なる(バージョン番号が大きい)ことです。 (libc6はGNU Cライブラリです。CライブラリはUnixライクなオペレーティングシステムの中心であり、GNU CライブラリはバージョンですLinuxベースのオペレーティングシステムが一般的に使用するものです。)

したがって、unstable slrnは、stableで利用可能なバージョンよりも大きい番号のバージョンのlibc6を必要とします。パッケージは上位バージョンのライブラリに対してコンパイルされているため、必ずしも上位バージョンのライブラリを必要とするわけではありませんが、多くの場合そうであることに注意してください。

構文

apt-get install slrn/unstable

つまり、不安定版slrnを使用しますが、他のすべてのパッケージでは、安定版のバージョンのみを使用します。より正確には、優先順位番号を使用します。詳細については、man apt_preferencesをご覧ください。

人もできる

apt-get install -t unstable slrn

これははるかに機能する可能性が高くなりますが、通常は実行する必要はありません。どうして?

つまり、allのすべてのパッケージを、stableのパッケージと同じ立場で不安定に一時的に扱います。したがって、バージョン番号がより高い場合、unstable slrnの依存関係は、unstableから取り込まれ、通常はそうなります。これには通常、すでに説明した理由によりGNU Cライブラリが含まれます。この依存関係は定義(unstable's slrn has依存関係は、unstableで満たされていますが、突然、ビルド対象とは異なるバージョンのライブラリで強制的に実行されるパッケージが混在することになります。

答えは...バックポートです!

それで、これを行う正しい方法は何ですか?それはあなたのシステムでより最近のバージョンの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」 projects /)。

注目すべきもう1つの場所は、UbuntuメンテナによるさまざまなPPAです。 「パッケージ名PPA」で検索できます。

そのバージョンのOSで利用できるパッケージの最新バージョンはありませんが、OSのより新しいバージョン/リリースで利用できるより新しいバージョンがあります。これは、バックポートの標準的なケースです。

バックポーティングとは、実行しているバージョンの新しいバージョンのDebianからDebianソースを再構築することを意味します。この手順は、パッケージによっては簡単または複雑で難しい場合があります。これを行う方法の概要を次に示します。

初心者向けの簡単なバックポーティングチュートリアル

具体的には、現在wheezyの現在のDebian安定版を実行していると仮定します。例として、パッケージ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などのエントリを使用して、新しいバージョンをピン留めすることを忘れないでください。たとえば、このような(unstableの)/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

ビルドの依存関係が満たされている場合、ソースはソースディレクトリの上のレベルでいくつかのdebをビルドして生成します。この場合は/usr/local/src/slrnです。

ステップ4:

ビルドの依存関係が満たされていないとします。次に、ビルドの依存関係をインストールする必要があります。依存関係がご使用のバージョンで使用できない場合や、使用可能な場合、正しいバージョンで使用できない場合があるため、これは機能する場合と機能しない場合があります。

NB:残念ながら、Debianパッケージが必要以上のバージョンのビルド依存関係を必要とすることは珍しくありません。Debianでこれをチェックする自動化された方法はありません、そして多くの場合、パッケージのメンテナは、対応するバージョン/リリースで動作する限り、気にしません。したがって、依存バージョンに懐疑的な態度を取り、常識を使用してください。たとえば、PythonやGNUツールなどの広く使用されているパッケージは、Debianパッケージャーのリストに関係なく、依存関係の特定のバージョンに依存しません。

いずれにせよ、あなたはそれらをインストールすることを試みることができます

apt-get build-dep slrn=1.0.1-10

これが成功した場合は、パッケージのビルドを再試行してください(ステップ2)。失敗した場合は、さらに作業が必要です。 debuilddebian/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ディレクトリにあります。

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

35
Faheem Mitha

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

stowを使用して/use/localにローカルでコンパイルされたパッケージを保存します。これにより、パッケージに関連するすべてのファイルをサブディレクトリツリーに保存し、そのツリーへのシンボリックリンクを作成できます。これにより、コンパイルされたパッケージの管理が簡単になります。インストールされたファイルは、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. 機能するかどうかをテストします。

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

3
dirkt