Como o rpm não requer python (thank god), usamos o rpm para descobrir o nome completo de cada pacote que tenha python no nome ou que exija o pacote python básico.
# rpm -qa |grep -i python |sort
# rpm -q --whatrequires python |sort
Uma vez que você tenha a lista completa de pacotes, você precisa descobrir de onde eles são baixados.
# grep -i '\[base\]' /etc/yum.repos.d/*
Isso deve dar a você /etc/yum.repos.d/CentOS-Base.repo
Depois, você precisa visitar a página da lista de espelhos com seu navegador da Web
# egrep 'mirrorlist.*=(os|updates)' /etc/yum.repos.d/CentOS-Base.repo
Deve haver 2 linhas. Você terá que fazer um pouco de modificação para eles (em um bloco de notas!) Antes de colá-lo no navegador:
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
Especificamente, você precisa alterar o release e o arco e excluir o infra.
O meu acabou ficando assim quando eu fui colá-lo.
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=updates
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os
Uma vez feito isso, eu pude acessar todos os pacotes que eu precisava combinando vários dos comandos acima juntos em 4 scripts de uma linha:
# 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))
Note que, se você copiar e colar os nomes dos pacotes dos comandos rpm acima em um arquivo de texto em sua distribuição, isso pode ser reduzido a duas linhas. Por exemplo, se você colocar os nomes dos pacotes em /tmp/packagedownload.txt, poderá fazer o seguinte, em vez do acima:
# 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
Uma vez que os arquivos rpm são baixados com wget, você pode simplesmente emitir o comando abaixo para consertar o sistema e obter o yum funcionando:
# rpm -ivh --force *.rpm
Então você pode consertar qualquer outro pacote que ainda possa estar quebrado (esperamos que nenhum seja), emitindo o seguinte:
# while read line; do xargs yum -y reinstall $line; done </tmp/packagedownload.txt