Migrando o Gentoo para o OpenRC e Baselayout2
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:
Depois da migracão:Código :[FONT=Courier New]/etc/modules.autoload.d/kernel-2.6 tun igb cx88_dvb video_br=2[/FONT]
Um exemplo mais complexo: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]
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:
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]# ls -l /etc/runlevels/boot/[/FONT]
Adicionando mdraid e lvm 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]
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
Se udev não estiver listado, adicione-o no nível de execução (runlevel) correto: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]
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
Caso você sinta falta de outros initscripts refaça o procedimento anterior, adicionando os ausentes.Código :# cd /etc/init.d # ln -s net.lo net.eth0
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:
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]
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.
Em meu caso:Código :[FONT=Courier New]# ls /usr/share/zoneinfo[/FONT]
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/90xsessionVocê 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:
Terminando!Código :[FONT=Courier New]rc_logger="YES"[/FONT]
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.
Comentários
+ Enviar Comentário