Debian Jessieがインストールするバックポートが多すぎます


9

私はDebian Jessieを持っており、バックポートを追加しました(これらの指示に従って):

echo "deb http://http.debian.net/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list

(ノートパソコンの一部のハードウェアについて、必要に応じて新しいカーネルを入手するためにこれを行いました。)

この説明では、バックポートされたパッケージを明示的に要求しない限り、何も起こらないはずであると述べています。例えばapt-get -t jessie-backports install "package"

しかし、バックポートからシステム全体の負荷がかかっているように見え、バックポートに更新されたものの正確なバージョンに依存するため、1つのパッケージがアンインストールされました。

だから私の質問:

  • 最初にそれを停止して、バックポートがインストールされないようにするにはどうすればよいですか?
  • 既存のバックポートを削除するにはどうすればよいですか?

注:これは、バックポートからのインストール済みパッケージのリストを取得します(そして、apt-get install何らかの理由sudo apt-get installで、パイプラインの終わりにエコーの代わりに配置しても機能しません)。

cat /var/log/dpkg.log.1 |grep -v linux | grep -v xserver | grep -v firmware | grep "status installed" | grep bpo | cut -d" " -f 5 | cut -d: -f 1 | xargs -i{} -n1 bash -c "dpkg-query -s {} >/dev/null && echo {}" | sed -r -e "s~.*~\0/jessie~" | xargs echo

注意:

一部のパッケージは自動的にインストールされるため、すべてを再インストールすると、これらの自動的にインストールされたパッケージは手動でインストールされたものとしてマークされます。したがって、不要なときに削除されません。

これを解決する方法について何かアイデアはありますか?

回答:


10
  1. /etc/apt/apt.confまたは以下のファイルに以下を追加してみてください/etc/apt/apt.conf.d

    APT::Default-Release "jessie";

  2. 既存のバックポートを削除するには、インストールされているものとそれらが置き換えられたバージョンのリストを取得する必要があります。幸いなことに、この情報は/var/log/dpkg.log

たとえばgrep ' upgrade ' /var/log/dpkg.log、次のような多くの行が表示されます。

2016-02-15 11:06:32 upgrade python-numpy:amd64 1:1.11.0~b2-1 1:1.11.0~b3-1

これは2月15日の午前11時6分に、python-numpyをバージョン1:1.11.0〜b2-1からバージョン1:1.11.0〜b3-1にアップグレードしたことを示しています

以前のバージョンにダウングレードしたい場合は、次のコマンドを実行します。

apt-get install python-numpy=1:1.11.0~b2-1

注:この特定のケースでは、debian sidaka を実行しているunstableため、おそらく機能しません。したがって、古いバージョンはおそらくdebリポジトリで利用できなくなります。実行していてjessie、パッケージのjessieバージョンをjessie-backportsバージョンへのダウングレードとして再インストールする場合、期待どおりに動作します。

同様に、パッケージが削除された場合は、それとのためにgrepをすることによってその正確なバージョンを見つけることができますremoveでは/var/log/dpkg.log


多くのパッケージの一括ダウングレードはawk、およびなどの標準ツールを使用して大幅に自動化できますgrep。たとえば、インストールしたjessie-backportsのアップグレードがすべて特定の日に行われたことがわかっている場合(例:2016-02-15)、次のような方法で以前のバージョンにダウングレードできます。

 apt-get -d -u install $(awk '/2016-02-15 ..:..:.. upgrade / {print $4 "=" $5}'
    /var/log/dpkg.log)

(水平スクロールバーを避けるために改行とインデントが追加されました)

-d--download-only)オプションの使用に注意してください。コマンドを再実行し、apt-get installが必要なことを行い、必要なことだけを実行することを確認したら、そのオプションを削除します。

また、awk最初にそのコマンドの一部のみを実行することをお勧めします。これにより、再インストールされるパッケージとバージョンのリストを正確に確認できます。


