Почему использование `dpkg -x` убило мою систему 19.04?

Я только что убил свою систему 19.04.

Я работал под управлением sudo apt-get upgrade и хотел установить пакет atop для мониторинга без прерывания процесса обновления.

Поэтому я решил загрузить пакет и распаковать его в файловую систему с помощью dpkg -x с помощью приведенных ниже команд ( не пробуйте их в реальной системе 19.xx !):

apt download atop
sudo dpkg -x atop_..._amd64.deb /

и тогда я не могу использовать все команды, включая sudo и apt.

Это была виртуальная машина, поэтому у меня есть снимок. Сообщено об ошибке 1843476 в LaunchPad о 19.04 и 19.10.

Но что не так с моим методом?

Я использовал его раньше в Ubuntu 16.04 LTS и 18.04 LTS без проблем.
Конечно, после запуска dpkg -x я использовал sudo apt install для обычной установки пакета, чтобы он был указан в /var/lib/dpkg/status.

2
задан 10 September 2019 в 21:58

1 ответ

В недавно установленной системе /lib символьная ссылка на /usr/lib:

$ ls -l /lib
lrwxrwxrwx 1 root root 7 Apr 30 02:24 /lib -> usr/lib

Но dpkg -x перезаписал /lib символьная ссылка с новым содержанием.

В уничтоженной системе это теперь содержит только одну папку (от atop содержание пакета):

/lib/systemd/system-sleep/atop-pm
/lib/systemd/system/atop.service
/lib/systemd/system/atopacct.service

Таким образом, система не может найти библиотеки.

Я решил эту проблему путем начальной загрузки LiveCD, монтирования проблематичной системы и воссоздания символьной ссылки:

cd /media/user/problematic-disk/
sudo mv lib/* usr/lib
sudo rmdir lib
sudo ln -s usr/lib lib

и наконец переустановите пакет с sudo apt install --reinstall atop.


Примечания:
1. LTS Ubuntu 16.04 и 18.04 LTS не затронуты из-за того, что у них нет символьных ссылок на / уровень (кроме ядра и initrd).
2. dpkg -x метод должен использоваться очень тщательно (в качестве последнего шанса починить вещи) и не использоваться вообще на 19,04 и более новые версии из-за многих символьных ссылок на верхнем уровне (bin -> usr/bin, lib -> usr/lib, lib32 -> usr/lib32, lib64 -> usr/lib64, libx32 -> usr/libx32, sbin -> usr/sbin).

2
ответ дан 2 December 2019 в 03:26

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

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