Continuemos com a terceira aula da preparação para a certificação LPI TUTORIAL LPI nível 1: Aula 3 A aula dessa edição finaliza o estudo para a prova 101, com o tópico sobre o sistema de janelas padrão do Linux, o X. Iniciando o estudo para a prova 102, veremos os fundamentos de inspeção e configuração do kernel e módulos Linux, e também como funciona a inicialização do sistema. por Luciano Siqueira Tópico 110: O Sistema de Janelas X Dave Sackville - www.sxc.hu Verificar quais são os binários adequados: $ sh Xinstall.sh -check Objetivo 1.110.1: Instalar e configurar o X11R6 o diagrama de configuração dos dispositivos do servidor X. ➧ xf86config: Interface interativa de texto para especificar as informações de configuração manualmente. Os arquivos de instalação fundamentais são Xbin.tgz, Xlib.tgz, Xman.tgz, Xdoc. Ferramentas de configuração tgz, Xfnts.tgz, Xfenc.tgz, Xetc.tgz, Xvar. para o X.Org Existem basicamente duas opções para o tgz, Xserv.tgz e Xmod.tgz. ➧ X -configure: O servidor X carrega cada módulo de dispositivo, testa o X11R6: Xfree86 e X.Org. Em termos práEsses arquivos devem ser descompacticos, não há diferença entre eles, exceto tados em /usr/X11R6. O diretório /usr/ driver e salva o resultado no arquivo alguns detalhes de arquitetura e confi- X11R6/bin deve constar na variável PATH xorg.conf.new no diretório do usuário guração. O X11R6 é o ambiente gráfico e o diretório /usr/X11R6/lib deve constar (geralmente /root). de janelas no GNU/Linux. no cache de bibliotecas do ld.so, que se ➧ xorgcfg: Se não ocorrerem problemas, localiza no arquivo ld.so.cache. uma sessão X será iniciada com uma janela de configuração mostrando Compatibilidade de Hardware O primeiro passo antes de usar o X11R6 é o diagrama de configuração dos Configurando o X11R6 verificar a compatibilidade de hardware. Configurar o X11R6 significa criar um dispositivos do servidor X. Em http://www.xfree86.org/4.6.0/Sta- arquivo /etc/X11/XF86Config ou /etc/X11/ ➧ xorgconfig: Interface interativa de tus.html pode ser encontrada a lista de xorg.conf, o qual deve conter informatexto para entrar as informações de dispositivos compatíveis. Ainda que o ções sobre caminhos para arquivos de configuração manualmente. dispositivo não seja totalmente compa- sistema, mouse, teclado, monitor e distível, é possível utilizá-lo no modo VESA positivo de vídeo. Ajustes da configuração Framebuffer, se o dispositivo o suportar (a Após configurar o servidor X, pode ser grande maioria dos dispositivos de vídeo necessário corrigir o posicionamento da Ferramentas de configuração aceita esse modo). tela. Para isso, existe o aplicativo Xvidtupara o XFree86: ➧ XFree86 -autoconfig: Configura o ne. Através de uma interface interativa, é Instalando o X11R6 servidor X automaticamente. Se possível reposicionar a tela. Encontrada a O mais comum é que o X11R6 já venha insbem sucedido, será possível mo- posição adequada, os valores retornados talado junto com a distribuição. Para instalar ver o cursor do mouse na tela. no terminal virtual devem ser incluídos manualmente, os pacotes binários podem [Ctrl]+[Alt]+[Backspace] fecha a como opção Modeline, na seção Monitor ser encontrados em ftp://ftp.xfree86.org/ sessão do X. Essa ferramenta não do arquivo /etc/X11/XF86Config ou /etc/ pub/XFree86/4.6.0/binaries/, em subdiretóescreve configurações no arquivo X11/xorg.conf. rios correspondentes à arquitetura desejada de configuração do X. Outro item que pode precisar ser in(axp significando alpha, ix86 representando ➧ XFree86 -configure: Alternativa ao cluído manualmente é o funcionamento Intel 80×86) e versão da biblioteca C GNU. comando anterior da roda do mouse. Na seção referente ao Para auxiliar no processo de instalação, há ➧ xf86cfg: Se não ocorrerem problemas, mouse em /etc/X11/XF86Config ou /etc/ o script Xinstall.sh, disponível no diretório uma sessão X será iniciada com uma X11/xorg.conf, inclua a opção ZaxisMapcommon do servidor FTP. janela de configuração, mostrando ping, como no exemplo: Linux Magazine #28 | Março de 2007 49 TUTORIAL | Preparação LPI Section “InputDevice” Driver “mouse” Option “Protocol” “IMPS/2” Option “Device” “/dev/mouse” Option “ZAxisMapping” “4 5” EndSection Seções de XF86Config e xorg.conf Os arquivos de configuração XF86Config e xorg. conf são divididos em seções no formato: Section “nome da seção” Item_1 “Valor item 1” Item_2 “Valor item 2” ... EndSection As seções do arquivo de configuração do X são organizadas conforme a estrutura abaixo: ➧ Files: Caminhos para alguns arquivos necessários ao servidor X. Itens podem ser FontPath, RGBPath e ModulePath. O item mais importante é FontPath, que determina as localizações das fontes no sistema. ➧ ServerFlags: Opções globais para o servidor X, no formato Option “Nome” “Valor”. ➧ Module: Carregamento dinâmico de módulos. Load “nome do módulo”. ➧ InputDevice: Dispositivos de entrada. Deve haver uma seção InputDevice para cada dispositivo. Os itens obrigatórios nessa seção são Identifier e Driver. Identifier é um nome único para identificação do dispositivo. Os valores mais comuns para Driver são (“Keyboard”) e (“Mouse”). Os outros itens são opcionais e descritos com o (Option. Option “CorePointer”) indica que o dispositivo é o apontador (mouse) primário. (Option “CoreKeyboard”) indica que o dispositivo é o teclado primário. O caminho para o dispositivo é indicado com o (Option “Device” “/dev/arquivo_do_dispositivo”). ➧ Device: Dispositivo de vídeo. Várias seções Device podem indicar vários dispositivos de vídeo, e deve haver ao menos um. Os itens obrigatórios nessa seção são Identifier e Driver. Identifier é um nome único para identificação do dispositivo. Driver especifica o driver do dispositivo de vídeo, dentre os disponíveis em /usr/ X11R6/lib/modules/drivers/. Outros itens comuns são BusID (ex.: Option “BusID” “PCI:1:0:0”) e VideoRam (Ex.: Option “VideoRam” “8192”). ➧ Monitor: O arquivo de configuração pode ter várias seções Monitor. 50 Deve haver pelo menos uma, mas ceName em $HOME/.Xresources especifica se não houver, uma padrão será um nome de fonte para usar através do criada. A única opção obrigatória Xft. Exemplo: é Identifier. Outras opções são UseModes, HorizSync, VertRefresh e XTerm*faceName: Courier ModeLine. ➧ Modes: Modos de tela disponíveis O programa Xterm usará a fonte Coupara o monitor. Não é obrigatória. rier através de Xft. ➧ Screen: Agrega o dispositivo e o monitor. Pode haver mais de uma Instalar fontes Core seção Screen. Apenas as opções Instalar fontes pelo sistema Core reIdentifier e Device (indicando um quer duas etapas: criar o diretório com dispositivo de vídeo de uma seção os arquivos das fontes e arquivos de índice, e em seguida incluir o diretóDevice existente) são obrigatórias. ➧ Display (Subseção de screen): A rio em questão no caminho de fontes subseção Display define, entre ou- do sistema. Para cada tipo de fonte, a instalação tras coisas, qual resolução usar para cada profundidade de cor. se dá de uma forma: ➧ ServerLayout: Agrega as seções ➧ Fontes Bitmap (.bdf): Esse tipo de Screen e InputDevice para formar uma fonte precisa primeiro ser convertido para o formato .pcf através do configuração completa do servidor X. comando bdftopcf. As fontes conver➧ DRI: Seção opcional que fornece tidas podem ser compactadas com informação sobre a Infraestrutura o comando gzip. O diretório padrão de Renderização Direta (DRI). Para para esse tipo de fonte é /usr/X11R6/ que usuários comuns possam utilizar lib/X11/fonts/75dpi. Após as fontes serem copiadas para o diretório, o o DRI, deve-se incluir o item Mode comando mkfontdir deverá ser exe0666 nessa seção. ➧ Vendor: Informações e configuracutado dentro do diretório. ções personalizadas. ➧ Fontes escalonáveis (Type1, Speedo, TrueType etc.): O procedimento é semelhante ao das fontes Fontes Bitmap, exceto pelos fatos de que Há dois sistemas de fontes, Core e Xft. No sistema Core as fontes são manipufontes escalonáveis não precisam ladas no servidor, enquanto no sistema ser convertidas e de que o comanXft isso ocorre no cliente. O sistema Xft do mkfontscale precisa ser executaé mais avançado e permite o uso de fondo antes de mkfontdir. Os diretórios respectivos também se encontram tes Type1, OpenType, TrueType, Speedo e CID, com suporte a anti-aliasing (cantos em /usr/X11R6/lib/X11/fonts. arredondados). O X.Org inclui suporte nativo ao sistema Xft. A segunda etapa é incluir cada diretório entre os diretórios de fontes de servidor X. Isso pode ser feito de maneira tempoInstalar fontes Xft Para instalar fontes no sistema Xft, bas- rária, com o comando xset: ta copiá-las para um dos diretórios de fontes padrão – /usr/X11R6/lib/X11/lib/ # xset fp+ /diretório/para/as/fontes fonts/*, /usr/share/fonts/* – ou para o xset fp rehash diretório .fonts/ no diretório pessoal. O cache de fontes precisa ser atualiOs diretórios de fonte atualmente zado para que a nova fonte possa ser em uso podem ser listados com xset usada, o que será feito automaticamen- -q. Para que os novos diretórios se torte quando o X iniciar uma sessão. A nem diretórios de fontes permanentes, atualização manual é feita através do devem ser incluídos na seção Files comando fc-cache. do arquivo de configuração /etc/X11/ O comportamento das funções do XF86Config ou /etc/X11/xorg.conf, como Xft pode ser alterado através do arquivo itens FontPath. de configuração global /etc/fonts/fonts. conf ou no arquivo de configurações por Servidor de Fontes xfs usuário .fonts.conf, alojado no diretório O servidor de fontes Xfs pode rodar pessoal. como daemon (xfs -daemon) ou tarefa Para os programas que não usam comum (simplesmente xfs), e fornece fontes Xft por padrão, o recurso *fa- http://www.linuxmagazine.com.br Preparação LPI | TUTORIAL fontes através da rede ou mesmo na xdm máquina local. O xdm faz parte dos programas do sisO arquivo de configuração padrão tema de janelas X. O arquivo de conpara o Xfs é /usr/X11R6/lib/X11/fs/config, figuração principal é o xdm-config. O caminho do programa é /usr/bin/xdm. cujas opções mais comuns são: ➧ client-limit: Limite de clientes co- Além de permitir o login local, tamnectados a esse servidor de fontes. bém permite que o login seja realizado ➧ alternate-servers: Outros servidores através da rede. Para tanto, é usado o de fontes protocolo XDMCP (desativado por ➧ catalogue: Caminhos dos diretórios padrão). O xdm precisa estar rodando contendo as fontes a serem forneci- (o que já acontece caso o runlevel do sistema seja 5) e configurado adequadas pelo Xfs. ➧ Porta TCP que o Xfs usará para es- damente para responder pedidos de pirar pedidos de conexão. Padrão: login. A máquina remota, através do 7100. comando X -query nome_do_servidor , Para que as fontes sejam solicita- solicitará o pedido de conexão. das ao daemon do Xfs, o endereço do servidor de fontes precisa ser inArquivos de configuração cluído como item FontPath da seção /etc/X11/xdm/Xresources: A aparência do Files de /etc/X11/xorg.conf ou /etc/X11/ xdm pode ser modificada através deste XF86Config. Se o servidor de fontes for arquivo. Fontes, cores e mensagens poa máquina local: dem ser incluídas ou alteradas. Exemplo de conteúdo: FontPath "unix/:7100" Exemplo de Xresources: Se o servidor de fontes for a máquina chamada slackware, através de uma conexão TCP/IP: FontPath "tcp/slackware:7100" Objetivo 1.110.2: Configurar o Gerenciador de Display Muitas distribuições GNU/Linux já entram no login gráfico por padrão. Outras usam o login em texto. Esse comportamento pode ser modificado através do arquivo /etc/inittab, alterando o runlevel inicial. O runlevel padrão para login em texto é 3 (multiusuário), para login gráfico, é 5 (ou 4, no caso do Slackware). Mudando o runlevel inicial em /etc/ inittab: # Login em texto: id:3:initdefault: Login gráfico: id:5:initdefault: O login gráfico passará então a ser controlado por um gerenciador de display. Há três Gerenciadores de Display principais: ➧ xdm: Padrão do X ➧ gdm: Gnome ➧ kdm: Kde Os respectivos arquivos de configuração encontram-se em /etc/X11/xdm/*, /etc/X11/gdm/* e /etc/X11/kdm/*. Linux Magazine #28 | Março de 2007 xlogin*borderwidth:3 xlogin*greeting:"Bem vindo ao login gráfico" xlogin*namePrompt:login:\040 xlogin*greetColor:blue xlogin*foreground:black xlogin*background:white ➧ /etc/X11/xdm/xdm-config: Arquivo que agrega os demais arquivos de configuração do xdm. Libera ou bloqueia o login remoto via XDMCP. Para bloquear, basta que exista a linha: DisplayManager.requestPort: 0 Assim, o xdm não esperará pedidos de conexão diretos ou indiretos. As condições e maneiras de usar o gdm e kdm são praticamentes iguais às do xdm, salvo alguns detalhes. gdm O executável do gdm encontra-se em /usr/bin/ gdm. Os arquivos de configuração são Sessions, gdm.conf e Init/Default, que corresponde ao Xresources. O arquivo gdm.conf controla a maioria das funções do xdm. kdm Os arquivos do kdm muitas vezes estão em /usr/share/config/kdm. O executável é /usr/bin/kdm. Sua configuração é semelhante à do xdm em muitos aspectos, sendo o arquivo kdmrc o principal. Objetivo 1.110.4: Instalar e personalizar um ambiente de gerenciador de janelas ➧ /etc/X11/xdm/Xsetup_0: Script executado antes do login, com permissão de superusuário (root). Usado para O gerenciador de janelas é a interfadefinir cores ou imagens de fundo ce entre o usuário e o servidor X. É e disparar aplicativos. praticamente impossível utilizar o am➧ /etc/X11/xdm/Xservers: Mapeia um biente gráfico sem um gerenciador de display para uma máquina. Geral- janelas. O procedimento mais comum mente contém apenas a indicação para se iniciar uma sessão do X é atrapara o display local 0 local /usr/ vés do comando startx, que chama o script xinit. O script xinit tem, entre X11R6/bin/X Pode ser usado para enviar auto- suas funções, a de iniciar o servidor X maticamente a requisição de login e programas clientes. O gerenciador para máquinas remotas rodando o de janelas é o principal desses clientes. X. O servidor X ocupará o primeiro Há o script xinit padrão, localizado /dev/tty livre. em /etc/X11/xinit/xinitrc, mas o mais ➧ /etc/X11/xdm/Xaccess: Controla o comum é cada usuário ter seu script acesso remoto via XDMCP. É pos- personalizado, ~/.xinitrc. sível estabelecer regras para pedidos de conexão remotos. Menus Trecho de exemplo de Xaccess: Uma das funções de um gerenciador de janelas é fornecer menus de acesso *CHOOSER BROADCAST a programas (menu root) e controle de janelas (menu window). O menu A primeira linha indica que qualquer root é acessado clicando-se na área máquina remota poderá requisitar login de trabalho, e o menu window, clina máquina local. A segunda linha indica cando na barra ou no botão do título que qualquer máquina (*) pode solicitar da janela. à máquina local uma lista de possíveis A configuração dos menus varia servidores (que estejam rodando o xdm) para cada gerenciador de janelas. De para conexão, que será obtida através de uma forma geral, arquivos de confichamadas BROADCAST na rede. guração de menus têm seu conteúdo 51 TUTORIAL | Preparação LPI disposto de forma hierárquica, discriminando o tipo do item, o nome do item e o valor. Exemplo do arquivo de menu do gerenciador de janelas Windowmaker, /etc/X11/WindowMaker/WMRootMenu: (“Applications”, (“Info”, (“Info Panel”, INFO_PANEL), (“Legal”, LEGAL_PANEL), (“System Console”, EXEC, “xconsole”), (“System Load”, SHEXEC, “xosview || ➥xload”), (“Process List”, EXEC, “xterm -e top”), (“Manual Browser”, EXEC, “xman”) ), (“Run...”, SHEXEC, “%a(Run,Type command ➥to run:)”), (“XTerm”, EXEC, “xterm -sb”), (“Mozilla Firefox”, EXEC, “firefox”), Emulador de terminal O emulador de terminal é um programa que permite interagir com a shell como num terminal de texto convencional. O emulador de terminal mais comum é o xterm. Há alternativas interessantes como o rxvt – que é mais leve que o xterm – e o aterm – que possui mais opções de configuração. Os padrões de aparência e comportamento do xterm são determinados no arquivo /etc/X11/app-defaults/XTerm. Essas características podem ser alteradas através de argumentos para o xterm, ou através dos arquivos de configuração ~/.Xresources e ~/.Xdefaults. Exemplo de ~/.Xresources: XTerm*font: <del>misc-fixed</del>*-*-*➥*-18-*-*-*-*-*-iso8859-1 XTerm*foreground: grey70 XTerm*background: black XTerm*visualBell: true Nesse exemplo, altera-se a fonte, as cores de fundo e de letra, e o bipe de sistema é inibido para dar lugar a uma sinalização visual. Para que essas alterações tenham efeito, é necessário aglutinar as configurações ao banco de dados de recursos do servidor X. Essa tarefa é realizada automaticamente (se houver alterações no arquivo) toda vez que o X for iniciado, ou manualmente, com o uso do comando xrdb -merge ~/.Xresources. Há ferramentas que auxiliam a criação de arquivos de recursos, não só para o emulador de terminal, mas também para uma variedade de outros programas: ➧ xwininfo: Retorna informações sobre uma janela, inclusive informações de posição e tamanho. 52 ➧ editres: Permite testar as configurações e posteriormente salvá-las num arquivo. Comportamento de teclado e mouse A resposta para eventos de teclado e mouse pode ser alterada modificandose o arquivo Xmodmap. O arquivo global é /etc/X11/xinit/.Xmodmap (ultrapassado) e ~/.Xmodmap (para o usuário). Esse arquivo deve ser passado ao programa Xmodmap para alterar as respostas a eventos. Exemplos de .Xmodmap: ➧ Inverter os botões do mouse: pointer = 3 2 1 ➧ Definir tecla Delete: keycode 107 = Delete O comando xev auxilia no entendimento e uso de eventos de mouse e teclado. O xev abre uma janela que mostra no emulador de terminal os códigos associados ao evento recebido na janela. Bibliotecas adicionais de aplicativos Muitos programas do ambiente gráfico exigem bibliotecas adicionais, como os programas criados com a biblioteca GTK+ (Gimp Tool Kit) ou QT. Essas dependências podem ser verificadas com o comando _ldd, da mesma maneira que quando usada em programas de terminal. Uma vez instaladas as dependências pendentes nos locais apropriados (localizáveis pelo ld.so), os programas funcionarão. DISPLAY Remoto Em ambientes de rede, é possível redirecionar a janela de um programa para ser mostrada e controlada em uma outra máquina da rede. A variável de ambiente DISPLAY determina onde as janelas de programas serão mostradas e controladas. A variável DISPLAY é enunciada sob o seguinte formato: hostname:displaynumber.screennumber Se o usuário estiver logado no servidor por uma estação remota chamada debian através de uma conexão XDMCP (login remoto via xdm), a variável DISPLAY para esse usuário deverá ser debian:0.0, de forma que os programas executados por ele (programas oriundos do servidor) sejam mostrados e controlados na estação remota. Por segurança, apenas o usuário e a mesma máquina que iniciaram a sessão X poderão abrir programas no respectivo display, a menos que outros usuários ou máquinas sejam autorizados a fazê-lo. Essa exclusividade é garantida por meio do uso do MIT-MAGIC-COOKIE-1, um cookie que é gerado toda vez que uma sessão X se inicia, sendo armazenado em ~/.Xauthority. A maneira mais convencional de se autorizar outros usuários a acessar um mesmo display é usando o comando xhost, que libera ou bloqueia o acesso de outras contas e máquinas ao display local. ➧ Para permitir que outros usuário no host local acessem o display: xhost +local: ➧ Para permitir que usuários na estação remota redhat acessem o display local: xhost +redhat Agora, basta mudar a variável DISPLAY na estação redhat para redirecionar a saída e o controle de programas para o display local. Supondo que a máquina local se chame slackware, o seguinte comando poderia ser executado na estação redhat: # export DISPLAY=slackware:0.0 Para bloquear ou retirar a permissão da estação, substitui-se o sinal + por -: xhost -redhat. O acesso a um display na mesma máquina estará garantido ao superusuário, desde que exista a variável de ambiente XAUTHORITY, a qual deve apontar o caminho para o arquivo .Xauthority do usuário que iniciou a sessão do X. Em estações de trabalho convencionais, onde o usuário está logado à própria máquina local e só há um conjunto de monitor, teclado e mouse, a variável DISPLAY é :0.0, o que significa Objetivo 1.105.1: Manipular/ que os programas serão mostrados e investigar o kernel e seus controlados no único display (enten- módulos em execução dido como o conjunto de monitor, teclado e mouse) na máquina local. Os valores de displaynumber e screenKernel number são úteis, por exemplo, para O kernel é o núcleo do sistema, responsáoperar monitores adicionais instalados vel pela comunicação entre os programas e as instruções de baixo nível (basicamente na máquina. Tópico 105: Kernel http://www.linuxmagazine.com.br Preparação LPI | TUTORIAL hardware) do sistema. O comando uname é utilizado para mostrar informações a respeito do kernel do sistema. Quando usado apenas com a opção -a, mostra todas as informações sobre o kernel, na seguinte ordem: ➧ NOME-DO-KERNEL ➧ NODENAME (nome da máquina) ➧ RELEASE-DO-KERNEL ➧ VERSÃO-DO-KERNEL ➧ MÁQUINA ➧ PROCESSADOR ➧ PLATAFORMA-DE-HARDWARE ➧ SISTEMA-OPERACIONAL Módulos do Kernel Funções especializadas do kernel podem existir na forma de módulos externos. Módulos são armazenados em /lib/modules/x.x.xx/, onde x.x.xx é o release do kernel, e são carregados e descarregados dinamicamente através dos comandos modprobe ou insmod. Mesmo o comando insmod ainda sendo aceito, o comando padrão para manejo de módulos nas versões mais recentes do kernel é o modprobe. A diferença entre os dois comandos é que modprobe carrega o módulo especificado e os módulos dos quais depende, conforme listados no arquivo /lib/moduDemais opções do uname: ➧ -i: Plataforma de Hardware les/x.x.xx/modules.dep, enquanto insmod ➧ -m: Hardware da máquina carrega o módulo sem verificar suas de➧ -n: Nome do Host (nodename) pendências. O arquivo modules.dep arma➧ -p: Processador zena as dependências de cada módulo e é gerado ou atualizado pelo comando ➧ -o: Sistema Operacional ➧ -r: Release do Kernel depmod -a. Essa tarefa pode ser realizada manualmente, mas se forem detectados ➧ -s: Nome do Kernel novos módulos durante o carregamento ➧ -v: Versão do Kernel Exemplo de saída do comando una- do sistema, depmod -a será executado aume -a: tomaticamente. O comando lsmod lista os módulos carre$/uname/-a gados. Módulos marcados com (autoclean) Linux slack102 2.6.13 #1 SMP Thu Mar 23 podem ser descarregados com o comando ➥01:57:38 BRT 2006 i686 unknown unknown GNU/ modprobe -ra ou rmmod -a. Módulos marca➥Linux dos com (unused) poderão ser removidos se seus respectivos nomes forem fornecidos como argumento para modprobe -r ou rmmod. Os demais módulos estão em uso, e não é recomendado seu descarregamento. Exemplo de lista de módulos carregados: # lsmod Module Size Used by snd_pcm_oss 49696 0 snd_mixer_oss 18560 2 snd_pcm_ ➥oss ehci_hcd 30472 0 sis900 20352 0 ohci_hcd 20356 0 snd_cmipci 32800 1 gameport 13448 1 snd_cmipci snd_pcm 84100 2 snd_pcm_ ➥oss,snd_cmipci snd_page_alloc 9608 1 snd_pcm snd_opl3_lib 10240 1 snd_cmipci snd_timer 22788 2 snd_ ➥pcm,snd_opl3_lib snd_hwdep 8480 1 snd_opl3_ ➥lib snd_mpu401_uart 7424 1 snd_cmipci snd_rawmidi 21792 1 snd_mpu401_ ➥uart snd_seq_device 7948 2 snd_opl3_ ➥lib,snd_rawmidi snd 48100 10 snd_pcm_ ➥oss,snd_mixer_oss,snd_cmipci,snd_pcm, snd_ ➥opl3_lib,snd_timer,snd_hwdep,snd_mpu401_ ➥uart,snd_rawmidi,snd_seq_device TUTORIAL | Preparação LPI O comando modinfo mostra a descrição, o autor, a licença e os parâmetros para o módulo solicitado. Usando como argumento apenas o nome do módulo, mostra todas as informações disponíveis: # modinfo gameport filename: /lib/modules/2.6.13/kernel/ ➥drivers/input/gameport/gameport.ko author: Vojtech Pavlik ➥<[email protected]> description: Generic gameport layer license: GPL vermagic: 2.6.13 SMP preempt ➥PENTIUMIII gcc-3.3 depends: As opções -l e -p mostram, respectivamente, as informações de licença e parâmetros aceitáveis para o módulo solicitado. # modinfo -l sis900 GPL modinfo -p sis900 multicast_filter_limit:SiS 900/7016 ➥maximum number of filtered multicast ➥addresses max_interrupt_work:SiS 900/7016 maximum ➥events handled per interrupt sis900_debug:SiS 900/7016 bitmapped ➥debugging message level Para modificar os valores padrão de parâmetros, basta indicá-los ao carregar os módulos com modprobe ou insmod: # modprobe sis900 multicast_filter_ ➥limit=valor No entanto, o mais comum é que os módulos sejam carregados automaticamente pelo sistema. Por isso, os parâmetros podem ser armazenados no arquivo /etc/modules.conf. O mesmo parâmetro do exemplo poderia estar em /etc/modules.conf na forma: options sis900 multicast_filter_ ➥limit=valor Também através do arquivo /etc/moé possível criar aliases (cognomes) para módulos, de forma que possam ser invocados usando um nome convencional. Exemplo de aliases em /etc/modules.conf: dules.conf alias eth0 sis900 alias sound-slot-0 snd_cmipci Aliases e opções também podem ser definidos da mesma forma no arquivo / 54 etc/modprobe.conf. Através desse arquivo, cado com a letra M será compilado como também é possível definir as ações para módulo. Itens deixados em branco não eventos de carregamento e descarrega- serão compilados. Espaços de escolha [ mento de módulos, como a execução ] indicam que o item só poderá ser comde um programa. Exemplo: quando so- pilado como estático, enquanto espaços licitado a carregar sis900, carregar tun e de escolha < > indicam que o item poderá só depois sis900: ser compilado tanto no modo embutido quanto como módulo. install sis900 modprobe tun; modprobe -A configuração do kernel está dividida ➥ignore-install sis900 nos eixos principais: ➧ Code maturity level options: MosA opção --ignore-install é necessária para trar ou não recursos considerados instáveis. que o modprobe não execute novamente a linha install referente ao módulo sis900 em ➧ General setup: Características ge/etc/modprobe.conf. É possível usar o mesmo rais do kernel. É possível incluir procedimento ao descarregar módulos: um termo de versão para o kernel personalizado. remove sis900 modprobe --ignore-remove -r ➧ Loadable module support: Suporte ➥sis900; modprobe -r tun ao sistema de módulos e define algumas características. Dessa vez, a opção --ignore-remove ➧ Processor type and features: Indica o tipo de processador para o qual o aparece para impedir a execução cíclikernel será compilado além de reca da linha remove referente ao módulo cursos como multiprocessamento. sis900 em /etc/modprobe.conf. ➧ Power management options (ACPI, APM): Opções relativas ao controle Objetivo 1.105.2: Reconfigurar, de energia. Indicado especialmente para laptops. compilar e instalar um kernel ➧ Bus options (PCI, PCMCIA, EISA, e módulos personalizados MCA, ISA): Suporte aos diferentes tipos de barramentos. Configuração ➧ Executable file formats: Tipos de O local padrão de armazenamento do arquivos que o sistema será capaz código-fonte do kernel é /usr/src/linux, de executar. que é um link simbólico para /usr/src/ ➧ Networking: Suporte e configuração linux-x.x.xx/ (onde x.x.xx é o release do dos diferentes tipos de plataformas kernel). Existe mais de uma interface de rede. para configurar o kernel, e todas elas ➧ Device Drivers: Escolha e configudesempenham a mesma função. As inração dos dispositivos de hardware, terfaces de configuração são invocadas integrados e periféricos. através do comando make: ➧ File systems: Lista de sistemas de arquivos compatíveis e recursos ➧ make config: Interface em linha de relacionados a cada um deles. comando. É feita uma seqüência ➧ Kernel hacking: Opções de depurade perguntas bastante extensa sobre ção do kernel Essas são as principais categorias de cada aspecto da configuração. ➧ make menuconfig: Interface de menus configuração, e podem ser diferentes de ncurses. uma versão do kernel para outra. ➧ make xconfig: Interface gráfica X, As configurações são salvas no arquiutilizando a biblioteca QT. vo /usr/src/linux/.config, que será usado ➧ make gconfig: Interface gráfica X, para guiar a construção do novo kernel utilizando a biblioteca GTK+. e seus módulos. No arquivo Makefile é ➧ make oldconfig: Usa as configuração possível mudar variáveis como EXTRAVERanteriores como ponto de partida SION, que indica ser uma compilação de para uma nova configuração. kernel personalizado. Enquanto alguns recursos precisam ser compilados estaticamente, isto é, embutidos no kernel, a maioria pode ser compilada de forma dinâmica (como módulos). Os itens marcados com asterisco (*) serão compilados como estáticos e o item mar- Compilação e Instalação Para se assegurar de que todo kernel e módulos sejam compilados com a nova configuração e não reaproveitem objetos pré-compilados, é usado o comando make clean. http://www.linuxmagazine.com.br Preparação LPI | TUTORIAL Em seguida já podem ser compilados o kernel e os módulos: make bzImage ou make zImage compilam o kernel, enquanto make modules compila os novos módulos, e make all faz, de uma vez, o trabalho de make bzImage && make modules. Ao final, make modules_install instala os novos módulos em /lib/modules/x.x.xx/ (x.x.xx é a versão do novo kernel). O comando depmod -a será automaticamente executado para criar o arquivo modules.dep, o qual contém as dependências dos módulos. O comando make também pode criar pacotes específicos de instalação do kernel, com make rpm-pkg, make binrpm-pkg e make deb-pkg. Num computador padrão i386 (o mais comum), o binário do novo kernel estará em /usr/src/linux/arch/i386/boot/bzImage. Esse arquivo deve ser copiado para /boot (ou criado um link simbólico nesse diretório) e o arquivo de configuração do carregador de boot (/etc/lilo.conf ou / boot/grub/grub.conf) deve ser atualizado para apontar para o novo kernel. No caso do lilo, é importante reinstalá-lo com o comando lilo após cada alteração do arquivo de configuração. Novas funcionalidades podem exigir configurações suplementares, como passar novas opções para módulos. Para funções compiladas estaticamente, opções podem ser passadas pela instrução append, no arquivo /etc/lilo.conf. Com o novo kernel instalado, basta reiniciar o sistema para passar a utilizá-lo. Tópico 106: Carregamento (boot), início e término do sistema e runlevels Objetivo 1.106.1: Carregamento (boot) do sistema Antes de carregar o kernel, o lilo apresenta um prompt no qual é possível alterar o comportamento padrão de carregamento do sistema. Esse prompt aparece na forma: É possível passar parâmetros no formato item=valor. Exemplo de itens: ➧ acpi : Liga/desliga o suporte a ACPI. ➧ init: Programa para executar no lugar de /sbin/init. ➧ mem: Montante de memória RAM do sistema. ➧ root: Especificar o dispositivo raiz. Outras opções não precisam de parâmetros, como por exemplo: ➧ noinitrd: Não carrega o ramdisk inicial. ➧ ro: Coloca o dispositivo em modo somente leitura. Para carregar o kernel linux, indicando /dev/hda3 como dispositivo raiz, sem ramdisk inicial e em modo somente leitura, a linha de comando seria: boot: linux root=/dev/hda3 noinitrd ro Dessa mesma forma, é possível passar parâmetros para os módulos compilados estaticamente no kernel. Para que boot: os parâmetros sejam automaticamente passados em todo boot, eles podem ser Onde é possível indicar o kernel a incluídos na instrução append no arquivo carregar, passar parâmetros de configu- /etc/lilo.conf. O lilo deverá então ser ração e alterar o runlevel inicial. reinstalado. Para os módulos externos, ����� � ������ ������������� ��������� TUTORIAL | Preparação LPI parâmetros são passados diretamente pelo comando modprobe/@insmod@, ou podem constar nos arquivos /etc/modules. conf ou /etc/modprobe.conf. Outra possibilidade de uso do prompt de boot é alterar o runlevel inicial do sistema. Os valores aceitos são s, single, S, 1, 2, 3, 4, 5. Por exemplo, para iniciar o sistema em modo de usuário único (Single user) usa-se o comando: boot: linux S Se nenhum parâmetro for passado, o runlevel inicial será aquele especificado em /etc/inittab. Para inspecionar o processo de inicilização do sistema, é usado o comando dmesg. As mensagens do carregamento são armazenadas em /var/log/dmesg, enquanto as mensagens do kernel podem ser checadas através do arquivo /var/log/messages. Objetivo 1.106.2: Alternando runlevels, desligando e reiniciando o sistema Runlevels (níveis de execução do sistema) são numerados de 0 a 6 e suas funções podem variar de uma distribuição para outra. Via de regra o próprio arquivo /etc/inittab, que define os runlevels, traz também informações a respeito de cada um. O formato das entradas nesse arquivo é: id:runlevels:ação:processo Onde id é um nome de até quatro caracteres para identificar a entrada do inittab, runlevels é uma lista dos runlevels para os quais a ação da entrada deverá ser executada, ação é o tipo de ação a ser tomada e processo é o comando a ser acionado. Os tipos mais comuns para ações são: ➧ sysinit: Processo executado durante o boot do sistema ➧ wait: O processo será executado e init aguardará seu término ➧ ctrlaltdel: O processo será executado quando o init receber o sinal SIGINT, o que significa que as teclas Ctrl+Alt+Del foram pressionas no console. Exemplo de trecho de /etc/inittab # System initialization (runs when system ➥boots). si:S:sysinit:/etc/rc.d/rc.S 56 Script to run when going single user ➥(runlevel 1). su:1S:wait:/etc/rc.d/rc.K Script to run when going multi user. rc:2345:wait:/etc/rc.d/rc.M Na maioria dos casos, os runlevels são assim definidos: ➧ 0: Desligar o sistema ➧ 1: Usuário único (super usuário) ➧ 2: Multiusuário sem serviços de rede ➧ 3: Multiusuário com serviços de rede ➧ 4: Livre (não definido, depende da distribuição) ➧ 5: Multiusuário, serviços de rede e login gráfico ➧ 6: Reiniciar o sistema Os únicos runlevels comuns a toda distribuição Linux são 0, 1 e 6. O runlevel padrão é definido em /etc/inittab, na entrada: id:x:initdefault Onde x é o número do runlevel padrão ao iniciar o sistema. Esse número jamais pode ser 0 ou 6, por razões óbvias. O programa que realiza o procedimento de início e troca de um runlevel para outro é /sbin/init. O init é o primeiro programa disparado após o kernel acessar o dispositivo raiz, portanto o PID de init será sempre 1. Para alternar entre runlevels, usa-se o próprio init ou o comando telinit, fornecendo como argumento o número do runlevel desejado. O comando runlevel mostra dois números; o primeiro mostra o runlevel anterior, e o segundo, o runlevel atual. Para desligar ou reiniciar o sistema, o comando shutdown oferece mais funcionalidades. Todos os usuários no sistema são notificados e novos logins são bloqueados. Todos os processos recebem o sinal SIGTERM seguido de SIGKILL antes do sistema desligar ou alternar o runlevel. O padrão, caso não sejam usadas as opções -h ou -r, é que o sistema alterne para o runlevel 1. O comando shutdown deve obedecer à seguinte sintaxe: shutdown [opção] horário [mensagem] Apenas o argumento horário é obrigatório. Ele indica quando efetuar a ação requisitada, e seu formato pode ser: ➧ hh:mm: Horário para execução. ➧ +m: Minutos restantes. ➧ now ou +0: Imediatamente. Algumas das opções mais usadas: ➧ -a: Usar o arquivo de permissão /etc/shutdown.allow ➧ -r: Reiniciar a máquina ➧ -h: Desligar a máquina ➧ -t segundos: Tempo de espera antes do shutdown executar a ação solicitada. O argumento mensagem será o aviso enviado a todos os usuários que estiverem logados no sistema. Para impedir que qualquer usuário reinicie a máquina pressionando [Ctrl]+[Alt]+[Del], a opção -a deve estar presente na linha do /etc/inittab referente à ação ctrlaltdel. Além disso, os usuários com permissão para realizar a ação devem constar no arquivo /etc/ shutdown.allow. Considerações finais Apesar de serem tópicos menores, com conteúdo mais sucinto, deve ser dada especial atenção para os temas desta aula. Quanto à configuração do X, é muito importante conhecer em detalhes o principal arquivo de configuração: /etc/ X11/xorg.conf ou /etc/X11/XF86Config. A sintaxe das seções e opções dentro desses arquivos certamente será abordada na prova. Sobretudo, conheça as seções e suas finalidades. Os gerenciadores de janelas também são tema certo na prova. Saiba, no mínimo, onde se situam e para que servem os arquivos de configuração de cada um. A utilização do X em ambientes de rede também é assunto recorrente. Conheça bem o funcionamento da variável de ambiente DISPLAY. Nos outros tópicos, que abordam o kernel e a inicialização, aspectos fundamentais são mostrados. Tenha familiariedade com comandos como uname e modprobe. Também é importante conhecer e saber utilizar o arquivo de configuração modprobe.conf. Saiba também os princípios de como configurar, compilar e instalar um novo kernel. Ainda que esse assunto não seja detalhadamente abordado na prova, os passos básicos que constituem essa tarefa certamente serão requisitados. Sobre a inicialização do sistema, é imprescindível conhecer com precisão cada detalhe do arquivo /etc/inittab. Conseqüentemente, certifique-se de saber como funcionam e como identificar os diferentes runlevels do sistema. ■ http://www.linuxmagazine.com.br