apt-getの更新とアップグレードを自動化および無人化する


28

私が管理しているDebianサーバーは約7台あり、それらを自動的に更新するように設定したいと思います。そこで、次のようなスクリプトを作成しました。

#!/bin/sh
apt-get update
apt-get upgrade

そして上に置いrootさんのcrontabリスト。残念ながら、アップグレードセクションに常にハングアップし、アップグレードするかどうかを確認します。これはcronジョブであるため、失敗したことを電子メールで通知するまで出力は表示されません。そのプロンプトをスキップして、アップグレードを自動的に実行する方法はありますか?


3
...またはcron-apt。
デロベルト

回答:


46

-yオプションを使用して、apt-getで要求しないようにします。からman apt-get

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

DEBIAN_FRONTEND環境変数を設定することもできます

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
何をDEBIAN_FRONTENDするの?他のプロセスにも使用されていますか?
カナダのルーク州立モニカ

私は私のホームサーバー上でこれをしようとしている、それが実行されるとすぐに最良の答えを選択します
カナダのルークREINSTATE MONICA

1
@CanadianLukeは、こちらをご覧くださいDEBIAN_FRONTENDman debconfしかし、私のDebianでは言及されていないので、Ubuntuのものかもしれません。
テルドン

@terdon debconfの-docパッケージはありません。それは男の7つのセクションにありman 7 debconfます;)
Braiam

@ブライアムああ、わかりました、私はそれを見て、試しましman 7 debconfたが、何も得ませんでした。今、私は理由を知っています:)
テルドン

27

さて、多分あなたは間違ったツールを使用しています。unattended-upgradesパッケージはセキュリティアップグレードを毎日インストールし(構成可能)、アップグレードするパッケージまたはアップグレードしないパッケージなどを構成できます。以下を使用してインストールできます。

sudo apt-get install unattended-upgrades

からman unattended-upgrades

設定はapt設定メカニズムを介して行われます。デフォルトの設定ファイルは/etc/apt/apt.conf.d/50unattended-upgradesにあります


@CanadianLukeはすべての構成を読み取りますが/etc/apt/apt.conf.d/、で始まる構成のみUnattended-Upgrade::が解析されます。
Braiam

私は仕事でサーバーのいずれかでこれをしようとしていますし、それが実行されるとすぐに最良の答えを選択します
カナダのルークREINSTATE MONICA

10

以前の回答は有益なものですが、の間に人間の手段が必要とする入力の「問題」を回避するものではありませんupgrade。したがって、私は次を使用しています:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

カーネルのような「配布」アップグレードを含めるには、dist-upgradeコマンドを使用します。

これらのパラメータの詳細については、manpgagedpkgを参照してください。

importat注:パラメーターをsudo含む呼び出し-Eが必要です:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

そうでない場合、EXPORTステートメントはapt-get!の呼び出しに影響しません。

クレジットはレミー・ファン・エルストにあります!ありがとう!


1
apt-get upgradeに他のオプションを追加した理由を説明できますか?
FARO

1
また、スクリプトがrottのcrontabから実行される場合、「sudo -E」が必要ですか?
FARO

1
cronjobを実行する環境/コンテキストに依存する@FarO。一般に、これらはroot- によって実行されるためsudo、まったく使用する必要はありません。どのような場合でも「その他のオプション」は無人で実行するように設定されています。参照manページをご覧ください。
ジッター、

4

この種のものの一般的なツールはyes次のとおりです。

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

だから、例えば、あなたはできる

yes | sudo apt-get upgrade 

@Braiamまたは@ArthurUlfeldtapt-get upgradeによって提案されたオプションを使用する特定のケースではより良いことに注意してください。


apt-get update && yes | apt-get upgrade私が手動でやりたいときに貼り付ける行は(私たちのサーバーは使用することになってsudoいない...尋ねないでください...)
カナダのルークREINSTATE MONICA

既に提供されているオプションの代わりにトリックを使用するのはなぜですか?「-y」はすでにapt-getにあります。
FARO

3
なぜなら、答えで言ったように、これはこの種の操作のための一般的なツールなので、この答えはaptではなく他の場合のためです。最後の段落を読みませんでしたか?または最初の文ですか?
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.