Chroots simples, contêineres e VMs não são "excessivos". Esse tipo de tarefa é uma das coisas para as quais elas servem - na verdade, elas são essenciais se você quiser evitar fazer alterações irreversíveis em seu sistema. E contêineres e VMs são tão fáceis de usar hoje em dia, que não há realmente nenhuma razão para não fazer isso. Em suma, eles fornecem um ambiente de construção completamente isolado do resto do sistema.
De fato, usar instantâneos de sistema de arquivos para atualizar / instalar coisas no seu sistema principal, construir seu software e reverter para o instantâneo anterior é um exagero. Também é muito grosseiro e potencialmente perigoso para este trabalho ... há muito mais acontecendo em seu sistema a qualquer momento do que apenas compilar um programa (por exemplo, todos os tipos de tarefas em segundo plano, daemons, cron jobs, etc. ou você pode ter baixado e-mail e excluído do servidor pop / imap, ou criado / editado arquivos que não são totalmente relacionados à construção deste programa) - ALL do que será revertido quando você reverter para o instantâneo anterior. As capturas instantâneas do sistema de arquivos são uma boa ideia e uma ferramenta útil, mas são mais bem usadas como parte de uma boa estratégia de backup e / ou recuperação de dedo gordo do que como uma maneira de alternar dinamicamente entre diferentes ambientes operacionais.
A maioria dos sistemas de gerenciamento de contêineres e de VMs (por exemplo, docker
, lxc
, virsh
, virt-manager
e muitos mais) facilitam a reinicialização de cada execução com um novo slate, para que você comece exatamente o mesmo ambiente de construção original a cada vez. As imagens de disco da VM geralmente são armazenadas em um formato que pode ser instantâneo e clonado (por exemplo, qcow2
ou zFS do ZFS. Até mesmo um arquivo de imagem de disco bruto pode ser copiado e, opcionalmente, compactado). Você pode fazer o mesmo com um chroot, mas você precisa excluir o chroot e recriá-lo você mesmo (por exemplo, com um arquivo .tar.gz do chroot).
Um processo de configuração e construção bastante básico iniciaria um chroot, um contêiner ou uma VM. Esse pode ser um ambiente de construção genérico que você configura conforme necessário para cada job de construção ou um que esteja pré-configurado para construir apenas um programa específico. Então, use-o para construir seu software e, finalmente, copie para onde ele vai rodar (e / ou construa um pacote para sua distro - se isso parecer muito trabalho, pegue um saque em checkinstall ).
docker
em particular tem algumas ferramentas interessantes para automatizar a criação de seu contêiner de criação perfeito e / ou personalizar um contêiner de construção específico com base em um contêiner genérico.
Também é possível automatizar todo o processo de inicialização de uma VM ou contêiner, enviar um trabalho para ele para compilar e, em seguida, desmontá-lo novamente. Existem inúmeras implementações existentes desta ideia, genericamente referidas como build bots (existe um popular programa em Python chamado buildbot
, mas o nome, a ideia e as implementações de trabalho existiam muito antes de serem escritas pela primeira vez em 2003). Os robôs de construção são uma parte essencial da Integração contínua (IC) . BTW, falando de CI, o open source GitLab é uma ferramenta muito boa que permite que você execute sua própria fonte semelhante ao github repositório & rastreador de problemas combinado com várias tarefas relacionadas a CI, como criação, teste e implantação automatizados.
Em conclusão , e para responder à sua pergunta: Existem muitas, muitas maneiras de create a completely discardable build environment
como você solicitou, e muitas delas estão disponíveis pré-empacotadas para várias distribuições linux (mas você ' Ainda preciso entender como eles funcionam e configurá-los). A parte difícil é decidir exatamente o que você quer dizer com isso, quais recursos você precisa e quanto deseja automatizar.
Outro fator importante, é claro, quanto tempo / esforço vale a pena gastar com isso - por exemplo, Isso é para um laboratório de software doméstico, uma pequena empresa ou startup, ferramentas para ajudá-lo a fazer o seu trabalho que o seu empregador não vê necessidade ou um grande projeto para toda a sua equipe de desenvolvimento ou para toda a empresa?
PS: se você está se perguntando por que todos os links que forneci são para a wikipedia em vez de links diretos para páginas específicas de projetos ou empresas, isso é mais uma visão conceitual do que uma recomendação de um software específico . As páginas da Wikipédia têm links diretos e, mais importante, têm links para softwares semelhantes, páginas de comparação de software e vários conceitos inter-relacionados. Este não é um tópico simples com apenas uma resposta fácil de aprender. Quanto mais você souber, mais fácil será tomar boas decisões que atendam às suas necessidades particulares.