Как сделать восстановиться после серьезной ошибки, которая нарушает работу yum

Если это просто между ELF и скриптом, вам может вообще не понадобиться файл . С bash :

IFS= LC_ALL=C read -rn4 -d '' x < file
case $x in
  ($'\x7fELF') echo ELF;;
  ("#!"*) echo script;;
  (*) echo other;;
esac

( -d '' (использовать символ NUL в качестве разделителя) - это обойти тот факт, что bash читать , иначе просто игнорирует байты NUL во входных данных).

См. Также:

1
11.09.2018, 10:27
1 ответ

Так как rpm не требует python (слава богу ), мы используем rpm, чтобы узнать полное имя каждого пакета, который либо содержит python в имени, либо требует базового пакета python.

# rpm -qa |grep -i python |sort
# rpm -q --whatrequires python |sort

Когда у вас есть полный список пакетов, вам нужно выяснить, откуда yum их загружает.

# grep -i '\[base\]' /etc/yum.repos.d/*

Это должно дать вам /etc/yum.repos.d/CentOS -Base.repo

Затем вам нужно посетить страницу списка зеркал в веб-браузере

# egrep 'mirrorlist.*=(os|updates)' /etc/yum.repos.d/CentOS-Base.repo

Должно быть 2 строки. Вам придется немного изменить их (в блокноте! )перед вставкой в ​​браузер:

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra

Конкретно нужно поменять релиз и арку, и удалить инфру.

Мой в конечном итоге выглядел так, когда я пошел вставлять его.

http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=updates
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os

Как только это было сделано, я смог wget все необходимые мне пакеты, объединив несколько команд выше вместе в 4 одного -скрипта лайнера:

# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -q --whatrequires python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -q --whatrequires python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -qa |grep -i python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -qa |grep -i python |sort))

Обратите внимание: если вы скопируете и вставите имена пакетов из приведенных выше команд rpm в текстовый файл вашего дистрибутива, это может быть сокращено до 2 строк. Например, если вы поместите имена пакетов в /tmp/packagedownload.txt, вы можете сделать следующее вместо приведенного выше:

# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done </tmp/packagedownload.txt
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done </tmp/packagedownload.txt

После того, как файлы rpm будут загружены с помощью wget, вы можете просто ввести приведенную ниже команду, чтобы исправить систему и заставить yum работать:

# rpm -ivh --force *.rpm

Затем вы можете исправить любые другие пакеты, которые все еще могут быть сломаны (надеюсь, ни один из них )путем ввода ниже:

# while read line; do xargs yum -y reinstall $line; done </tmp/packagedownload.txt
2
28.04.2021, 23:42

Теги

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