web-dev-qa-db-ja.com

シェルスクリプトから無人アップグレードを有効にする

目的に合わせて新しいUbuntu仮想マシンを自動的に構成するシェルスクリプトがあります。このスクリプトをインストールしてunattended-upgradesを有効にしたいと思いますが、ユーザーの操作なしでその方法を理解することはできません。

アップグレードを有効にする通常の方法はdpkg-reconfigure unattended-upgradesですが、もちろんそれはインタラクティブです。非対話型のフロントエンドは質問を一切回避し、テキストフロントエンドは、stdin/stdoutではなくttyを使用してI/Oを実行するようにバインドおよび決定されているようです。

16
Grant Watson

好きなように設定した後、/ etc/apt/apt.conf.d/20auto-upgradesのコピーを作成し、ターゲットマシンの所定の場所にドロップします。スクリプトに埋め込むことも、サーバーからrsyncまたはwgetすることもできます。

基本的に、スクリプトは次のようになります。

apt-get install unattended-upgrades
wget -O /etc/apt/apt.conf.d/20auto-upgrades http://myserver.mytld/confs/20auto-upgrades
/etc/init.d/unattended-upgrades restart

Dpkg-reconfigureスクリプトを実行する理由はまったくありません。

リモートサーバーからconfファイルを取得したくない場合、それは非常に短くシンプルです-セキュリティアップデートのみを取得してインストールするデフォルトバージョンは次のようになります:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

したがって、次のコマンドを使用すると、これらの行を構成ファイルに直接エコーできます。

echo -e "APT::Periodic::Update-Package-Lists \"1\";\nAPT::Periodic::Unattended-Upgrade \"1\";\n" > /etc/apt/apt.conf.d/20auto-upgrades
20
Jim Salter

Dpkg-reconfigureを使用する場合は、「debconf-set-selections」を使用して値を設定し、非対話形式で値を再設定できます。

echo "unattended-upgrades       unattended-upgrades/enable_auto_updates boolean true" | debconf-set-selections; dpkg-reconfigure -f noninteractive unattended-upgrades
1
user497484

/etc/apt/apt.conf.d/20auto-upgradesにエコーするにはSudoを使用する必要があります

if [[ ! -f /etc/apt/apt.conf.d/20auto-upgrades.bak ]]; then
    Sudo cp /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades.bak
    Sudo rm /etc/apt/apt.conf.d/20auto-upgrades
    echo "APT::Periodic::Update-Package-Lists \"1\";
    APT::Periodic::Download-Upgradeable-Packages \"1\";
    APT::Periodic::AutocleanInterval \"30\";
    APT::Periodic::Unattended-Upgrade \"1\";" | Sudo tee --append /etc/apt/apt.conf.d/20auto-upgrades
fi
0
Arturo