Aula #6 - Serviços do kernel e Configuração





O kernel do sistema operacional está no coração de todos os sistemas Linux, desde o menor dispositivo embarcado ou móvel, até o maior supercomputador. 




Notavelmente, em todo esse amplo espectro, o kernel tem as mesmas tarefas essenciais. 
Ele controla o acesso ao hardware, a competição por recursos entre diferentes aplicações e outras tarefas, lida com a atividade de I/O, com arquivos e armazenamento de dados, segurança, redes, etc. 
Ao selecionar parâmetros de linha de comando do kernel no momento da inicialização, o sistema pode ser ajustado para se comportar de muitas maneiras diferentes.

De acordo com a definição formal o Linux é apenas o kernel do sistema operacional, que é algo mais amplo e inclui outros componentes, como bibliotecas e aplicativos que interagem com o kernel.

O kernel é o componente central essencial que conecta o hardware ao software e gerencia os recursos do sistema, como memória, CPU, e serviços concorrentes. Ele lida com todos os dispositivos conectados usando drivers de dispositivo, e disponibiliza os dispositivos para uso pelo sistema operacional.

Um sistema executando apenas o kernel tem funcionalidade bastante limitada. Este cenário será encontrado apenas em dispositivos embarcados.

As principais responsabilidades do kernel incluem:


  •     Inicialização do sistema.
  •     Agendamento de processos.
  •     Gerenciamento de memória.
  •     Controle de acesso ao hardware.
  •     I/O (Input/Output, ou entrada e saída) entre aplicativos e dispositivos de armazenamento.
  •     Implementação de sistemas de arquivos locais e de rede.
  •     Controle de segurança, a nível local(permissões de sistema de arquivos) e através da rede.
  •     Controle da rede.
   
Vários parâmetros são passados ao sistema durante o boot na linha de comando do kernel. Normalmente estes comandos estão na linha kernel (ou linux16) no arquivo de configuração do GRUB, mas podem ser alterados durante a inicialização do sistema.



Para a antiga versão 1 do GRUB a linha de comando do kernel seria:

kernel /boot/vmlinuz-3.19.1 ro root=LABEL=RHEL6-64 quiet crashkernel=auto                 SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us

ou

kernel /vmlinuz-2.6.32-279.14.1.el6.x86_64 ro
         root=UUID=178d0092-4154-4688-af24-cda272265e08
         rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD             
         SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc                        KEYTABLE=us rd_NO_DM rhgb quiet


e ficaria no arquivo /boot/grub/grub.conf. 
Todo o texto que aparece após o arquivo vmlinuz determina uma opção. Qualquer opção que o kernel não compreenda será passada ao init (pid = 1), que é o primeiro processo a rodar no sistema.


Para o  GRUB versão 2 (o mais recente), a linha de comando do kernel pode ser assim:

linux16 /boot/vmlinuz-3.16.0 root=UUID=178d0092-4154-4688-af24-cda272265e08 ro          vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16            rhgb quiet LANG=en_US.UTF-8


e pode ser encontrada no arquivo /boot/grub2/grub.cfg.                                                                                          

Para a versão 2, você não deve editar este arquivo diretamente, e sim alterar os arquivos corretos dentro do diretório /etc.

 Nos exemplos linhas longas foram divididos para exibição, mas cada uma é uma única linha. Lembre-se da discuão sobre como configurar as versões do GRUB e que para a versão 2, você não deve editar o arquivo diretamente, mas deve modificar os arquivos relevantes em /etc.

Para ver com qual linha de comando o sistema foi iniciado:


$ cat /proc/cmdline

BOOT_IMAGE=/boot/vmlinuz-3.18.1 root=UUID=9d6b5801-9c7e-4c17-9068-49923952338e ro rhgb quiet loop.max_loop=256 LANG=en_US.UTF-8


 Há um lista muito longa de parâmetros do kernel. Descrição detalhada pode ser encontrada:

    No código fonte do kernel, no arquivo Documentation/kernel-parameters.txt.

    On-line, no endereço http://kernel.org/doc/Documentation/kernel-parameters.txt .

    No sistema no pacote de documentação do kernel fornecido pela maioria das distribuições com um nome como kernel-doc ou linux-doc.

    Ao digitar man bootparam.

Os parâmetros podem ter significado sozinho ou receberem um valor como: opção=valor, em que o valor dado pode ser uma string, um inteiro, ou uma array de inteiros, como é explicado na documentação.

Por convenção, não devem existir nenhum parâmetro intencionalmente escondido ou secreto. Todos eles devem ser explicados na documentação.

Aqui você pode ver uma descrição do que alguns parâmetros de inicialização fazem:


  •     RO: monta dispositivo raiz como somente leitura na inicialização.
  •     root: sistema de arquivos raiz.
  •     rd_LVM_LV: configura o sistema de arquivos raiz para usar o volume lógico especificado.
  •     rd_NO_LUKS: desativa a detecção de criptografia LUKS.
  •     rd_NO_DM: desativa a detecção do software RAID.
  •     LANG: é o idioma do sistema.
  •     SYSFONT: é a fonte do console.
  •     KEYTABLE: é o nome do arquivo keytable que é uma configuração do teclado.
  •     rhgb: mostra um boot gráfico em sistemas Red Hat.
  •     quiet: desativa mensagens de log durante a inicialização.


Observe que os parâmetros que começam com rd são usados apenas nos sistemas baseados no Red Hat. Você pode ver mais informações no link: https://fedoraproject.org/wiki/Dracut/Options.



sysctl


A interface sysctl pode ser usada para ler e ajustar parâmetros do kernel durante a execução do sistema. Os valores em uso atualmente podem ser consultados rodando:

$ sysctl -a
....
kernel.pid_max = 32768
...
kernel.threads-max = 63707
 ....
net.ipv4.ip_default_ttl = 64
....
net.ipv4.ip_forward = 0
....
vm.nr_hugepages = 16
vm.swappiness = 10
....



Cada valor corresponde a um arquivo virtual que está dentro da pasta /proc/sys, com os pontos sendo substituídos por barras. Por exemplo os dois comandos são equivalentes:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

$ sudo sysctl net.ipv4.ip_forward=1


em que o segundo é usado para configurar um valor usando a ferramenta sysctl. Não deixe espaços ao redor do sinal = . 
Observe que no primeiro comando alguns malabarismos são necessários para driblar os problemas com redirecionamento com sudo ... >....

Navegar pelos pseudo arquivos da pasta /proc/sys vai mostrar as mesmas informações que rodar sysctl -a. Para obter informações detalhadas sobre como usar o sysctl  man 8 sysctl. Para saber como usar a interface de programação sysctl() para realizar as mesmas operações através de programas man 2 sysctl.

Configurações salvas no arquivo /etc/sysctl.conf (veja man sysctl.conf para detalhes) são aplicadas na inicialização do sistema.

Rodaro comando:

$ sudo sysctl -p

Aplica o conteúdo do arquivo imediatamente, na verdade esse comando é executado durante a inicialização para aplicar as configurações salvas no arquivo

Em distribuições mais recentes baseadas no systemd (como o RHEL 7), o arquivo de configuração mudou para /usr/lib/sysctl.d/00-system,  mas o arquivo original ainda é suportado, como mostra a documentação encontrada dentro do novo arquivo.


Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

OPNsense - Firewall Open Source

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

Ophcrack: Descubra todas as senhas do Windows

SSD no linux

Oracle Linux 7.0 Server com Xfce - Instalação e configurações iniciais