2005/2006
Administração de Sistemas e Redes
Sistemas de Operação II

Eduardo Correia & Ricardo Rocha

mcc@ncc.up.pt & ricroc@ncc.up.pt

DCC – Gab. 222-223

http://www.dcc.fc.up.pt/~mcc

http://www.dcc.fc.up.pt/~ricroc

Programa e Objectivos

Noções avançadas de sistemas de operação, métodos e técnicas neles empregues, com especial destaque no sistema LINUX.

Linux KERNEL - Kernel modules / System calls / Device Drivers

Configuração e administração de sistemas Linux

Programação Paralela & Distribuída

Método de Avaliação - SOII

Licenciatura: Dois Trabalhos Práticos + Exame Final

Mestrado: Trabalho Escrito + Exame Final

Classificação mínima de 40% em cada trabalho Prático/Escrito.

Classificação mínima de 40% no Exame Final

NE = Nota de Exame

NT = Nota de Trabalhos

NTP = min(max(NE-20%,NT),NE + 20%))

Nota Final = (10*NTP + 10*NE)/20

Bibliografia – Parte I

Linux Administration Handbook, Evi Nemeth, Garth Snyder, Trent Hein, Prentice Hall

Linux Server Hacks, Rob Flickenger, O'Reilly

Network Security Hacks, Andrew Lockhart, O'Reilly

Linux Device Drivers, Alessandro Rubini & Jonathan Corbet & Jonathan Corbet, O'Reilly 3rd Edition

Man Pages / Makefile

Advanced Linux Programming

Cap. 1

Man Pages

As distribuições de Linux trazem “man pages” para os comandos mais comuns.

As “man pages” estão divididas em secções enumeradas. As mais importantes são:

(1) Comandos do utilizador

(2) Chamadas ao Sistema (System Calls)

(3) Funções da “standard lib”

(8) Comandos do Sistema e Administração

Exemplos:

man –a exit

man –k printf

man sleep

man 3 sleep

Makefile
to make or not to make

Consideremos os seguintes ficheiros com código C:

tst.c

#include<stdio.h>

#include"f.h"

int main() {

printf("f(3)=%d\n",f(3));

return(0);

} // note que 0 representa sucesso na execução

f.h

int f(int x);

f.c

#include”f.h”

int f(int x) {

return(x*x);

}

Makefile
to make or not to make

Para compilar o programa precisamos das seguintes instruções:

% gcc –c f.c

% gcc –c tst.c

% gcc –o tst f.o tst.o

E se alterarmos o ficheiro f.c?
Será que precisamos de voltar a compilar tudo? e o f.h?

E se houver 20 ficheiros no nosso projecto ?

Makefile
to make or not to make

Para projectos “grandes” o melhor é usar o GNU Make, para automatizar o processo.

No ficheiro Makefile indicamos quais são as regras para compilar o nosso programa.

devemos indicar quais são os ficheiros a compilar e quais são as dependências entre os ficheiros.

target: ficheiro source e dependências

‘TAB’ regra para a compilação

Makefile
to make or not to make

CC=gcc

CFLAGS= -g -O2 -Wall

all: tst

tst:	tst.o f.o

$(CC) $(CFLAGS) -o tst tst.o f.o

tst.o :	tst.c f.h

$(CC) $(CFLAGS) -c tst.c

f.o :	f.c f.h

$(CC) $(CFLAGS) -c f.c

clean :

rm -f *.o tst

Kernel Linux

Linus Torvalds criou o primeiro kernel

Linux =( Linus+Unix)

Passos para compilar o
Kernel

cd /usr/src/linux

make xconfig

make bzImage

make modules

make modules_install

cp arch/i386/boot/bzImage /boot/vmlinuz

cp arch/i386/boot/System.map /boot/System.map

Configurar o LILO ou o GRUB para podermos fazer boot com o novo Kernel

Configuração do
LILO

Editar o ficheiro /etc/lilo.conf e inserir uma nova entrada para o kernel compilado recentemente:

boot = /dev/hda

…

Image = /boot/vmlinuz

label=linux

root=/dev/hda5

initrd=/boot/initrd.img

Instalar a nova configuração do Lilo executando o comando /sbin/lilo

mais info em:

http://www.tldp.org/HOWTO/mini/LILO.html

Criando uma ramdisk…

Muitas vezes a raiz do sistema Linux está num hardware ou num sistema de ficheiros para o qual o kernel não tem suporte built-in (por exemplo SCSI ou ext3). Para carregar o módulo é preciso ter uma ramdisk com esse módulo para usar durante o boot do sistema.

O comando mkinitrd é um script do sistema que verifica quais os módulos que o kernel precisa, e que cria um sistema de ficheiros ext2 contendo esses módulos (ramdisk).

% mkinitrd initrd-name.img 2.6.8

Verificando uma ramdisk

Para ver quais os ficheiros que estão dentro de uma ramdisk é necessário fazer o mount do ficheiro:

% cat initrd.img | gunzip > myinit

% mount –t ext2 –o loop myinit /mnt/disk

% ls /mnt/disk

Boot e administração
de um sistema Linux

Instalar e remover software

Executar como utilizador root:

urpmi xfig

rpm –i xfig-3.2.4-5mdk.i586.rpm

rpm –q xfig || rpm –qla xfig

rpm –e xfig

Instalação de software extra
usando o código-fonte…

“Desempacotar” o código fonte:

tar xvzf nomedopacote.tar.gz

tar xvjf nomedopacote.tar.bz2

Caso exista algum patch a aplicar (para correcção de algum bug):

patch –Np1 –i ../fxdepatch.patch

Instalação dos pacotes (compilação dinâmica) (cont.)

O processo de compilação segue usualmente os passos:

./configure –prefix=/usr

make

make install

SysVinit (/etc/inittab)

Neste ficheiro estão definidos os runlevels do sistema (7).

Cada runlevel especifica o que o sistema faz ao arrancar.

Os mais importantes são:

0: halt (desliga o computador)

3: multi-user w/ network (modo multi-utilizador com suporte de rede)

5: multi-user w/ network and X (modo multi-utilizador com suporte de rede e interface gráfica)

6: reboot (reinicia o computador)

SysVinit (serviços)

Utiliza a estrutura de directórios /etc/rc?.d onde ? especifica o runlevel.

Dentro de cada directório encontram-se ligações para os scripts reais relativos a serviços que se encontram em /etc/rc.d/init.d.

Cada ligação começa por “S” ou “K” conforme seja para iniciar (start) ou terminar (kill) o serviço.

As ligações em /etc/rc0.d e
/etc/rc6.d apenas terminam serviços.

SysVinit (serviços) (cont.)

A ordem pela qual são executados os scripts é definida pelo numero contido no nome da ligação simbólica.

É possível escolher o “runlevel” com que o sistema deve iniciar em /etc/inittab.

É possível mudar de runlevel em qualquer altura usando o comando:

telinit n (em que n é o runlevel pretendido)

Tornando o sistema de arranque (/etc/fstab)

O ficheiro /etc/fstab especifica os sistemas de ficheiros que devem ser montados por defeito no arranque.

Por exemplo:

/dev/xxx / ext3 defaults 1 1

/dev/xxx /home reiserfs defaults 1 2

/dev/xxx swap swap 0 0

proc /proc proc defaults 0 0

2001/2002 Aplicações Distribuídas e Internet

Ricardo Lopes

2001-09-26T18:23:03