1
「大幅に自動化された」とは、ほとんど問題なく機能する一方で、完全に実行されるとは限らない(必ずしも含まれるパッケージと依存/推奨/競合/その他の行に依存する)ことを意味します。手動のいずれかでインストールまたはアンインストールする必要が一つまたは二つのパッケージがあるかもしれませんapt-getdpkg。あなたがパニックにならない限り、心配することは何もありません。パッケージングシステムに関するほとんどの問題は、人々がパニックに陥ったり、何も考えずに反応したりすることによって引き起こされます。
cas

新しいカーネルパッケージをバックポート@casに固定しないでください。
Rui F Ribeiro、

害はありませんが、必要ではありません。ピン留めは、Apt :: Default-Releaseを設定するよりもかなり複雑で、正しく行うのが困難です。 apt-get明示的に指示しない限り、すでにインストールされているパッケージをダウングレードしません。また、@ richardは、jessie明示的に指定されていない限り、デフォルトでパッケージをインストールすることを望んでいると述べたjessie-backports-私はその願いがカーネルパッケージにも適用されると想定している。
cas

彼は、おそらく私と同じように、カーネル4をjessieに入れるための新しいカーネルを用意するためにバックポートを含めたと述べた。
Rui F Ribeiro、

1
stable+ を使用する人はstable-backportsおそらく私よりもピン留めに多くのことを気にかけており、それについてもっと学ぶために努力をしたと思います。私はunstableシステムを実行して最新のsidをかなり定期的に同期する傾向があります(時々からの追加でexperimental)ので、固定する必要はほとんどありません。私がこれを頻繁に使用したのは、数年前のgnome3への移行中に、gnome2パッケージを置き換えたくなかったときです。常に変更するパッケージのリストを維持することは、PITAであったことを覚えています。その後、xfceに切り替えてgnomeを削除しました。
cas

1

正しく設定していないようです/etc/apt/preferences。以下は、jessie-backportsがインストールすることを期待しているもの(バックポートされたカーネルなど)から何もインストールされないようにします。指定されたパッケージが、リストされていないバックポートからの他のパッケージを必要とする場合でも、問題があります。

Package: *
Pin: release n=jessie-backports
Pin-Priority: -1

Package: *
Pin: release n=jessie
Pin-Priority: 1000

# this will allow you to not have to use '-t jessie-backports install'
Package: linux-doc linux-headers-amd64 linux-image-amd64 linux-source
Pin: release n=jessie-backports
Pin-Priority: 1000

インストールされているバックポートされたパッケージのリストを取得したい場合は、次のスクリプト(またはその一部)を使用できます。

chmod a+x name_of_script ./name_of_script > name_of_output_file

#!/bin/bash
RELEASES="jessie-backports"

echo  "Searching for installed packages from" >&2
echo $RELEASES | sed s/^/" * "/ | sed s/\|/"\n * "/g >&2

for package in $(dpkg -l | grep -i ^ii | awk '{print $2}')
do
check=$( apt-cache policy $package 2>&1 | grep -i -A 1 "[*]" | egrep $RELEASES )
if [ "$check" == "" ] ; then
 echo -ne "." >&2
else
 echo -ne "#" >&2
 echo
 apt-cache policy $package
fi
done
echo >&2
echo

上記のスクリプトで一覧表示されているパッケージをダウングレードする場合は、以下をに追加します/etc/apt/preferences

Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000

次に実行します:

sudo apt-get upgrade

1

/ etc / apt / preferencesおよび/etc/apt/preferences.d/でaptの固定設定を確認します

カスタムのピン留め構成を追加してそれを忘れた可能性はありますか?それがあなたにそうであるように私がそれを考えることができる唯一の方法はそれがaptをバックポートを好むようにするだろうということです。それ以外の場合は、依存関係をプルするだけです-指定したパッケージに必要です。

公式のバックポートは、バックポートされたパッケージのリリースファイルのjessieよりも低く(100)ピン留めされています。aptがjessie-backportsよりjessieを優先するようにするために、apt設定を行う必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.