Skip to content

Instantly share code, notes, and snippets.

@lbssousa
Last active March 8, 2019 16:36
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lbssousa/5dcc5459b02db8d971ae8984fcd37235 to your computer and use it in GitHub Desktop.
Save lbssousa/5dcc5459b02db8d971ae8984fcd37235 to your computer and use it in GitHub Desktop.
Configurando uma máquina virtual minimalista do Ubuntu 16.04 no VirtualBox para Internet Banking da Caixa Econômica Federal
REQUISITOS
* VirtualBox
* Vagrant
INSTRUÇÕES
1. Crie uma pasta, com o nome que você preferir (exemplo: UbuntuBankingCEF).
2. Salve o arquivo Vagrantfile e o script vagrant-cef na pasta recém-criada.
3. Torne o script executável:
chmod +x vagrant-cef
4. Execute o script:
./vagrant-cef
A primeira execução será um pouco mais demorada, pois a VM será criada
e os softwares necessários (incluindo o Firefox e o módulo de segurança
do banco) serão instalados. Ao final da instalação, o Firefox será
executado automaticamente a partir da VM. Quando a janela do Firefox for
fechada, a VM será automaticamente desligada.
#!/bin/sh
vagrant box update
vagrant up
vagrant ssh -c vbox-internet-banking
vagrant halt
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script = <<ENDSCRIPT
Home="/home/ubuntu"
# Altere os valores abaixo de acordo com o seu banco
Modulo="GBPCEFwr64.deb"
UrlModulo="https://cloud.gastecnologia.com.br/cef/warsaw/install/${Modulo}"
UrlBanco="http://www.caixa.gov.br"
Caminho="/usr/local/bin/warsaw/core"
Script="vbox-internet-banking"
# Atualizando o sistema
apt-get update
apt-get upgrade
# Instalando uma seleção mínima de pacotes para rodar o Firefox
apt-get install -y --no-install-recommends language-pack-pt openssl libnss3-tools xauth firefox firefox-locale-pt
# Configurando a página inicial do Firefox
echo "lockPref(\"browser.startup.homepage\", \"${UrlBanco}\");" >> /etc/firefox/syspref.js
# Criando o script lançador do Firefox
cat >/usr/local/bin/${Script} <<EOF
#!/bin/sh
export LANG="pt_BR.UTF-8"
[ -d "${Home}/.mozilla" ] || firefox -CreateProfile default
[ -x "${Caminho}" ] || (wget -c ${UrlModulo} && sudo apt -y install ./${Modulo} && rm -f ./${Modulo})
${Caminho}
firefox -private-window ${UrlBanco}
loginctl terminate-session \\${XDG_SESSION_ID}
EOF
chmod +x /usr/local/bin/${Script}
# Limpando a instalação
apt-get -y autoremove
apt-get clean
ENDSCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on", "--draganddrop", "hosttoguest", "--clipboard", "bidirectional"]
end
config.ssh.forward_x11 = true
config.vm.provision :shell, inline: $script
end
@Patola
Copy link

Patola commented Mar 31, 2017

Com o vb.customize funcionou. Eu clonei o seu repositório, mas fazer pull request em gist é tosco e só dá para o autor (você) fazer. Ficou assim o Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Requer o plugin vagrant-vbguest. Se necessário, instale-o com o comando
#
#     vagrant plugin install vagrant-vbguest
#
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vbguest.auto_update = true
end

@lbssousa
Copy link
Author

Bom... Uma coisa que dá pra fazer pra evitar essa aporrinhação do Vagrant é, uma vez criada a VM e alterado o adaptador de rede para modo bridge, simplesmente dar um pé na bunda do Vagrant e inicializar a VM a partir do próprio VirtualBox (mais conveniente ainda é exportar um appliance da VM pronta e criar um atalho para ela na área de trabalho).

De qualquer modo, uma coisa que se pode tentar é acrescentar a seguinte entrada ao arquivo Vagrantfile (alterando os nomes das interfaces de rede conforme o seu caso):

config.vm.network "public_network", bridge: "wlan0, eth0"

PR em Gist eu não conheço, não. Só fork mesmo.

@Patola
Copy link

Patola commented Mar 31, 2017

A propósito: eu costumo usar o banco online sempre colando os números no site da caixa. Já que estamos na onda de modificar defaults do VirtualBox, não seria palatável também habilitar clipboard sharing?

@Patola
Copy link

Patola commented Mar 31, 2017

Recomendo não usar a bridge, não é uma solução tão universal quanto NAT. O ajuste que coloquei acho melhor, porque cobre muito mais casos, e funciona em todos.

@Patola
Copy link

Patola commented Mar 31, 2017

Lembre-se que estamos falando de criação automatizada de algo, se você exigir algo pra ser feito "depois" ou "durante" a tarefa do vagrant, já meio que destrói a utilidade do script... :-/

@lbssousa
Copy link
Author

Tem razão. Vou importar suas modificações aqui. Agora, a respeito do "shared clipboard", confesso que nunca usei aqui, mas se você está acostumado a usá-lo, pode experimentar a configuração descrita aqui: hashicorp/vagrant#4894

Se funcionar pra você, podemos incluir aqui.

@lbssousa
Copy link
Author

lbssousa commented Apr 3, 2017

