L’archive des dépôts Debian, pour les serveurs zombies
Ça fait pourtant des années que j’utilise Debian, mais pour être honnête j’ai toujours travaillé avec des versions supportées. Mais quand on débarque sur des serveurs non maintenus, genre un Debian 7 (Wheezy) ou pire, Debian 6 (Squeeze), s’il manque des outils ont est pas rendus parce que les dépôts ont disparus des écrans habituels. C’est ce qui m’est arrivé récemment, et voici comment je m’en suis sorti.
Au départ je voulais mettre ça dans une astuce diverse, et j’ai eu à faire beaucoup de bidouilles autour de versions non supportées de Debian et j’en ai ressorti suffisamment de choses pour que ça finisse dans un article à part.
Il s’avère que Debian conserve malgré tout une partie des dépôts de la distribution sur le site archive.debian.org. Très pratique, et on constate que ça remonte à super loin, pratiquement aux origines de la distribution, puisqu’on voit des fichiers datant de 1998.
Pour les utiliser, il suffit dès lors de modifier le fichier /etc/apt/sources.list :
1 2 3 |
#deb http://http.debian.net/debian wheezy main contrib non-free deb http://archive.debian.org//debian squeeze main contrib non-free deb http://archive.debian.org/debian-security/ squeeze/updates main non-free contrib |
Et on pense à virer tout le reste (pensez à vérifier le dossier sources.list.d). Je conseille plus que fortement de ne pas oublier le debian-security, car plusieurs paquets peuvent échouer en raison de dépendances non résolues (c’est le cas d’Apache par exemple, mais aussi de dépendances comme perl).
Les problématiques supplémentaires de Docker
C’est surtout cette partie qui m’a poussé à déporter le sujet. En effet, je n’avais pas eu le souci sur Debian Wheezy, mais sur Squeeze, les problèmes sont plus nombreux, sans parler du fait de devoir construire une image Docker en Squeeze. Déjà, il faut modifier le sources.list de l’image de base, je conseille de passer par un fichier préparé pour et une commande COPY. Ça, c’est simple.
Mais on attaque le dur, avec les signatures de paquets qui ont expiré. Rien que pour faire valider l’update des données repo, il faut ajouter une option :
1 |
RUN apt-get -o Acquire::Check-Valid-Until=false update |
On se retrouve alors face à des alertes de clés GPG elles aussi expirées. Dans un contexte docker en mode non-interactif, il faut ajouter une autre option lors du install pour passer outre l’alerte associée à ces clés (en mode interactif il nous demande confirmation d’installer des paquets non vérifiables) :
1 2 3 |
RUN apt-get -o Acquire::Check-Valid-Until=false update && \ DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Check-Valid-Until=false -y --force-yes --no-install-recommends install \ apache2 \ |
Plus spécifique à l’exécution d’Apache, sous Debian Squeeze le script d’init se charge de créer le dosser /var/run/apache2, pour y placer un fichier « mutex ». Or dans un container docker, on démarre le process directement en FOREGROUND, donc pas de dossier, il faudra penser à l’ajouter à un moment, dans mon cas, c’est dans le même run que le apt-get, à la fin :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
RUN apt-get -o Acquire::Check-Valid-Until=false update && \ DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Check-Valid-Until=false -y --force-yes --no-install-recommends install \ apache2 \ apache2-mpm-prefork \ libapache2-mod-php5 \ php5 \ (...) ca-certificates && \ apt-get clean && rm -r /var/lib/apt/lists/* && \ a2enmod ssl \ (...) setenvif && \ ln -sf /dev/stdout /var/log/apache2/access.log && \ ln -sf /dev/stderr /var/log/apache2/error.log && \ mkdir -p /var/run/apache2 |
Et oui, c’est se faire beaucoup de mal pour rien, mais quand vous avez une application à transférer d’un vieux serveur sur un cluster Kubernetes, et que le code ne peut pas être revu, ben vous cherchez des solutions. Et au moins une des parties de cet article reste valable pour toute machine, y compris hors Docker. C’est ce qu’on appelle le monde réel, celui où les mises à jour majeures de serveurs tous les trois ans ne sont pas une norme, mais une exception, parce que les priorités sont ailleurs.
petite erreur: Hors dans un container docker > Or dans un container docker
comme dans mais où est donc Or-ni-car et pas comme dans hors-la-loi
En effet, je devrais éviter les relectures tard le soir. Merci Maître Capello 😉
Bonjour, Ton article tombe très bien pour moi, j’ai justement besoin de faire un update sur une debian squeeze mais je n’y arrive pas (je ne suis pas un expert =/). J’ai modifié le fichier /etc/apt/sources.list : deb http://archive.debian.org//debian squeeze main contrib non-free deb http://archive.debian.org/debian-security/ squeeze/updates main non-free contrib et fait un : apt-get -o Acquire::Check-Valid-Until=false update J’ai les erreurs suivantes : Err http://archive.debian.org squeeze Release.gpg Could not resolve ‘archive.debian.org’ Err http://archive.debian.org//debian/ squeeze/contrib Translation-en Could not resolve ‘archive.debian.org’ Err http://archive.debian.org//debian/ squeeze/main Translation-en Could not resolve ‘archive.debian.org’ Err http://archive.debian.org//debian/ squeeze/non-free Translation-en Could not resolve ‘archive.debian.org’ Err http://archive.debian.org squeeze/updates Release.gpg Could not… Lire la suite »
Le message est clair : il n’arrive pas à trouver le nom de domaine. Il faut vérifier que l’adresse IP définie dans le fichier /etc/resolv.conf est joignable et qu’il y a bien un serveur DNS dessus (ça se teste facilement avec un < dig archive.debian.org A @ip_resolv_conf +all > )
Si c’est pas le cas, soit faut changer d’adresse de résolveur (je te laisse chercher un résolveur public propre, comme ceux d’FDN par exemple), soit le problème est plus grave, réseau, et il faut vérifier si tu bloques pas quelque chose sans le faire exprès.
Merci, c’était bien ça 🙂
Bonjour et merci beaucoup pour ce post partagé. Votre dernière phrase est touchante de vérité.
Juste avec la première partie de votre article j’ai mis à jour un serveur Wheezy UP depuis 1380 jours qui me refusait l’installation des fonctionnalités demandées par mes clients.
Bravo et merci encore pour votre acharnement.