• Nenhum resultado encontrado

Conversão de scripts init SysV em arquivos unitários

No documento Red Hat Enterprise Linux 8 (páginas 123-126)

Usando o comando de desligamento

7. Verifique se o sshd-second.service está rodando usando o comando systemctl status 8 Verificar se a porta está habilitada corretamente, conectando-se ao serviço:

3.5.4. Conversão de scripts init SysV em arquivos unitários

Antes de tomar tempo para converter um script de inicialização SysV em um arquivo de unidade, certifique-se de que a conversão ainda não foi feita em outro lugar. Todos os serviços centrais instalados no Red Hat Enterprise Linux vêm com arquivos de unidade padrão, e o mesmo se aplica a muitos pacotes de software de terceiros.

A conversão de um roteiro de inicialização em um arquivo de unidade requer a análise do roteiro e a extração das informações necessárias do mesmo. Com base nestes dados, você pode criar um arquivo unitário. Como os scripts de inicialização podem variar muito dependendo do tipo de serviço, você pode precisar empregar mais opções de configuração para a tradução do que as descritas neste capítulo. Observe que alguns níveis de personalização que estavam disponíveis com scripts de inicialização não são mais suportados por unidades do sistema.

A maioria das informações necessárias para a conversão é fornecida no cabeçalho do roteiro. O exemplo a seguir mostra a seção de abertura do script de inicialização usado para iniciar o serviço postfix no Red Hat Enterprise Linux 6:

!/bin/bash # postfix Postfix Mail Transfer Agent # chkconfig: 2345 80 30 # description: Postfix is a Mail Transport Agent, which is the program that moves mail from one machine to another. # processname: master # pidfile: /var/spool/postfix/pid/master.pid # config: /etc/postfix/main.cf # config:

/etc/postfix/master.cf BEGIN INIT INFO # Provides: postfix MTA # Required-Start: $local_fs $network $remote_fs # Required-Stop: $local_fs $network $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop postfix # Description: Postfix is a Mail Transport Agent, which is the program that moves mail from one machine to another. # END INIT INFO

No exemplo acima, apenas as linhas que começam com # chkconfig e # description são obrigatórias, portanto, você pode não encontrar o resto em diferentes arquivos init. O texto incluído entre as linhas BEGIN INIT INFO e END INIT INFO se chama Linux Standard Base (LSB) header. Se especificado, os cabeçalhos da LSB contêm diretrizes que definem a descrição do serviço, as dependências e os níveis de execução padrão. O que segue é uma visão geral das tarefas analíticas com o objetivo de coletar os dados necessários para um novo arquivo de unidade. O script init postfix é usado como um exemplo.

3.5.4.1. Encontrando a descrição de serviço do sistema

Você pode encontrar informações descritivas sobre o roteiro na linha começando com #description. Use esta descrição junto com o nome do serviço na opção Description na seção [Unidade] do arquivo da unidade. O cabeçalho da LSB pode conter dados similares nas linhas #Short-Description e

#Description.

3.5.4.2. Encontrar as dependências de serviço do sistema

O cabeçalho da LSB pode conter várias diretrizes que formam dependências entre serviços. A maioria delas é traduzível para opções de unidades do sistema, veja Tabela 3.12, “Opções de dependência do cabeçalho da LSB”

Tabela 3.12. Opções de dependência do cabeçalho da LSB

Opção LSB Descrição Equivalente de arquivo unitário

Provides Especifica o nome da instalação de inicialização do serviço, que pode ser referenciado em outros scripts de inicialização (com o prefixo "$"). Isto não é mais necessário, pois os arquivos de unidade se referem a outras unidades pelos nomes de seus arquivos.

Required-Start Contém os nomes das instalações de inicialização dos serviços necessários. Isto é traduzido como uma dependência de pedido, os nomes das instalações de boot são substituídos por nomes de arquivos de unidade dos serviços correspondentes ou alvos aos quais pertencem. Por exemplo, no caso de postfix, a dependência de início de rede requerida em $ foi traduzida para a dependência de início de rede Após dependência de rede.target.

After, Before

Should-Start Constitui dependências mais fracas do que o início necessário. Dependências Falhadas Should- Start não afetam a inicialização do serviço.

