É possível definir uma versão específica dos pacotes, da qual depende o pacote principal?

10

Temos um ambiente de desenvolvimento no FreeBSD 10.3. Ouvi dizer que o FreeBSD gerencia dependências de pacotes dessa maneira, que sempre procura a versão mais recente de todos os pacotes, da qual depende o pacote principal. E parece verdade. Então, minhas perguntas são:

  1. Isso é verdade? existem documentos oficiais que provam isso?
  2. A melhor maneira de superar esse problema?
Sergius
fonte
7
Suspeito que você possa instalar primeiro o pacote da versão específica necessária e, em seguida pkg lock, instalar tudo o que desejar.
arrowd
1
Também depende de qual porta / pacote você deseja e em qual versão. Por exemplo, você pode ter diferentes versões python / postgresql / php. Às vezes, existem vários pacotes disponíveis para um software, às vezes você pode criar seu pacote especial a partir de portas.
Raphael Ahrens
3
Se você executar cegamente as atualizações do FreeBSD (ou o pkg upugrade), sim, ele encontrará as mais recentes possíveis e tentará instalá-las. Como arrowd disse, agora (a partir da versão 9.2), você pode pkg lock <pkg>, o que deve proteger o que você instalou e suas dependências contra modificações. YMMV.
quadruplebucky

Respostas:

1

Como o FreeBSD constrói pacotes

O projeto FreeBSD costumava criar pacotes apenas para releases e ocasionalmente para os ramos STABLE. Os construtores de pacotes antigos usavam um sistema distribuído chamado Portbuild. Ele usaria um grande cluster de máquinas menores de 2 GB a 4 GB para criar pacotes. Isso era propenso a erros e lento, principalmente devido às máquinas mais antigas. Uma compilação completa ainda pode levar uma semana. Hoje, os pacotes são criados usando máquinas grandes e únicas usando o Poudriere. (Da página de Brian Drewery ).

Veja também: Como atualizar uma mistura de pacotes e portas no FreeBSD

O FreeBSD possui uma ABI (e API) em evolução, assim como o Solaris e o Windows, enquanto o Linux tem uma ABI (e API) estável (estagnada?), Portanto, com os binários antigos do Linux, ainda será executado em uma versão mais recente do sistema operacional, enquanto nos sistemas operacionais não Linux, isso não é '' Sempre é o caso (às vezes é).

O uso pkg lockainda pode causar dores de cabeça , enquanto ele trava (oferece um aviso) quando você tenta atualizar usando pkg upgradeainda pressupõe que versões com números mais altos são melhores (desejáveis) e que é algo que você gostaria de fazer - por isso, solicita permissão, e você pode permitir, mas não garante que algo mais não será quebrado. Veja o URL acima, ou esta discussão: " Você prefere o FreeBSD para bloquear versões de pacotes binários distribuídos via pkg para uma versão do sistema operacional? ".

Se um pacote estiver bloqueado às vezes, você terá que dar permissão para desbloqueá-lo e fazer a atualização, enquanto isso funcionará para o pacote único (e todas as suas dependências), não há garantia de que algo mais não será incompatível com as novas bibliotecas ( e, portanto, também precisa de uma atualização, se houver uma disponível no momento).

Blog de Brian Drewery: " Jornal FreeBSD: Poudriere " opina:

"Pare de usar portmaster, portupgrade e ports em seus servidores e mude para pacotes.

A configuração de suas próprias compilações de pacotes com o Poudriere leva apenas alguns minutos e economizará muito tempo no futuro.

...

Se você estiver mantendo mais de um sistema FreeBSD e ainda não estiver usando pacotes, deverá. Eu mantenho apenas 20 servidores, mas a construção de portas em cada sistema consumiu muito do meu tempo e desperdiçou recursos nas máquinas de produção. Ao criar portas em vários servidores, é muito fácil obter as opções ou versões fora de sincronia. Ao criar pacotes uma vez em um sistema, diminuí a carga em meus sistemas, diminuí a quantidade de trabalho que eu tinha que fazer e tornei todos os meus sistemas consistentes. Em vez de lidar com a mesma falha em cada sistema, só preciso lidar com isso no sistema de compilação.

Mas, o problema ...

Por que você precisaria se desviar dos pacotes oficiais? A estrutura de portas fornece opções de suporte para que as portas alterem a configuração em tempo de construção. Nem todos os aplicativos oferecem suporte à configuração em tempo de execução. Alguns aplicativos devem ser compilados de maneira diferente, dependendo dos recursos ativados. Outros têm opções simplesmente para diminuir a quantidade de recursos e dependências na porta padrão. Para administradores de servidor, isso pode levar rapidamente à descoberta de que alguns dos pacotes padrão não atendem a seus requisitos.

Assim ...

Existem algumas maneiras de obter pacotes personalizados. O Pkg suporta o uso de vários repositórios. Ele pode ser configurado para usar o repositório oficial do FreeBSD como primário e um repositório personalizado como secundário. O pacote não é limitado pelo número de repositórios que ele pode rastrear e pode ser reordenado por prioridade. O problema com vários repositórios é que atualmente pode ser difícil de manter. Quando o Pkg detecta que um pacote instalado possui opções ou dependências diferentes de um repositório que está rastreando, o pacote será reinstalado a partir de qualquer versão remota. Você pode bloquear o pacote durante as atualizações com o pkg lock PKGNAME e o pkg unlock PKGNAME ou vinculá-lo a um repositório específico com a anotação do pkg -A PKGNAME REPONAME. Há também o sutil problema de manter a árvore de portas do seu repositório personalizado sincronizada com os pacotes do FreeBSD. Como os pacotes são criados a partir de uma captura instantânea da árvore de portas tirada uma vez por semana, se o seu repositório personalizado não corresponder, isso poderá gerar conflitos. É muito mais simples criar apenas um conjunto completo de pacotes do que você precisa com as opções desejadas.

A solução:

Poudriere (em inglês, pronunciado poo-dree-year, francês para "barril de pólvora") foi escrito como um substituto mais rápido e simples para o Tinderbox. Foi escrito pelo autor do Pkg Baptiste Daroussin e agora é mantido principalmente por mim, juntamente com Baptiste e alguns outros colaboradores. Ele rapidamente se tornou a ferramenta de teste de porta de FreeBSD de fato e de construção de pacotes. É a ferramenta oficial de criação de cluster e também é usada pelo projeto FreeBSD Ports para testar patches de varredura nas chamadas "exp-runs". Ele está escrito no shell POSIX e está sendo movido lentamente para componentes C. Ao contrário do Tinderbox, ele não possui dependências e não requer um banco de dados. Foi bastante otimizado para ser altamente paralelo em todas as operações. Ele usa cadeias para construir portas em ambientes de área restrita em condições muito rigorosas. A criação da cadeia é feita uma vez com um comando simples. Durante as compilações, a prisão é clonada automaticamente para cada CPU usada para fornecer às portas um local limpo para a compilação ".

A configuração de seu próprio repositório com o poudriere permite que você tenha a flexibilidade de portas e a facilidade de gerenciamento de pacotes.

Roubar
fonte