Skip to content

Instantly share code, notes, and snippets.

@tavinus
Last active December 17, 2019 11:18
Show Gist options
  • Save tavinus/559c6fef56a757e524c86deffdfb9dc0 to your computer and use it in GitHub Desktop.
Save tavinus/559c6fef56a757e524c86deffdfb9dc0 to your computer and use it in GitHub Desktop.
Rodar Autosystem em AMD64 e ARM

Para rodar o Autosystem em sistemas não suportados.
Exemplos: Linux 64 bits, Raspberry Pi.

debootstrap em AMD64

Testado em

  • Linux Mint 18.3 x86_64

1 - Máquina Hospedeira 64 bits

Pegar pacotes

sudo apt update
sudo apt install debootstrap schroot

Criar config do schroot

sudo editor /etc/schroot/chroot.d/jessie_i386.conf

Exemplo (edite os dois campos de usuário onde tem tavinus)

[jessie_i386]
description=Debian Jessie for i386
directory=/srv/chroot/jessie_i386
personality=linux32
root-users=tavinus
#run-setup-scripts=true
#run-exec-scripts=true
type=directory
users=tavinus

Criar diretório do sistema auxiliar

sudo mkdir -p /srv/chroot/jessie_i386

Rodar debootstrap para Debian Jessie i386

sudo debootstrap --arch i386 jessie /srv/chroot/jessie_i386 http://ftp.br.debian.org/debian/

Listar ambientes schroot

schroot -l

Abrir um terminal no Debian i386

xhost +SI:localuser:root # preparar o X pra rodar o AS mais tarde
schroot -c jessie_i386 -u root

2 - Instalar AS no jessie_i386 do chroot

Configurar Locales

apt update
apt install locales
dpkg-reconfigure locales

Eu selecionei en_US e pt_BR, ambos com UTF-8 e ISO-8859-1 e depois pt_BR.UTF-8 como padrão.

Reconfigurar timezone

dpkg-reconfigure tzdata

Pacotes para preparar o environment

O cups pode pedir a senha do root neste passo, dê ENTER (vazio).

apt install rsync ssh openssh-client openssh-server git curl wget cups-common cups cups-bsd printer-driver-cups-pdf lsb-release libcanberra-gtk-module

Rodar o instalador as_deb_install.sh

export DISPLAY=:0     # Para mandar os programas do AS pro X Server
cd $HOME
wget -O as_deb_install.sh https://gist.githubusercontent.com/tavinus/146bdce3695cae9cfec02b534c2ff30f/raw/
chmod +x as_deb_install.sh
./as_deb_install.sh

Em teoria vai correr tudo normalmente até o final.

Configurar defaults da fstab do debootstrap

Com essa config o Autosystem imprime do ambiente chroot.
Provavelmente é melhor flexibilizar as pastas montadas no ambiente chroot depois de instalar o autosystem e fazer os updates do chroot pois ao montar as pastas adicionais o ambiente chroot acaba interferindo mais no ambiente host 64 bits.

Por exemplo, o autosystem pede o cups que vai instalar e modificar aquivos nas pastas montadas do sistema host. É preferível montar a pasta host por cima da original da instalação (de fato o comando mount exige que o destino exista de qualquer forma).

Editar o arquivo padrao

sudo nano /etc/schroot/default/fstab

Adicione ao final

/etc/printcap   /etc/printcap   none    rw,bind         0       0
/run/cups       /run/cups       none    rw,bind         0       0

Exemplo de uma config completa, com pastas adicionais também habilitadas

# fstab: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/proc           /proc           none    rw,bind         0       0
/sys            /sys            none    rw,bind         0       0
/dev            /dev            none    rw,bind         0       0
/dev/pts        /dev/pts        none    rw,bind         0       0
/home           /home           none    rw,bind         0       0
/tmp            /tmp            none    rw,bind         0       0

# It may be desirable to have access to /run, especially if you wish
# to run additional services in the chroot.  However, note that this
# may potentially cause undesirable behaviour on upgrades, such as
# killing services on the host.
/run           /run            none    rw,bind         0       0
/run/lock      /run/lock       none    rw,bind         0       0
/dev/shm       /dev/shm        none    rw,bind         0       0
/run/shm       /run/shm        none    rw,bind         0       0

# Extending cups support
# Agora imprime do autosystem
/etc/printcap   /etc/printcap   none    rw,bind         0       0
/run/cups       /run/cups       none    rw,bind         0       0

