Aktualizacja systemu i logowanie komunikatów

Spis treści

Aktualizacja systemu to chyba jedna z bardziej podstawowych czynności, które przeprowadzamy niemalże codziennie. Tak się złożyło, że chwilę po zakończeniu tego procesu musiałem wyłączyć w pośpiechu komputer. Nie zdążyłem przy tym przeczytać uważnie informacji, które zwrócił mi terminal. Oczywiście mógłbym zahibernować maszynę i wrócić do logu instalacji w wolnej chwili ale nie zawsze hibernacja jest możliwa. Poza tym, na myśl przychodzą mi osoby, które często zakładają wątki na forach o tym, że aktualizacja uwaliła ich system. Zawsze w takiej sytuacji prosi się danego człowieka o podanie logu z aktualizacji systemu albo przynajmniej próbuje się wyciągnąć od takiego delikwenta informację na temat tego co było aktualizowane. W większości przypadków, taki człowiek nie ma o tym kompletnie pojęcia, a jak już, to podaje bardzo nieprecyzyjne dane. Ten post ma na celu ułatwienie znalezienia informacji o tym co było przedmiotem aktualizacji, tak by mieć nieco jaśniejszy obraz tego co mogło nawalić.

Aktualizacja systemu za pomocą apt/aptitude

W debianie aktualizacja systemu jest przeprowadzana za pomocą jednego z dwóch narzędzi: apt lub aptitude . Każde z nich posiada swoje pliki logu, w których zapisuje informacje z przeprowadzanych operacji. Znajdują się one odpowiednio w /var/log/apt/ oraz w /var/log/aptitude . W katalogu /var/log/apt/ jest kilka innych plików ale o tym za moment. Dodatkowo, aktualizacja systemu (jak i instalowanie/usuwanie pakietów) przy pomocy aptitude jest także logowana do plików w katalogu /var/log/apt/, jako że aptitutde to nakładka na apt. Wiemy zatem gdzie są przechowywane logi obu z powyższych narzędzi.

Apt

Zajrzyjmy zatem do katalogu /var/log/apt/ . Mamy tam z grubsza dwa pliki history.log oraz term.log . W pierwszym są przechowywane informacje na temat wersji aktualizowanych/instalowanych/usuwanych pakietów. Nie wiem kto zaprojektował format tego pliku ale za wyjątkiem daty rozpoczęcia akcji jak i jej zakończenia, ten log jest zupełnie nieczytelny. Jeśli chodzi o wersje pakietów, to dużo lepiej korzystać z logu aptitude, jeśli oczywiście aktualizacja systemu jest przeprowadzana za jego pomocą.

Plik history.log

Tak czy inaczej, rzućmy okiem na plik history.log . Poniżej przykładowy wycinek z tego pliku:

Start-Date: 2015-10-03  20:48:56
Install: libvte-2.91-0:amd64 (0.42.0-1, automatic), kodi-data:amd64 (15.2~rc1+dfsg1-2, automatic)...
Upgrade: libasan2:amd64 (5.2.1-18, 5.2.1-20), libgnutls-openssl27:amd64 (3.3.17-1, 3.3.18-1), libquadmath0:amd64 (5.2.1-18, 5.2.1-20)...
End-Date: 2015-10-03  20:53:28

Dla większej czytelności, log został nieco przycięty. W każdym razie, mamy tutaj datę rozpoczęcia ( Start-Date ) i zakończenia ( End-Date ) operacji i w ten sposób jesteśmy w stanie określić kiedy dokładnie miała miejsce przeprowadzana przez nas aktualizacja systemu. Dodatkowo, jesteśmy w stanie podać dokładny czas jej trwania. Obie te informacje mogą mieć znaczenie przy ewentualnych problemach.

Między znacznikami czasu, mamy informacje na temat tego jakie zmiany zostały poczynione. Wszelkie pakiety, które są wypisane po Upgrade: zostały zaktualizowane ze starszych do nowszych wersji. Jak możemy zaobserwować, w nawiasie, tuż za nazwą pakietu, mamy dwa numerki oddzielone przecinkiem. Pierwszy z nich to numer starej wersji, zaś drugi nowej.

