Est-il possible de définir une version spécifique des packages, dont le package principal dépend?

10

Nous avons un environnement de développement sur FreeBSD 10.3. J'ai entendu dire que FreeBSD gère les dépendances des packages de cette manière, qu'il recherche toujours la dernière version de tous les packages, dont le package principal dépend. Et cela semble vrai. Donc, mes questions sont:

  1. Est-ce vrai? existe-t-il des documents officiels qui le prouvent?
  2. La meilleure façon de surmonter ce problème?
Sergius
la source
7
Je soupçonne que vous pouvez d'abord installer le package de la version spécifique dont vous avez besoin pkg lock, puis l'installer, puis installer tout ce que vous voulez.
arrowd
1
Cela dépend également du port / package souhaité et de la version. Par exemple, vous pouvez avoir différentes versions de python / postgresql / php. Parfois, il existe plusieurs packages disponibles pour un logiciel, parfois vous pouvez créer votre package spécial à partir des ports.
Raphael Ahrens
3
Si vous exécutez aveuglément les mises à jour freebsd (ou pkg upugrade), oui, il trouvera la plus récente possible et tentera de l'installer. Comme l'a dit arrowd, maintenant (depuis 9.2 ou plus), vous pouvez verrouiller pkg <pkg> qui devrait protéger ce que vous avez installé et ses dépendances contre les modifications. YMMV.
quadruplebucky

Réponses:

1

Comment FreeBSD construit des packages

Le projet FreeBSD utilisé pour construire des packages uniquement pour les versions et occasionnellement pour les branches STABLE. Les anciens constructeurs de packages utilisaient un système distribué nommé Portbuild. Il utiliserait un grand cluster de petites machines de 2 Go à 4 Go pour créer des packages. Cela a été source d'erreurs et lent, principalement en raison des anciennes machines. Une version complète pourrait encore prendre une semaine. Aujourd'hui, les packages sont construits à l'aide de grandes machines uniques utilisant Poudrière. (Tiré de la page Web de Brian Drewery ).

Voir aussi: Comment mettre à jour un mélange de packages et de ports sur FreeBSD

FreeBSD a une ABI (et une API) en évolution, tout comme Solaris et Windows, tandis que Linux a une ABI (et une API) stable (stagnante?), Donc avec Linux, les anciens binaires continueront de fonctionner sur une version de système d'exploitation plus récente tandis qu'avec des systèmes d'exploitation non Linux, ce n'est pas le cas. t toujours le cas (parfois c'est le cas).

L'utilisation pkg lockpeut toujours conduire à des maux de tête , alors qu'elle se verrouille (offre un avertissement) lorsque vous essayez de la mettre à niveau, pkg upgradeelle suppose toujours que des versions plus numérotées sont meilleures (souhaitables) et que c'est quelque chose que vous voudriez faire - elle demande donc la permission, et vous pouvez autoriser, mais cela ne garantit pas que quelque chose d'autre ne sera pas cassé. Voir l'URL ci-dessus, ou cette discussion: " Préféreriez-vous que FreeBSD verrouille les versions des paquets binaires distribués via pkg pour une version du système d'exploitation? ".

Si un package est verrouillé, vous devrez parfois donner la permission de le déverrouiller et de faire la mise à niveau, alors que cela fonctionnera pour le package (et toutes ses dépendances), rien ne garantit que quelque chose d'autre ne sera pas incompatible avec les nouvelles bibliothèques ( et ont donc également besoin d'une mise à niveau, si elle est actuellement disponible).

Blog de Brian Drewery: " FreeBSD Journal: Poudriere ":

"Cessez d'utiliser portmaster, portupgrade et les ports sur vos serveurs et passez aux packages.

La configuration de vos propres builds de packages avec Poudrière ne prend que quelques minutes et vous fera gagner beaucoup de temps à l'avenir.

...

Si vous maintenez plus d'un système FreeBSD et n'utilisez pas déjà de paquets, vous devriez. Je ne gère que 20 serveurs, mais la création de ports sur chaque système a pris beaucoup de temps et gaspillé des ressources sur les machines de production. Lors de la création de ports sur plusieurs serveurs, il est très facile de désynchroniser leurs options ou versions. En créant des packages une fois sur un seul système, j'ai réduit la charge sur mes systèmes, diminué la quantité de travail que j'avais à faire et rendu tous mes systèmes cohérents. Au lieu de faire face à la même défaillance sur chaque système, je n'ai qu'à la gérer sur le système de génération.

Mais, l'attelage ...

Pourquoi auriez-vous besoin de dévier des packages officiels? La structure des ports fournit des options de prise en charge des ports pour modifier la configuration au moment de la construction. Toutes les applications ne prennent pas en charge la configuration d'exécution. Certaines applications doivent être compilées différemment selon les fonctionnalités activées. D'autres ont des options simplement pour réduire la quantité de fonctionnalités et de dépendances dans le port par défaut. Pour les administrateurs de serveur, cela peut rapidement conduire à constater que certains des packages par défaut ne répondent pas à leurs exigences.

Donc ...

Il existe plusieurs façons d'obtenir des packages personnalisés. Pkg prend en charge l'utilisation de plusieurs référentiels. Il peut être configuré pour utiliser le référentiel officiel de FreeBSD comme principal et un référentiel personnalisé comme secondaire. Pkg n'est pas limité par le nombre de référentiels qu'il peut suivre et ils peuvent être réorganisés pour la priorité. Le problème avec plusieurs référentiels est qu'il peut actuellement être difficile à maintenir. Lorsque Pkg détecte qu'un package installé a différentes options ou dépendances d'un référentiel qu'il suit, le package sera réinstallé à partir de n'importe quelle version distante. Vous pouvez soit verrouiller le package pendant les mises à niveau avec pkg lock PKGNAME et pkg unlock PKGNAME, soit le lier à un référentiel spécifique avec pkg annotate -A PKGNAME repository REPONAME. Il y a aussi le problème subtil de garder l'arborescence des ports de votre référentiel personnalisé en synchronisation avec les paquets FreeBSD. Étant donné que les packages sont créés à partir d'un instantané d'arborescence de ports pris une fois par semaine, si votre référentiel personnalisé ne correspond pas, cela peut entraîner des conflits. Il est beaucoup plus simple de simplement créer un ensemble complet de packages dont vous avez besoin avec les options que vous souhaitez.

La solution:

Poudriere (grossièrement prononcé poo-dree-an, français pour «poudre de fût») a été écrit comme un remplacement plus rapide et plus simple de Tinderbox. Il a été écrit par l'auteur du Pkg Baptiste Daroussin et est maintenant principalement maintenu par moi avec Baptiste et d'autres contributeurs. Il est rapidement devenu l'outil de test de port FreeBSD et de construction de paquet. C'est l'outil officiel du cluster de construction et est également utilisé par le projet FreeBSD Ports pour tester les correctifs de balayage dans ce qu'on appelle des «exp-runs». Il est écrit dans le shell POSIX et est lentement déplacé vers les composants C. Contrairement à Tinderbox, il n'a pas de dépendances et ne nécessite pas de base de données. Il a été grandement optimisé pour être hautement parallèle dans toutes les opérations. Il utilise des prisons pour construire des ports dans des environnements en bac à sable dans des conditions très strictes. La création de prison se fait une fois avec une simple commande. Pendant les builds, la prison est clonée automatiquement pour chaque CPU utilisée pour donner aux ports un endroit propre à construire. ".

La configuration de votre propre référentiel avec poudrière vous permet d'avoir la flexibilité des ports et la facilité de gestion des packages.

Rob
la source