[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

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

Veja também

Sources

 pt-br:howtos:general_admin:openrc ()
Esta tradução é mais antiga que a página original e pode estar desatualizada. Veja o que foi mudado.