Automatyczna aktualizacja pakietów w linuksie.

Automatyczna aktualizacja pakietów często stwarza wiele problemów początkującym administratorom serwerów. Jakiś czas temu napisałem prosty skrypt, który ma za zadanie automatycznie aktualizować pakiety na serwerze VPS oraz wysłać mailem raport o stanie aktualizacji. Skrypt postanowiłem udostępnić, aby początkujący administratorzy mogli z niego skorzystać lub też na jego bazie napisać własny.

Skrypt działa już od dłuższego czasu na serwerze i sprawuje się świetnie. Oczywiście skrypt można także odpalić na własnym komputerze domowym o ile chodzi on pod kontrolą Debiana lub jakiejś debianopodobnej dystrybucji jak np. Ubuntu, Kubuntu, Mint itp. i ma ona uruchomiony jakiś serwer pocztowy, który będzie w stanie wysłać raport z aktualizacji na skrzynkę pocztową.

Skrypt korzysta z poleceń apt-get apt, więc jak już wspomniałem wymaga jakiejś debianopodobnej dystrybucji linuksa do poprawnego działania, jednak w prosty sposób można go przystosować do każdej innej dystrybucji linuksa, podmieniając odpowiednie polecenia odpowiedzialne za aktualizację pakietów.

Skrypt można rozbudować o dodatkowe opcje np. aby wysyłał także odpowiedni raport w przypadku niepowodzenia aktualizacji pakietów, jednak według mnie jest to zbędne, gdyż napisany został on w taki sposób, że w przypadku, gdy aktualizacja nie zakończy się sukcesem, raport nie zostanie wysłany, co w skuteczny sposób zasygnalizuje nam, że coś jest nie tak.

#!/bin/bash
##################################################################
## Automatyczna aktualizacja pakietów na serwerze by Gielo v0.4 ##
##################################################################

##nie wykonuj skryptu jeśli występuje niezainicjowana zmienna
set -u

#Przerwij gdy wystąpi nieobsługiwany błąd
set -e

apt --assume-yes update && DEBIAN_FRONTEND=noninteractive apt --assume-yes full-upgrade

aktualizacja="\naktualizacja zakończona\n"
starepakiety="stare pakiety zostały usunięte\n\n"
ok="aktualizacja pakietów zakończona poprawnie\n\n"
data="`date +%F`"
zaktualizowane="|Zaktualizowane pakiety|\n"
brakpakietow="Brak pakietów do aktualizacji"

apt autoremove -y

#wysłanie maila z informacją o aktualizacji
# Tytuł wiadomości:
temat="Raport z aktualizacji pakietów VPS $data"

# Nadawca:
adresemail="[email protected]"

# Treść wiadomości (tworzymy tymczasowy plik)
trescwiadomosci="/tmp/wiadomosc.txt"

if [ "$(grep "$data.*upgrade " /var/log/dpkg.log)" ]
then
  printf "$aktualizacja"> $trescwiadomosci
  printf "$starepakiety" >>$trescwiadomosci
  printf "$ok" >>$trescwiadomosci
  printf "$zaktualizowane" >>$trescwiadomosci
  printf "`grep "$data.*upgrade " /var/log/dpkg.log`"  >>$trescwiadomosci
else
  printf "$zaktualizowane" >>$trescwiadomosci
  printf "$brakpakietow" >>$trescwiadomosci
fi

# Wysyłamy maila:
mail -s "$temat" "$adresemail" < $trescwiadomosci

# Dla porządku i czystości usuwamy plik z treścią wiadomości
rm $trescwiadomosci

Skrypt aktualizacja.sh – Automatyczna aktualizacja pakietów w linuksie.

Aby automatyczna aktualizacja pakietów była możliwa, zawartość powyższego kodu wklej do pliku aktualizacja.sh, a następnie w zmiennej adresemail wpisz własny adres na jaki mają przychodzić wiadomości oraz zmodyfikuj ewentualnie zmienną temat. Następnie skopiuj skrypt aktualizacja.sh do katalogu ./root i jako super użytkownik nadaj mu prawa wykonalności poleceniem

$chmod +x aktualizacja.sh

Kolejnym krokiem jest dodanie skryptu do crona, aby wykonywał się raz na dobę np. o 2:00 rano

Uwagi na koniec

Jako email do wysyłania raportów z automatycznej aktualizacji pakietów, dobrze jest podać adres przeznaczony wyłącznie do otrzymywania takich raportów. Pozwoli to, na łatwe przeglądanie takich raportów. Do tematu wiadomości doklejana jest data z aktualizacji pakietów, więc łatwo zauważyć ewentualny brak raportu, szczególnie jest to ważne, jeśli nie przeglądasz ich codziennie.

Uwaga: Powyższy skrypt przy automatycznej aktualizacji pakietów korzysta z polecenia apt full-upgrade, dzięki czemu aktualizuje także jądro systemu (Kernel). Jeśli z jakiegoś powodu nie chcesz aktualizować jądra systemu, użyj polecenia apt upgrade w swoim skrypcie.

Istnieje prostszy sposób automatycznej aktualizacji pakietów w systemach debiano podobnych, który opiszę w kolejnym artykule. To, który sposób wybierzesz, będzie zależało wyłącznie od ciebie, jednak wydaje się, że za pomocą powyższego skryptu masz większą kontrolę nad tym co dzieje się w twoim systemie. Skrypt ten, możesz także w prosty sposób rozbudować o dodatkowe opcje o czym już wspomniałem. Dobrym pomysłem będzie np. dopisanie kilku regułek sprawdzających dostępność nowych wersji pakietów i jeśli są one dostępne, przeprowadzenie aktualizacji pakietów instalowanych za pomocą apt install, a których repozytoria nie zostały dodane do /etc/apt/sources.list.

13.06.2020 – Zmieniłem format daty oraz dodałem informacje o zaktualizowanych pakietach, która jest wysyłana na maila.

15.06.2020 – Poprawiłem drobny błąd w regule odpowiedzialnej za upgrade pakietów oraz zmodyfikowałem lekko tą regułę.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *