Ver Feed RSS

Olhos que ardem...

Migrando o Gentoo para o OpenRC e Baselayout2

Avalie este Post de Blog
Introducão

Este pequeno artigo tem a missão de ajudar os usuários do Gentoo a migrar seu S.O. para usar o OpenRC e Baselayout2. No Gentoo a maioria das chamadas de sistema (em especial durante a inicialização) são feitas em linguagem Bash, com a migração estas serão feitas em C, provendo um melhor desempenho. Já fiz esta migração em várias estações de trabalho e servidores (em casa e no trabalho) sempre com sucesso. Basta seguir as orientações abaixo e qualquer dúvida consultar a documentação do Gentoo Linux.

O que é baselayout?
Baselayout provê um conjunto básico de arquivos os quais são necessários para que todos os sistemas funcionem propriamente, como o /etc/hosts. Ele também provê o layout básico de sistema de arquivo usado pelo Gentoo, isto é, diretórios /etc, /var, /usr, /home, etc.

O que é OpenRC?

OpenRC é um sistema de dependência-baseada em rc que trabalha com qualquer init que é provido pelo sistema, normalmente /sbin/init. Embora, ele não seja um substituto para o /sbin/init. O padrão usado pelo Gentoo Linux é sys-apps/sysvinit, enquanto o Gentoo/FreeBSD usa o FreeBSD init provido pelo sys-freebsd/freebsd-sbin.

Então porque migrar?

Originalmente o sistema de rc do Gentoo foi construído dentro do baselayout1 e escrito inteiramente em Bash. Isto conduz para várias limitacões. Por exemplo, certas chamadas de sistema precisam ser acessadas durante o boot e isto requer a adicão de chamadas (callouts) baseadas em C. Estas chamadas são ligadas estaticamente, causando ao sistema rc excesso de tempo para iniciar o sistema.

Adicionalmente, assim como o Gentoo expande para outras plataformas como o Gentoo/FreeBSD e Gentoo Embedded, ele tornou-se impossível de requerer um sistema rc baseado em Bash. Isto nos conduz ao Baselayout2, o qual é escrito inteiramente em C e requer somente um shell compatível com POSIX.

OpenRC é primariamente desenvolvido por Roy Marples e suporta todas as versões variantes do Gentoo: Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded, and Gentoo Vserver; e outras plataformas assim como o FreeBSD e NetBSD.


Migração para o OpenRC

A migração para o OpenRC é bastante direta; ela será feita em como parte de um processo regular de atualização (upgrade) através do gerenciador de pacotes (emerge). O passo mais importante vem depois de instalar os mais novos pacotes >=sys-apps/baselayout-2 e sys-apps/openrc. É decisivo que você execute o dispatch-conf ou etc-update (depende de sua preferência) e assim assegurar que seu /etc esteja acordo com os requisitos do "novo" sistema depois da reinicialização.

Uma falha resultará num sistema não-inicializável e requererá o uso de um LiveCD do Gentoo para realizar os passos abaixo para reparar seu sistema.


Um vez terminada a atualização de seus arquivos de configuração, existirão umas poucas coisas para verificar antes da reinicialização.

/etc./conf.d/rc

/etc./conf.d/rc tem estado obsoleto e qualquer modificação será migrada para para o /etc/rc.conf. Compare seus /etc/rc.conf e /etc/conf.d/rc e migre as modificações feitas. Uma vez feito, apague o arquivo /etc/conf.d/rc.

Módulos do Kernel

Normalmente, quando você quer que certos módulos sejam carregados durante a inicialização, você os coloca dentro de /etc/modules.autoload.d/kernel-2.6 junto com os parâmetros necessários (ou opcionais). No baselayout-2, este arquivo não é mais usado. Em vez disso, módulos carregados automaticamente são colocados em um arquivo, /etc/conf.d/modules, não importa a versão do kernel.

Em exemplo seria:
Código :
[FONT=Courier New]/etc/modules.autoload.d/kernel-2.6
 
