32 bits rodando em 64

De Física Computacional
Ir para: navegação, pesquisa

Muitos programas úteis como openoffice (BrOffice) ou flash plugins para navegadores não tem versões estáveis para 64 bits. Os passos abaixo mostram como fazer isto em um AMD64 com instalação Debian.

Resumidamente, o método consiste em fazer uma instalação básica de 32 bits em um diretório (/var) da instalação de 64 bits e, quando os programas de 32 bits forem solicitadas, passa-se a usar (chroot) automaticamente esse diretório como raiz para a execução do mesmo.

Os passos abaixo são uma tradução aproximada de artigo encontrado em uma página do administrador Debian.

1. Instalando o chroot

1.1) Criar (com o usuário root) o diretório vazio na raiz:

$ mkdir /var/etch-386-chroot


1.2) Instalar o sistema base Debian etch versão i386 nesse diretório (abaixo é uma única linha de comando):

$ debootstrap --arch i386  etch  /var/etch-386-chroot  http://debian.if.ufrgs.br/debian/

Escolha o espelho mais próximo... Isto deve demorar de 10 a 15 min. Se tudo deu certo até aqui deve aparecer ao final a mensagem:

I: Base system installed successfully.

Se o comando debootstrap não existir, instale com:

$ apt-get install debootstrap


1.3) Coloque o caminho(path) de suas bibliotecas no /etc/ld.so.conf. Para isto edite esse arquivo de forma que ele fique assim:

     /usr/X11R6/lib
     # chroot i386 system libs
     /var/etch-386-chroot/lib
     /var/etch-386-chroot/usr/lib
     /var/etch-386-chroot/usr/X11R6/lib
     /var/etch-386-chroot/usr/local/lib


1.4) Coloque o link para o seu linker de 32 bits no caminho de /lib, mas preserve o link original, caso algo dê errado...

$ cd /lib
$ mv ld-linux.so.2 ld-linux.so.2.orig
$ ln -s /var/etch-386-chroot/lib/ld-linux.so.2  ld-linux.so.2


1.5) Rode ldconfig para atualizar o cache do seu linker.

$ ldconfig


1.6) Para rodar um programa dentro do chroot necessita-se que algumas partes do sistema 64 bits estejam dentro do chroot. Isto pode ser feito com um "bind mount". No exemplo abaixo, ligaremos o /tmp, o /home e o proc. Edite o arquivo /etc/fstab adicionando as linhas abaixo:

   #ia32 chroot
   /home /var/etch-386-chroot/home none bind 0 0
   /tmp  /var/etch-386-chroot/tmp none bind 0 0
   proc  /var/etch-386-chroot/proc proc defaults 0 0


1.7) Monte todos eles...

$ mount /var/etch-386-chroot/home
$ mount /var/etch-386-chroot/tmp
$ mount /var/etch-386-chroot/proc


1.8) Passe os usuários e grupos para o chroot:

$ cp /etc/passwd /var/etch-386-chroot/etc/passwd
$ cp /etc/shadow /var/etch-386-chroot/etc/shadow
$ cp /etc/group /var/etch-386-chroot/etc/group


1.9) Nesse ponto pode-se já rodar programas dentro do chroot. Troque o shell do diretório raiz para o do seu chroot:

$ chroot /var/etch-386-chroot


1.10) Experimente rodar algo simples como:

$ cat /etc/apt/sources.list


2. Instalar programas 32-bits no chroot

2.1) Ainda dentro do shell do chroot instale uns pacotes que precisaremos (o comando abaixo é de apenas uma linha)...

$ apt-get install libogg0 libogg-dev libvorbis0a libvorbis-dev vorbis-tools
   libpng12-0 libpng12-dev liblogfile-rotate-perl libconfhelper-perl 
   debhelper   fakeroot gcc g++ libgtk1.2 libgtk1.2-dev svgalibg1
   svgalibg1-dev libsdl1.2-dev  libaa1 libaa1-dev libxv1 libxv-dev


2.2) Além de outros que sempre precisamos:

$ apt-get install vim bzip2 jed xjed 


2.3) Perl vai reclamar de não ter locale configurado... Adicione

    export LC_ALL=C 

ao arquivo /root/.bashrc e carregue-o:

    source ~/.bashrc


2.4) Agora que chegamos até aqui, instale da maneira usual aqueles programas que só rodam em 32 bits, e.g., para instalar o firefox:

$ apt-get install firefox

Saia do chroot e não esqueça de desinstalar a versão em 64 bits.

$ exit
$ apt-get remove firefox

Teste para ver se o firefox 64 foi desinstalada:

$ firefox
bash: firefox: command not found

Verifique se a versão 32 bits funciona:

$ xhost +
$ chroot /var/etch-386-chroot
$ firefox

Instale os plugins necessários como de hábito. O item 4, ao final desta, mostra detalhes para a instalação do flashplayer.


3. Tornando transparente ao usuário

Até agora tudo funcionou porque estamos trabalhando como root e fazendo manualmente a passagem para 32 bits via chroot. Para o usuário normal isto tudo deve ser feito quando ele chama o programa do ambiente de 64 bits.


3.1) Saia do chroot e instale o pacote dchroot:

$ exit
$ apt-get install dchroot


3.2) Crie o arquivo /etc/dchroot.conf com o conteúdo abaixo:

#etchi386 chroot
 etchi386 /var/etch-386-chroot


3.3) Agora um usuário normal deve ser capaz de rodar comandos no chroot:

$ dchroot -d firefox


3.4) Adicione um script para facilitar as coisas de forma que se possa chamar os programas 32 bits transparentemente da linha de comando. No diretório /usr/local/bin crie o script abaixo, nomeie-o do_chroot e troque as permissões para 755:

  #!/bin/sh
  ARGS=""
  for i in "$@" ; do
     ARGS="$ARGS '$i'"
  done
  exec dchroot -d -q "`basename $0`" "$ARGS"


3.5) Último passo crie os links simbólicos dos programas para o script:

$ln -s do_chroot firefox

4.) Instalando o flashplayer

4.1) Crie e entre em um diretório temporário, baixe o pacote flashplayer da Macromedia e abra-o.

  $ mkdir tmp; cd tmp
  $ wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_7_linux.tar.gz
  $ tar xvzf install_flash_player_7_linux.tar.gz

4.2) Como root, entre no diretório install_flash_player_7_linux (criado no desempacotamento) e copie os arquivos flashplayer.xpt e libflashplayer.so para o diretório de plugins de instalação do firefox:

  $ cp flashplayer.xpt /var/etch-386-chroot/usr/lib/firefox/plugins
  $ cp libflashplayer.so /var/etch-386-chroot/usr/lib/firefox/plugins

4.3) Acerte as permissões:

  $ cd /var/etch-386-chroot/usr/lib/firefox/plugins
  $ chmod a+rw flashplayer.xpt
  $ chmod a+rw  libflashplayer.so

4.4) Provavelmente faltará a biblioteca libXmu6 na sua instalação i386; faça o chroot para a instalação 386 e instale a biblioteca:

  $ chroot /var/etch-386-chroot/
  $ apt-get update
  $ apt-get install libXmu6

4.5) Saia do chroot, abra o firefox como usuário normal e digite na linha de endereços internet do navegador:

  about:plugins

O Shockwave flash deve aparecer entre os plugins instalados.