Réinstallez tous les paquets Debian qui impliquent /usr
Exécutez cette commande pour dire apt
de réinstaller chaque paquet qui place des fichiers dans /usr
:
dpkg-query -S '/usr/' |
sed 's/: .*$//' |
tr -d ',' |
xargs apt install -y --reinstall
Avertissement: La réinstallation se produit sans invite de confirmation.
Si vous recevez un message comme
Package PACKAGE-NAME is not available, but is referred to by another package.
où PACKAGE-NAME
est un paquet impossible à obtenir, vous pouvez exclure le paquet pour la réinstallation de la manière suivante:
dpkg-query -S '/usr/' |
sed 's/: .*$//' |
tr -d ',' |
tr ' ' '\n' |
grep -v 'PACKAGE-NAME' |
xargs apt install -y --reinstall
Vous pouvez chaîner autant de grep -v
commandes que nécessaire.
Explication
Il est possible que le système Ubuntu que vous avez comparé ne possède pas les mêmes packages, ce qui signifie qu'il pourrait y avoir plus de fichiers avec les mauvaises autorisations /usr
.
En apt
réinstallant les packages, vous pouvez être sûr que tous les fichiers /usr
installés par le système d’exploitation disposent des autorisations voulues.
Réinstaller tous les paquets pip
Cette section suppose que vous avez installé les packages Python avec en pip
tant que root.
Exécutez cette commande pour réinstaller tous les packages pip:
sudo pip freeze --local | xargs sudo pip install --upgrade --force-reinstall
Exécutez cette commande pour supprimer les fichiers de bytecode Python:
sudo find /usr/ -name '*.pyc' -delete
Explication
Étant donné que votre problème concerne Python, je suppose que vous avez peut-être installé des packages Python à l’échelle du système dans des chemins tels que /usr/local/lib/python2.7/dist-packages
et /usr/local/lib/python3/dist-packages
.
Lorsque l'interpréteur Python s'exécute, il crée également des fichiers de code intermédiaire ( *.pyc
), dont les autorisations ont peut-être également été affectées lorsque vous avez gâché de manière récursive les /usr
autorisations de votre dossier. La suppression des .pyc
fichiers garantit que Python les régénérera à la prochaine exécution de vos scripts.
Réinstaller tous les paquets Debian
Si réinstaller uniquement les paquets impliquant un répertoire ne résout pas votre problème, il existe une option plus extrême.
Exécutez cette commande pour dire apt
de réinstaller chaque paquet sur le système:
dpkg --get-selections |
awk '{if($2=="install"){print $1}}' |
xargs sudo apt install -y --reinstall
Avertissement: La réinstallation se produit sans invite de confirmation.
Explication
Peut-être que quelque chose en dehors de votre /usr
dossier a éclaté.
C'est ce que j'ai découvert le 07 février 2018 lorsque j'ai découvert qu'un hyperviseur Debian 8 (Jessie) de production s'était écrasé. Le nœud n'est pas entré en ligne après un redémarrage.
Lorsque j'ai chargé une image de secours Ubuntu, je ne pouvais même pas chroot
entrer dans l'hyperviseur endommagé, car /bin/bash
une erreur de segmentation (un peu comme votre script Python annulé) m'a été donnée. En fait, la plupart des fichiers système étaient en quelque sorte corrompus.
Il y avait une machine virtuelle de production sur cet hyperviseur qui nécessiterait beaucoup d'efforts pour être redéployé ailleurs à cause de l'état défaillant de l'hyperviseur. J'ai donc pensé à essayer une réparation.
J'ai copié de bons fichiers binaires et de bibliothèque connus de Debian 8 dans la machine jusqu'à ce que je sois capable de les chroot
exécuter apt
et de les exécuter dpkg
. À partir de là, je pourrais vous demander apt
de réinstaller tout le système.
Après avoir traité quelques bizarreries de paquet, chaque paquet a réussi à être réinstallé. Une fois que j'ai redémarré, le serveur est revenu comme s'il n'avait jamais été corrompu.
J'ai dû redéployer les packages Python du serveur séparément car ils étaient également étrangement corrompus, mais au moins la machine virtuelle de production n'a pas été endommagée.
Il est possible de réparer un système gravement endommagé en réinstallant ce que vous pouvez. Pour l’avenir, il est recommandé de rendre les versions de votre serveur aussi reproductibles que possible, afin que, si vous rencontrez des problèmes d’ accident dans votre logiciel , vous puissiez facilement réorganiser le système avec un minimum d’effort.
/usr
, vous risquez de manquer un fichier avec des autorisations incorrectes rendant votre système vulnérable.