![Где Debian хранит список установленных пакетов?](https://rvso.com/image/192238/%D0%93%D0%B4%D0%B5%20Debian%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2%3F.png)
Мне нужно найти список пакетов, которые были установлены на сервере Debian (Armbian) до того, как он умер. Поскольку он находится в автономном режиме, я не могу использовать apt
or dpkg
(или любую другую команду). Мне нужно знатькакой файл(ы)содержат список (даже если они двоичные). Я пробовал искать, но все просто говорит о необходимости выполнить вышеупомянутые команды, что не является вариантом.
решение1
Как аппроксимировать `dpkg --get-selections` из резервной копии /etc и /var?решает вашу основную проблему.
Список установленных пакетов хранится в /var/lib/dpkg/status
. Ищите Status: install ok installed
строки — это говорит о том, что пакет установлен правильно.
Следующий вызов AWK извлечет имена установленных пакетов из status
файла:
awk '/^Package:/ { package = $2 }
/^Status: install ok installed/ { print package }' /path/to/status
Если система поддерживает несколько архитектур, вам также необходимо это отслеживать:
awk '/^Package:/ { p = $2; i = 0 }
/^Status: install ok installed/ { i = 1 }
i && /^Architecture: all/ { print p; next }
i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status
Еще один интересный файл, /var/lib/apt/extended_states
который записывает флаг «автоматической установки» для установленных пакетов. Вы можете восстановить флаги, запустив что-то вроде
awk '/^Package:/ { p = $2 }
/^Architecture/ { a = $2 }
/^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto
Вы можете объединить оба файла, чтобы получить список пакетов, которые были установлены вручную, и положиться на управление зависимостями для установки автоматически установленных пакетов (хотя это не обязательно приведет к установке того же набора пакетов):
awk 'FNR == NR && /^Package:/ { p = $2 }
/^Status: install ok installed/ { i = 1 }
FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
FNR != NR && /^Package:/ { p = $2 }
FNR != NR && /^Architecture:/ { a = $2 }
/^Auto-Installed: 1/ { delete ps[p ":" a] }
END { for (p in ps) print p }' /path/to/status /path/to/extended_states
См. раздел «ФАЙЛЫ» вman dpkg
:
/var/lib/dpkg/статус
Статусы доступных пакетов. Этот файл содержит информацию о том, отмечен ли пакет для удаления или нет, установлен ли он или нет и т. д.