Как `apt remove` узнает, какие файлы следует удалить?

Я только что создал небольшой пакет DEB, просто чтобы посмотреть, как он работает. Моя файловая структура была следующей:

~/temp/myapp_1.0                                                                                                                   
▶ tree          
.
├── DEBIAN
│   ├── control
│   └── postinst
└── usr
    └── bin
        ├── myapp
        ├── myapp.deps.json
        ├── myapp.dll
        ├── myapp.pdb
        └── myapp.runtimeconfig.json

По сути, я создал приложение для сети Hello-World. Мой контрольный файл - это просто:

Package: myapp
Version: 1.0
Maintainer: marcin
Architecture: all
Description: demo

и мой postinst :

echo "echo (from postinst)"

Я создал DEB с помощью dpkg-deb --build myapp_1.0 и затем установил его с помощью sudo dpkg -i myapp_1.0.deb

Я вижу, что / usr / bin содержит все файлы моего приложения, как и ожидалось, и приложение работает при вызове с помощью myapp .

Затем я решил удалить его с помощью sudo apt remove myapp . Он удалил все файлы приложения из / usr / bin . У меня вопрос: как он узнал, какие файлы ему принадлежат? Я думал, что он удалит только двоичный файл / usr / bin / myapp , но он также избавился от myapp.dll и всего остального.

Всегда ли он случай, когда apt remove something удалит программу полностью (и apt purge something также удалит все конфигурации)? Откуда ему знать, где искать? Удалит ли он также файлы, которые мое приложение будет создавать во время выполнения?

0
задан 24 October 2020 в 14:50

2 ответа

После установки файла deb сделайте следующее:

dpkg -L <packagename>

Вы увидите, что в нем перечислено все содержимое вашего пакета. Это означает, что система знает, какие файлы были установлены пакетом, и поэтому знает, что нужно удалить.

Эта информация находится в следующем месте:

/var/lib/dpkg/info

Для каждого пакета существует файл с именем packagename.list, содержащий точно такие же информация как вывод dpkg -L ранее.

1
ответ дан 4 January 2021 в 08:18

« Как узнать, какие файлы удалить? » - это точно такой же вопрос, как « Как узнать, какие файлы установить? » Вы указали apt / dpkg эту информацию в структуре пакета.

Файлы, созданные во время выполнения, должны быть удалены сценарием prerm, чтобы соответствовать стандарту Debian idempotence : apt install foo , за которым следует apt remove foo должен вернуть вашу систему в состояние перед установкой.

Два исключения:

  1. Файлы в / etc удаляются с помощью "очистки", а не "remove".
  2. Файлы в / home никогда не удаляются с помощью apt / dpkg . Они принадлежат пользователям.

Apt / dpkg не имеет настройки для удаления только двоичного файла и оставления других (не / etc) файлов на месте. Если другие пакеты зависят от библиотеки, упакуйте эту библиотеку отдельно.

3
ответ дан 4 January 2021 в 08:18

Другие вопросы по тегам:

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