список отслеживания установленных пакетов с помощью git

Вы можете использовать переменные среды, доступные в PAM, например$PAM_TYPE

#!/bin/sh
if [ "$PAM_TYPE" != "open_session" ]
    then exit 0
else
    Your script here

Редактировать :Ссылка:http://www.linux-pam.org/Linux-PAM-html/sag-pam_exec.html

4
16.07.2020, 08:25
1 ответ

Список установленных пакетов — это в /var/lib/dpkg/status; это каноническая ссылка. Установленные пакеты отмечаются в этом файле своим статусом «установка установлена». dpkg -lобрабатывает этот файл при каждом запуске и использует хранящуюся в нем информацию для создания выходных данных.

Если вам нужен более простой набор данных для отслеживания, упрощающий сравнение, вам придется создавать его всякий раз, когда это необходимо.

Если вы хотите отслеживать только список установленных пакетов, вы можете запустить

dpkg --get-selections

периодически и сохранять его вывод в файле, отслеживаемом с помощью git; так как вам также нужны версии,

dpkg -l

может быть более подходящим.

Как указал Мартин Конрад , если вы хотите иметь возможность использовать сгенерированную здесь информацию для восстановления состояния системы позднее, вам также следует отслеживать установленные вручную -маркеры, и я бы еще добавил зацепки:

apt-mark showmanual
apt-mark showhold

Вы можете добавить все вышеперечисленное в хук dpkg, чтобы отслеживать все изменения в вашей системе;например, используя /etc/packages/для хранения файлов (, а не /var/lib/dpkg, который «принадлежит» dpkgи должен быть оставлен как -как ), создайте файл с именем /etc/dpkg/dpkg.cfg.d/package-history, содержащий

post-invoke="if [ -x /usr/local/bin/package-history ]; then /usr/local/bin/package-history; fi"

и файл с именем /usr/local/bin/package-history, содержащий

#!/bin/sh
cd /etc/packages
dpkg --get-selections > selections
dpkg -l > list
apt-mark showhold > holds
apt-mark showmanual > manual

Последний должен быть исполняемым:

sudo chmod 755 /usr/local/bin/package-history

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

Вы можете либо добавитьgit commit(проверку изменений сначала )в скрипт package-history, либо использовать etckeeperдля отслеживания изменений в файлах в /etc/packages, либо даже сделать /etc/packagesсам репозиторий git. Использование хука dpkgгарантирует, что файлы будут обновлены с любым изменением пакета, управляемым aptили dpkgили любым другим вспомогательным инструментом -поверх dpkg. Если вы совершаете коммит в самом скрипте package-history, то гранулярность коммита будет соответствовать выполнению dpkg; если вы полагаетесь на etckeeper, это будет соответствовать действиям, связанным с etckeeper.

Для обработки фиксации в скрипте добавьте

if [ "$(git status --porcelain | wc -l)" -gt 0 ]; then
    git add *
    git commit -m 'Update package information'
fi

в конец скрипта выше; затем вы должны запустить его один раз вручную от имени пользователя root, чтобы инициализировать историю git (послеmkdir /etc/packages; git init /etc/packages).

10
18.03.2021, 23:21

Теги

Похожие вопросы