qemu-debootstrap em ARM

Raspberry Pi Raspbian

Testado em

  • Raspbian GNU/Linux 9 (stretch)

1 - Máquina Hospedeira ARM

Pegar pacotes

sudo apt update
sudo apt-get install binfmt-support qemu qemu-user-static debootstrap

Criar config do schroot

sudo editor /etc/schroot/chroot.d/jessie_i386.conf

Exemplo config

[jessie_i386]
description=Debian Jessie for i386
directory=/srv/chroot/jessie_i386
personality=linux32
root-users=pi
#run-setup-scripts=true
#run-exec-scripts=true
type=directory
users=pi

Criar diretório do sistema auxiliar

sudo mkdir -p /srv/chroot/jessie_i386

Rodar qemu-debootstrap para Debian Jessie i386

sudo qemu-debootstrap --arch i386 jessie /srv/chroot/jessie_i386 http://deb.debian.org/debian/

Listar schroot

schroot -l

Abrir um terminal no Debian i386

xhost +SI:localuser:root # preparar o X pra rodar o AS mais tarde
schroot -c jessie_i386 -u root

2 - Instalar AS no jessie_i386 do chroot

Configurar Locales

apt update
apt install locales
dpkg-reconfigure locales

Eu selecionei en_US e pt_BR, ambos com UTF-8 e ISO-8859-1 e depois pt_BR.UTF-8 como padrão.

Reconfigurar timezone

dpkg-reconfigure tzdata

Pacotes para preparar o environment

O cups vai pedir a senha do root neste passo, dê ENTER (vazio).

apt install rsync ssh openssh-client openssh-server git curl wget cups-common cups cups-bsd printer-driver-cups-pdf lsb-release libcanberra-gtk-module

Rodar o instalador as_deb_install.sh

export DISPLAY=:0     # Para mandar os programas do AS pro X Server
cd $HOME
wget -O as_deb_install.sh https://gist.githubusercontent.com/tavinus/146bdce3695cae9cfec02b534c2ff30f/raw/
chmod +x as_deb_install.sh
./as_deb_install.sh

Em teoria vai correr tudo normalmente até o final.

@tavinus
Copy link
Author

tavinus commented Apr 7, 2018

Default Apps config xdg-utils

Para que o AS tenha programas para abrir arquivos PDF, TXT, etc

Abrir ambiente chroot

schroot -c jessie_i386 -u "$user"

Adicionar programas desejados

Exemplo (precisa das fontes extras no sources.list)

sudo apt-get update
sudo apt-get install xdg-utils evince xpdf leafpad

Editar

sudo nano /usr/share/applications/defaults.list

Conteúdo

application/pdf=evince.desktop;xpdf.desktop
text/plain=leafpad.desktop
application/csv=leafpad.desktop
text/csv=leafpad.desktop

Nota: Usando leafpad pra abrir planilhas CSV para poder salvar e depois abrir no LibreOffice Calc do sistema nativo

@tavinus
Copy link
Author

tavinus commented Apr 8, 2018

UZBL browser pra abrir URLs

Browser leve e funcional, mas apresentou problemas pra lidar com o certificado SSL da linx

Entrar no ambiente chroot

schroot -c jessie_i386 -u "$USER" # abrir chroot

Instalar

sudo apt-get update                    # update
sudo apt-get install uzbl              # install

Patch /usr/lib/python2.2/webbrowser.py

Infelizmente não parace ter escapatória, precisamos modificar o core do python2.2 pra poder usar o uzbl.
A mudança é simples, vamos adicionar o uzbl-browser como opção.

sudo cp /usr/lib/python2.2/webbrowser.py /usr/lib/python2.2/webbrowser.py-backup
sudo nano /usr/lib/python2.2/webbrowser.py

Primeiro adicionamos "uzbl-browser" como primeira opção

if os.environ.get("TERM") or os.environ.get("DISPLAY"):
    _tryorder = ["uzbl-browser","mozilla","netscape","kfm","grail","links","lynx","w3m"]

Depois criamos o bloco register( )

    # X browsers have more in the way of options
    if os.environ.get("DISPLAY"):
        # UZBL patch
        if _iscommand("uzbl-browser"):
            register("uzbl-browser", None, GenericBrowser(
                "uzbl-browser '%s' >/dev/null &"))

Aqui o bloco todo modificado

#
# Platform support for Unix
#

# This is the right test because all these Unix browsers require either
# a console terminal of an X display to run.  Note that we cannot split
# the TERM and DISPLAY cases, because we might be running Python from inside
# an xterm.
if os.environ.get("TERM") or os.environ.get("DISPLAY"):
    _tryorder = ["uzbl-browser","mozilla","netscape","kfm","grail","links","lynx","w3m"]

    # Easy cases first -- register console browsers if we have them.
    if os.environ.get("TERM"):
        # The Links browser <http://artax.karlin.mff.cuni.cz/~mikulas/links/>
        if _iscommand("links"):
            register("links", None, GenericBrowser("links '%s'"))
        # The Lynx browser <http://lynx.browser.org/>
        if _iscommand("lynx"):
            register("lynx", None, GenericBrowser("lynx '%s'"))
        # The w3m browser <http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/eng/>
        if _iscommand("w3m"):
            register("w3m", None, GenericBrowser("w3m '%s'"))

    # X browsers have more in the way of options
    if os.environ.get("DISPLAY"):
        # UZBL patch
        if _iscommand("uzbl-browser"):
            register("uzbl-browser", None, GenericBrowser(
                "uzbl-browser '%s' >/dev/null &"))

        # First, the Netscape series
        if _iscommand("mozilla"):
            register("mozilla", None, Netscape("mozilla"))
        if _iscommand("netscape"):
            register("netscape", None, Netscape("netscape"))

Config SSL

Infelizmente ele não gosta dos certificados da linx e dá erro de TLS ao acessar a área do cliente
Outros sites funcionam normalmente, quando chequei o cert da linx com gnutls, também deu erro

Workaround, desligar SSL

Longe de ser ideal, mas no momento a única forma de acessar área do cliente

nano "$HOME/.config/uzbl/config"

Modifique conforme texto abaixo

# === SSL related configuration ==============================================

# Set it to certificates store of your distribution, or your own CAfile.
set ssl_ca_file = /etc/ssl/certs/ca-certificates.crt
set ssl_verify = 0
set ssl_policy ignore

gnutls debug

Veja o Status: The certificate is NOT trusted. The certificate issuer is unknown.
No Chrome e Firefox o cadeadinho ficou verde, até tentei exportar o certificado (GoDaddy G2), mas continuou negando.

$ gnutls-cli cliente.linx.com.br </dev/null
Processed 148 CA certificate(s).
Resolving 'cliente.linx.com.br'...
Connecting to '187.92.243.28:443'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
- Certificate[0] info:
 - subject `OU=Domain Control Validated,CN=*.linx.com.br', issuer `C=US,ST=Arizona,L=Scottsdale,O=GoDaddy.com\, Inc.,OU=http://certs.godaddy.com/repository/,CN=Go Daddy Secure Certificate Authority - G2', RSA key 2048 bits, signed using RSA-SHA256, activated `2016-04-27 19:47:40 UTC', expires `2019-04-27 19:47:40 UTC', SHA-1 fingerprint `0b68d31c05c4bbebb9ac4cb54ec8973c610b5b27'
	Public Key ID:
		56b3636d9758c845638c8011633a125f08241b4d
	Public key's random art:
		+--[ RSA 2048]----+
		|  o+E. .*+.. +=  |
		|   +.o.+.. ..+.. |
		|  . . +   o o .  |
		|     . . . + o . |
		|        S + + o  |
		|       . . o .   |
		|                 |
		|                 |
		|                 |
		+-----------------+

- Status: The certificate is NOT trusted. The certificate issuer is unknown. 
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.
*** Handshake has failed
GnuTLS error: Error in the certificate.

Pegar launchers .desktop

O Autosystem ignora os launchers para browser, portanto a configuração abaixo é totalmente opcional para o Autosystem.
Ainda assim talvez seja interessante para deixar o uzbl como browser padrão do ambiente chroot.

cd /usr/share/applications
sudo wget -O 'uzbl-core.desktop' 'https://raw.githubusercontent.com/uzbl/uzbl/master/uzbl-core.desktop'
sudo wget -O 'uzbl-tabbed.desktop' 'https://raw.githubusercontent.com/uzbl/uzbl/master/uzbl-tabbed.desktop'

Definir padrão

sudo nano /usr/share/applications/defaults.list

Adicionar ao final

x-scheme-handler/http=uzbl-core.desktop;
x-scheme-handler/https=uzbl-core.desktop;

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