Criando uma VM do Ubuntu para distribuir

19

Sou um TA de um curso de programação e tenho a tarefa de criar uma imagem de máquina virtual baseada no Ubuntu 14.04 LTS com todo o software necessário (para desenvolvimento em C ++ e Python) pré-instalado, de modo que todos os alunos tenham o mesmo sistema virtual em execução e evitamos lutas de fazer tudo funcionar em uma variedade de máquinas e sistemas operacionais diferentes. Pretendemos usar o Virtual Box como o software VM host, pois é gratuito e está disponível em várias plataformas.

Ingenuamente, eu usaria apenas a imagem de disco do Ubuntu 14.04 LTS, execute-a na minha Caixa Virtual, instale-a no disco rígido virtual (VDI), configure uma conta de "aluno" com uma senha predefinida, instale todo o software necessário, feche na máquina virtual e distribua o arquivo VDI. Pedimos a cada aluno que importe o VDI para o Virtual Box, execute-o e configure sua conta pessoal (ou apenas use a conta de aluno padrão).

  • O procedimento acima é viável?
  • Quais são as armadilhas a serem observadas? Precisamos que isso seja praticamente à prova de idiotas. Esperamos mais de 80 alunos e somos apenas quatro ATs, portanto não podemos fornecer suporte individual.
  • Existem desvantagens em usar um HDD virtual do tipo VDI alocado dinamicamente?
  • Está tudo bem para eu instalar o Guest Additions do Virtual Box logo de cara ou ele faz algo específico do host?
  • Existe uma maneira mais elegante de lidar com a criação da conta de usuário? Idealmente, o Ubuntu os colocaria através de um assistente de criação de contas e os definiria suas senhas (além de adicioná-las ao arquivo sudoers) na primeira vez que inicializassem a imagem. Esta não é uma prioridade, no entanto. Eu acho que ter uma conta padrão é bom.
Jonas Greitemann
fonte
3
Observe que você deve incluir uma oferta para o código-fonte, pois está distribuindo software sob os termos da GPL.
ChrisInEdmonton
@ChrisInEdmonton Good point. Como eu não escrevo nenhum código, isso é tecnicamente uma modificação ou é apenas uma redistribuição? É suficiente apontar os alunos para as fontes do Ubuntu ou de terceiros, se eles perguntarem (não pedirão) ou eu sou legalmente obrigado a fornecer as fontes proativamente? Importa que eu não publique a imagem, mas forneço-a a um público limitado com acesso restrito?
Jonas Greitemann 23/03
Vou simplesmente apontar para a GPL, pois não sou advogado. É muito improvável que se torne um problema aqui. :)
ChrisInEdmonton 23/03
2
Eu diria que você não precisa fazer isso junto com a própria imagem do Ubuntu: gnu.org/licenses/… Basta escrever em algum lugar nas instruções de como baixar o código-fonte.
Markon 23/03
1
Você pode revisar cuidadosamente as políticas de propriedade intelectual e redistribuição da Canonical antes de fazer isso. Embora o software GPL seja livre para redistribuir com a fonte, e quase todas as outras licenças nas quais você encontra software licenciado em uma distribuição típica do Linux permitem a redistribuição sob termos razoáveis, pelo menos recentemente houve alguma controvérsia sobre a política de IP da Canonical.
a CVn 23/03

Respostas:

18

Embora esta questão seja um pouco baseada em opiniões:

Sim, esse procedimento é viável - acredito que ele conseguiria o que você estava procurando e é algo que eu fiz no passado com outras distribuições Linux.

A única armadilha real é o espaçamento de disco ... verifique se as máquinas dos alunos têm espaço em disco suficiente para lidar com o tamanho do disco virtual. Além disso, assegure-se de manter uma cópia offline em pelo menos uma máquina, para poder usar o disco de modelo / referência para recriar rapidamente um disco quando um aluno matar sua máquina.

As desvantagens de um disco dinâmico é que o sistema operacional host precisa continuar alocando cada vez mais espaço em disco à medida que a VM cresce com dados / atualizações. Isso tem uma sobrecarga de desempenho que às vezes pode ser uma dor de cabeça - especialmente se você estiver executando em uma VM de baixa potência (a energia da máquina host menos a energia usada para expandir um disco tende a fazer com que as VMs fiquem um pouco) .. então não são portáveis ​​(nem todas as máquinas em seu laboratório podem ter mais de 100 GB depois que um aluno mexer com sua VM)

Os complementos convidados não são específicos da máquina. Eles são basicamente um conjunto de drivers. Quando você importa a VM para um novo host, os drivers da VM detectam e ajustam seu hardware para funcionar no novo host.

Criação elegante de usuário - não tenho certeza, talvez um script que seja executado na primeira inicialização e solicite ao usuário que crie uma nova conta antes que o script se destrua? Vou cavar e voltar para você quando tiver 5 minutos de sobra.

Espero que isso ajude pelo menos em parte.

Fazer87
fonte
2
Obrigado, isso ajuda bastante. Minha principal preocupação é não estragar o básico. Não gaste muito tempo com a criação do usuário. Realmente não é tão importante. Eu apenas pensei, desde que eu estava perguntando de qualquer maneira, eu poderia perguntar se existe algum mecanismo interno para lidar com isso, pois eu suponho que é um problema bastante comum.
Jonas Greitemann
1
absolutamente - e é perfeitamente possível que exista uma solução integrada, então eu quero encontrá-la.
Fazer87
13

