Recentemente eu quis montar uma máquina virtual com Debian 8, PostgreSQL e Python, para fazer uma importação de dados. Eu uso Windows como sistema operacional base mais VirtualBox para virtualização, e minha melhor opção para criar a receita (vagrantfile) da máquina virtual era o Vagrant, pois o AZK não suporta Windows (no momento de escrita do post, ainda não suporta). Com a receita, eu poderia entregar para o cliente a máquina pronta para ambiente de desenvolvimento ou produção.
Passei por alguns problemas, que foram específicos da mistura de Vagrant 1.8.1 e Windows (tanto 7 quanto 10), e gostaria de compartilhar as soluções que encontrei para resolver tudo.
O primeiro problema foi o erro “‘rsync’ could not be found on your path. Make sure that rsync is properly installed on your system and available on the PATH“.
A solução foi instalar o Cygwin, marcando as opções de openssh e rsync. Também tive que colocar uma variável de ambiente chamada HOME, com %USERPROFILE% como valor. Veja:
Por último, editei o arquivo C:\cygwin64\etc\nsswitch.conf, colocando a linha abaixo:
1 |
db_home: /%H |
O segundo problema foi o erro “rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]“, como mostra a imagem abaixo:
A solução foi editar o arquivo C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.1\plugins\synced_folders\rsync\helper.rb, comentando as linhas do trecho abaixo:
1 2 3 4 5 6 7 8 9 10 11 |
rsh = [ "ssh -p #{ssh_info[:port]} " + proxy_command + #"-o ControlMaster=auto " + #"-o ControlPath=#{controlpath} " + #"-o ControlPersist=10m " + "-o StrictHostKeyChecking=no " + "-o IdentitiesOnly=true " + "-o UserKnownHostsFile=/dev/null", ssh_info[:private_key_path].map { |p| "-i '#{p}'" }, ].flatten.join(" ") |
O terceiro erro foi o “==> default: stdin: is not a tty“, e a solução foi acrescentar o trecho abaixo no vagrantfile:
1 2 3 4 |
config.vm.provision "fix-no-tty", type: "shell" do |s| s.privileged = false s.inline = "sudo sed -i '/tty/!s/mesg n/tty -s \\&\\& mesg n/' /root/.profile" end |
Com isto, minha receita rodou normalmente no Vagrant e a máquina virtual foi criada com tudo que eu queria. Segue abaixo a receita final:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Vagrant.configure(2) do |config| config.vm.box = "debian/jessie64" config.vm.box_check_update = false config.vm.hostname = "superbuybi" config.vm.network "private_network", ip: "192.168.1.2" config.vm.provider "virtualbox" do |vb| vb.name = "superbuybi" vb.gui = false vb.memory = "1024" end config.vm.provision "fix-no-tty", type: "shell" do |s| s.privileged = false s.inline = "sudo sed -i '/tty/!s/mesg n/tty -s \\&\\& mesg n/' /root/.profile" end config.vm.provision "file", source: "pgdg.list", destination: "/tmp/pgdg.list" config.vm.provision "file", source: "get-pip.py", destination: "/tmp/get-pip.py" config.vm.provision "file", source: "create_db.sql", destination: "/tmp/create_db.sql" config.vm.provision "shell", inline: <<-SHELL sudo mv /tmp/pgdg.list /etc/apt/sources.list.d/pgdg.list wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update -y && sudo apt-get upgrade -y sudo apt-get install build-essential python-dev vim locate ack-grep htop zip postgresql-9.5 postgresql-client-9.5 postgresql-server-dev-9.5 libpq-dev -y sudo -u postgres psql < /tmp/create_db.sql cd /tmp sudo python get-pip.py sudo pip install SQLAlchemy psycopg2 SHELL end |