After, Before

Required-Stop, Should-Stop Constituir dependências negativas.

Conflicts

A linha que começa com #chkconfig contém três valores numéricos. O mais importante é o primeiro número que representa os níveis de execução padrão nos quais o serviço é iniciado. Mapear estes níveis de execução para metas equivalentes do sistema. Em seguida, liste estes alvos na opção WantedBy na seção [Instalar] do arquivo da unidade. Por exemplo, postfix foi iniciado anteriormente nos runlevels 2, 3, 4 e 5, o que se traduz para multi-usuário.target e gráfico.target. Note que o graphical.target depende do multiuser.target, portanto não é necessário especificar ambos. Você pode encontrar informações sobre níveis de execução padrão e proibidos também em #Default-Start e #Default-Stop linhas no cabeçalho da LSB.

Os outros dois valores especificados na linha #chkconfig representam as prioridades de inicialização e desligamento do init script. Estes valores são interpretados por systemd se ele carrega o roteiro de inicialização, mas não há arquivo de unidade equivalente.

3.5.4.4. Encontrar arquivos utilizados pelo serviço

Os scripts de inicialização exigem o carregamento de uma biblioteca de funções de um diretório

dedicado e permitem a importação de configuração, ambiente e arquivos PID. As variáveis de ambiente são especificadas na linha começando com #config no cabeçalho do init script, que se traduz para a opção de arquivo de unidade EnvironmentFile. O arquivo PID especificado na linha de scripts init #pidfile é importado para o arquivo de unidade com a opção PIDFile.

A informação chave que não está incluída no cabeçalho do init script é o caminho para o executável do serviço, e potencialmente alguns outros arquivos requeridos pelo serviço. Em versões anteriores do Red Hat Enterprise Linux, os scripts de inicialização usavam uma declaração de caso Bash para definir o comportamento do serviço em ações default, tais como start, stop ou restart, bem como ações personalizadas. O seguinte trecho do script init postfix mostra o bloco de código a ser executado no início do serviço. conf_check() { [ -x /usr/sbin/postfix ] || exit 5 [ -d /etc/postfix ] || exit 6 [ -d /var/spool/postfix ] || exit 5 } make_aliasesdb() {

if [ "$(/usr/sbin/postconf -h alias_database)" == "hash:/etc/aliases" ] then

# /etc/aliases.db might be used by other MTA, make sure nothing # has touched it since our last newaliases call

[ /etc/aliases -nt /etc/aliases.db ] ||

[ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] || [ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return /usr/bin/newaliases

touch -r /etc/aliases.db "$ALIASESDB_STAMP" else

/usr/bin/newaliases fi

} start() {

[ "$EUID" != "0" ] && exit 4 # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 conf_check

# Start daemons.

make_aliasesdb >/dev/null 2>&1

[ -x $CHROOT_UPDATE ] && $CHROOT_UPDATE

/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start" RETVAL=$?

[ $RETVAL -eq 0 ] && touch $lockfile echo

return $RETVAL }

A extensibilidade do init script permitiu especificar duas funções personalizadas, conf_check() e make_aliasesdb(), que são chamadas a partir do bloco de funções start(). Observando mais de perto, vários arquivos e diretórios externos são mencionados no código acima: o principal serviço executável /usr/sbin/postfix, os diretórios de configuração /etc/postfix/ e /var/spool/postfix/, assim como o diretório /usr/sbin/postconf/.

Systemd suporta apenas as ações predefinidas, mas permite executar executáveis personalizados com ExecStart, ExecStartPre, ExecStartPost, ExecStop, e ExecReload opções. O /usr/sbin/postfix junto com os scripts de suporte são executados no início do serviço. A conversão de scripts complexos de inicialização requer a compreensão do propósito de cada declaração no script. Algumas das declarações são específicas para a versão do sistema operacional, portanto, não é necessário traduzi-las. Por outro lado, alguns ajustes podem ser necessários no novo ambiente, tanto no arquivo de unidade quanto no executável do serviço e nos arquivos de suporte.

No documento Red Hat Enterprise Linux 8 (páginas 123-126)