trabalhando com init no debian

8
 Trabalhando com init no Debian Introdução  Este artigo irá tratar de scripts de inicialização e manipulação relacionados ao init , está agora dividido em 2  partes: 1) Ferramentas para manipular os inits. rcconf update-rc.d sysv-rc-conf sysvconfig 2) Ferramentas para trabalhar com eles. invoke-rc.d  Na unha Script Service1 para Debian Script Service2 para Debian Script para criação e uso de um rc.local para o Debian Existem dois estilos de init: o  BSD e o SYS-V . Cada um tem suas peculiaridades. O  Debian usa init SYS-V. Os scripts são armazenados em  /etc/init.d e links são criados em  /etc/rc?.d , onde o ? representa o runlevel. ATENÇÃO! Especificamente, antes de entrar em qualquer nível de execução, todos os scripts iniciados com 'K' são executados; esses scripts matam (param) serviços. Então todos os scripts iniciados com 'S' são executados; esses scripts iniciam serviços. O número de dois dígitos seguido de 'K' ou 'S' indica a ordem na qual o script é executado. Scripts de menor valor numérico são executados primeiro. Esse método funciona porque todos os scripts em /etc/init.d/ aceit am um argumento que pode ser "start" (iniciar), "stop" (parar), "reload" (recarregar), "restart" (reiniciar) ou "force-reload" (forçar-recarregar) e irão  portanto cumprir a tarefa indicad a pelo argumento. Esses scripts podem ser usados mesmo depois que um sistema tenha sido iniciado para controlar vários processos. Caso deseje adicionar novos serviços para iniciar junto com o boot, devemos adicionar o script em /etc/init.d/<script>. Assim sendo, para invocar um script temos: /etc/init.d/<script> <opção> Usuários e não-administradores de distribuições ligeiramente diferentes, sente alguma dificuldade de adaptação, quando necessita subir algum serviço e já vai logo lançando um "service", ou adicionar um runlevel com o conhecido "ntsysv" e recebe um lindo e merecido: command not found. Para quem sente falta de um gerenciador de runlevel no Debian, temos quatro opções legais: 1) rcconf 2) update-rc.d 3) sysv-rc-conf 4) sysvconfig

Upload: wellington-joao-da-silva

Post on 11-Jul-2015

51 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 1/8

Trabalhando com init no Debian

Introdução 

Este artigo irá tratar de scripts de inicialização e manipulação relacionados ao init , está agora dividido em 2 partes:

1) Ferramentas para manipular os inits.

• rcconf 

• update-rc.d

• sysv-rc-conf 

• sysvconfig

2) Ferramentas para trabalhar com eles.

• invoke-rc.d

•  Na unha

• Script Service1 para Debian

• Script Service2 para Debian

• Script para criação e uso de um rc.local para o Debian

Existem dois estilos de init: o BSD e o SYS-V . Cada um tem suas peculiaridades. O Debian usa init SYS-V.Os scripts são armazenados em /etc/init.d e links são criados em /etc/rc?.d , onde o ? representa o runlevel.

ATENÇÃO!

Especificamente, antes de entrar em qualquer nível de execução, todos os scripts iniciados com 'K' sãoexecutados; esses scripts matam (param) serviços. Então todos os scripts iniciados com 'S' são executados;esses scripts iniciam serviços. O número de dois dígitos seguido de 'K' ou 'S' indica a ordem na qual o scripté executado. Scripts de menor valor numérico são executados primeiro.

Esse método funciona porque todos os scripts em /etc/init.d/ aceitam um argumento que pode ser "start"(iniciar), "stop" (parar), "reload" (recarregar), "restart" (reiniciar) ou "force-reload" (forçar-recarregar) e irão

 portanto cumprir a tarefa indicada pelo argumento. Esses scripts podem ser usados mesmo depois que umsistema tenha sido iniciado para controlar vários processos.

Caso deseje adicionar novos serviços para iniciar junto com o boot, devemos adicionar o script em/etc/init.d/<script>.

Assim sendo, para invocar um script temos: /etc/init.d/<script> <opção>

Usuários e não-administradores de distribuições ligeiramente diferentes, sente alguma dificuldade deadaptação, quando necessita subir algum serviço e já vai logo lançando um "service", ou adicionar umrunlevel com o conhecido "ntsysv" e recebe um lindo e merecido: command not found.

Para quem sente falta de um gerenciador de runlevel no Debian, temos quatro opções legais:

1) rcconf 2) update-rc.d3) sysv-rc-conf 4) sysvconfig

Page 2: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 2/8

rcconf  

Muito semelhante ao ntsysv da Red Hat , porém com muitos problemas.

O rcconf é um front-end para o update-rc.d.

O rcconf permite você controlar que serviços são iniciados quando o sistema inicia ( :S ), ele irá mostrar umatela onde você poderá ver o status de cada serviço [*] ou [ ].

O rcconf trabalha obtendo a lista de serviços de /etc/init.d e observa nos diretórios /etc/rc?.d para determinar se cada serviço está ligado ou não no boot. Se o número NN (de /etc/rc?.d/NNname) não é 20 (padrão),rcconf salva o nome do serviço junto ao seu número em /var/lib/rcconf/services para que seja possívelrestabelecer o serviço para sua configuração original.

