Перевстановлення всіх пакетів Debian


19

Я помилково вбив процес dpkg, який працює у фоновому режимі, і я хотів би перевстановити всі пакунки, щоб бути впевненим, що все гаразд.

По-перше, я спробував отримати список усіх пакетів і перевстановити їх

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)

Але є такі повідомлення, як:

E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.

Я намагався apt-get -f install, без успіху.

В крайньому випадку я перевстановив усі програми, які не виконали контрольні суми:

dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a

Що мені робити, щоб все перевстановити?

Редагувати: проблема вирішена. Питання було в чомусь іншому (див. Коментарі). Я розумію, що з Debian потрібно уникати чогось.


1
Нещодавно у мене стався збій під час спроби встановити пакет. Коли я перезавантажився і спробував перевстановити цей пакет, я отримав повідомлення: "E: dpkg був перерваний, для усунення проблеми потрібно вручну запустити 'dpkg --configure -a'." Запустивши цю команду, видалено згаданий пакет та файли конфігурації. Тоді я зміг встановити пакет з нуля. Спробуйте дати цій команді піти.
embedded.kyle

Це нічого не зробило, тому я думаю, що нічого не порушено. Пізніше спробую перевірити, чи вирішені проблеми з драйверами.
alex_reader

1
Перевстановлення всіх пакетів == дійсно погана ідея. (а) Це майже завжди непотрібно; б) воно, ймовірно, вийде з ладу (в) Якщо ваша система дійсно так сильно заплутана, просто перевстановіть її. Просто виправте проблеми, які ви насправді бачите.
Faheem Mitha

Відповіді:


9

Спробуйте це, пам’ятаючи, що я цього не тестував:

dpkg --get-selections > selections
sudo dpkg --clear-selections
sudo dpkg --set-selections < selections
sudo apt-get --reinstall dselect-upgrade

Джерела:


Моя проблема була зовсім іншою: я не завантажував правильне ядро ​​(!). Я прийму вашу відповідь, як здається, роблю те, що хотів (але також не перевірений).
alex_reader

Це не спрацює і повністю порушить систему. Рядок 3 видалить підходящий, тому після цього все неможливо буде знову встановити.
rkjnsn

@rkjnsn: я оновив відповідь, перевірте, чи працює вона.
Марко Сулла

1
Намагаючись зробити це, нічого не перевстановлюється, хоча файл вибору заповнений: pi @ prodpi ~ $ sudo apt-get - встановити dselect-upgrade Читання списків пакунків ... Готово дерево залежності залежності Читання інформації про стан ... Готово 0 оновлено , 0 нещодавно встановлених, 0 для видалення та 0 не оновлених. будь-яка ідея?
andig

Я вважаю, що ваш код не працює, тому що dpkg --get-selectionsсписок команд також видаляє пакунки.
Ортомала Локні

2

На всякий випадок спробуйте перевстановити кожен пакет :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done

Ви можете додати відповідь "Так" на всі питання також.


cat: list.log: Немає такого файлу чи каталогу
IgorGanapolsky

2
@IgorGanapolsky Виконати dpkg --get-selections > list.logпершим.
QwertyChouskie

2
list.logвзято з питання.
Стівен Кітт

2

В одному з ресурсів, цитованим Лукасом Малором, я знайшов сценарій під назвою "Популятор", який, здається, знаходиться поблизу рішення. Якщо ви встановите змінну вибору пакетів у список усіх ваших пакетів

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

Ви можете запустити скрипт та перевстановити всі пакунки, але система, ймовірно, матиме деякі проблеми. Краще спершу протестувати його у віртуальній машині.

Ось варіант сценарію за посиланням вище:

#!/bin/bash
#
# Script to pre-populate apt-get proxy for faster later downloads.
# It uses apt-get and wget to pull all the specified packages.
#

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "You're not root, are you?" 1>&2
   exit 1
fi

# Specify wanted packages
PKGLIST="exaile" 

# Clears out the local repository of retrieved package files
apt-get clean

# Resynchronize the package index files from their sources
apt-get update

# Re-install specified packages at the newest version. 
apt-get install --reinstall $PKGLIST

Якщо виявляється помилка, що певні пакети неможливо перевстановити, запустіть цю команду, щоб спробувати ще раз:

sudo apt-get -y autoremove

1

Спробуйте це замість цього, оскільки це займе ваш вихід і зробить його однією гігантською лінією з пробілами, що розділяють назви файлів.

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log awk '$1=$1' ORS=' ' list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

Єдина зміна вашої оригінальної публікації - це додавання до другого твердження awk, яке, ймовірно, може бути зроблено в порядку з першим, щоб створити потрібний файл.

Ця зміна змусить apt-get правильно перезавантажити пакунки та будь-які пропущені залежності, які не були встановлені вперше, та перевстановити їх у порядку.

Якщо ми зробимо це вбудованим, я вважаю, що це виглядатиме так:

dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log

А потім переконайтеся, що ви дійсно переконайтеся, що система має правильні пакети (або новіші), очистіть підходящий кеш, оновіть його та повторно завантажте всі файли (можна пропустити перші два кроки, якщо ви хочете лише те, що у вас є в кеші перевстановлено):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

У мене було оновлено більше 2-х пакунків у оновленій системі, яка мала завис. Використання dpkg --configure - закінчив установку (вона була на завершальній фазі). Потім я запустив це, щоб все перевстановити правильно.

Або як зазначено на /superuser/298912/reinstall-debian- while-keeping-installed-packages- and-data :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)

Просто переконайтеся, що ви запустили спочатку "init 2" перед будь-якою перевстановленням, оскільки деякі компоненти X або ваш улюблений менеджер вікон можуть не сподобатись повторно встановити.


Якщо ви не модифікували IFS, котирування не $(cat file)котирується на будь-який пробіл і дає точно такий же результат, чи файл обмежений новими рядками або пробілами. --reinstallМожливо, допоможе, але вже було двічі перед цим.
dave_thompson_085

1

Під час використання Aptitude є простий і швидкий спосіб зробити це:

sudo aptitude reinstall '~i'

який переустановить усі встановлені пакети.


-1

Під час використання RPM, якщо ви спричинили пошкодження в базі даних пакетів, є можливість відновити цю базу даних, тим самим запобігаючи необхідності пройти перевстановлення. Як один із користувачів тут вказав, це робиться в Debian dpkg --configure -a.


1
Роль dpkg --configure -a- налаштувати всі розпаковані та неконфігуровані пакети. Див штучні сторінки dpkgі , dpkg-reconfigureа також debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.