Czasem aktualizacja systemu pociąga za sobą konieczność instalowania/usuwania pewnych dodatkowych zależności. W tym powyższym przykładzie, wymagane jest doinstalowanie szeregu pakietów. Informacje w nawiasie przy nazwach pakietów odpowiadają za numerek wersji instalowanego pakietu, oraz precyzują iż ten pakiet jest instalowany automatycznie (zależności).

Jeśli w grę wchodzi kilka pakietów, to czytanie tego logu nie stanowi aż takiego wyzwania. Problem zaczyna się gdy tych pakietów są setki.

Plik term.log

Drugim z plików, które oferuje nam apt jest term.log , czyli dokładny zapis tego co się wyświetlało w chwili gdy miała miejsce aktualizacja systemu. Rzućmy zatem na niego okiem:

Log started: 2015-10-07  11:22:09
(Reading database ...
(Reading database ... 5%
...
Preparing to unpack .../gimp-data_2.8.14-1.2_all.deb ...
Unpacking gimp-data (2.8.14-1.2) over (2.8.14-1) ...
Selecting previously unselected package libgegl-0.3-0:amd64.
Preparing to unpack .../libgegl-0.3-0_0.3.0-5_amd64.deb ...
Unpacking libgegl-0.3-0:amd64 (0.3.0-5) ...
Preparing to unpack .../gimp_2.8.14-1.2_amd64.deb ...
Unpacking gimp (2.8.14-1.2) over (2.8.14-1+b1) ...
Processing triggers for libc-bin (2.19-22) ...
Processing triggers for man-db (2.7.3-1) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.59) ...
Processing triggers for desktop-file-utils (0.22-1) ...
Processing triggers for menu (2.1.47) ...
...
Removing libgegl-0.2-0:amd64 (0.2.0-7.1) ...
...
Setting up gimp (2.8.14-1.2) ...
Setting up linux-image-4.2.0-1-amd64 (4.2.3-1) ...
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.2.0-1-amd64
W: Possible missing firmware /lib/firmware/i915/skl_dmc_ver1.bin for module i915
Setting up libgc1c2:amd64 (1:7.4.2-7) ...
...
Log ended: 2015-10-07  11:25:50

Widok znajomy prawda? Jest to dokładnie ten sam log, który pojawia się w oknie terminala, z tym, że jest zapisywany do pliku, który możemy sobie w dowolnym czasie przejrzeć i ewentualnie odwołać się do niego gdy piszemy posta na forum.

Aptitude

aptitude ma do zaoferowania nam tylko jeden plik: /var/log/aptitude , który jest odpowiednikiem pliku history.log dla apt . Jak widzieliśmy wyżej, format pliku history.log nie należy do przyjemnych. Inaczej zaś sprawa ma się w przypadku pliku logu dla aptitude . Wygląda on mniej więcej tak:

Aptitude 0.7.2: log report
Wed, Oct  7 2015 11:21:48 +0200

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 37 packages, and remove 1 packages.
7,111 kB of disk space will be used
===============================================================================
[REMOVE, NOT USED] libgegl-0.2-0:amd64 0.2.0-7.1
[INSTALL, DEPENDENCIES] libgegl-0.3-0:amd64 0.3.0-5
[UPGRADE] binutils:amd64 2.25.1-4 -> 2.25.1-5
[UPGRADE] blueman:amd64 2.0-1 -> 2.0.1-1
...
[UPGRADE] pinentry-gnome3:amd64 0.9.6-1 -> 0.9.6-2
[UPGRADE] pinentry-gtk2:amd64 0.9.6-1 -> 0.9.6-2
[UPGRADE] uget:amd64 2.0-1 -> 2.0.2-1
[UPGRADE] xdg-utils:amd64 1.1.0-1 -> 1.1.1-1
===============================================================================

Log complete.

Jak widzimy, zamiast jednej długiej linijki, mamy jedną linijkę na pakiet, gdzie mamy określone wersje oraz to co z danym pakietem zostało zrobione i z jakiego powodu.

Niestety aptitude nie dysponuje logiem z terminala, ale jako że aptitude jest nakładką na apt , to log z akcji przeprowadzanych za pomocą aptitude zostanie przesłany również do pliku /var/log/apt/term.log .

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.