Respondendo exatamente à sua pergunta, se você precisar adaptar a VM e entregar a ela uma VM VirtualBox entregável, recomendo usar o Packer para pré- empacotar a VM com todas as dependências necessárias. Ele foi criado exatamente para esse fim e permite que você gire uma imagem de um ISO , execute o provisionamento que desejar com relação a essa imagem e crie uma imagem de VM VirtualBox entregável. Isso também é bom para você, porque documenta exatamente o que foi feito na entrega, caso você queira reproduzi-la / adicionar algo a ela. Além disso, você pode verificar o projeto em um sistema de controle de origem e fazer alterações. Aqui está um exemplo disso sendo feito para você começar.

No entanto, se você deseja que eles funcionem rapidamente, recomendo usar o Vagrant e distribuir aos seus alunos um arquivo Vagrant que execute o provisionamento desejado em uma imagem padrão do Ubuntu . Isso tem várias vantagens:

  • O Vagrant funciona imediatamente com o VirtualBox e manipula todas as partes difíceis dos alunos, como configurar pastas compartilhadas para que eles possam copiar arquivos facilmente entre a VM e a máquina host, configurando a rede para permitir acesso à Internet na caixa para eles , etc. Isso também poupa o tempo de documentar / depurar problemas de instalação do VirtualBox para eles.
  • Um arquivo Vagrant é muito menor que uma VM entregável. Se você quiser alterar / adicionar algo à VM no meio do curso, não precisará reconstruir uma nova VM, apenas dê a eles um Vagrantfile atualizado.
  • Se eles estragarem algo além de sua capacidade de repará-lo, poderão destruir / reimplementar a VM sem problemas novamente
  • Um arquivo Vagrant mostrará a seus alunos exatamente o que foi feito na VM, para que, quando chegarem ao ponto em que eles entendem o suficiente, eles possam ver o que está acontecendo sob o capô e possivelmente aprender com isso também.

Aqui está um exemplo do Vagrantfile mostrando como fazer provisionamento em uma imagem do Ubuntu 14.04.

Joel B
fonte
3
Vagrant e / ou Packer são o caminho a seguir.
Sandy Chapman
9

Perfeitamente viável. A alternativa seria Vagrant, Puppet, Chef ou algo semelhante para criar as VMs do zero, mas isso é muito trabalhoso de configurar.

A equipe de desenvolvimento em um dos meus sites faz o mesmo para obter novos desenvolvedores rapidamente em funcionamento.
1 conta predefinida (com direitos sudo) na imagem e um pequeno documento de instruções com as etapas que devem ser seguidas para criar suas contas pessoais.

Observação: você provavelmente precisará de acesso à rede / internet dentro da VM. Isso pode ser feito uma ponte ou NATted no host. Independentemente de sua escolha, você terá que instruir seus alunos como configurar o lado host. Basta configurar a NIC dentro da VM como dispositivo DHCP. Esse é um ponto de partida seguro para a maioria das configurações, mesmo que o usuário precise configurar manualmente manualmente um endereço IP estático.
Colocar um endereço IP estático na VM está realmente causando problemas. É obrigado a estar em uso já por outra VM ficando on-line na mesma LAN ...

Tonny
fonte
3
O "muito trabalho a ser configurado" depende da frequência com que você precisa criar imagens. Você está fazendo o mesmo curso no próximo semestre novamente? Você está talvez fazendo um curso semelhante com um idioma diferente no próximo semestre? Deseja facilitar a vida de seus sucessores? Os compiladores C ++ têm erros corrigidos em versões posteriores. Um novo padrão C ++ será lançado em 2017. Lembre-se, um programador é uma pessoa que gasta 2 horas para escrever um programa para executar uma tarefa em 2 segundos que levaria 2 minutos à mão. ;-)
Jörg W Mittag 23/03
2
@ JörgWMittag Claro, você tem razão. Mas se você não estiver familiarizado com o Vagrant e similares, a curva de aprendizado pode ser bastante íngreme / demorada. Pessoalmente, eu provavelmente optaria pela solução VM para uma solução rápida neste semestre e, durante o semestre, passaria algum tempo desenvolvendo a outra solução para uma abordagem de longo prazo.
Tonny
2
Em relação ao acesso à rede, as VMs distribuídas provavelmente terão endereços MAC idênticos. Pode não ser um problema com o NAT, mas é uma boa idéia redefinir os endereços MAC de qualquer maneira.
user1937198
1
@ user1937198 O MAC é definido pelo VirtualBox / vmdk, não definido no próprio VDI. Se você apontar e clicar em uma nova VM junto no VirtualBox e adicionar o arquivo VDI, receberá um novo MAC. (Ao importar do OVA, você será solicitado a redefinir o MAC.) Mas você está certo. É outra coisa a considerar e certamente um problema se a rede for executada em ponte.
23716 Tonny
1
@SteveBarnes Concordo especialmente com você na última frase: não importa quão boa seja a instrução de trabalho, as pessoas vão errar quando a seguem. Eles pulam etapas (ou as executam na ordem errada), cometem erros de digitação nos comandos que precisam executar ou acham que sabem melhor e se desviam do script. Se for automatizável (meu corretor ortográfico não tem certeza se essa é realmente uma palavra), a melhor abordagem ainda será automatizá-la: não há espaço para erros.
Tonny