Instalação:

# apt-get install rcconf  

Atualizar menus:

# update-rcconf-guide 

Utilização:

# rcconf  

Ele irá chamar uma tela demonstrando o que temos de inicialização e marcará para iniciar ou não iniciar (desativar).

Marcando a desativação, o script passará a ter, nos respectivos runlevel, o argumento K00script.

update-rc.d 

Um outro mais interessante e MUITO mais eficiente é o update-rc.d .

Instalação:# apt-get install file-rc update-rc.d 

Utilização:

update-rc.d <nome> start NN runlevel . stop NN runlevel . 

 Nome é o mesmo nome do arquivo contido em /etc/init.d, NN significa a ordem em que eles serãoiniciados/parados e runlevel especifica em quais runlevels eles serão iniciados/parados.

Exemplo com o script firewall.

 NOTA: O arquivo deve estar dentro do diretório init.d.

# update-rc.d firewall start 20 2 3 4 5 . stop 20 0 1 6 . 

Page 3: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 3/8

 NOTA: Se já existir uma entrada no arquivo como o nome especificado, update-rc.d não irá fazer nada.

Você também pode deixar os runlevels como padrão:

update-rc.d <nome> defaults [NN | NN-start NN-stop] 

Colocando o defaults, ele irá deixar os runlevels para inicialização como: 2, 3, 4 e 5; e para finalização: 0, 1 e6 (para saber mais, leia a manpage do init). NN indica que o arquivo terá a mesma prioridade nainicialização/finalização. Para deixar diferente, especifique NN-start para a inicialização e NN-stop parafinalização.

 NOTA: É recomendável sempre especificar um runlevel para os serviços serem finalizados.

Ex:

# update-rc.d firewall defaults

Já para remover um arquivo da inicialização/finalização, use:

update-rc.d [-f] <nome> remove 

O -f pode ser usado para que o update-rc.d remova também links simbólicos. Este comando excluirá os linksdos rcN.d, e conseqüentemente com que o serviço seja iniciado e parado manualmente, ou seja, você

 precisará usar o script em /etc/init.d/firewall <opção>.

Ex:

# update-rc.d -f firewall remove 

Uma opção que pode ser usada em ambos os 3 comandos é -n. Ela faz com que update-rc.d simule o queaconteceria.

# update-rc.d -n firewall remove 

 Não se preocupe, ele irá mostrar a saída corretamente, porém, não haverá nenhuma alteração.

sysv-rc-conf e sysvconfig 

É uma ferramenta com interface gráfica para configuração do runlevel do SysV para o terminal.

Instalação:

# aptitude install sysv-rc-conf  

Dependências: os pacotes extra a seguir serão instalados:

# apt-get install libcurses-perl libcurses-ui-perl libterm-readkey-perl 

Os NOVOS pacotes a seguir serão instalados:libcurses-perl libcurses-ui-perl libterm-readkey-perl sysv-rc-conf 

Execução:

Page 4: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 4/8

# sysv-rc-conf  

Para incluir o seu script, visualize ele na listagem da esquerda e marque com um [X] no runlevel 2.

Para excluir, desmarque deixando a opção em branco [].

Para selecionar use a tecla de espaço.

sysvconfig

O comando sysvconfig é um editor escrito em dialog, utilizado para:

• Habilitar e desabilitar serviços;

• Editar os links dos runlevels;

• Restaurar de um arquivo backup o estado original de seus init;

• Apesar de possuir uma interface em dialog, ele também funciona em modo texto.

Ferramentas para manipular os init 

invoke-rc.d

O comando invoke-rc.d nada mais é que um script que faz o trabalho bem feito de invocação dos serviçoslocalizados em /etc/init.d/<serviço>. Você deve passar como parâmetro padrão [ start | stop | force-stop |restart | reload | force-reload | status ].

Ex:

# invoke-rc.d squid reload

Uma dica, caso deseje utilizá-lo como um comando "service <serviço> [ parâmetro ]", você pode criar umalias:

# vi ~/.bashrc

alias service='invoke-rc.d'

Na UnhaaPronto, para quem gosta de bash, aí esta!

Copie o script para o diretório /etc/init.d/:

# cp script /etc/init.d/ 

Torne o script executável:

# chmod +x /etc/init.d/script

Entre no diretório /etc/rc2.d:

# cd /etc/rc2.d/

Page 5: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 5/8

Crie um link para o seu script:

# ln -s /etc/init.d/script /etc/rc2.d/S19script 

OBS: Como foi explicado anteriormente os scripts que iniciam com 'S' passam start como seu argumento, e o'19' assegura que o script seja chamado antes de quaisquer scripts contendo números 20 ou superiores.

Se você não precisa que o script seja um dos primeiros a iniciar, ou melhor que ele seja iniciado lá no finaldo boot, você pode colocá-lo como 99.

# ln -s /etc/init.d/script /etc/rc2.d/S99script 

Para retirar o script da inicialização, apenas remova o link, assim:

# rm -f /etc/rc2.d/S99script 

OBS: Os argumentos K e S devem, obrigatoriamente, estar em Caixa Alta (maiúscula).

Este problema de iniciar programas no boot é um problema crucial para os users do Debian e distribuições baseadas nela (arquivos em /etc/default não fazem efeito no Debian). No próprio manual dele, tem algumascoisas falando sobre isso. Dêem uma olhada no site do Debian.

 Nota: por mais que eu não tenha especificado o Ubuntu, essa dica também vale para ele.

Script Service1 

#! /bin/sh# Script versão 0.01 do service para Debian

# Esta é a primeira versão do meu script service, tudo ANTES de conhecer o invoke-rc.d.# Flavio Torres - [email protected]

case "$2" instart)

echo "Iniciando servico $1 "/etc/init.d/$1 start

;;stop)

echo "Parando servico $1 "/etc/init.d/$1 stop

;;*)echo "USO: service <script> {start|stop}"exit 1;;esacexit 0Para este script funcionar legalzinho, sem ter de executá-lo a partir de seu diretório vigente, você DEVEincluí-lo no diretório "echo $PATH" do sistema, o mesmo para o script SERVICE2 abaixo.

Service Script2 

#!/bin/sh

VERSION="`basename $0` ver. 0.91"

Page 6: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 6/8

USAGE="Uso: `basename $0` < option > | --status-all |[ service_name [ command | --full-restart ] ]"SERVICE=SERVICEDIR="/etc/init.d"

if [ $# -eq 0 ]; thenecho "${USAGE}" >&2

exit 1fi

while [ $# -gt 0 ]docase "${1}" in--help | -h | --h* )

echo "${USAGE}" >&2exit 0;;--version | -V )

echo "${VERSION}" >&2exit 0;;*)if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then

cd "${SERVICEDIR}"for SERVICE in *; do

case "${SERVICE}" infunctions | halt | killall | single| linuxconf| kudzu |*rpmorig | *rpmnew | *rpmsave | *~ | *.orig)

;;

*)if [ -x "${SERVICEDIR}/${SERVICE}" ]; then

"${SERVICEDIR}/${SERVICE}" statusfi;;esacdoneexit 0elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then

SERVICE="${1}"cd "${SERVICEDIR}"

if [ -x "${SERVICEDIR}/${SERVICE}" ]; then"${SERVICEDIR}/${SERVICE}" stop"${SERVICEDIR}/${SERVICE}" startexit $?

fielif [ -z "${SERVICE}" ]; then

SERVICE="${1}"else

OPTIONS="${OPTIONS} ${1}"fi

shift;;esacdone

Page 7: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 7/8

if [ -x "${SERVICEDIR}/${SERVICE}" ]; then"${SERVICEDIR}/${SERVICE}" ${OPTIONS}elseecho "${SERVICE}: Servico desconhecido" >&2

exit 1fi

Script RC.LOCAL 

#!/bin/sh# Script rc.local, este script eh utilizado para fazer manutencao e inicializacao no rc.local# Flavio Torres - [email protected]# Para fazê-lo útil, deve-se adicioná-lo diretorio /usr/bin/# versao 0.6 - abril de 2006

PATH=/bin:/sbin:/usr/bin:/usr/sbinexport PATH

TESTA(){if [ $? == 0 ]; then

echo -e [ 'e[40;32;1m OK e[m' ]else

echo -e [ 'e[40;31;1 ERRO e[m' ]fi}case "$1" instart)

if [ -f /etc/rc.local ]; then

exec /etc/rc.local 2>&1&> /dev/nullelseecho "O arquivo rc.local nao existe, utilize a opcao add."

fi;;stop)

echo "Sem acao";;

status)echo "Sem acao"

;;

restart|reload)$0 stop$0 start

;;

add) 

DIR="/etc/init.d"ARQ="/etc/rc.local"

if [ -e /etc/rc.local ]; thenprintf ""

elseecho "Criando configuracoes..."

Page 8: Trabalhando Com Init No Debian

5/11/2018 Trabalhando Com Init No Debian - slidepdf.com

http://slidepdf.com/reader/full/trabalhando-com-init-no-debian 8/8

touch /etc/rc.local && chmod 755 /etc/rc.localln -s /usr/bin/rc.local /etc/init.d/rc.localupdate-rc.d rc.local start 99 2 3 4 5 . stop 99 0 1 6 .TESTA

fiecho "Entre com o nome do script: "read NOMEgrep $NOME $ARQif [ $? == 0 ]; then

echo "^^^, O arquivo ja esta adicionado."if [ -e $DIR/$NOME ]; thenprintf ""else

chmod 755 $NOME && cp $NOME $DIR  printf "Porem nao existia em $DIR, adicionando..."TESTA

fielif [ -e $DIR/$NOME ]; then

chmod 755 $DIR/$NOME && echo $DIR/$NOME >> $ARQTESTAelsechmod 755 $NOME && cp $NOME $DIR && echo $DIR/$NOME >> $ARQTESTA

 fi

;;*)echo -n "Uso: $0 {add|start|stop|status|restart}"echo

exit 1esac