====== 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 [[slackware:slackbuild_scripts|Slackbuilds]] estão disponíveis em [[http://slackbuilds.org/repository/14.2/system/openrc/|openrc]], que contêm o sistema de inicialização OpenRC, e o [[http://slackbuilds.org/repository/14.2/system/openrc-services/|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 Eles podem ser desativados como: # rc-service del 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 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 [[https://github.com/ConsoleKit2/ConsoleKit2/pull/113|PR]]. ==== Note ==== Os arquivos **ck-system-stop** e **ck-system-restart** no [[https://github.com/ConsoleKit2/ConsoleKit2/pull/113|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: 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 zap * Manually resetting 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 [[https://wiki.gentoo.org/wiki/OpenRC#openrc-init|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 ====== [[https://en.wikipedia.org/wiki/OpenRC|Wikipedia]] [[https://wiki.gentoo.org/wiki/OpenRC|Gentoo Wiki]] [[https://github.com/OpenRC/openrc/|Github]] [[https://github.com/OpenRC/openrc/blob/master/user-guide.md|User guide]] [[https://www.linuxquestions.org/questions/slackware-14/using-openrc-on-slackware-4175542567/|LQ thread]] [[https://gitlab.com/aadityabagga/openrc-services|openrc-services repo]] ====== Sources ====== * Original escrito por [[wiki:user:aaditya | Aaditya]] * Tradução Português por [[wiki:user:macgyverpt | MacgyverPT (Miguel Rosa)]] {{tag>howtos init author_aaditya}} {{tag>translated_pt macgyverpt }}