Arranque do Sistema o boot loader carrega o kernel E a seguir? Iniciação do Kernel. Iniciação de processos/serviços. Iniciação do Kernel Iniciar as estruturas de dados internas. Verificar o hardware do sistema. Verificar a integridade do sistema de ficheiros raiz e montar este sistema. Criar o processo 0 (swapper) e o processo 1 (init). Iniciação de Processo/Serviços Criar processos em Linux: fork Todos os processos precisam de um pai. init PID (Process ID) 1. Único processo que não tem pai Ancestral de todos os processos Iniciação de serviços do sistema Coloca o sistema num runlevel Runlevel(s) Runlevel Conjunto de serviços activos no sistema. Permite diferentes modos de operação Exemplo: No runlevel 3, uma máquina pode estar configurada como servidor web. No runlevel 5, a mesma máquina pode estar configurada para ser uma estação de trabalho Runlevel(s) Runlevel 0 1 2 3 4 5 6 S,s Descrição Paragem do sistema Modo single user. Apenas um pequeno conjunto de serviços se encontram activos. Só o root pode entrar no sistema. Modo multi-utilizador, sem partilha remota de ficheiros. Modo multi-utilizador, com partilha remota de ficheiros, processos e serviços. Não definido. Modo semelhante ao 3, mas com X11 iniciado. Reiniciar o sistema. O mesmo que single user (runlevel 1). Especifica a configuração de cada runlevel Indica ao init qual o runlevel que deve ser activado 1
Cada entrada (linha) possui quatro campos separados por : Formato: identificador:runlevel(s):acção:processo Identificador Um ou mais caracteres para identificar a entrada. Runlevel(s) Indica o(s) runlevel(s) onde esta entrada é processada. O tipo de acção Indica como é que o init deve executar o processo. O processo O caminho absoluto do processo a iniciar. Tipo de acções: respawn reinicia o processo quando este termina. sysinit executa o processo durante o arranque do sistema e antes de qualquer entrada com a acção boot ou bootwait wait o init espera que este processo termine para passar para a próxima entrada. once processar esta entrada uma vez, quando se entra no runlevel. boot processar esta entrada uma vez durante o boot (ignora os runlevels) boot-wait uma combinação de boot e wait. off não faz nada. initdefault especifica o runlevel de default da máquina. powerwait executado quando o init recebe o sinal de SIGPWR que normalmente indica uma falha de energia, o init espera que o processo termine. powerfail idem, mas o init não espera pelo processo. ctrlaltdel executado quando o init recebe o sinal SIGINT (ctrl+alt+del). id:5:initdefault: # System initialization. si::sysinit:rc.sysinit l0:0:wait:rc 0 l1:1:wait:rc 1 l2:2:wait:rc 2 l3:3:wait:rc 3 l4:4:wait:rc 4 l5:5:wait:rc 5 l6:6:wait:rc 6 # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 x:5:respawn:/etc/x11/prefdm -nodaemon Os runlevels definidos utilizando o script: rc <runlevel> Espera que os serviços a configurar em cada runlevel estão definidos sob a pasta : rc<runlevel>.d/ Exemplos: rc1.d/ rc2.d/ rc3.d/ Sob cada pasta rcx.d temos a definição do estado dos serviços no runlevel correspondente. Para cada serviço, temos um ficheiro que indica o estado do serviço Formato: XyyNomeServiço X conforme se pretende iniciar ( S ) ou terminar ( K ) o serviço yy número que indica a ordem NomeSeviço é isso mesmo Questões Quantos runlevels estão configurados na pasta? No runlevel 3, quais são os serviços activos? 2
init.d Os scripts que iniciam/terminam os serviços da máquina estão na pasta init.d Na realidade, os ficheiros sob as pastas rcx.d são apenas ligações simbólicas para estes Recapitulando O init lê o De acordo com a entrada initdefault, chama o rc Para cada ligação simbólica dentro da pasta rcx.d, o rc executa o script apontado: O argumento passado é determinado pela primeira letra do nome da ligação simbólica A ordem de execução dos scripts é determinada pelos nºs do nome da ligação simbólica Cada script aceita parâmetros: start stop restart status reload configtest rc.sysinit; rc.local A pasta contém ainda: rc.sysinit: criação do sistema de ficheiros proc, atribuição do nome da máquina, iniciação do teclado, etc. rc.local: último script a ser executado e tem a tarefa de executar algum tipo de iniciação adicional, específica ao sistema em causa. Outros: rc.serial, Conteúdos $ls la drwxr-xr-x 10 root root 4096 Sep 26 20:57. drwxr-xr-x 61 root root 8192 Oct 22 11:20.. drwxr-xr-x 2 root root 4096 Oct 16 17:39 init.d -rwxr-xr-x 1 root root 2330 Jul 14 2002 rc drwxr-xr-x 2 root root 4096 Oct 10 17:00 rc0.d drwxr-xr-x 2 root root 4096 Oct 10 17:00 rc1.d drwxr-xr-x 2 root root 4096 Oct 10 17:00 rc2.d drwxr-xr-x 2 root root 4096 Oct 16 18:28 rc3.d drwxr-xr-x 2 root root 4096 Oct 16 18:28 rc4.d drwxr-xr-x 2 root root 4096 Oct 16 18:28 rc5.d drwxr-xr-x 2 root root 4096 Oct 10 17:00 rc6.d -rwxr-xr-x 1 root root 220 Jul 11 2001 rc.local -rwxr-xr-x 1 root root 22095 Aug 22 2002 rc.sysinit rc3.d Conteúdos $ls la rc3.d lrwxrwxrwx 1 root root 14 Sep 26 22:22 K05innd ->../init.d/innd lrwxrwxrwx 1 root root 19 Sep 26 20:57 K05saslauthd ->../init.d/saslauthd lrwxrwxrwx 1 root root 15 Sep 26 22:26 K15httpd ->../init.d/httpd lrwxrwxrwx 1 root root 20 Sep 26 22:25 K15postgresql ->../init.d/postgresql lrwxrwxrwx 1 root root 19 Sep 26 21:02 K50snmptrapd ->../init.d/snmptrapd lrwxrwxrwx 1 root root 13 Sep 26 22:27 K50tux ->../init.d/tux lrwxrwxrwx 1 root root 13 Sep 26 22:22 K54pxe ->../init.d/pxe lrwxrwxrwx 1 root root 17 Sep 26 22:26 K70aep1000 ->../init.d/aep1000 lrwxrwxrwx 1 root root 17 Sep 26 22:26 K70bcm5820 ->../init.d/bcm5820 lrwxrwxrwx 1 root root 14 Sep 26 21:36 K74ntpd ->../init.d/ntpd lrwxrwxrwx 1 root root 16 Sep 26 22:22 K74ypserv ->../init.d/ypserv lrwxrwxrwx 1 root root 16 Sep 26 22:22 K74ypxfrd ->../init.d/ypxfrd lrwxrwxrwx 1 root root 19 Sep 26 21:36 K95firstboot ->../init.d/firstboot Questões Como se termina o serviço cups? Qual é o runlevel actual? O serviço httpd está activo no runlevel 3? 3
Exercício Activar o serviço httpd no runlevel 3. Deve ser iniciado depois do sendmail. Ajuda: Criar ligações simbólicas: ln s <ficheiro-alvo> <nome-da-ligação> Comandos úteis init, telinit Mudar de runlevel: telinit <novo-runlevel> Chkconfig (RH) Apresenta/modifica configuração dos runlevels Exemplo: Activar/Desactivar o httpd nos runlevels 3 e 5: chkconfig --level 3,5 httpd <on/off> service (RH) Controlar serviços Exemplo: service httpd start Serviços Standalone e Serviços Internet Daemon Serviços Standalone Serviços que gerem os seus pedidos (normalmente iniciados através do rc.d) Serviços Internet Daemon Quem gere os pedidos é o Internet Services Daemon - inetd Serviços Internet Daemon Extended Internet Services Daemon Em distribuições modernas, o inetd foi substituído pelo xinetd Recebe pedidos da rede Encaminha os pedidos para o programa responsável pelo serviço correspondente /etc/xinetd.conf Contém a configuração do xinetd Alguns valores por omissão Indica a pasta onde os serviços oferecidos pelo xinetd estão configurados Dois tipos de serviços: Externos: Implementados por programas externos Internos: Implementados pelo próprio xinetd /etc/xinet.d/ O xinetd percorre todos os ficheiros desta pasta para configurar os serviços oferecidos Exemplo: $ ls /etc/xinetd.d chargen daytime-udp rsync sgi_fam time chargen-udp echo servers swat time-udp daytime echo-udp services telnet 4
/etc/xinet.d/ Cada um dos ficheiros pode conter uma extensa lista de configurações O formato básio é bastante simples: service <nome_do_serviço> <atributo> = <valor> <valor>...... /etc/xinet.d/ Um exemplo (/etc/xinetd.d/telnet): # description: The telnet server serves telnet sessions; it uses # unencrypted username/password pairs for authentication. service telnet type = EXTERNAL # tipo do serviço: Interno/Externo flags = NORETRY # como o xinetd se deve comportar... socket_type = stream # tipo do socket: stream;dgram;raw wait = no # no=multithreaded; yes=singlethreaded user = root # utilizador que executa o serviço server = /usr/sbin/in.telnetd # programa que executa o serviço log_on_failure += USERID # determina que informação deve registar disable = yes # determina que o serviço está ligado ou não Questões Quantos serviços estão configurados no xinetd? Quais destes são externos? Exercício Colocar o daytime a funcionar. Colocar um serviço systat a funcionar: O serviço systat apresenta o resultado do comando ps auwwx Ajuda Ao executar um programa, o xinetd envia o stdout para o cliente Para o xinetd executar um comando especificar no ficheiro de configuração: server <comando> server_args <argumentos> Ficheiro exemplo: service telnet type = EXTERNAL socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd disable = yes Testar os serviços: Encontar o nº de porta do serviço, especificado no /etc/services; telnet localhost <porta-do-serviço> 5