Apporta apt-get update e upgrade automatizza e incustodito


28

Ho circa 7 server Debian che gestisco e vorrei impostarli per aggiornarsi automaticamente. Quindi, ho creato uno script come tale:

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

e lo ha inserito rootnell'elenco crontab dell'elenco. Sfortunatamente, si blocca sempre nella sezione Aggiornamento, chiedendo se sono sicuro di voler aggiornare. Perché è un lavoro cron, non vedo l'output fino a quando non mi invia un'email dicendo che non è riuscito. C'è un modo per farlo saltare quel prompt e fare automaticamente l'aggiornamento?


3
... o cron-apt.
derobert il

Risposte:


46

Utilizzare l'opzione -y per apt-get per non chiedere. Da 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.

Puoi anche impostare la variabile env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
Cosa fa DEBIAN_FRONTEND? Viene utilizzato anche per altri processi?
Canadian Luke REINSTATE MONICA

Sto provando questo sul mio server di casa e sceglierò la risposta migliore non appena funzionerà
Canadian Luke REINSTATE MONICA

1
@CanadianLuke vedere qui per DEBIAN_FRONTEND. Non è menzionato nel mio Debian man debconf, quindi potrebbe essere una cosa di Ubuntu.
terdon

@terdon non hai il pacchetto -doc per debconf. È nella sezione 7 dell'uomo man 7 debconf;)
Braiam

@Braiam ah, OK, l'ho visto e provato man 7 debconfma non ho ottenuto nulla. Ora so perché :)
Terdon

27

Bene, forse stai usando lo strumento sbagliato. unattended-upgradesil pacchetto installa gli aggiornamenti di sicurezza su base giornaliera (può essere configurato), è possibile configurare quali pacchetti aggiornare o non aggiornare, ecc. Può essere installato utilizzando:

sudo apt-get install unattended-upgrades

Da man unattended-upgrades:

La configurazione viene eseguita tramite il meccanismo di configurazione apt. Il file di configurazione predefinito è disponibile in /etc/apt/apt.conf.d/50unattended-upgrades


@CanadianLuke legge tutte le configurazioni /etc/apt/apt.conf.d/ma solo quelle che iniziano con Unattended-Upgrade::vengono analizzate.
Braiam,

Sto provando questo su uno dei server al lavoro e sceglierò la risposta migliore non appena funzionerà
Canadian Luke REINSTATE MONICA

10

mentre le risposte precedenti sono informative, non eludono il "problema" di input richiesto dai mezzi umani durante upgrade. pertanto, sto utilizzando quanto segue:

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

per includere gli aggiornamenti 'distributivi' come i kernel utilizzare il dist-upgradecomando

consultare il manpgage didpkg per informazioni dettagliate su questi parametri.

nota di importazione : è richiesta sudola chiamata con il -Eparametro:

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.

in caso contrario, le EXPORTdichiarazioni non influiranno sulle chiamate di apt-get!

il merito va a Remy van Elst ! Grazie!


1
Potresti spiegare perché hai aggiunto le altre opzioni a apt-get upgrade?
FarO,

1
Inoltre, è richiesto "sudo -E" se lo script viene eseguito dal crontab di Rott?
FarO,

1
@FarO dipende da quale ambiente / in quale contesto si desidera eseguire il cronjob. generalmente sono gestiti da root- quindi non è necessario utilizzarli sudoaffatto. le "altre opzioni" sono impostate per essere eseguite incustodite in ogni caso. si prega di consultare la manpagina di riferimento .
jitter

4

Uno strumento generico per questo tipo di cose è yes:

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

Quindi, per esempio, potresti farlo

yes | sudo apt-get upgrade 

Si noti che nel caso specifico apt-get upgradedell'utilizzo delle opzioni suggerite da @Braiam o @ArthurUlfeldt è meglio.


La linea che incollo quando voglio farlo manualmente è apt-get update && yes | apt-get upgrade(i nostri server non dovrebbero usare sudo... Non chiedere ...)
Canadian Luke REINSTATE MONICA

Perché usare un trucco invece di un'opzione già fornita ?? "-y" è già in apt-get.
FarO,

3
Perché, come ho detto nella risposta, questo è uno strumento generico per questo tipo di operazione, quindi questa risposta è per altri casi, non per apt. Non hai letto l'ultimo paragrafo? O la prima frase?
terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.