Tanto o Vagrant quanto o Gitian são ferramentas que usam máquinas virtuais para auxiliar no desenvolvimento, embora o Gitian esteja mais focado na construção final da ferramenta, enquanto o Vagrant está mais no desenvolvimento iterativo.
No entanto, ambos precisam de alguma configuração da VM antes de usar. Seguir este guia é bom, mas instala um SO do zero, demorando um pouco para fazer. Parte da comunidade Vagrant é criar arquivos Box que podem ser distribuídos como um ponto de partida para trabalhar. As caixas padrão que o Vagrant sugere ( precise64
e precise32
) são caixas do Ubuntu, perfeitas para o que o Gitian precisa. Então, podemos cortar algumas das configurações do Gitian inicializando-as com o Vagrant? Certo!
Clone Vagrant Box
Se você já usou o precise64
Vagrant box para qualquer projeto, o Vagrant já baixou o arquivo base do Box para você e o salvou em ~/.vagrant.d/boxes
. Caso contrário, baixe o arquivo box diretamente e extraia-o (é um ZIP com uma extensão renomeada).
Abra o VirtualBox e escolha File > Import Appliance...
. Faça uma precise64
busca detalhada na pasta para localizar o box.ovf
arquivo e selecioná-lo.
Renomear
Gitian espera que a VM seja nomeada “Gitian- {suite} – {architecture}”, então verifique seu arquivo YML descritor e renomeie a VM apropriadamente (Provavelmente “Gitian-precise-amd64”).
Recursos do sistema
A caixa Vagrant precise64 padrão é configurada para usar apenas 386 MB de RAM, o que pode ser bom para um servidor Apache pequeno, mas não é o suficiente para processos de construção que usam muitos recursos. Clique no ícone “Configurações” e ajuste a memória do sistema para pelo menos 1024 MB (1 GB).
Configuração SSH
Na máquina host, execute:
$ VBoxManage modifyvm Gitian-precise-amd64 --natpf1 "guestssh,tcp,,2223,,22"
Isso configura o encaminhamento de porta, então se localhost:2223
conecta à porta 22 da máquina virtual, a porta SSH padrão.
Agora inicialize a máquina virtual.
Em seguida, precisaremos de uma chave SSH para permitir logins sem senha. Em sua máquina host, faça:
$ mkdir var
$ ssh-keygen -t dsa -f var/id_dsa -N ""
$ ssh -p 2223 -oNoHostAuthenticationForLocalhost=yes vagrant@localhost 'mkdir -p .ssh && chmod 700 .ssh && cat >> .ssh/authorized_keys' < var/id_dsa.pub
NOTA: a última linha deve ser “ssh -p 2223 -oNoHostAuthenticationForLocalhost = yes vagrant @localhost ‘mkdir -p .ssh && chmod 700 .ssh && cat >> .ssh / chaves autorizadas ‘ <var / id dsa.pub”, há um problema com os blocos de código delimitados de redução com os símbolos em …
Digite vagrant
a senha do vagrant
usuário quando solicitado. Agora o usuário vagrant deve ser capaz de fazer o login sem uma senha. Mas…
Configuração do usuário
… Gitian espera que haja um usuário chamado “ubuntu” na máquina, enquanto o Vagrant o configura com o nome de usuário “vagrant”. Então, vamos usar o usuário Vagrant para criar um para Gitian: Inicie a máquina virtual, faça o login como vagrant
/ vagrant
e faça o seguinte:
$ sudo adduser ubuntu
$ sudo adduser ubuntu sudo
$ sudo mkdir -p /home/ubuntu/.ssh
$ sudo chmod 700 /home/ubuntu/.ssh
$ sudo cp ~/.ssh/authorized_keys /home/ubuntu/.ssh/
$ sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh
$ sudo mkdir -p /root/.ssh
$ sudo chmod 700 /root/.ssh
$ sudo cp ~/.ssh/authorized_keys /root/.ssh/
Isso copia a chave SSH do usuário Vagrant para o usuário Ubuntu, bem como para o usuário root.
Pacotes
Para garantir que os pacotes adequados para a construção do gitian já estejam presentes na máquina antes de você fazer o snapshot (para acelerar a inicialização mais tarde, faça login como ubuntu
usuário e execute:
$ sudo apt-get update
$ sudo apt-get install autoconf2.13 automake build-essential bsdmainutils faketime g++ g++-mingw-w64 git-core libqt4-dev libtool libz-dev mingw-w64 nsis pciutils pkg-config psmisc subversion unzip zip
Gitian pega uma impressão digital SHA dos pacotes instalados, para garantir a consistência, e faz isso pegando o hash dos arquivos armazenados , mas as caixas do Vagrant Precise não os têm em cache por padrão, então vamos construir isso para que não baixado novamente a cada vez:*.deb
/var/cache/apt/archives
$ sudo apt-get upgrade
$ sudo apt-get clean
$ sudo dpkg-query -W -f '${Package}n' | sudo xargs -n 50 apt-get install --reinstall -y -d
Instantâneo
Gitian sempre restaura a VM para um estado conhecido antes de reconstruir o projeto, portanto, precisamos criar um instantâneo para ele. Saia da VM e escolha . Nomeie o instantâneoMachine > Take Snapshot...
Gitian-Clean
Teste
Em sua máquina host, navegue até sua pasta e execute o seguinte:gitian-builder
$ export USE_VBOX=1
$ export PATH=$PATH:$(pwd)/libexec
$ make-clean-vm --suite precise --arch amd64 # VM in VirtualBox should restore itself to Snapshot state
$ start-target 64 precise-amd64 # VM should power on
$ on-target ls -la # Should output a listing of the Ubuntu user's home folder, without prompting for a password
$ stop-target # Should power off the VM
Erros
Se você receber um timeout waiting for banner
erro, é uma indicação de que o SSH não está funcionando corretamente na VM. Ao configurar várias máquinas por meio desse processo, às vezes o instantâneo do VirtualBox não captura o SSH em um estado adequado e, ao restaurar o instantâneo, o serviço SSH é interrompido. Tente excluir o instantâneo “Gitian-Clean” e recriá-lo, e isso deve resolver o problema.