web-dev-qa-db-ja.com

100%非対話型のDebian dist-upgrade

Debianでapt-get dist-upgradeを行う方法はありますか?尋ねられたすべての質問に自動的に「はい」と答えるだけでなく、ポップアップにさまざまな対話型ダイアログボックスを要求するのに十分なほど洗練された質問への回答として妥当なデフォルトを使用しますか?ここで、libc6をアップグレードしたときに表示されるキーマップと、カーネルイメージの選択肢について考えています。

目標は、かなり大きなdist-upgradeをリモートで開始できるようにすることです-時代遅れのマシンでも-何かがひどい場合を除いて、まったくベビーシットする必要がない悲惨な間違い。

確かにこれは可能ですか?

前もって感謝します!

40
Alex Balashov

DEBIAN_FRONTEND=noninteractiveを設定し(debconfプロンプトが表示されないようにするため)、force-confoldおよびforce-confdef/etc/dpkg/dpkg.cfgファイルに追加すると、完全に非対話型のパッケージインストールエクスペリエンスが実現されます。それでも情報の入力を要求するパッケージには、リリースクリティカルなバグがあります(そして、私は両方とも自動化のジャンキーおよびとしてDebian開発者として言っています)。

42
womble

Florian Lohoff 投稿 ウォンブルが提案したものを単一のコマンドに取得する方法:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

もちろん、-o Dpkg::Options::="--force-confnew --force-confdef"も使用できます(confnewについては dpkgのマニュアルページ を検索してください)。どのような場合にこれが違いをもたらすかはわかりません。私は個人的に、非対話型のアップグレードでバニライメージを最新の状態にする必要があります。その場合、常に新しい構成ファイル(--force-confdefなし)を選択するのが合理的だと思います。

22
Jo Liss

上記のwombleの答えは一般的には良好ですが、私にとってはうまくいかなかったため、100%無人になるにはさらに調査を行う必要がありました。結果を簡潔に共有し、将来の訪問者にとって物事がより簡単になるようにしたいと思いました。

以下は、debian 8リリースノートのアップグレードに関する推奨事項(主に)に従って実行されるスクリプトと、それを無人にするフラグと環境変数です。 (echosはデバッグ用であり、削除することができます。ただし、スクリプトが動かなくなった場合はどこにあるかがわかるように、それらを保持することをお勧めします)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a Prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
4
Tom Klino

> = Apt 1.1

Apt 1.1以降を使用している場合、 --force-yesは廃止されました なので、代わりに--allowで始まるオプションを使用する必要があります。 --allow-downgrades--allow-remove-essential--allow-change-held-packages

したがって、コマンドは次のとおりです。

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

注:古いものを保持するには--force-confoldを使用し、新しい構成を保持するには--force-confnewを使用します。

ソース: CFE-2360:apt_getパッケージモジュールのバージョンを認識させる

関連:

2
kenorb