web-dev-qa-db-fra.com

Activation des mises à niveau sans assistance à partir d'un script Shell

J'ai un script Shell pour configurer automatiquement les nouvelles machines virtuelles Ubuntu à mes fins. J'aimerais que ce script installe et active unattended-upgrades, mais je ne peux pas comprendre comment le faire sans interaction de l'utilisateur.

Le moyen habituel d'activer les mises à niveau est dpkg-reconfigure unattended-upgrades, mais bien entendu, il est interactif. Le front-end non interactif évite de poser des questions du tout et le front-end du texte semble lié et déterminé à faire ses entrées/sorties avec le tty et non avec stdin/stdout.

16
Grant Watson

Copiez simplement le fichier /etc/apt/apt.conf.d/20auto-upgrades après l'avoir configuré comme vous le souhaitez, puis déposez-le sur votre ordinateur cible. Vous pouvez l'intégrer dans votre script, ou vous pouvez le rsync ou l'insérer à partir d'un serveur ou autre.

Donc, fondamentalement, votre script pourrait faire quelque chose comme ceci:

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

Il n'y a vraiment aucune raison de singer avec le script dpkg-reconfigure.

Si vous ne souhaitez pas récupérer le fichier de configuration à partir d'un serveur distant, sa procédure est TRÈS simple et très brève: la version par défaut, qui récupère et installe uniquement les mises à jour de sécurité, ressemble à ceci:

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

Donc, vous pouvez simplement faire écho de ces lignes dans le fichier de configuration directement avec ce qui suit:

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

Si vous souhaitez utiliser dpkg-reconfigure, vous pouvez définir la valeur avec "debconf-set-selections", puis la reconfigurer de manière non interactive.

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

Vous devez utiliser Sudo pour faire écho dans /etc/apt/apt.conf.d/20auto-upgrades

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

Selon moi, vous devez écrire votre propre script cron qui appelle aptitude à cet effet, consulter un troisième sujet Écrire votre propre script cron qui appelle aptitude cette documentation .

0
Ketan Patel