Tabela de conteúdos
OpenRC
O OpenRC é um sistema de gerenciamento de serviços baseado em dependências. Funciona com o programa init fornecido pelo sistema, normalmente /sbin/init.
Características
O OpenRC fornece uma série de recursos, como execução de initscript iniciada por hardware e suporte a cgroups, sem a necessidade de grandes alterações de layout.
Instalação
Dois Slackbuilds estão disponíveis em openrc, que contêm o sistema de inicialização OpenRC, e o openrc-services, que contém vários serviços para uso com o OpenRC.
Pós-instalação
Após a instalação, algumas etapas são necessárias para inicializar com o OpenRC.
Configure os serviços agetty
# main tty ln -s /etc/openrc/init.d/agetty /etc/openrc/init.d/agetty.tty1 /sbin/rc-update add agetty.tty1 default cp /etc/openrc/conf.d/agetty /etc/openrc/conf.d/agetty.tty1 echo 'agetty_options="--noclear"' >> /etc/openrc/conf.d/agetty.tty1 # additional ttys for i in {2..6}; do ln -s /etc/openrc/init.d/agetty /etc/openrc/init.d/agetty.tty${i} /sbin/rc-update add agetty.tty${i} default done # serial tty (for servers) ln -s /etc/openrc/init.d/agetty /etc/openrc/init.d/agetty.ttyS0 /sbin/rc-update add agetty.ttyS0 default cp /etc/openrc/conf.d/agetty /etc/openrc/conf.d/agetty.ttyS0 echo 'agetty_options="--noclear"' >> /etc/openrc/conf.d/agetty.ttyS0
Atualizar parâmetros de inicialização
Adicione o seguinte aos seus parâmetros de inicialização (via /etc/lilo.conf para o lilo ou /etc/default/grub para o grub):
init=/sbin/openrc-init
Regenerar a configuração de inicialização ('lilo -v' ou 'grub-mkconfig -o /boot/grub/grub.cfg').
Habilitar o registro de inicialização
O principal arquivo de configuração do OpenRC é o /etc/openrc/rc.conf, e contém várias opções.
Uma opção comum que pode ser alterada é habilitar o log de inicialização configurando rc_logger=“YES”
, desta forma, quaisquer erros encontrados através da inicialização podem ser registrados e examinados posteriormente (a localização padrão do log é /var/log/rc.log).
Na reinicialização
Na reinicialização, um é inicializado em uma linha de comando com apenas o mínimo de serviços habilitados.
Pode mostrar um aviso sobre o suporte obsoleto so arquivo /etc/mtab. Para corrigir:
# cp /etc/mtab /etc/mtab.bkp # ln -snf /proc/self/mounts /etc/mtab
Também pode reclamar de falta do arquivo /etc/sysctl.conf que pode ser criado como:
# touch /etc/sysctl.conf
Ativando alguns serviços
Os serviços podem ser ativados como:
# rc-service add <service> <runlevel>
Eles podem ser desativados como:
# rc-service del <service> <runlevel>
Alguns serviços comuns que podem ser ativados:
# rc-update add dbus default # rc-update add sysklogd default # rc-update add dcron default # rc-update add alsasound boot # para desktop # rc-update add consolekit default # para desktop # rc-update add sshd default # para server
Os serviços habilitados no nível de execução atual podem ser consultados com:
$ rc-status
Serviços habilitados em todos os níveis de execução podem ser consultados com:
$ rc-update
Alguns serviços que são ativados por padrão para o runlevel sysinit incluí udev e udev-postmount.
Usuários que usam dmcrypt, lvm, ou mdraid podem adicionar os seguintes serviços respectivamente ao nível de execução boot:
# rc-update add dmcrypt boot # dmcrypt # rc-update add device-mapper boot # lvm # rc-update add lvm boot # lvm # rc-update add mdraid boot # mdraid
Network
Se estiver usando ethernet via DHCP, o serviço dhcpcd pode ser habilitado:
# rc-update add dhcpcd default
Se estiver usando wi-fi em laptops, o serviço NetworkManager ou wicd pode ser habilitado; o serviço dhcpcd pode ser habilitado. A combinação de dhcpcd e wpa_supplicant (junto com um frontend como wpa_gui ou wpa_cli) também pode ser usada como uma alternativa leve.
Uma rede estática pode ser configurada editando /etc/openrc/conf.d/network.
Gerenciador de Tela
Para inicializar em um gerenciador de exibição gráfica, pode editar o arquivo /etc/openrc/conf.d/xdm para especificar o gerenciador de exibição, e o serviço xdm pode ser habilitado:
# rc-update add xdm default
Se estiver usando um laptop, o serviço acpid também pode ser habilitado.
Migrando serviços habilitados existentes
Para verificar os serviços habilitados existentes, o seguinte código pode ser usado:
for file in /etc/rc.d/*; do if [ -x "${file}" ]; then echo "enabled ${file}" fi done
Para esses serviços, os serviços OpenRC correspondentes podem ser habilitados, por exemplo:
# rc-update add acpid default # rc-update add cgmanager default # rc-update add gpm default ...
Todos os serviços presentes podem ser consultados via:
$ rc-update -v
Configuração
Os serviços OpenRC estão presentes no diretório /etc/openrc/init.d, e os arquivos de configuração correspondentes estão presentes em /etc/openrc/conf.d
Alguns arquivos de configuração comuns incluem:
/etc/openrc/conf.d/modules # módulos a serem carregados na inicialização /etc/openrc/conf.d/hostname # nome do host do sistema /etc/openrc/conf.d/keymaps # mapa de teclado do console
Gestão de serviços
Os serviços podem ser iniciados/interrompidos/reiniciados como:
# rc-service <service> <action>
Por exemplo,
# rc-service sshd start
Desligar/Reiniciar
Para desligar ou reiniciar, será necessário usar openrc-shutdown. Para desligar de um ambiente de desktop usando ConsoleKit2, verifique o PR.
Note
Os arquivos ck-system-stop e ck-system-restart no PR pode ser salvos em /usr/local/sbin/poweroff e /usr/local/sbin/reboot respetivamente. Isso permite usar os comandos poweroff e reboot como antes.
Troubleshooting
Neste momento, apenas um subconjunto dos serviços incluídos foi testado, portanto, alguns deles podem não funcionar corretamente.
Se algum serviço não funcionar, tente o sistema fornecido em /etc/rc.d (se estiver disponível).
mysqld
Experimente adicionar as seguintes linhas ao arquivo /etc/my.cnf
[mysqld] user = mysql basedir = /usr datadir = /var/lib/mysql pid-file = /run/mysql/mysql.pid socket = /var/run/mysql/mysql.sock
Lidar com serviços interrompidos
Às vezes, o OpenRC relata o status de um serviço como “travado”. O processo pode ter morrido ou seu arquivo pid desapareceu/mudou.
Se alguém tentar iniciar um serviço travado, `rc-service` reporta:
- WARNING: <service> has already been started
Então, tenta-se parar antes de começar de novo.
No entanto, em algumas situações, o serviço não pára. Isso leva a um impasse em que não se pode interromper o serviço nem iniciá-lo. Para esses casos:
# rc-service <service> zap * Manually resetting <service> to stopped state
zap redefine o estado do serviço, permitindo-nos reiniciá-lo.
openrc-init
Desde a versão 0.25, OpenRC fornece openrc-init que pode ser usado para inicializar o sistema.
Isso permite alternar entre OpenRC e outros sistemas init, por exemplo sysvinit, apenas alterando os parâmetros de inicialização.
Para obter mais informações, consulte o Gentoo wiki.
Migrando do /etc/init.d para /etc/openrc/init.d
O OpenRC 0.39+, fornecido via SBo, altera o diretório de serviço e configuração para /etc/openrc em vez do /etc.
Isso está sendo feito para manter uma maior compatibilidade com a instalação do Slackware por padrão.
Os serviços existentes precisarão ser migrados, detalhes abaixo sobre como isso pode ser feito.
1. Instalar openrc-0.39.2 e openrc-services-20181107
Esses pacotes enviam os arquivos de configuração e serviço em /etc/openrc.
2. Migrar serviços existentes
Isso envolve 4 etapas:
# migrar serviços existentes for service in /etc/init.d/*; do svcname=$(basename "$service") if [ ! -e "/etc/openrc/init.d/${svcname}" ]; then if [ -f "/etc/init.d/${svcname}" ] && grep -q openrc "/etc/init.d/${svcname}"; then cp -v "/etc/init.d/${svcname}" "/etc/openrc/init.d/${svcname}" elif [ -L "/etc/init.d/${svcname}" ]; then # check if symlink is of a service service_target=$(readlink -f "$service") service_target_name=$(basename "$service_target") if [ $(dirname "$service_target") = "/etc/init.d" ]; then ln -sv "/etc/openrc/init.d/${service_target_name}" "/etc/openrc/init.d/${svcname}" fi fi fi done # habilitar serviços existentes for runlevel in /etc/runlevels/*; do for service in ${runlevel}/*; do svcname=$(basename "$service") rvlname=$(basename "$runlevel") if [ ! -e /etc/openrc/runlevels/${rvlname}/${svcname} ] && [ -e /etc/openrc/init.d/${svcname} ]; then ln -sv /etc/openrc/init.d/${svcname} /etc/openrc/runlevels/${rvlname}/${svcname} fi done done # verificar mudanças de configuração for file in /etc/conf.d/*; do filename=$(basename "$file") extension="${filename##*.}" if [ "$extension" = orig ] || [ "$extension" == new ]; then continue # dont need to check extra fi if [ -e "/etc/conf.d/${filename}" ] && [ -e "/etc/openrc/conf.d/${filename}" ]; then diff -Nupr "/etc/conf.d/${filename}" "/etc/openrc/conf.d/${filename}" fi done # arquivo de configuração principal diff -Nupr /etc/rc.conf /etc/openrc/rc.conf # verificar alterações locais.d for file in /etc/local.d/*; do filename=$(basename "$file") if [ ! -e "/etc/openrc/local.d/${filename}" ]; then cp -v "/etc/local.d/${filename}" "/etc/openrc/local.d/${filename}" elif [ -e "/etc/local.d/${filename}" ] && [ -e "/etc/openrc/local.d/${filename}" ]; then # show changes diff -Nupr "/etc/local.d/${filename}" "/etc/openrc/local.d/${filename}" fi done
As alterações de configuração encontradas acima podem ser atualizadas manualmente ou copiadas e coladas em um novo local.
3. Verifique e reinicie
Verifique se rc-status
está mostrando todos os serviços (pode mostrá-los como interrompidos).
Reinicialize e verifique se as coisas estão funcionando como esperado, faça as alterações necessárias.
Os arquivos e pastas antigos podem ser renomeados (ou removidos).
mv /etc/init.d /etc/init.d-openrc-bkp mv /etc/conf.d /etc/conf.d-openrc-bkp mv /etc/local.d /etc/local.d-openrc-bkp mv /etc/runlevels /etc/runlevels-openrc-bkp mv /etc/rc.conf /etc/rc.conf-openrc.bkp
Finalmente, qualquer mudança feita no sistema Slackware padrão pode ser revertida:
mv /etc/init.d-bkp /etc/init.d