Quelle est la meilleure pratique pour maintenir à jour un serveur Linux Ubuntu (build packages, dist-upgrade, alt repos…)

8

Nous utilisons un serveur de production basé sur Ubuntu 9.10 Karmic Koala , le noyau est presque à jour (2.6.38.2-grsec-xxxx-grs-ipv6-64) mais le référentiel de packages karmic est maintenant ridiculement dépassé, par exemple. Nginx est 0.7.62 - vraiment buggé - tandis que la dernière version stable est 1.0.x !!

De plus, Karmic vient d'atteindre sa fin de vie.

Cette question: Meilleures pratiques pour maintenir à jour les packages UNIX? semble similaire mais ne comprend en fait que quelques suggestions sur les gestionnaires de packages; pas du tout ce dont j'ai besoin!

donc les options que je vois sont:

  1. obtenir une nouvelle machine, l'installer à partir de zéro, migrer
  2. mise à niveau de la distribution
  3. utiliser un référentiel différent ( launchpad / ppa / backport / pinning )
  4. construit le tien

Les inconvénients de 1. sont assez évidents.

Je n'ose pas faire un chemin de mise à niveau dist, car les temps d'arrêt et les conséquences catastrophiques possibles sont tout simplement impossibles à prévoir pour un serveur de production, et actuellement, je reconstruis principalement mes propres packages requis. Mais je suis sûr que j'en manquerai peut-être.

Il n'est pas vraiment clair pour moi quels sont les risques (stabilité / compatibilité) de l'utilisation des backports ubuntu, en plus rien n'est officiellement prévu pour 9.10. Launchpad sont des builds individuels, question similaire - comment est-ce mieux que de compiler le vôtre

La construction de packages semble correcte, mais: 1. j'ai parfois du mal à reproduire les options ./configure correctes afin de réutiliser mes fichiers de configuration existants 1. Je suis sûr qu'il y a des tonnes de packages et de dépendances qui sont maintenant assez obsolètes et source possible de bugs

Enfin ... qu'en est-il des "anciens" packages dans une distribution récente? Je suppose qu'il n'y a pas d'autre moyen que de les reconstruire moi-même? Une combinaison de 2. et 4. est-elle finalement le meilleur chemin?

Y a-t-il un consensus objectif sur la meilleure façon de procéder ou sur les raisons pour lesquelles certaines de mes options sont bonnes / pas bonnes?

Si vraiment il n'y en a pas, j'accepterai que la question soit close avant de créer un fil sans fin!

Stefano
la source
1
C'est pour des raisons que vous rencontrez actuellement que seules les versions LTS doivent être utilisées pour les serveurs. En réponse à votre question, jusqu'à ce que vous puissiez faire # 1 ou # 2, vous serez coincé avec # 4. Je peux voir # 3 commencer à échouer souvent à mesure que le temps passe car les dépendances ne sont pas disponibles.
daemonofchaos
en effet @KayakJim, bien que nous aurions dû le comprendre à l'époque - mais lorsque la charge du serveur était faible, cela aurait été acceptable, nous ne pensions pas assez loin. leçon apprise (si tout va bien).
Stefano

Réponses:

4

Le maintien de votre propre distribution représente beaucoup de travail. Même si vous maintenez les rétroportages, vous serez bientôt submergé par des problèmes de sécurité à corriger et devrez tirer des bibliothèques de bas niveau pour continuer à mettre à jour votre logiciel, ce qui pourrait casser d'autres choses (je maintiens des serveurs exécutant des distributions de 6 ans, c'est pas drôle).

La mise à niveau est généralement une bonne solution. do-release-upgradeest bien fait, et vous devriez pouvoir mettre à jour sans problème (surtout si vous n'utilisez que des packages officiels).

Ma solution préférée pourrait être le chemin de réinstallation. Plus précisément, vos serveurs doivent être gérés à l'aide d'un système de gestion de configuration tel que Puppet, Cfengine ou Chef. Si tous vos besoins de configuration / package sont spécifiés à l'aide d'un tel outil et que vos données sont en sécurité sur une partition distincte, il est beaucoup plus facile de réinstaller rapidement. Vous venez d'installer une nouvelle distribution sans effacer les partitions de données, puis exécutez l'outil de gestion de configuration pour réinitialiser vos packages / configurations. Je pense que c'est la façon la plus propre de le faire, surtout si vous avez plusieurs serveurs à gérer.

Si vous utilisez des packages non officiels, vous souhaiterez peut-être les identifier avant de mettre à niveau / réinstaller. maintenance-check peut vous aider à identifier les paquets qui ne sont pas officiellement maintenus par Ubuntu:

$ bzr branch lp:ubuntu-maintenance-check
$ cd ubuntu-maintenance-check
$ ./maintenance-check -f n

Si vous souhaitez réinstaller, vous pouvez également exporter la liste des packages installés:

$ dpkg --get-selections > myinstall.txt

et votre base de données debconf:

$ debconf-get-selections > debconf.txt # from the debconf-utils package

Remarque: étant donné que vous utilisez actuellement Karmic, la mise à niveau vers Lucid, qui est une version LTS, ne sera peut-être pas trop violente et sera toujours prise en charge jusqu'en 2015 pour les packages de serveurs principaux. Cela devrait vous laisser suffisamment de temps pour configurer une installation automatisée viable pour l'avenir.

Lorsque vous posez des questions sur les packages Launchpad, je suppose que vous parlez des PPA. Il existe des tonnes d'APP différents. Certains sont expérimentaux, certains sont stables. Certains sont gérés par des développeurs officiels d'Ubuntu, d'autres sont maintenus par des gens qui savent à peine comment faire un paquet correctement. Il est difficile de dire en général que si les packages que vous trouvez sur les PPA sont bons, il n'y a pas de règle générale. Le meilleur indice dans ce cas serait peut-être aussi de regarder le propriétaire des AAE pour se faire une idée de la qualité possible de leurs colis.

ℝaphink
la source
bien sûr nous n'avons pas pensé à marionnettes & co. à l'époque. Mais en effet, vous dites très bien que, si nous empruntons le chemin de la réinstallation, il est préférable de préparer correctement une installation facile à répliquer. PS. "surtout si vous n'utilisiez que des packages officiels" bien sûr que non, malheureusement!
Stefano
Ensuite, la première étape que vous voudrez peut-être prendre consiste à identifier les packages non officiels. maintenance-checkpeut vous aider avec cela (voir ma modification).
ℝaphink
Réponse sélectionnée pour les conseils supplémentaires, y compris l'utilisation des systèmes de gestion de la conf et de la vérification de la maintenance, et des PPA Je viens de réaliser cependant, après avoir examiné les derniers dépôts, que les packages ne sont pas toujours à jour, par exemple. même dans la version 11.04, nginx est VIEUX (0.8.54-4) et ils ne passeront jamais à 1.0.x dans cette distribution. Un conseil pour ces situations?
Stefano
1
@Stefano: Ubuntu utilise le même type de politique que Debian, à savoir que les logiciels ne sont pas mis à niveau dans les référentiels principaux après leur publication (après le gel des fonctionnalités pour être précis). Cela peut en effet conduire à d'anciennes versions du logiciel dans une version toujours maintenue (surtout si le logiciel sort rapidement). Vous pouvez utiliser les rétroportages pour obtenir de nouvelles versions, mais vous perdrez probablement en stabilité et en mises à jour de sécurité. Il n'y a pas de solution parfaite pour cela, sauf si vous êtes prêt à maintenir vos propres rétroportages, ce qui, comme je l'ai déjà dit, est assez coûteux.
ℝaphink
2

Si le serveur n'est pas exposé au monde et que vous faites entièrement confiance à vos utilisateurs (généralement ce n'est pas une bonne idée), alors si cela fonctionne, vous pouvez simplement le laisser.

S'il est en aucune façon exposé au monde extérieur et / ou si vous envisagez l'idée qu'un utilisateur légitime joue avec lui de manière illégitime, vous avez absolument besoin de correctifs et de correctifs pour votre logiciel installé.

Dans ce cas, vous avez deux options:

  1. Exécutez une distribution prise en charge et obtenez des mises à jour de votre logiciel, ou

  2. Rétroportez tous les correctifs à votre distribution non prise en charge, ce qui, à vrai dire, ne semble pas réalisable.

Je ne suis pas un utilisateur d'Ubuntu, donc je ne peux pas commenter l'exhaustivité des correctifs que vous obtiendriez grâce à votre option 3, mais si vous avez un doute, je suppose que vous n'aurez pas une couverture complète.

La meilleure solution est de passer à une version LTS d'Ubuntu, qui vous fournira un support pour les versions de package données pour un certain temps à venir. Avec le temps, certains packages seront obsolètes, mais votre environnement aura des correctifs de sécurité et sera stable (pas de sauts de version de package). D'après mon expérience, la stabilité d'un environnement de travail connu est généralement plus précieuse que les nouvelles fonctionnalités.

Il semble que votre position actuelle ne soit pas maintenable et vous devez vous déplacer. Le seul moyen sûr est d'obtenir une deuxième machine (ou une machine virtuelle) et de tester les migrations jusqu'à ce que vous ayez une procédure réussie reproductible, puis de l'appliquer à la machine de production. Si vous utilisez vos sauvegardes pour effectuer des migrations de test, vous aurez également une bonne occasion de tester vos procédures de sauvegarde.

Paweł Brodacki
la source
merci @ Pawel-Brodacki. Le serveur est définitivement exposé! Je comprends votre point sur la stabilité par rapport aux fonctionnalités. Le problème est que, souvent, la stabilité s'accompagne d'étapes de version majeures. Par exemple. La série nginx 1.0. * est plus stable que la série 0.8 incluse même dans la dernière version de natty. Une suggestion à ce sujet?
Stefano
1
S'il est actuellement assez bon, alors la règle "s'il n'est pas cassé, ne le répare pas" s'applique. Après cela, c'est le calcul de l'entreprise: la stabilité ajoutée vous fera économiser plus qu'elle ne vous coûtera pour maintenir vous-même un ensemble de packages. Si c'est juste nginx, ou nginx et une poignée de bibliothèques, alors compiler par vous-même, tester et déployer est quelque chose qui peut être fait. Dans ce cas, cependant, il serait prudent de suivre de près le développement des packages pour fermer rapidement tous les bogues découverts.
Paweł Brodacki
2

La seule véritable voie à suivre est une mise à niveau de la distribution. Je peux comprendre que vous soyez nerveux à ce sujet, car vous allez maintenant sauter plusieurs versions à venir (11.04 vient de sortir).

Je recommanderais de faire un clone des lecteurs de cette machine, puis d'utiliser un ordinateur distinct pour exécuter les clones, et de l'utiliser pour effectuer une série de mises à niveau de test. Prenez note de tous les problèmes rencontrés et répétez jusqu'à ce que vous ayez une procédure claire pour chacun d'eux. Ensuite, appliquez cela à votre serveur en direct.

Si vous ne pouvez vous permettre aucun temps d'arrêt, la migration est votre seule issue. Oubliez l'épinglage et les rétroportages, qui ne vous maintiendront en vie que pendant une période de temps limitée. Et l'option «rouler soi-même» ne vaut même pas la peine d'être envisagée. Juste la valeur de mes deux sous.

Wolfgangsz
la source