Debian Jessieにバックポートがインストールされすぎています。

Debian Jessieにバックポートがインストールされすぎています。

私は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パイプの末尾にechoを置くことは機能しません)。

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

警告する:

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

この問題を解決する方法について考えている人はいますか?

答え1

  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

sid注:この特別な場合はdebian(別名debian)を実行しているため、動作しない可能性があります。unstableしたがって、以前のバージョンはdebリポジトリで使用できなくなる可能性があります。jessiejessie-backportsバージョンのダウングレードとしてパッケージのjessieバージョンを実行して再インストールすると、期待どおりに機能します。

同様に、パッケージが削除された場合は、removegrep for inを使用してそのパッケージと正しいバージョンを見つけることができます/var/log/dpkg.log


awkgrepたとえば、インストールした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再インストールするパッケージとバージョンの正確なリストを表示できるように、まずコマンド自体の一部のみを実行することをお勧めします。

答え2

正しく設定していないようです/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

答え3

/etc/apt/preferences および /etc/apt/preferences.d/ で apt の固定構成を確認してください。

カスタム固定構成を追加して忘れた可能性はありますか?これがあなたのようにバックポーティングを好むように私が考えることができる唯一の方法です。それ以外の場合は、指定したパッケージに必要な依存関係を取得します。

公式のバックポートは、バックポートリポジトリのバックポートパッケージリリースファイルのjessie(100)の下に修正されました。 aptがjessie-backportsよりもjessieを好むようにするために適切な設定を行う必要はありません。

関連情報