tun 
igb
cx88_dvb video_br=2[/FONT]
Depois da migracão:
Código :
[FONT=Courier New]/etc/conf.d/modules
 
# Modules autoloaded at boot
modules_2_6="tun igb cx88_dvb"
# Module parameters
module_cx88_dvb_args_2_6="video_br=2"[/FONT]
Um exemplo mais complexo:
Código :
[FONT=Courier New]/etc/conf.d/modules
 
# Always load ochi1394 and ieee1394, no matter the kernel version
modules="ohci1394 ieee1394"
# Only load tun and usbserial for 2.6.x series kernels
modules_2_6="tun usbserial"
# Only load cx88_dvb for 2.6.23 kernels
modules_2_6_23="cx88_dvb"
# Only load ivtv for 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"
 
# For 2.6.23-gentoo-r5, pass video_br=2 to cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# For 2.6.x series kernels, always pass vendor and product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Always pass debug to ieee1394
module_ieee1394_args="debug" [/FONT]

Importante: As variáveis module* não são acumulativas. A maioria das variáveis de versão-específica irão sobrepor a maioria das variáveis gerais.



Boot runlevel

O boot runlevel (nível de inicialização) executa importantes passos para toda a máquina. Por exemplo, tenha certeza que seu sistema de arquivo root esteja montado como leitura/escrita, que tenha sida feita uma verificação de erros, que todos os pontos de montagem estejam disponíveis, e que o /proc sistema de arquivo pseudo-filesystem tenha sido iniciado durante o boot.

Com OpenRC, serviços de gerenciamento de volume para seus dispositivos de storage não são mais executados automaticamente durante a inicialização. Isto inclui lvm, raid, swap, device-mapper (dm), dm-crypt, evms e semelhantes. Você precisa assegurar o initscript apropriado para estes serviços estejam no boot runlevel, fora isso é possível que seu sistema não inicialize.

Enquanto o ebuild OpenRC tentará fazer esta migração para você, você deve verificar que ele migrou todos os serviços de gerenciamento de volume propriamente:

Mostra todos os serviços no boot runlevel:
Código :
[FONT=Courier New]# ls -l /etc/runlevels/boot/[/FONT]
Se você não ver root, procfs, mtab, swap, e fsck na lista que será dada pelo comando acima, execute o seguinte comando para adicioná-los no boot runlevel:
Código :
[FONT=Courier New]# rc-update add root boot
# rc-update add procfs boot
# rc-update add mtab boot
# rc-update add fsck boot
# rc-update add swap boot[/FONT]
Adicionando mdraid e lvm no boot runlevel:
Código :
# rc-update add mdraid boot
# rc-update add lvm boot


Udev


OpenRC não mais inicia udev por padrão, mas ele não precisa estar presente no sysinit runlevel (nível de execução sysinit) para ser iniciado. O ebuild OpenRC deveria detectar se udev foi previamente ativado e adicionado ao sysinit runlevel. Embora, para ser seguro, verifique se udev está presente:

Verificando Udev

Código :
[FONT=Courier New]# ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev[/FONT]
Se udev não estiver listado, adicione-o no nível de execução (runlevel) correto:
Código :
[FONT=Courier New]# rc-update add udev sysinit[/FONT]


Rede


Devido ao baselayout e OpenRC ter sido quebrado em dois diferentes pacotes, seu initscitp net.eth0 pode ter desaparecido durante o processo de atualização. Para substituir este initscript execute o seguinte:

Adcionando o script net.eth0

Código :
# cd /etc/init.d
# ln -s net.lo net.eth0
Caso você sinta falta de outros initscripts refaça o procedimento anterior, adicionando os ausentes.

Também, /etc/conf.d/net não usa mais o estilo Bash de arrays para configuração. Revise a documentação em /usr/share/doc/openrc-<version>/net.example para instruções de configuração. Conversão deveria ser relativamente direta, por exemplo um endereço I.P. estático mudaria para o seguinte:

Antigo estilo do /etc/conf.d/net:
Código :
[FONT=Courier New]config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" )[/FONT]
Novo estilo do /etc/conf.d/net:
Código :
[FONT=Courier New]config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100"[/FONT]

Relógio


Configurações de relógio foi alterada em /etc/conf.d/clock. Isto significa que no Linux ela será /etc/conf.d/hwclock e no FreeBSD ela será /etc/conf.d/adjkerntz. Sistemas sem um chip de relógio de tempo real (RTC) trabalhando usariam /etc/init.d/swclock, o qual ajusta o tempo do sistema baseado no mtime de um arquivo o qual é criado pelo desligamento do sistema. Os initscripts em /etc/init.d/ tem também sido renomeados de acordo, então tenha certeza de que o apropriado scritp para seu sistema esteja adicionado no boot runlevel.

Além disso, a variável TIMEZONE não é mais ajustada nesse arquivo. Seu conteúdo está em no arquivo /etc/timezone. Se ele não existe, você terá que criá-lo com a timezone corresponde a sua localização. O valor apropriado pode ser encontrado em /usr/share/zoneinfo.
Código :
[FONT=Courier New]# ls /usr/share/zoneinfo[/FONT]
Em meu caso:
Código :
[FONT=Courier New]# cat /etc/timezone
Brazil/East[/FONT]

XSESSION


A variável XSESSION não é mais encontrada em /etc/rc.conf. Em vez disso, você pode ajustá-la a variável por-usuário no arquivo ~/.bashrc ou equivalente ( "~" significa sua $HOME), ou no ambiente do sistema em /etc/env.d/.

Um exemplo de configuração para todo os sistema:
Código :
# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession

Você precisa executar env-update após criar um arquivo em /etc/env.d, e então sair (logout) e entrar (login) para que isto tenha efeito. Se você ajustou a variável em ~/.bashrc, você pode reler o arquivo ~/.bashrc para ajustar a variável no sistema, usando o comando: # source ~/.bashrc



EDITOR e PAGER

A variável EDITOR não é mais encontrada em /etc/rc.conf. Ambos EDITOR e PAGER estão configuradas por padrão em /etc/profile. Você deveria mudar isto assim quando necessário em seu arquivo ~/.bashrc ou equivalente ou criar o arquivo /etc/env.d/99editor e ajustar a variável por padrão nele.

Você precisa executar env-update após criar um arquivo em /etc/env.d, e então sair (logout) e entrar (login) para que isto tenha efeito. Se você ajustou a variável em ~/.bashrc, você pode reler o arquivo ~/.bashrc para ajustar a variável no sistema, usando o comando: # source ~/.bashrc



Boot log

Anteriormente, você poderia acompanhar as atividades ocorridas durante o processo de boot usando o aplicativo app-admin/showconsole. Embora, OpenRC agora maneja tudo anotando internamente, então não existe necessidade para acompanhar a saída do showconsole. Você pode retirar o showconsole sem problemas. Para continuar a anotação das mensagens da inicialização, apenas ajuste a variável apropriada no /etc/rc.conf:

Ativando boot logging no /etc/rc.conf:
Código :
[FONT=Courier New]rc_logger="YES"[/FONT]
Terminando!

Uma vez terminadas todas as atualizações de seus arquivos de configuração e initscripts, a última coisa a fazer é reiniciar. Isto porque o estado de informação do sistema não está completamente preservada durante a atualização.


Referências:
- Baselayout and OpenRC Migration Guide
- OpenRC
- Gentoo Handbook


Agradecimentos:

- Ao portal Under-Linux.org
- Ao Code pela ajuda no tutorial.
- Ao NBCGIB onde está localizado o parque computacional, onde foram realizados os testes.

Atualizado 09-08-2010 em 08:49 por Duca

Categorias
Pessoal , Under-Linux , Tutoriais

Comentários


+ Enviar Comentário