Je suis curieux de savoir comment les gens déploient les ports de FreeBSD dans leur environnement. Je suppose que la plupart des gens utilisant FreeBSD utilisent en effet des ports (et souvent une mise à niveau de port pour la mise à niveau avec des binaires). Je suis cependant intéressé par la façon dont vous avez cette configuration, car je ne suis pas satisfait du fonctionnement des versions récentes. J'utilise maintenant FreeBSD 9.0 et j'ai des problèmes.
J'ai configuré les choses comme suit:
- / usr / ports est partagé via NFS à partir d'un nœud (avec une mise à jour nocturne de la récupération des ports).
- Chaque nœud monte / usr / ports avec lecture-écriture
- J'ai défini "WRKDIRPREFIX = / usr / tmp" dans /etc/make.conf sur tous les nœuds
- J'ai configuré le Portsnap pour utiliser un index local en ajoutant ce qui suit à /usr/local/etc/pkgtools.conf:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Je peux exécuter avec succès portupgrade -p package
pour construire un package puis portupgrade -P package
installer le binaire sur les autres nœuds.
Pourtant, je reçois parfois le problème suivant: /var/db/INDEX.local:23265:dbm_store failed
Je ne peux penser à aucune autre optimisation que je puisse faire au système, car l'index réside maintenant localement, et la seule chose vraiment exportée est l'arborescence des ports et rien n'y est jamais écrit depuis les nœuds.
Réponses:
Je n'ai jamais été entièrement satisfait du système de ports dans un grand environnement - Il semble toujours que vous devez lui appliquer une gestion externe afin de le faire fonctionner correctement.
Mes meilleurs conseils (par ordre croissant de préférence, de la «pire» solution à la «meilleure» solution):
Si vous construisez sur chaque hôte, ne le faites pas .
Si vous devez le faire, ne le faites pas sur NFS avec des montages en lecture-écriture comme vous le décrivez: vous pouvez généralement faire confiance aux ports pour faire la bonne chose et ne pas piétiner l'arborescence des ports si vous fournissez des répertoires de travail alternatifs, mais il est toujours préférable de soyez prudent que désolé: exécutez un miroir CVS / csup local et csup tous vos hôtes à partir de cette boîte, puis construisez localement comme vous le feriez s'il s'agissait de machines individuelles.
Oui, je sais que cela signifie avoir plus d'espace disque sur les hôtes et une étape supplémentaire. Il est également presque garanti d'être sans problème.
Caveat: Vous souhaiterez probablement synchroniser les fichiers de configuration du package (rsync ou similaire) à partir d'un "hôte de configuration" désigné pour garantir la cohérence sur chaque machine (vous pouvez même rsync toute l'arborescence des ports si vous le souhaitez, plutôt que d'utiliser csup sur chaque nœud).
Utilisez un hôte de génération, créez des packages et installez-les.
Une bien meilleure solution que de construire sur chaque machine individuelle: utilisez un hôte de build pour créer des packages et pointez vos outils vers ces packages.
Cela signifie garder un hôte de construction pour chaque architecture que vous exécutez (ou compilation croisée), mais c'est finalement plus agréable pour vos machines cibles (pas de gros travaux de compilation, une garantie de cohérence)
Utilisez un outil de gestion de configuration / système.
C'est la solution avec laquelle je me suis retrouvé - je crée une image de serveur standard et la déploie autour de mon environnement à l'aide
radmind
. Vous pouvez faire des choses similaires avec Puppet ou Chef . Cela présente tous les avantages de l'utilisation d'un hôte de génération (cohérence, moins de charge sur les serveurs individuels) et ajoute l'avantage de la gestion de la configuration.Avertissement: cela ne fonctionne vraiment bien que si vos machines sont «identiques» - c'est-à-dire que vous pouvez installer le même ensemble de ports sur chacun d'eux. Cela peut fonctionner si vous avez différents ensembles de ports, mais cela augmente considérablement les frais administratifs.
Avertissement: je suis le responsable du port pour
sysutils/radmind
. Ouais, je l'aime tellement que je l'ai adopté.Tout cela est basé sur mon expérience dans la gestion d'environnements FreeBSD de différentes tailles (allant de 1 à 2 machines à plus de 100). Les outils de configuration / gestion du système qui poussent et maintiennent une image standardisée sont vraiment le meilleur moyen de gérer cela selon mon expérience.
la source
Étrange que personne n'ait mentionné ports-mgmt / tinderbox :
Le passage à pkgng simplifie également considérablement les déploiements de packages.
Découvrez-le sur github: https://github.com/pkgng/pkgng
la source
PACKAGEROOT
/PACKAGESITE
et utiliser radmind ou Puppet / Chef).pkg_delete
doit être exécuté en premier, puis installer la nouvelle version. OpenBSD a mieux géré cela en incluant une option de mise à niveau danspkg_add
. Pas sûr de Portupgrade mais portmaster peut fonctionner simplement en utilisant INDEX et non une arborescence complète de ports.J'ai géré plus de 100 serveurs FreeBSD en partageant simplement / usr en lecture seule sur NFS bien réglé, en déplaçant les bases de données de paquets de / var vers / usr et en y associant des liens symboliques (pas strictement nécessaire mais permettant pkg_info et autres). Il y avait peut-être un ou deux autres fichiers qui devaient être déplacés dans une direction ou dans l'autre et liés par un lien symbolique, mais la configuration entière m'a pris environ une heure pour comprendre. Cela a très bien fonctionné. Si j'avais rencontré des problèmes de mise à l'échelle, j'aurais ajouté des serveurs NFS supplémentaires et divisé la charge de travail, mais cela ne s'est jamais produit. Les performances n'ont jamais été un problème pour moi (en fait, c'était génial) mais je suppose que vous pouvez mettre / usr du serveur NFS (ou une copie de celui-ci) sur un md.
la source
Il semble que personne n'ait malheureusement trouvé de bonne solution. Cela est probablement dû aux limitations des outils de sous-jacents.
Voici ce que j'ai trouvé: j'ai abandonné l'idée d'exporter la totalité de l'arborescence des ports. Au lieu de cela, j'ai cédé et mis une arborescence complète de ports sur chaque nœud. J'ai ensuite monté des «packages» sur NFS (pour permettre la distribution des packages).
J'ai également l'intention d'utiliser un proxy de mise en cache (probablement Squid) pour accélérer le processus de portnap. J'ai écrit un court article sur la façon de configurer cela sur mon blog.
Les références:
la source