@Patola, fiz uma grande reestruturação no Gist.

Agora, em vez de executar um gerenciador de janelas dentro da VM, a janela do Firefox dentro da VM é executada no ambiente gráfico do hospedeiro, via "SSH X11 Forwading". Com isso, pode-se eliminar, em princípio, o plugin vagrant-vbguest, garantindo que ele funcione com a versão padrão do Vagrant para o Ubuntu 16.04.

Também incluí um script de conveniência para disparar o Firefox da VM. Ele se encarregará de atualizar a VM (se houver alguma atualização disponível), ligá-la (se estiver desligada), abrir o Firefox da VM (via SSH) e desligar a VM quando o Firefox for fechado.

Eu só não garanto que você consiga colar os números como estava habituado a fazer.

@farribeiro
Copy link

farribeiro commented Apr 5, 2017

@lbssousa, Por que não usar projeto github para visualizar o histórico de alterações. Da última vez que visitei seu git estou tentando compreender sua linha e raciocínio. No momento eu entendi.

Para o meu esquema, de container, está com possibilidade de ter apenas o warsaw mas teria que alterar o browser hospedeiro. E como todo mundo diz que é um câncer, melhor manter da forma que está.

@farribeiro
Copy link

E outra coisa, pelo modelo que está, espanta muitos que tem o conceito de ter uma VM na forma tradicional, com X e WM.

@lbssousa
Copy link
Author

lbssousa commented Apr 7, 2017

@farribeiro, você tem razão. Talvez eu divida este Gist em dois: um com a implementação antiga (Xorg + dwm na VM) e outro com a implementação atual (SSH X11 Forwarding). Só agora eu me toquei que esta última implementação requer um servidor X11 no host, o que não é muito comum para máquinas Windows (teria que instalar o Xming ou o VcXsrv).

@farribeiro
Copy link

farribeiro commented Apr 25, 2017

@lbssousa, dá uma olhada em um novo recurso que poderíamos adicionar aos confinamentos, já coloquei no histórico do wscef... tem algumas coisas faltantes. Como as cadeias ICP-Brasil e outras configurações automáticas

https://gist.github.com/farribeiro/08da23ec20c545d6913a5610584034d3

@danielmenezesbr
Copy link

@lbssousa e @farribeiro, uma dúvida: nessa estratégia do "SSH X11 Forwading" faz sentido instalar o pacote xauth?

@danielmenezesbr
Copy link

@lbssousa, outra possibilidade de implementação seria via VNC. Eu criei um Vagrantfile[1] que é capaz de fazer o provisionamento do ambiente e ao final permite o acesso ao Firefox via VNC. Tenho um outro Vagrantfile[2] que provisiona o ambiente com um Ubuntu Desktop usando o container wscef.

[1] https://github.com/danielmenezesbr/warsaw-ubuntu-headless-vagrant
[2] https://github.com/danielmenezesbr/warsaw-ubuntu-vagrant

@farribeiro
Copy link

farribeiro commented Jun 28, 2017

@danielmenezesbr Eu acredito que fica mais democrático COM X NO CONVIDADO E WINDOW MANAGER

Mas foi opção do Laércio fazer por SSH e acho o Forward mais elegante do que VNC, o xauth é para gerencia de autorização da aplicação remota ser exibida no X do hospedeiro! este projeto já tomou rumos diferente o original com X,

O meu wscef-docker trabalha de maneira semelhante, entretanto não precisa utilizar SSH como protocolo de comunicação entre o host e convidado e carregar um SO operacional completo.

@farribeiro
Copy link

farribeiro commented Jun 28, 2017

@Patola
Copy link

Patola commented Mar 19, 2018

Caras, descobri uma coisa legal.
Uma coisa ruim dos ambientes de desktop é que ele agrupa essa janela do virtualbox como mais uma janela do firefox. É uma merda pra gerenciar.
Pra evitar isso, mude a linha de comando de início do firefox, adicionando --class CaixaEconomica --name CaixaEconomica antes do -private-window e ele não agrupará mais junto. Acaba funcionando como se fosse uma webapp. Super-prático. Já patcheei minha VM e meu fork do script.

@Patola
Copy link

Patola commented Mar 19, 2018

Aliás, melhor ainda, dá pra fazer um .desktop file com isso. Baixei o logo da caixa da net e fiz esse .desktop:

[Desktop Entry]
Version=1.0
Name=Caixa Econômica
Comment=Firefox na Caixa Econômica Federal com a bosta do Warsaw
Exec=/ubuntinho/vagrant-cef -- %u
Icon=/ubuntinho/logocaixa.png
Terminal=false
StartupWMClass=CaixaEconomica
Type=Application
Categories=Network;Banking;
MimeType=x-scheme-handler/tg;

@farribeiro
Copy link

Poderia nos deixar um screenshot para ver como fica a solução?

@farribeiro
Copy link

farribeiro commented May 17, 2018

@Patola,

Não compreendi qual efeito essa opção --class causa ao menos no SSH Forwarder do @lbsousa

No docker, tem comportamento semelhante ao SSH X11 Forwarder, não notei tal diferença, pedi para dar um review para se encontra como esperado, no aguardo.

Link para PR farribeiro/wscef-docker#39

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment