Tag Archive | Ubuntu

Instalando o Ubuntu em um ambiente chroot jail no Archlinux – parte 2

Continuando o artigo anterior, vou descrever como ficou a versão final de minha instalação Ubuntu dentro do ambiente chroot e mostrar as configurações que haviam ficado pendentes:

  • D-Bus
  • PulseAudio

Mudanças desde a última versão

Eu estava enfrentando alguns problemas com o debconf/apt-get, então resolvi pegar a instalação de minha máquina virtual e transferir para o ambiente chroot. Para transferir a partição, que estava em um arquivo vdi, reconhecido somente pelo VirtualBox, eu coloquei a ISO de um livecd na VM, e a partir da VM usei o comando (onde o remote.host era meu próprio ip):

NOTA: Antes de transferir a sua instalação Ubuntu, eu recomendo fortemente que instale todos os pacotes que você irá utilizar antes de transferir a partição. Isso vai lhe poupar bastante trabalho.

Para montar a imagem gerada com o comando anterior você pode usar o comando:

Você pode alterar o arquivo /etc/rc.d/chrootbuntu para que ele faça a montagem dessa imagem para você. Ele ficaria então assim:

Nova configuração do ambiente chroot

Um processo interessante é também copiar certos arquivos de configuração que recriem o ambiente Archlinux dentro do ambiente Ubuntu, como arquivos de usuários e grupos. Isso é importante porque em sistemas Linux, um processo qualquer herda as configurações de ambiente do processo-pai, e dessa forma o comando chroot herdará as configurações de ambiente do processo bash, que está rodando dentro do seu Archlinux. Quando iniciar o bash do sistema Ubuntu, ele utilizará os arquivos de configuração que estão inconsistentes com as variáveis de ambiente herdadas. Abaixo um simples teste que mostra sobre sobre o quê eu estou discutindo:

Você pode resolver o problema dessa inconsistência copiando arquivos importantes do sistema. Apenas execute os comandos abaixo:

Agora que o ambiente chroot está consistente com o ambiente Archlinux instalado, podemos também tornar o comando xhost mais seguro, restringindo os usuários com acesso ao seu servidor X:

D-Bus + PulseAudio

Para configurar uma única instância do D-Bus para todo o sistema, use os comandos abaixo antes de iniciar qualquer serviço D-Bus do ambiente chroot (lembrando que você também pode colocá-los no arquivo /etc/rc.d/chrootbuntu):

Para permitir que aplicativos que façam uso do PulseAudio reproduzam som, utilizaremos as capacidades do PulseAudio de transmitir som através da rede. Para tal, edite o arquivo /etc/pulse/default.pa (tanto no Ubuntu quanto no Archlinux), adicionando/descomentando a linha:

Essa mudança irá garantir que o seu PulseAudio carregue o módulo tcp durante a inicialização, mas caso ele já esteja rodando, abra o console do pulseaudio (usando o comando pacmd), e use a mesma linha anterior como um comando nesse console.

Agora que o módulo está carregado, precisamos autorizar o usuário do ambiente chroot a acessar o servidor PulseAudio rodando localmente. Para tal, copie o arquivo de cookie que está na sua pasta de usuário (~/.pulse-cookie) para a pasta dos usuários irão usar o PulseAudio dentro do ambiente chroot.

Para finalizar, crie/edite o arquivo /etc/asound.conf do Ubuntu adicionando o conteúdo a seguir:

Isso irá garantir que aplicações que façam uso diretamente do ALSA utilizem o PulseAudio.

Script facilitador

Um script que você pode colocar na sua pasta de usuário para automatizar a tarefa de configuração do X11 + PulseAudio é:

É isso.

EDIT:

Alguns programas (como o ROS, discutido na parte anterior do artigo), não irão funcionar corretamente se você configurou hostnames diferentes para a sua instalação Archlinux e sua instalação Ubuntu. Caso você tenha feito isso, não se desespere, basta editar o arquivo /etc/hosts e tudo vai funcionar normalmente.

EDIT2:

Alterei a linha:

Para:

Pois quando eu atualizei para o Linux 3.0 no Archlinux o comando antigo parou de funcionar.

EDIT3 (2014/02/10):

Hoje em dia eu não faria a abominação de copiar os arquivos da pasta /etc que definem usuários e grupos do ambiente hospedeiro para o ambiente convidado (ainda mais quando são baseados em distribuições completamente diferentes). Tal solução… tão vulgar… e pedindo para dores de cabeça no futuro. Só não apago o artigo, porque suas outras partes são úteis.

Hoje em dia eu só iria usar chroot para aplicações mínimas que não exigem comunicação com outros serviços do sistema. Se a aplicação precisar se comunicar com D-Bus, o Apache ou qualquer outro serviço do sistema, eu optaria por usar containers (chroot on steroids) no lugar. E a não ser que haja um meio fácil de atualizar a aplicação (e suas dependências) do chroot mínimo, eu acabaria optando por um ambiente completo no lugar de mínimo só para ter a facilidade de atualizar os pacotes facilmente (gerenciadores de pacotes ftw). Na verdade, eu provavelmente ainda acabaria optando por um container caso o ambiente convidado possuísse systemd, só para usufruir de suas funcionalidades legais como reiniciar serviços mortos, ativação por socket, monitoração de watchdog, interface unificada e bem documentada, …

E a “solução muito esperta” do D-Bus está com os dias contados com o pessoal querendo mover o D-Bus para o kernel.

Anúncios

Instalando o Ubuntu em um ambiente chroot jail no Archlinux

Devido ao fim de semestre na UFAL, não tive tempo para postar nada no mês passado, assim como não tive tempo também para trabalhar em meus próprios projetos.

Acho que esse é o meu primeiro post desde que meu blog foi agregado ao Planeta GNU/Linux Brasil e ao planeta Arch Linux Brasil.

Nesse post vou detalhar o processo de instalar um sistema Ubuntu aprisionado em um ambiente chroot gerenciado pelo Archlinux. Se você quiser ler mais sobre esse assunto recomendo a leitura das páginas:

Eu estou fazendo isso para trabalhar com o ROS no Archlinux sem a necessidade de usar gambiarras no sistema sem recorrer a uma VM e para colocar todos os pacotes não-livres como o skype dentro de um ambiente isolado. Alguns outros usos para um ambiente chroot podem ser:

  • Isolar aplicativos instáveis e inseguros
  • Rodar aplicativos 32-bit em ambientes 64-bit
  • Testar novos pacotes antes de instalá-los em um ambiente de produção
  • Rodar aplicativos mais velhos em sistemas mais modernos
  • Criar novos pacotes, permitindo um controle cuidadoso sobre as dependências que são instaladas

A arquitetura do ambiente

Com esse processo, pretendo criar um ambiente chroot que é separado em um daemon e um script a ser executado pelo usuário. O daemon vai preparar o ambiente chroot e adicionaremos ele a lista de daemons do sistema. O script a ser executado pelo usuário vai configurar o ambiente para que aplicativos usem o servidor X local e o servidor pulseaudio local.

Escolhi a versão LTS do Ubuntu porque é chato ficar gerenciado um ambiente chroot ou qualquer outro ambiente que não seja seu ambiente primário, então só vou precisar manter a cada 1,5 ano essa instalação.

Escolhi também a versão 32-bit do Ubuntu por conta de meu sistema ser 64-bit. Aí o que eu, dificilmente, não conseguir rodar nativamente aproveito para colocar no ambiente chroot.

Preparando o ambiente chroot

  1. Instale o pacote debootstrap
  2. Crie o diretório /srv/chroot/lucid
  3. Escolha um mirror aqui
  4. Execute o comando a seguir como root
  5. O meu comando ficou assim:
  6. Aguarde o processo de download e instalação terminar

Criando um daemon para o ambiente chroot

Crie o arquivo /etc/rc.d/chrootbuntu com o seguinte conteúdo:

Adicione permissão de execução ao arquivo com o comando:

Adicione-o na lista de DAEMONS no seu arquivo /etc/rc.conf para iniciá-lo junto com o sistema.

schroot

Schroot é uma ferramenta que permite usuários comuns rodarem comandos em ambientes chroot. Além disso, a ferramenta prepara o ambiente realizando algumas tarefas de configuração automaticamente, como montagens de sistemas de arquivos. Para instalá-la:

Após isso, adicione as seguintes linhas no arquivo /etc/schroot/schroot.conf:

Após isso você poderá abrir um shell no ambiente chroot usando seu usuário com o comando:

Se você tentar usar o comando anterior agora, deve ver o erro:

Isso ocorre porque o Archlinux e o Ubuntu usam sistemas de configuração de interfaces de redes diferentes, então a etapa de configuração de rede falha. Para evitar que a ferramenta schroot tente configurar a rede, remova o arquivo 20nssdatabases da pasta /etc/schroot/setup.d (recomendo movê-lo para uma pasta de backup).

Configurando o ambiente chroot

Para entrar no ambiente chroot sem usar o schroot, você pode usar, como root, o comando:

Nesse momento, a instalação do Ubuntu está crua, e muitos programas não vão funcionar corretamente. Um dos problemas nesse momento é configurar um locale, que no Ubuntu é feito automaticamente quando você instala algum language pack:

Precisamos também de um editor de texto para editar alguns arquivos de configuração:

Após isso, no ambiente chroot, edite o arquivo /etc/apt/sources.list para que ele fique com o seguinte conteúdo:

Então use o comando a seguir para atualizar a lista de pacotes:

Antes de prosseguir com a instalação de outros pacotes, é interessantes instalar os dois pacotes a seguir, pois o apt-get sozinho não é capaz de tratar da configuração dos pacotes.

Agora seria interessante criar um usuário comum dentro desse ambiente chroot, pois não é uma boa prática realizar todas as tarefas como root:

Configuração do X

Para rodar aplicativos gráficos que estão dentro do ambiente chroot, você precisa, a partir do seu ambiente Archlinux, em um terminal logado como seu usuário normal, rodar o seguinte comando:

Após isso qualquer aplicativo que você rode a partir do seu ambiente chroot vai usar automaticamente o servidor X em execução no seu sistema.

Bônus: ROS

ROS é o meta sistema operacional open source para robótica com o qual um grupo aqui na UFAL está trabalhando. Um dos problemas de instalá-lo no Archlinux, é que seus scripts apontam para o python mais recente, mas ele usa o python2, ocasionando muitos problemas, principalmente em distribuições rolling release como o Archlinux.

A situação do ROS no Ubuntu é mais estável, sendo a distribuição bem suportada oficialmente e ele pode ser instalado dentro do ambiente chroot que criamos normalmente, seguindo as instruções do site oficial:

http://www.ros.org/wiki/diamondback/Installation/Ubuntu

Próxima etapa

Muitos aplicativos gráficos costumam utilizar o dbus, então é recomendado que o dbus esteja configurado no ambiente chroot. Na próxima parte do artigo tentarei configurar o dbus e o pulseaudio para que os aplicativos do Ubuntu rodem suavemente dentro do Archllinux.

Fontes

Minhas fontes de consulta para criar esse ambiente e esse artigo foram:

%d blogueiros gostam disto: