🐧 Как распарсить логи истории apt

by itisgood

Используйте awk для разбора логов истории apt и дальнейшей фильтрации.

Python лучше подходит для этой задачи, но следующий код bash поможет вам начать.

#!/bin/bash
# Parse apt history log - shorter version
# https://sleeplessbeastie.eu/2021/06/18/how-to-parse-apt-history-log/

cat /var/log/apt/history.log | awk -v PACKAGE=$1 '
BEGIN {
        RS="\n\n"
        FS="\n"

        printf "%20s %10s %50s %60s\n", \
                "Datetime", "Action", "Package", "Version"
}

{
        # Sample entry for reference
        #
        # Start-Date: 2021-04-24  13:53:19
        # Commandline: apt install vim
        # Requested-By: vagrant (1000)
        # Install: vim:amd64 (2:8.2.2434-3), libgpm2:amd64 (1.20.7-8, automatic), vim-runtime:amd64 (2:8.2.2434-3, automatic)
        # End-Date: 2021-04-24  13:53:20

        # Create an object using key, value pairs
        for(field = 1; field <= NF; field++) {
                separator_index = index($field, ":")
                key             = substr($field, 0, separator_index - 1)
                value           = substr($field,    separator_index + 2)

                switch(key) {
                        case "Start-Date":
                        case "End-Date":
                        case "Commandline":
                        case "Requested-By":
                                object[key] = value
                                break
                        case "Remove":
                        case "Purge":
                        case "Install":
                        case "Reinstall":
                        case "Upgrade":
                        case "Downgrade":
                                object["Action"]   = key
                                object["Packages"] = value
                                break
                }

        }

        # Filter by package name
        split(object["Packages"], packages, /), /)
        # Referential elements:
        #   vim:amd64 (2:8.2.2434-3
        #   libgpm2:amd64 (1.20.7-8, automatic
        #   vim-runtime:amd64 (2:8.2.2434-3, automatic)
        for(package_index in packages) {
                split(packages[package_index], package_entry_array,/ \(/)
                gsub(/\)/,"", package_entry_array[2])

                split(package_entry_array[1], package_with_arch_array, ":")
                if(package_with_arch_array[1] ~ PACKAGE || PACKAGE == "") {
                        printf "%20s %10s %50s %60s\n", \
                                        object["Start-Date"],
                                        tolower(object["Action"]),
                                        package_with_arch_array[1],
                                        package_entry_array[2]

                }
        }
}
'

Отображение истории apt

$ inspect_apt_history 
            Datetime     Action                                            Package                                                      Version
2021-04-19  19:24:18    install                                   libtimedate-perl                                          2.3300-2, automatic
2021-04-19  19:24:18    install                                libhtml-tagset-perl                                            3.20-4, automatic
2021-04-19  19:24:18    install                                     mariadb-server                                                   1:10.5.9-1
2021-04-19  19:24:18    install                                        libdbi-perl                                        1.643-3+b1, automatic
[...]
2021-04-24  06:54:20    upgrade                                    apt-listchanges                                                   3.23, 3.24
2021-04-24  06:54:23    upgrade                                     sysvinit-utils                                               2.96-6, 2.96-7
2021-04-24  06:54:25    upgrade                                               dpkg                                             1.20.7.1, 1.20.9
2021-04-24  13:53:19    install                                                vim                                                 2:8.2.2434-3
2021-04-24  13:53:19    install                                            libgpm2                                          1.20.7-8, automatic
2021-04-24  13:53:19    install                                        vim-runtime                                      2:8.2.2434-3, automatic

Отображение истории apt, связанной с пакетом vim.

$ inspect_apt_history vim
            Datetime     Action                                            Package                                                      Version
2021-04-21  21:23:27    upgrade                                         vim-common                                   2:8.2.2434-1, 2:8.2.2434-3
2021-04-21  21:23:27    upgrade                                           vim-tiny                                   2:8.2.2434-1, 2:8.2.2434-3
2021-04-24  13:53:19    install                                                vim                                                 2:8.2.2434-3
2021-04-24  13:53:19    install                                        vim-runtime

Отображение истории apt, связанной с пакетом mariadb.

$ inspect_apt_history mariadb
            Datetime     Action                                            Package                                                      Version
2021-04-19  19:24:18    install                                     mariadb-server                                                   1:10.5.9-1
2021-04-19  19:24:18    install                                libdbd-mariadb-perl                                            1.21-3, automatic
2021-04-19  19:24:18    install                           mariadb-server-core-10.5                                        1:10.5.9-1, automatic
2021-04-19  19:24:18    install                                mariadb-client-10.5                                        1:10.5.9-1, automatic
2021-04-19  19:24:18    install                                     mariadb-common                                        1:10.5.9-1, automatic
2021-04-19  19:24:18    install                                        libmariadb3                                        1:10.5.9-1, automatic
2021-04-19  19:24:18    install                                     mariadb-client                                                   1:10.5.9-1
2021-04-19  19:24:18    install                                mariadb-server-10.5                                        1:10.5.9-1, automatic
2021-04-19  19:24:18    install                           mariadb-client-core-10.5

Показать историю apt, связанную с конкретным пакетом mariadb.

$ inspect_apt_history ^mariadb$
            Datetime     Action                                            Package                                                      Version
2021-04-19  19:24:18    install                                     mariadb-server

Существует несколько ограничений, но теперь вы должны быть в состоянии создать свое собственное решение или расширить этот скрипт.

You may also like

Leave a Comment