Capítulo 9. Dicas do sistema

Índice

9.1. O programa screen
9.1.1. O cenário de utilização para o screen(1)
9.1.2. ligações de teclas para o comando screen
9.2. Gravação de dados e apresentação
9.2.1. O daemon de log
9.2.2. Analizador de log
9.2.3. Gravar as actividades da shell de modo limpo
9.2.4. Amostragem personalizada de dados em texto
9.2.5. Amostragem personalizada de hora e data
9.2.6. Echo de shell colorido
9.2.7. Comandos coloridos
9.2.8. Recordando as actividades do editor para repetições complexas
9.2.9. Gravar a imagem gráfica de uma aplicação X
9.2.10. Gravar alterações em ficheiros de configuração
9.3. Dicas de armazenamento de dados
9.3.1. Disk space usage
9.3.2. Configuração das partições do disco
9.3.3. Aceder a partição usando UUID
9.3.4. Configuração do sistema de ficheiros
9.3.5. Criação do sistema de ficheiros e verificação de integridade
9.3.6. Optimização do sistema de ficheiros por opções de montagem
9.3.7. Optimização do sistema de ficheiros através do superblock
9.3.8. Optimização do disco rijo
9.3.9. Usar SMART para prever falhas no disco rijo
9.3.10. Expandir o espaço de armazenamento utilizável via LVM
9.3.11. Expandir o espaço de armazenamento utilizável ao montar outra partição
9.3.12. Expansion of usable storage space by bind-mounting another directory
9.3.13. Expandir o espaço de armazenamento utilizável usando links simbólicos
9.3.14. Expandir o espaço de armazenamento utilizável usando aufs
9.4. Dicas de encriptação de dados
9.4.1. Encriptação de discos amovíveis com dm-crypt/LUKS
9.4.2. Partição swap encriptada com dm-crypt
9.4.3. Encriptar ficheiro automaticamente com eCryptfs
9.4.4. Montar eCryptfs automaticamente
9.5. Monitorizar, controlar e arrancar as actividades de programas
9.5.1. Temporizando um processo
9.5.2. A prioridade de agendamento
9.5.3. O comando ps
9.5.4. O comando top
9.5.5. Listar ficheiros abertos por um processo
9.5.6. Rastear as actividades de programas
9.5.7. Identificação de um processo usando ficheiros ou sockets
9.5.8. Repetir um comando com um intervalo constante
9.5.9. Repetindo um ciclo de comandos sobre ficheiros
9.5.10. Arrancar um programa a partir da GUI
9.5.11. Personalizar o programa a ser arrancado
9.5.12. Matar um processo
9.5.13. Agendar tarefas uma vez
9.5.14. Agendar tarefas regularmente
9.5.15. Tecla Alt-SysRq
9.6. Dicas de manutenção do sistema
9.6.1. Quem está no sistema?
9.6.2. Avisar todos
9.6.3. Identificação do hardware
9.6.4. Configuração do hardware
9.6.5. Hora do sistema e do hardware
9.6.6. A configuração do terminal
9.6.7. A infraestrutura de som
9.6.8. Desactivar o protector de ecrã (screensaver)
9.6.9. Desactivar os sons de beep
9.6.10. Utilização da memória
9.6.11. Segurança do sistema e verificação de integridade
9.7. O kernel
9.7.1. Kernel Linux 2.6
9.7.2. Parâmetros do kernel
9.7.3. Cabeçalhos do kernel
9.7.4. Compilar o kernel e módulos relacionados
9.7.5. Compilar a fonte do kernel: O método standard do Debian
9.7.6. Compilar o módulo fontes: O método standard do Debian
9.7.7. Compilar a fonte do kernel: O método clássico
9.7.8. Drivers de hardware não-livres
9.8. Sistema virtualizado
9.8.1. Ferramentas de virtualização
9.8.2. Fluxo de trabalho da virtualização
9.8.3. Montar o ficheiro de imagem de disco virtual
9.8.4. Sistema chroot
9.8.5. Sistemas de múltiplos ambientes de trabalho

Aqui, eu descrevo dicas básicas para configurar e gerir sistemas, a maioria a partir da consola.

9.1. O programa screen

O screen(1) é uma ferramenta muito útil para se aceder a sites remotos via ligações não confiáveis e intermitentes porque suporta interrupções nas ligações de rede.

Tabela 9.1. Lista de programas para suportar ligações à rede interrompidas

pacote popcon tamanho descrição
screen * V:10, I:32 952 terminal multiplexador com emulação de terminal VT100/ANSI

9.1.1. O cenário de utilização para o screen(1)

O screen(1) não apenas permite que uma janela terminal funcione com múltiplos processos, mas também permite que os processos de shell remota sobrevivam a ligações interrompidas. Aqui está um cenário típico de utilização do screen(1).

  1. Você faz login numa máquina remota.

  2. Você arranca o screen numa consola única.

  3. Você executa múltiplos programas na janela criada do screen com ^A c ("Ctrl-A" seguido de "c").

  4. Você muda entre as múltiplas janelas do screen com ^A n ("Ctrl-A" seguido de "n").

  5. Subitamente você precisa de abandonar o seu terminal, mas não quer perder o seu trabalho activo mantendo a ligação.

  6. Você pode separar a sessão do screen por quaisquer métodos.

    • Desligar a sua ligação de rede à bruta

    • Escrever ^A d ("Ctrl-A" seguido de "d") e manualmente terminar a sessão da ligação remota

    • Escrever ^A DD ("Ctrl-A" seguido de "DD") para separar o screen e terminar a sua sessão dele.

  7. Você faz login de novo para a mesma máquina remota (mesmo a partir de um terminal diferente).

  8. Você inicia o screen como "screen -r".

  9. O screen magicamente reagrupa todas as janelas screen anteriores com todos os programas a funcionar activamente.

[Dica] Dica

Você pode poupar despesas de ligação com o screen em ligações de rede medidas 'a metro' como as dial-up, porque você pode deixar um processo activo enquanto desligado, e depois re-ligar-se a ele mais tarde quando ligar de novo.

9.1.2. ligações de teclas para o comando screen

Numa sessão do screen, todas as entradas do teclado são enviadas para a sua janela actual excepto as teclas de comandos. Todas as teclas de comando do screen são inseridas ao escrever ^A ("Control-A") mais uma única tecla [mais quaisquer parâmetros]. Aqui estão alguns importantes para lembrar.

Tabela 9.2. Lista de ligações de teclas para o screen

tecla de atalho significado
^A ? mostra um écran de ajuda (mostra as teclas de atalho)
^A c cria uma nova janela e muda para ela
^A n vai para a janela seguinte
^A p vai para a janela anterior
^A 0 vai para a janela número 0
^A 1 vai para a janela número 1
^A w mostra uma lista de janelas
^A a envia Ctrl-A para a janela actual como entrada do teclado
^A h escreve uma cópia física da janela actual para um ficheiro
^A H inicia/termina o registo da janela actual para um ficheiro
^A ^X bloqueia o terminal (protegido por palavra-passe)
^A d separa a sessão do ecrã do terminal
^A DD separa a sessão do ecrã e termina a sessão

Veja screen(1) para detalhes.

9.2. Gravação de dados e apresentação

9.2.1. O daemon de log

Muitos programas registam as suas actividades sob o directório "/var/log/".

  • O daemon de log do kernel: klogd(8)

  • The system log daemon: rsyslogd(8)

Veja Secção 3.5.9, “A mensagem do sistema” e Secção 3.5.10, “A mensagem do kernel”.

9.2.2. Analizador de log

Aqui estão analisadores de logs notáveis ("~Gsecurity::log-analyzer" no aptitude(8)).

Tabela 9.3. Lista de analisadores de log do sistema

pacote popcon tamanho descrição
logwatch * V:2, I:2 1795 analisador de log com saída bonita escrito em Perl
fail2ban * V:5, I:6 672 banir IPs que causam erros de autenticação múltipla
analog * V:1.0, I:15 4524 analisador de log do servidor web
awstats * V:1.9, I:3 3101 analisador de logs de servidor web poderoso e cheio de funcionalidades
sarg * V:1.5, I:1.6 944 gerador de relatórios de análises do squid
pflogsumm * V:0.2, I:0.6 160 resumidor de entradas do relatório do Postfix
syslog-summary * V:0.19, I:1.2 84 resume o conteúdo do um ficheiro de log do syslog
lire * V:0.10, I:0.12 5304 analisador de registos cheiro de funcionalidades e gerador de relatórios
fwlogwatch * V:0.07, I:0.17 440 analisador de log da firewall
squidview * V:0.08, I:0.5 193 monitoriza e analisa ficheiros access.log do squid
visitors * V:0.07, I:0.2 228 analisador de log do servidor web rápido
swatch * V:0.05, I:0.2 112 visualizador de ficheiros de registo com correspondência de expressões regulares, destaque, e hooks.
crm114 * V:0.04, I:0.14 1336 Mutilador de Expressões Regulares Controlável e Filtro de Spam (CRM114)
icmpinfo * V:0.04, I:0.2 84 interpretar mensagens ICMP

[Nota] Nota

CRM114 disponibiliza uma infraestrutura de linguagem para escrever filtros fuzzy com a biblioteca de expressões regulares TRE. O seu uso popular é o filtro de spam de mail, mas pode ser usado como um analisador de registos.

9.2.3. Gravar as actividades da shell de modo limpo

O uso simples de script(1) (veja Secção 1.4.9, “Gravar as actividades da shell”) para gravar a actividade da shell produz um ficheiro com caracteres de controle. Isto pode ser evitado ao usar o col(1) como o seguinte.

$ script
Script iniciado, ficheiro é typescript

Faça o que tem a fazer ... e carregue em Ctrl-D para terminar o script.

$ col -bx <typescript >ficheiro_limpo
$ vim ficheiro_limpo

Se você não tem o script (por exemplo, durante o processo de arranque no initramfs), então use antes o seguinte.

$ sh -i 2>&1 | tee typescript
[Dica] Dica

Alguns emuladores de terminal x como o gnome-terminal podem gravar. Você pode desejar estender o buffer de linhas para ter deslocamento para trás.

[Dica] Dica

Você pode usar o screen(1) com "^A H" (veja Secção 9.1.2, “ligações de teclas para o comando screen”) para executar a gravação da consola.

[Dica] Dica

Você pode usar o emacs(1) com "M-x shell", "M-x eshell", ou "M-x term" para executar gravação da consola. Pode usar mais tarde "C-x C-w" para escrever o buffer num ficheiro.

9.2.4. Amostragem personalizada de dados em texto

Apesar de ferramentas paginadoras com o more(1) e less(1) (veja Secção 1.4.5, “O pager”) e ferramentas personalizadas para destaque e formatação (veja Secção 11.1.8, “Destacar e formatar dados de texto simples”) poderem mostrar dados de texto muito bem, os editores de objectivos gerais (veja Secção 1.4.6, “O editor de texto”) são mais versáteis e personalizáveis.

[Dica] Dica

Para o vim(1) e o seu alias de modo paginador view(1), ":set hls" activa pesquisas destacadas.

9.2.5. Amostragem personalizada de hora e data

O formato de amostragem predefinido da hora e data pelo comando "ls -l" depende do locale (veja Secção 1.2.6, “Marcas temporais (Timestamps)” para o valor). A variável "$LANG" é referida primeiro e pode ser sobreposta pela variável "$LC_TIME".

O formato mostrado predefinido actual para cada locale depende da versão da biblioteca C standard (o pacote libc6) usada. Isto é, lançamentos diferentes de Debian tiveram diferentes predefinições.

Se você deseja realmente personalizar este formato de amostragem da hora e data para além do locale, você deve definir o valor de estilo de hora com o argumento "--time-style" ou com o valor "$TIME_STYLE" (veja ls(1), date(1), "info coreutils 'ls invocation'").

Tabela 9.4. Mostra exemplos de hora e data para o comando "ls -l" para lenny

valor do estilo de hora localização mostra a hora e data
iso qualquer 01-19 00:15
long-iso qualquer 2009-01-19 00:15
full-iso qualquer 2009-01-19 00:15:16.000000000 +0900
locale C Jan 19 00:15
locale en_US.UTF-8 2009-01-19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M qualquer 19.01.09 00:15
+%d.%b.%y %H:%M C ou en_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

[Dica] Dica

Você pode eliminar a escrita de opções longas na linha de comandos usando nomes alternativos de comandos, ex. "alias ls='ls --time-style= +%d.%m.%y\ %H:%M'" (veja Secção 1.5.9, “Comando alias”).

[Dica] Dica

ISO 8601 é seguido por estes formatos iso.

9.2.6. Echo de shell colorido

A escrita da shell nos terminais mais modernos pode ser colorida usando código de escape de ANSI (veja "/usr/share/doc/xterm/ctlseqs.txt.gz").

Por exemplo, tente o seguinte

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.2.7. Comandos coloridos

Comandos coloridos são úteis para inspeccionar os seus resultados no ambiente interactivo. Eu incluí o seguinte no meu "~/.bashrc".

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=always'
    alias ll='ls --color=always -l'
    alias la='ls --color=always -A'
    alias less='less -R'
    alias ls='ls --color=always'
    alias grep='grep --color=always'
    alias egrep='egrep --color=always'
    alias fgrep='fgrep --color=always'
    alias zgrep='zgrep --color=always'
else
    alias ll='ls -l'
    alias la='ls -A'
fi

O uso de alias limita os efeitos coloridos da utilização interactiva do comando. Tem vantagem sobre exportar a variável de ambiente "export GREP_OPTIONS='--color=auto'" porque a cor pode ser vista sob programas paginadores como o less(1). Se você deseja suprimir a cor quando canaliza (pipe) para outros programas, use antes "--color=auto" no exemplo em cima para "~/.bashrc".

[Dica] Dica

Você pode desligar estes nomes alternativos coloridos no ambiente interactivo ao invocar a shell com "TERM=dumb bash".

9.2.8. Recordando as actividades do editor para repetições complexas

Você pode recordar as actividades do editor para repetições complexas.

Para o Vim, como se segue.

  • "qa": inicia a gravação de caracteres teclados no registo nomeado "a".

  • ... actividades do editor

  • "q": termina a gravação de caracteres escritos

  • "@a": executa o conteúdo do registo "a".

Para Emacs, como se segue

  • "C-x (": começa a definir uma macro de teclado.

  • ... actividades do editor

  • "C-x )": termina de definir uma macro de teclado.

  • "C-x e": executa uma macro de teclado.

9.2.9. Gravar a imagem gráfica de uma aplicação X

Existem algumas maneiras de gravar a imagem gráfica de uma aplicação X, incluindo um mostrador xterm.

Tabela 9.5. Lista de ferramentas gráficas de manipulação de imagens

pacote popcon tamanho comando
xbase-clients * I:43 59 xwd(1)
gimp * V:13, I:46 13042 Menu GUI
imagemagick * V:23, I:46 207 import(1)
scrot * V:0.3, I:1.4 80 scrot(1)

9.2.10. Gravar alterações em ficheiros de configuração

Existem ferramentas especializadas para gravar alterações em ficheiros de configuração com a ajuda do sistema DVCS.

Tabela 9.6. Lista de pacotes para gravar histórico de configuração em VCS

pacote popcon tamanho descrição
etckeeper * V:1.4, I:1.9 240 armazenar ficheiros de configuração e os seus meta-dados com Git (predefinido), Mercurial, ou Bazaar (novo)
changetrack * V:0.07, I:0.09 148 armazenar ficheiros de configuração com RCS (antigo)

Eu recomendo usar o pacote etckeeper com o git(1) o qual põe o "/etc" inteiro sob controle de VCS. O seu guia de instalação e tutorial podem ser encontrados em "/usr/share/doc/etckeeper/README.gz".

Essencialmente , executar "sudo etckeeper init" inicializa o repositório git para "/etc" tal como o processo explicado em Secção 10.9.5, “Git para gravar o histórico de configuração” mas com scripts hook especiais para configurações mais cuidadosas.

Conforme você muda a sua configuração, pode usar o git(1) normalmente para gravá-la. Ele também grava as alterações automaticamente de todas as vezes que você executa comandos de gestão de pacote.

[Dica] Dica

Você pode explorar o histórico de alterações de "/etc" ao executar "sudo GIT_DIR=/etc/.git gitk" com visão clara para novos pacotes instalados, pacotes removidos, e alterações da versão de pacotes.

9.3. Dicas de armazenamento de dados

Arrancar o seu sistema com live CDs de Linux ou CDs de instalação de debian em modo de recuperação torna fácil para si reconfigurar o armazenamento de dados no seu dispositivo de arranque. Veja também Secção 10.3, “Os dados binários”.

9.3.1. Disk space usage

The disk space usage can be evaluated by programs provided by the coreutils package:

  • mount(8) reports all mounted filesystems (disks).

  • df(8) reports the disk space usage for the file system.

  • du(8) reports the disk space usage for the directory tree.

[Dica] Dica

You can feed the output of du(8) to xdu(1x) to produce its graphical and interactive presentation with "du -k . |xdu", "sudo du -k -x / |xdu", etc.

9.3.2. Configuração das partições do disco

Para configuração de partições de disco, apesar do fdisk(8) ser considerado o standard, o parted(8) merece alguma atenção. "Dados de particionamento do disco", "Tabela de partições", "Mapa de partições", e "Etiqueta do disco" são todos sinónimos.

A maioria dos PCs usa o esquema clássico do Master Boot Record (MBR) para manter os dados de partições do disco no primeiro sector, isto é, LBA sector 0 (512 bytes).

[Nota] Nota

Alguns PCs novos com Extensible Firmware Interface (EFI), incluindo os Macs baseados em Intel, usam o esquema GUID Partition Table (GPT) para manter os dados de partições do disco não no primeiro sector.

Apesar do fdisk(8) ter sido o standard como ferramenta de particionamento de disco, o parted(8) está a substituí-lo.

Tabela 9.7. Lista de pacotes de gestão de partições do disco

pacote popcon tamanho GPT descrição
util-linux * V:90, I:99 1700 Não suportado vários utilitários de sistema incluindo fdisk(8) e cfdisk(8)
parted * V:1.2, I:10 240 Suportado GNU Parted programa de redimensionamento de partições do disco
gparted * V:2, I:20 4945 Suportado Editor de partições do GNOME baseado na libparted
qtparted * V:0.03, I:0.4 NOT_FOUND Suportado Editor de partições do KDE baseado na libparted
gptsync * V:0.01, I:0.2 72 Suportado sincroniza a tabela de partições MBR clássica com a GPT
kpartx * V:1.0, I:1.9 132 Suportado programa para criar mapeamentos de dispositivo para partições

[Cuidado] Cuidado

Apesar do parted(8) afirmar também criar e redimensionar sistemas de ficheiros, é mais seguro fazer tais coisas usando ferramentas especializadas e com melhor manutenção como o mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), …) e resize2fs(8).

[Nota] Nota

De modo a mudar entre GPT e MBR, você precisa de apagar os primeiros blocos de conteúdo do disco directamente (veja Secção 10.3.6, “Limpar conteúdo de ficheiro”) e usar "parted /dev/sdx mklabel gpt" ou "parted /dev/sdx mklabel msdos" para o definir. Por favor note que "msdos" é usado aqui para o MBR.

9.3.3. Aceder a partição usando UUID

Apesar da reconfiguração da sua partição ou ordem de activação de medias de armazenamento amovíveis poder apresentar nomes diferentes para as partições, você pode aceder-lhes de modo consistente. Isto é também útil se você tem múltiplos discos e a sua BIOS não lhes fornecer nomes de dispositivo consistentes.

[Dica] Dica

Você pode testar o UUID de um dispositivo especial de bloco com blkid(8).

[Dica] Dica

Nós de dispositivos de dispositivos como medias de armazenamento amovíveis podem ser tornados estáticos ao usar regras do udev, caso necessário. Veja Secção 3.5.11, “O sistema udev”.

9.3.4. Configuração do sistema de ficheiros

Para o sistema de ficheiro ext3, o pacote e2fsprogs disponibiliza o seguinte.

  • mkfs.ext3(8) para criar um novo sistema de ficheiros ext3

  • fsck.ext3(8) para verificar e reparar um sistema de ficheiros ext3 existente

  • tune2fs(8) para configurar o super-bloco do sistema de ficheiros ext3

Os comandos mkfs(8) e fsck(8) são disponibilizados pelo pacote e2fsprogs como frontends para vários programas dependentes do sistema de ficheiros (mkfs.fstype e fsck.fstype). Para o sistema de ficheiros ext3 existem o mkfs.ext3(8) e o fsck.ext3(8) (estão ligados por hardlink aos mke2fs(8) and e2fsck(8)).

Estão disponíveis comandos semelhantes para cada sistema de ficheiros suportado pelo Linux.

Tabela 9.8. Lista de pacotes de gestão de sistemas de ficheiros

pacote popcon tamanho descrição
e2fsprogs * V:60, I:99 2372 utilitários para os sistemas de ficheiros ext2/ext3/ext4
reiserfsprogs * V:1.4, I:5 1200 utilitários para o sistema de ficheiros Reiserfs
dosfstools * V:4, I:46 162 utilitários para o sistema de ficheiros FAT. (Microsoft: MS-DOS, Windows)
xfsprogs * V:2, I:9 3135 utilitários para o sistema de ficheiros XFS. (SGI: IRIX)
ntfsprogs * V:3, I:28 676 utilitários para o sistema de ficheiros NTFS. (Microsoft: Windows NT, …)
jfsutils * V:0.4, I:2 1888 utilitários para o sistema de ficheiros JFS. (IBM: AIX, OS/2)
reiser4progs * V:0.08, I:0.6 1296 utilitários para o sistema de ficheiros Reiser4
hfsprogs * V:0.10, I:0.9 280 utilitários para os sistemas de ficheiros HFS e HFS Plus. (Apple: Mac OS)
btrfs-tools * V:0.6, I:1.4 2128 utilitários para o sistema de ficheiros btrfs
zerofree * V:0.12, I:1.0 56 programa para zerar blocos livres de sistemas de ficheiros ext2/3

[Dica] Dica

O sistema de ficheiros Ext3 é o sistema de ficheiros predefinido para o sistema Linux e fortemente recomendado a usar a menos que tenha razões específicas para não o fazer. Após o kernel Linux 2.6.30 (Debian squeeze), o sistema de ficheiros ext4 está disponível e espera-se que seja o sistema de ficheiros predefinido para o sistema Linux. O sistema de ficheiros btrfs espera-se que seja o próximo sistema de ficheiros predefinido após o sistema de ficheiros ext4 para o sistema Linux.

[Atenção] Atenção

Você pode encarar algumas limitações com o ext4 porque é novo. Por exemplo, você tem de ter kernel Linux 2.6.30 ou posterior se deseja redimensionar uma partição ext4.

[Dica] Dica

Algumas ferramentas permitem acesso a sistemas de ficheiros sem suporte do kernel do Linux (veja Secção 10.3.2, “Manipular ficheiros sem montar o disco”).

9.3.5. Criação do sistema de ficheiros e verificação de integridade

O comando mkfs(8) cria o sistema de ficheiros num sistema Linux. O comando fsck(8) disponibiliza a verificação de integridade e reparação do sistema de ficheiros num sistema Linux.

[Cuidado] Cuidado

Geralmente não é seguro correr o fsck em sistemas de ficheiros montados.

[Dica] Dica

Verifique os ficheiros em "/var/log/fsck/" para os resultados do comando fsck(8) executado a partir do script de arranque.

[Dica] Dica

Use "shutdown -F -r now" para forçar a execução do comando fsck(8) em segurança em todos os sistemas de ficheiros incluindo o sistema de ficheiros raiz ao reiniciar a máquina. Veja o manual do shutdown(8) para mais detalhes.

9.3.6. Optimização do sistema de ficheiros por opções de montagem

A performance e características de um sistema de ficheiros pode ser optimizada pelas opções de montagem usadas (veja fstab(5) e mount(8)). As mais notáveis são as seguintes.

  • A opção "defaults" implica opções predefinidas: "rw,suid,dev,exec,auto,nouser,async". (geral)

  • A opção "noatime" ou "relatime" é muito eficaz para acelerar o acesso de leitura. (geral)

  • A opção "user" permite que um utilizador normal monte o sistema de ficheiros. Esta opção implica a combinação com a opção "noexec,nosuid,nodev". (geral, usada para CDs e disquetes)

  • A combinação de opções "noexec,nodev,nosuid" é usada para melhorar a segurança. (geral)

  • A opção "noauto" limita a montagem apenas por operação explícita. (geral)

  • A opção "data=journal" para ext3fs pode melhorar a integridade dos dados contra falhas de energia com alguma perda na velocidade de gravação.

[Dica] Dica

Você precisa de disponibilizar o parâmetro de boot do kernel (veja Secção 3.3, “Estágio 2: o gestor de arranque (boot loader)”), ex. "rootflags=data=journal" para implantar um modo de journal não predefinido para o sistema de ficheiros raiz. Para lenny, o modo de journal predefinido é "rootflags=data=ordered". Para squeeze, é "rootflags=data=writeback".

9.3.7. Optimização do sistema de ficheiros através do superblock

As características de um sistema de ficheiros podem ser optimizadas via o seu super-bloco usando o comando tune2fs(8).

  • A execução de "sudo tune2fs -l /dev/hda1" mostra o conteúdo do super-bloco do sistema de ficheiros em "/dev/hda1".

  • A execução de "sudo tune2fs -c 50 /dev/hda1" muda a frequência das verificações do sistema de ficheiros (execução do fsck durante o arranque) para cada 50 arranques em "/dev/hda1".

  • A execução de "sudo tune2fs -j /dev/hda1" adiciona capacidade de journal ao sistema de ficheiros, isto é, conversão de ext2 para ext3 em "/dev/hda1". (Faça isto no sistema de ficheiros desmontado.)

  • A execução de "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1" converte-o de ext3 para ext4 em "/dev/hda1". (Faça isto no sistema de ficheiros desmontado.)

[Atenção] Atenção

A conversão do sistema de ficheiros do dispositivo de arranque para ext4 deve ser evitada até que o GRUB boot loader suporte bem o sistema de ficheiros ext4 e o kernel Linux instalado seja mais recente que 2.6.30.

[Dica] Dica

Apesar do seu nome, o tune2fs(8) não funciona apenas no sistema de ficheiros ext2, mas também nos sistemas de ficheiros ext3 e ext4.

9.3.8. Optimização do disco rijo

[Atenção] Atenção

Por favor verifique o seu hardware e leia o manual do hdparam(8) antes de brincar com a configuração do disco rijo porque isto pode ser bastante perigoso para a integridade dos dados.

Você pode testar a velocidade de acesso ao disco de um disco rijo, ex. "/dev/hda", por "hdparm -tT /dev/hda". Para algum disco rijo ligado com (E)IDE, você pode acelerá-lo com "hdparm -q -c3 -d1 -u1 -m16 /dev/hda" ao activar o suporte a "(E)IDE 32-bit I/O", activando a bandeira "using_dma", definindo a bandeira "interrupt-unmask", e definindo o "multiple 16 sector I/O" (perigoso!).

Você pode testar a funcionalidade de cache de escrita de um disco rijo, por exemplo "/dev/sda", com "hdparm -W /dev/sda". Você pode desactivar a sua funcionalidade de cache de escrita com "hdparm -W 0 /dev/sda".

Você pode ser capaz de ler CDROMs muito pressionados em drives de CDROM modernas de alta velocidade ao abrandá-la com "setcd -x 2".

9.3.9. Usar SMART para prever falhas no disco rijo

Você pode monitorizar e registar em log o seu disco rijo que é compatível com SMART com o daemon smartd(8).

  1. Activar a função SMART na BIOS.

  2. instalar o pacote smartmontools

  3. Identificar os seus discos rijos al listá-los com df(1).

    • Vamos assumir uma drive de disco rijo a ser monitorizada como "/dev/hda".

  4. Verifique o resultado de "smartctl -a /dev/hda" para ver se a funcionalidade SMART está ligada actualmente.

    • Se não, active-o com "smartctl -s on -a /dev/hda".

  5. Active o daemon smartd(8) a correr com o seguinte.

    • retire a marca de comentário na linha "start_smartd=yes" no ficheiro "/etc/default/smartmontools"

    • reinicie o daemon smartd(8) com "sudo /etc/init.d/smartmontools restart".

[Dica] Dica

O daemon smartd(8) pode ser personalizado com o ficheiro /etc/smartd.conf incluindo em como ser notificado de avisos.

9.3.10. Expandir o espaço de armazenamento utilizável via LVM

Para partições criadas em Logical Volume Manager (LVM) (funcionalidade do Linux) durante a instalação, elas podem ser redimensionadas facilmente ao concatenar extensões nelas ou ao truncar extensões delas sobre múltiplos dispositivos de armazenamento sem grandes reconfigurações do sistema.

[Cuidado] Cuidado

A implantação do sistema LVM actual pode degradar a garantia contra corrupção do sistema de ficheiros oferecida pelos sistemas de ficheiros com journal como o ext3fs a menos que a performance do sistema seja sacrificada ao desactivar a cache de escrita no disco rijo.

9.3.11. Expandir o espaço de armazenamento utilizável ao montar outra partição

Se você tem uma partição vazia (ex. "/dev/sdx"), você pode formatá-la com mkfs.ext3(1) e mount(8) para um directório onde precise de mais espaço. (Você precisa de copiar os conteúdos originais.)

$ sudo mv work-dir old-dir
$ sudo mkfs.ext3 /dev/sdx
$ sudo mount -t ext3 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[Dica] Dica

Você pode alternativamente montar um ficheiro de imagem de disco vazio (veja Secção 10.2.5, “Criar um ficheiro de imagem de disco vazio”) como um dispositivo de loop (veja Secção 10.2.3, “Montar o ficheiro de imagem de disco”). A utilização do disco real cresce com os dados reais armazenados.

9.3.12. Expansion of usable storage space by bind-mounting another directory

If you have an empty directory (e.g., "/path/to/emp-dir") on another partition with usable space, you can mount(8) it with "--bind" option to a directory (e.g., "work-dir") where you need more space.

$ sudo mount --bind /path/to/emp-dir work-dir

9.3.13. Expandir o espaço de armazenamento utilizável usando links simbólicos

[Dica] Dica

This is a deprecated method. Use Secção 9.3.12, “Expansion of usable storage space by bind-mounting another directory” instead, if possible.

Se você tem um directório vazio (ex. "/caminho/para/directório-vazio") noutra partição com espaço utilizável, você pode criar um link simbólico para o directório com o ln(8).

$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[Atenção] Atenção

Do not use "symlink to a directory" for directories managed by the system such as "/opt". Such a symlink may be overwritten when the system is upgraded.

[Cuidado] Cuidado

Alguns softwares podem não funcionar bem com "links simbólicos para directórios".

9.3.14. Expandir o espaço de armazenamento utilizável usando aufs

Se você tem espaço utilizável noutra partição (ex. "/caminho/para/"), você pode criar um directório nela e empilhá-lo no directório onde precisa de espaço com o aufs.

$ sudo mv work-dir old-dir
$ sudo mkdir work-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
[Cuidado] Cuidado

O uso do aufs para armazenamento de dados a longo termo não é boa ideia porque está sob desenvolvimento e as alterações ao seu desenho podem introduzir problemas.

[Dica] Dica

De modo a usar o aufs, precisam de ser instalados o seu pacote de utilitário aufs-tools e o pacote de módulo de kernel para aufs como o aufs-modules-2.6-amd64.

[Dica] Dica

O aufs é usado para disponibilizar um sistema de ficheiros raiz com modo de escrita por muitos projectos modernos de live CD.

9.4. Dicas de encriptação de dados

Com acesso físico ao seu PC, qualquer um pode facilmente ganhar privilégios de root e aceder a todos os ficheiros no seu PC (veja Secção 4.7.4, “Tornar a palavra-passe do root segura”). Isto significa que o sistema de palavra passe no login não pode proteger os seus dados privados e sensíveis contra um possível roubo do seu PC. Você tem que implementar uma tecnologia de encriptação de dados para o fazer. Apesar do GNU privacy guard (veja Secção 10.4, “Infraestrutura da segurança de dados”) poder encriptar ficheiro,consome alguns esforços do utilizador.

dm-crypt e eCryptfs facilitam a encriptação de dados automática nativamente via módulos do kernel Linux com o mínimo de esforço do utilizador.

Tabela 9.9. Lista de utilitários de encriptação de dados

pacote popcon tamanho descrição
cryptsetup * V:4, I:6 740 utilitários para dispositivos de bloco encriptados (dm-crypt / LUKS)
cryptmount * V:0.3, I:0.5 323 utilitários para dispositivos de bloco encriptados (dm-crypt / LUKS) com focagem na montagem/desmontagem por utilizadores normais.
ecryptfs-utils * V:0.3, I:0.4 372 utilitários para sistemas de ficheiros em pilha encriptados (eCryptfs)

Dm-crypt é um sistema de ficheiros criptográfico que usa mapeador-de-dispositivo. O mapeador-de-dispositivo mapeia um dispositivo de bloco para outro.

eCryptfs é outro sistema de ficheiros criptográfico que usa sistema de ficheiros empilha. Os sistemas de ficheiros em pilha empilham-se a si próprios no topo de um directório existente de um sistema de ficheiros montado.

[Cuidado] Cuidado

A encriptação de dados custa tempo da CPU e etc. Por favor pese os seus benefícios e custos.

[Nota] Nota

O sistema Debian inteiro pode ser instalado num disco encriptado pelo instalador debian (lenny ou mais recente) usando dm-crypt/LUKS e initramfs.

[Dica] Dica

Veja Secção 10.4, “Infraestrutura da segurança de dados” para utilitário de encriptação do espaço de utilizador: GNU Privacy Guard.

9.4.1. Encriptação de discos amovíveis com dm-crypt/LUKS

Você pode encriptar o conteúdo de dispositivos de massa amovíveis, por exemplo, uma caneta de memória USB em "/dev/sdx", usando dm-crypt/LUKS. Você simplesmente format-a como se segue.

# badblocks -c 10240 -s -w -t random -v /dev/sdx
# shred -v -n 1 /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup luksOpen /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

Depois, pode ser montada tal como uma normal em "/media/<etiqueta_do_disco>", à excepção de pedir a palavra-passe (veja Secção 10.1.10, “Dispositivo de armazenamento amovível”) sob ambientes de trabalho modernos como o GNOME usando gnome-mount(1). A diferença é que todos os dados escritos nela são encriptados. Você pode alternativamente formatar o meio num formato diferente, por exemplo, ext3 com "mkfs.ext3 /dev/sdx1".

[Nota] Nota

Se você é realmente paranóico pela segurança dos dados, pode precisar de sobrescrever várias vezes no exemplo em cima. No entanto esta operação irá consumir muito tempo.

9.4.2. Partição swap encriptada com dm-crypt

Vamos assumir que o seu "/etc/fstab" original contém o seguinte.

/dev/sda7 swap sw 0 0

Você pode activar a encriptação da partição swap usando o dm-crypt com o seguinte.

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

9.4.3. Encriptar ficheiro automaticamente com eCryptfs

Você pode encriptar ficheiros escritos sob "~/Private/" automaticamente usando eCryptfs e o pacote ecryptfs-utils.

  • Execute ecryptfs-setup-private(1) e configure "~/Private/" pelos seguintes avisos.

  • Active "~/Private/" ao executar ecryptfs-mount-private(1).

  • Move ficheiros de dados sensitivos para "~/Private/" e cria os links simbólicos necessários.

    • Candidatos: "~/.fetchmailrc", "~/.ssh/identity", "~/.ssh/id_rsa", "~/.ssh/id_dsa" e outros ficheiros com "go-rwx"

  • Move directórios de dados sensitivos para um sub-directório em "~/Private/" e cria os links simbólicos necessários.

    • Candidatos: "~/.gnupg" e outros directórios com "go-rwx"

  • Crie um link simbólico de "~/Desktop/Private/" para "~/Private/" para facilitar as operações do ambiente de trabalho.

  • Desactive "~/Private/" ao executar ecryptfs-umount-private(1).

  • Active "~/Private/" ao emitir "ecryptfs-mount-private" quando necessitar de dados encriptados.

[Dica] Dica

Como o eCryptfs apenas encripta de modo selectivo os ficheiros sensitivos, o seu custo para o sistema é muito menor do que usar o dm-crypt no dispositivo de raiz inteiro ou "/home". Não precisa de nenhuns esforços de alocação de armazenamento no disco especial mas não podem manter em confidencial todos os meta-dados do sistema de ficheiros.

9.4.4. Montar eCryptfs automaticamente

Se você usar a sua palavra-passe do login para embrulhar as chaves de encriptação, você pode automatizar a montagem do eCryptfs via PAM (Pluggable Authentication Modules).

Insira a seguinte linha mesmo antes de "pam_permit.so" em "/etc/pam.d/common-auth".

auth required pam_ecryptfs.so unwrap

Insira a seguinte linha mesmo na última linha em "/etc/pam.d/common-session".

session optional pam_ecryptfs.so unwrap

Insira a seguinte linha na primeira linha activa em "/etc/pam.d/common-password".

password required pam_ecryptfs.so

Isto é bastante conveniente.

[Atenção] Atenção

Erros de configuração do PAM podem bloqueá-lo fora do seu próprio sistema. Veja Capítulo 4, Autenticação.

[Cuidado] Cuidado

Se você usar a sua palavra-passe de login para embrulhar chaves de encriptação, os seus dados encriptados são tão seguros como a sua palavra-passe de login de utilizador (veja Secção 4.3, “Boa palavra-passe”). A menos que seja cuidadoso a configurar uma palavra-passe forte, os seus dados estão em risco quando alguém corre software de crackar palavras-passe após roubar o seu portátil (veja Secção 4.7.4, “Tornar a palavra-passe do root segura”).

9.5. Monitorizar, controlar e arrancar as actividades de programas

As actividades de programas podem ser monitorizadas e controladas usando ferramentas especiais

Tabela 9.10. Lista de ferramentas para monitorizar e controlar as actividades de programas

pacote popcon tamanho descrição
coreutils * V:90, I:99 13477 nice(1): correr um programa com prioridade de agendamento modificada
bsdutils * V:80, I:99 200 renice(1): modifica a prioridade de agendamento de um processo em execução
procps * V:85, I:99 575 "/proc" utilitários de sistema de ficheiros: ps(1), top(1), kill(1) , watch(1), …
psmisc * V:50, I:92 688 "/proc" utilitários de sistema de ficheiros: killall(1), fuser(1), peekfd(1), pstree(1)
time * V:7, I:86 152 time(1): corre um programa para reportar as utilizações de recursos do sistema no que respeita a tempo
sysstat * V:6, I:9 1225 sar(1), iostat(1), mpstat(1), …: ferramentas de performance do sistema para Linux
isag * V:0.05, I:0.8 126 Interactive System Activity Grapher para sysstat
lsof * V:16, I:91 444 lsof(8): lista os ficheiro abertos por um processo em execução usando a opção "-p"
strace * V:4, I:29 404 strace(1): rastreia chamadas e sinais do sistema
ltrace * V:0.3, I:2 188 ltrace(1): rastreia chamadas de bibliotecas
xtrace * V:0.02, I:0.14 400 xtrace(1): rastreia a comunicação entre cliente X11 e servidor
powertop * V:0.8, I:16 380 powertop(1): informação sobre sistema de energia usado em portáteis baseados em Intel
cron * V:90, I:99 284 corre processos de acordo com uma agenda nos bastidores a partir do daemon cron(8)
anacron * V:43, I:48 120 agenda de comandos tipo cron para sistemas que não funcionam 24 horas por dia
at * V:51, I:86 140 at(1) ou batch(1): executam um trabalho a uma hora especificada ou abaixo de um certo nível de carga.

[Dica] Dica

Os pacotes procps disponibilizam as bases de monitorizar, controlar e iniciar actividades de programas. Você deve aprendê-las todas.

9.5.1. Temporizando um processo

Mostrar o tempo usado pelo processo invocado pelo comando.

# time qualquer_comando >/dev/null
real    0m0.035s       # tempo no relógio (tempo real)
user    0m0.000s       # tempo em modo de utilizador
sys     0m0.020s       # tempo em modo de kernel

9.5.2. A prioridade de agendamento

Um valor nice é usado para controlar a prioridade de agendamento para o processo.

Tabela 9.11. Lista de valores nice para a prioridade de agendamento

o valor nice prioridade de agendamento
19 processo de prioridade menor (nice)
0 processo de prioridade muito alta para o utilizador
-20 processo de prioridade muito alta para o root (não-nice)

# nice  -19 top                                      # muito bom
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # muito rápido

Por vezes um valor nice extremo faz mais danos que benefícios ao sistema. Use este comando com cuidado.

9.5.3. O comando ps

O comando ps(1) em Debian suporta ambas funcionalidades do BSD e SystemV e ajuda-o a identificar a actividade do processo estaticamente.

Tabela 9.12. Lista dos estilos do comando ps

estilo comando típico funcionalidade
BSD ps aux mostra %CPU %MEM
Sistema V ps -efH mostra PPID

Para o processo filho zombie (defunto), você pode matá-lo pelo ID do processo pai identificado no campo "PPID".

O comando pstree(1) mostra uma árvore de processos.

9.5.4. O comando top

O top(1) em Debian tem funcionalidades ricas e ajuda-o a identificar qual processo está a actuar de modo esquisito dinamicamente.

Tabela 9.13. Lista de comandos para o top

tecla comando descrição da resposta
h ou ? mostrar ajuda
f define/redefine o campo do mostrador
o reorganiza o campo do mostrador
F define a ordem de campo de chave
k mata um processo
r faz renice a um processo
q sair do comando top

9.5.5. Listar ficheiros abertos por um processo

Você pode listar todos os ficheiros abertos por um processo com o ID do processo (PID), ex. 1, com o seguinte.

$ sudo lsof -p 1

PID=1 é geralmente um programa de init.

9.5.6. Rastear as actividades de programas

Você pode rastrear a actividade do programa com o strace(1), ltrace(1), ou xtrace(1) para chamadas de sistema e sinais, chamadas de bibliotecas, ou comunicação entre cliente e servidor do X11.

Você pode rastrear as chamadas do sistema do comando ls como se segue.

$ sudo strace ls

9.5.7. Identificação de um processo usando ficheiros ou sockets

Você também pode identificar processos que usam ficheiros pelo fuser(1), ex. para "/var/log/mail.log" com o seguinte.

$ sudo fuser -v /var/log/mail.log
                     USER        PID ACCESS COMMAND
/var/log/mail.log:   root       2946 F.... rsyslogd

You see that file "/var/log/mail.log" is open for writing by the rsyslogd(8) command.

Você também pode identificar processos que usam sockets pelo fuser(1), ex. para "smtp/tcp" com o seguinte.

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

Agora você sabe que o seu sistema correr o exim4(8) para lidar com as ligações TCP para o porto SMTP (25).

9.5.8. Repetir um comando com um intervalo constante

O watch(1) executa um programa repetidamente num intervalo constante enquanto mostra os seus resultados em ecrã completo.

$ watch w

Isto mostra quem tem sessão iniciada (logged) no sistema e é actualizado a cada 2 segundos.

9.5.9. Repetindo um ciclo de comandos sobre ficheiros

Existem várias maneiras de repetir um ciclo de comandos sobre ficheiros que correspondem a alguma condição, ex. que correspondem ao padrão glob "*.ext".

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • combinação do find(1) e do xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) com a opção "-exec" com um comando:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) com a opção "-exec" com um script de shell curto:

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

Os exemplos em cima foram escritos para assegurar o lidar apropriado dos nomes de ficheiros esquisitos como os que contêm espaços. Veja Secção 10.1.5, “Idiomas para a selecção de ficheiros” para utilizações mais avançadas do find(1).

9.5.10. Arrancar um programa a partir da GUI

Você pode configurar para arrancar um processo a partir da interface gráfica de utilizador (GUI).

Sob o ambiente de trabalho GNOME, um programa pode ser arrancado com o argumento apropriado ao fazer duplo-clique no ícone do lançador, ao arrastar-e-largar um ícone de ficheiro no ícone do lançador, ou pelo menu "Abrir com …" via clique direito num ícone de ficheiro. O KDE também faz o equivalente.

Aqui está um exemplo sob GNOME para criar um ícone de lançamento para o mc(1) arrancado em gnome-terminal(1).

Crie um programa executável "mc-term" com o seguinte.

# cat >/usr/local/bin/mc-term <<EOF
#!/bin/sh
gnome-terminal -e "mc \$1"
EOF
# chmod 755 /usr/local/bin/mc-term

Crie um lançador de ambiente de trabalho com o seguinte.

  1. Clique com o botão direito no espaço de trabalho para seleccionar "Criar Lançador …".

  2. Defina "Tipo" para "Aplicação".

  3. Defina "Nome" para "mc".

  4. Defina "Comando" para "mc-term %f"

  5. Clique "OK".

Crie uma associação de 'abrir com' como o seguinte.

  1. Clique com o botão direito na pasta para seleccionar "Abrir com Outra Aplicação …".

  2. Clique para abrir o diálogo "Use um comando personalizado" e insira "mc-term %f".

  3. Clique "Abrir"

[Dica] Dica

o lançador é um ficheiro em "~/Desktop" com a extensão ".desktop".

9.5.11. Personalizar o programa a ser arrancado

Alguns programas iniciam outros programas automaticamente. Aqui estão alguns pontos de controle para personalizar este processo.

  • Menu de configuração da aplicação:

    • Ambiente GNOME: "Sistema" → "Preferências" → "Aplicação Preferida"

    • Ambiente KDE: "K" → "Centro de Controle" → "Componentes do KDE" → "Seleccionar Componente"

    • Navegador Iceweasel: "Editar" → "Preferências" → "Aplicações"

    • mc(1): "/etc/mc/mc.ext"

  • Variáveis de ambiente como a "$BROWSER", "$EDITOR", "$VISUAL", e "$PAGER" (veja eviron(7))

  • O sistema update-alternatives(8) para programas como o "editor", "view", "x-www-browser", "gnome-www-browser", e "www-browser" (veja Secção 1.4.7, “Definir um editor de texto predefinido”)

  • os conteúdos dos ficheiros "~/.mailcap" e "/etc/mailcap" com a associação do tipo MIME com o programa (veja mailcap(5))

  • Os conteúdos dos ficheiros "~/.mime.types" e "/etc/mime.types" que associam a extensão do nome do ficheiro com o tipo MIME (veja run-mailcap(1))

[Dica] Dica

update-mime(8) actualiza o ficheiro "/etc/mailcap" usando o ficheiro "/etc/mailcap.order" (veja mailcap.order(5)).

[Dica] Dica

O pacote debianutils disponibiliza sensible-browser(1), sensible-editor(1), e sensible-pager(1) que fazem decisões sensíveis sobre qual editor, paginador, e explorador web chamar, respectivamente. Eu recomendo-lhe a leitura destes scripts de shell.

[Dica] Dica

De modo a correr uma aplicação de consola como o mutt sob o X como a sua aplicação preferida, você deve criar uma aplicação X como se segue e definir "/usr/local/bin/mutt-term" como a sua aplicação preferida a ser iniciada como descrito.

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

9.5.12. Matar um processo

Use kill(1) para matar (ou enviar um sinal para) um processo pelo ID do processo.

Use killall(1) ou pkill(1) para fazer o mesmo pelo nome do comando do processo ou outro atributo.

Tabela 9.14. Lista dos sinais frequentemente usados para matar comandos

valor do sinal nome do sinal função
1 HUP reiniciar daemon
15 TERM morte normal
9 KILL morte forçada

9.5.13. Agendar tarefas uma vez

Corra o comando at(1) para agendar uma tarefa de uma-vez com o seguinte.

$ echo 'command -args'| at 3:40 monday

9.5.14. Agendar tarefas regularmente

Use cron(8) para agendar tarefas regularmente. Veja crontab(1) e crontab(5).

Você pode agendar a execução de processos como um utilizador normal, ex. foo ao criar um ficheiro crontab(5) como "/var/spool/cron/crontabs/foo" com o comando "crontab -e".

Aqui está um exemplo de um ficheiro crontab(5).

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[Dica] Dica

Para o sistema que não corre continuamente, instale o pacote anacron para agendar comandos periódicos a intervalos especificados o mais próximo que os tempos de ligação de máquina permitem. Veja anacron(8) e anacrontab(5).

[Dica] Dica

Para scripts agendados de manutenção do sistema, você pode corrê-los periodicamente a partir da conta root ao colocar tais scripts em "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/", ou "/etc/cron.monthly/". Os tempos de execução destes scripts podem ser personalizados pelo "/etc/crontab" e "/etc/anacrontab".

9.5.15. Tecla Alt-SysRq

A segurança contra falha do sistema é disponibiliza pela opção de compilação do kernel "Magic SysRq key" (chave SAK) a qual é agora a predefinição para o kernel Debian. Pressionar Alt-SysRq seguido de uma das seguintes teclas faz a magia de recuperar o controle do sistema.

Tabela 9.15. Lista de teclas de comando SAK

tecla que segue a Alt-SysRq descrição da acção
r restaura o teclado a partir de modo raw (cru) após crash do X
0 mude o nível de log (loglevel) da consola para 0 para reduzir as mensagens de erro
k kill (mata) todos os processos da consola virtual actual
e envia um SIGTERM a todos os processos, excepto para init(8)
i envia um SIGKILL a todos os processos, excepto para init(8)
s sincroniza todos os sistemas de ficheiros montados
u remonta todos os sistemas de ficheiros montados em modo de apenas-leitura (umount)
b reboot (reinicia) o sistema sem sincronização ou desmontagem

A combinação de "Alt-SysRq s", "Alt-SysRq u", e "Alt-SysRq r" é boa para sair de situações realmente más.

Veja "/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz".

[Cuidado] Cuidado

A funcionalidade Alt-SysRq pode ser considerada um risco de segurança ao permitir que os utilizadores tenham acesso a funções com privilégios de root. Colocar "echo 0 >/proc/sys/kernel/sysrq" em "/etc/rc.local" ou "kernel.sysrq = 0" em "/etc/sysctl.conf" desactiva a funcionalidade Alt-SysRq.

[Dica] Dica

A partir de terminal SSH etc., você pode usar a funcionalidade Alt-SysRq ao escrever para o "/proc/sysrq-trigger". Por exemplo, "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" a partir do aviso da shell de root ssincroniza e umounts (desmonta) todos os sistemas de ficheiros montados.

9.6. Dicas de manutenção do sistema

9.6.1. Quem está no sistema?

Você pode verificar quem está no sistema com o seguinte.

  • who(1) mostra quem tem sessão iniciada.

  • w(1) mostra quem tem sessão iniciada e o que estão a fazer.

  • last(1) mostra listagem do último utilizador a iniciar sessão.

  • lastb(1 )mostra listagem dos últimos utilizadores a falharem o inicio de sessão.

[Dica] Dica

"/var/run/utmp", "/var/log/wtmp", e "/var/run/utmp" detém tal informação do utilizador. Veja login(1) e utmp(5).

9.6.2. Avisar todos

Você pode mandar uma mensagem para todos os que têm sessão iniciada no sistema com wall(1) com o seguinte.

$ echo "Vamos desligar dentro de 1 hora" | wall

9.6.3. Identificação do hardware

Para os dispositivos tipo PCI (AGP, PCI-Express, CardBus, ExpressCard, etc.), o lspci(8) (provavelmente com a opção "-nn") é um bom inicio para a identificação do hardware.

Alternativamente, você pode identificar o hardware ao ler os conteúdos de "/proc/bus/pci/devices" ou explorar a árvore de directórios sob "/sys/bus/pci" (veja Secção 1.2.12, “procfs e sysfs”).

Tabela 9.16. Lista de ferramenta de identificação de hardware

pacote popcon tamanho descrição
pciutils * V:18, I:95 936 Utilitários PCI do Linux: lspci(8)
usbutils * V:29, I:94 628 Utilitários USB do Linux: lsusb(8)
pcmciautils * V:4, I:16 92 Utilitários PCMCIA par Linux 2.6: pccardctl(8)
scsitools * V:0.16, I:0.9 424 colecção de ferramentas para gestão de hardware SCSI: lsscsi(8)
pnputils * V:0.02, I:0.14 108 Utilitários Plug and Play da BIOS: lspnp(8)
procinfo * V:0.3, I:2 164 informação do sistema obtida de "/proc": lsdev(8)
lshw * V:1.2, I:8 656 informação acerca da configuração do hardware: lshw(1)
discover * V:5, I:52 120 sistema de identificação de hardware: discover(8)

9.6.4. Configuração do hardware

Apesar da maioria da configuração de hardware nos sistemas de ambiente de trabalho GUI modernos como o GNOME e KDE poder ser gerida através de acompanhamento por ferramentas de configuração com GUI, é uma boa ideia conhecer alguns métodos básicos de o configurar.

Tabela 9.17. Lista de ferramentas de configuração do hardware

pacote popcon tamanho descrição
hal * V:24, I:32 1516 Hardware Abstraction Layer: lshal(1)
console-tools * V:24, I:49 956 tipo de letra da consola Linux e utilitários da tabela de teclas
x11-xserver-utils * V:36, I:54 544 Utilitários do servido X: xset(1), xmodmap(1)
acpid * V:53, I:93 165 daemon para gerir eventos entregues pelo Advanced Configuration and Power Interface (ACPI)
acpi * V:5, I:61 92 utilitário para mostrar informação em dispositivos ACPI
apmd * V:1.5, I:14 252 daemon para gerir eventos entregues pelo Advanced Power Management (APM)
noflushd * V:0.03, I:0.06 248 daemon que permite que discos rijos inactivos parem o motor
sleepd * V:0.06, I:0.08 148 daemon para colocar um portátil em modo de adormecimento durante a inactividade
hdparm * V:12, I:52 304 optimização do acesso ao disco rijo (veja Secção 9.3.8, “Optimização do disco rijo”)
smartmontools * V:7, I:23 1324 controlar e monitorizar sistemas de armazenamento usando S.M.A.R.T.
setserial * V:1.2, I:2 116 colecção de ferramentas para gestão de portas série
memtest86+ * V:0.3, I:6 2342 colecção de ferramentas para gestão de hardware de memória
scsitools * V:0.16, I:0.9 424 colecção de ferramentas para gestão de hardware SCSI
tpconfig * V:0.2, I:0.6 220 utilitário para configurar dispositivos touchpad
setcd * V:0.04, I:0.2 28 optimização de acesso a drives de discos compactos
big-cursor * I:0.15 68 cursores de rato maiores para o X

Aqui, o ACPI é uma estrutura mais recente para o sistema de gestão de energia que o APM.

[Dica] Dica

O escalar de frequências da CPU em sistemas modernos é governado por módulos do kernel como o acpi_cpufreq.

9.6.5. Hora do sistema e do hardware

O seguinte define a hora do sistema e hardware para MM/DD hh:mm, AAAA.

# date MMDDhhmmAAAA
# hwclock --utc --systohc
# hwclock --show

A horas são mostradas normalmente na hora local no sistema Debian mas o hardware e a hora do sistema geralmente usam UT(GMT).

Se a hora do hardware (BIOS) estiver definida para UT, mude a definição para "UTC=yes" no "/etc/default/rcS".

Se desejar actualizar a hora do sistema via rede, considere usar o serviço NTP como pacotes como os ntp, ntpdate, e chrony.

Veja o seguinte.

[Dica] Dica

O ntptrace(8) no pacote ntp pode rastrear uma cadeia de servidores NTP até à sua fonte principal.

9.6.6. A configuração do terminal

Existem vários componentes para configurar a consola de caracteres e as funcionalidades do sistema ncurses(3).

  • O ficheiro "/etc/terminfo/*/*" (terminfo(5))

  • A variável de ambiente "$TERM" (term(7))

  • setterm(1), stty(1), tic(1), e toe(1)

Se a entrada terminfo para o xterm não funcionar com um xterm não Debian, mude o seu tipo e terminal, "$TERM", de "xterm" para uma das versões de funcionalidades limitadas como o "xterm-r6" quando iniciar sessão num sistema Debian remotamente. Veja "/usr/share/doc/libncurses5/FAQ" para mais. O "dumb" é o denominador comum mais baixo para "$TERM".

9.6.7. A infraestrutura de som

As drivers para placas de som para o Linux 2.6 actual são disponibilizadas pelo Advanced Linux Sound Architecture (ALSA). ALSA disponibiliza um modo de emulação para o anterior Open Sound System (OSS) para compatibilidade.

Execute "dpkg-reconfigure linux-sound-base" para seleccionar o sistema de som para usar ALSA via colocação em lista negra de módulos de kernel. A menos que tenha um hardware de som muito recente, a infraestrutura udev deverá configurar o seu sistema de som.

[Dica] Dica

Use "cat /dev/urandom > /dev/audio" ou speaker-test(1) para testar os altifalantes (^C para parar)

[Dica] Dica

Se você não consegue obter som, os seus altifalantes podem estar ligados a uma saída silenciada (mute). Os sistemas de som modernos têm muitas saídas. O alsamixer(1) no pacote alsa-utils é útil para configurar as definições de volume e mute.

As aplicações de software podem ser configuradas para não só aceder a dispositivos de som directamente, mas também para aceder a eles via alguns sistemas servidores de som normalizados.

Tabela 9.18. Lista de pacotes de som

pacote popcon tamanho descrição
linux-sound-base * V:41, I:51 128 pacote base para sistemas de som ALSA e OSS
alsa-base * V:2, I:50 504 ficheiros de configuração da driver ALSA
alsa-utils * V:36, I:50 1958 utilitários para configurar e utilizar ALSA
oss-compat * V:17, I:21 72 compatibilidade de OSS sob ALSA para prevenir erros de "/dev/dsp não encontrado"
esound-common * V:10, I:52 79 Enlightened Sound Daemon (ESD) comum (Enlightenment e GNOME)
esound * V:0.2, I:2 NOT_FOUND Enlightened Sound Daemon (ESD) servidor (Enlightenment e GNOME)
esound-clients * V:1.4, I:6 NOT_FOUND Enlightened Sound Daemon (ESD) cliente (Enlightenment e GNOME)
libesd0 * V:12, I:52 45 Enlightened Sound Daemon (ESD) biblioteca (Enlightenment e GNOME)
arts * I:3 NOT_FOUND servidor aRts (KDE)
libarts1c2a * V:5, I:12 NOT_FOUND biblioteca aRts (KDE)
libartsc0 * V:3, I:20 NOT_FOUND biblioteca aRts (KDE)
jackd * V:0.3, I:3 32 JACK Audio Connection Kit. (JACK) servidor (baixa latência)
libjack0 * V:2, I:16 132 JACK Audio Connection Kit. (JACK) biblioteca (baixa latência)
nas * V:0.16, I:0.2 265 Network Audio System (NAS) servidor
libaudio2 * V:27, I:46 176 Network Audio System (NAS) biblioteca
pulseaudio * V:9, I:11 4721 servidor PulseAudio, substituto para o ESD
libpulse0 * V:25, I:50 812 biblioteca cliente PulseAudio, substituto para o ESD
libgstreamer0.10-0 * V:35, I:53 3896 GStreamer: motor de som do GNOME
libxine1 * V:4, I:24 29 xine: antigo motor de som do KDE
libphonon4 * I:24 604 Phonon: novo motor de som do KDE

Existe normalmente um motor de som comum para cada ambiente de trabalho popular. Cada motor de som usado pela aplicação pode escolher ligar a diferentes servidores de som.

9.6.8. Desactivar o protector de ecrã (screensaver)

Para desactivar o protector de écran, use os seguintes comandos.

Tabela 9.19. Lista de comandos para desactivar o protector de écran

ambiente comando
A consola do Linux setterm -powersave off
O X Window (desactivar o protector de écran) xset s off
O X Window (desactivar o dpms) xset -dpms
O X Window (GUI de configuração do protector de écran) xscreensaver-command -prefs

9.6.9. Desactivar os sons de beep

Pode-se sempre desligar o altifalante do PC para desactivar os apitos. Remover o módulo de kernel pcspkr faz isso por si.

O seguinte previne o programa readline(3) usando pelo bash(1) de apitar quando encontra "\a" (ASCII=7).

$ echo "set bell-style none">> ~/.inputrc

9.6.10. Utilização da memória

A mensagem de arranque do kernel em "/var/log/dmesg" contém o tamanho total exacto da memória disponível.

free(1) e top(1) mostram informação sobre os recursos de memória no sistema corrente.

# grep '\] Memory' /var/log/dmesg
[    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
$ free -k
             total       used       free     shared    buffers     cached
Mem:        997184     976928      20256          0     129592     171932
-/+ buffers/cache:     675404     321780
Swap:      4545576          4    4545572
[Dica] Dica

Não se preocupe com o grande tamanho de "used" e o pequeno tamanho de "free" na linha "Mem:", mas leia a que está sob elas (675404 e 321780 no exemplo em baixo) e relaxe.

Para o meu MacBook com 1GB=1048576k de DRAM (o sistema de vídeo rouba alguma), Eu vejo o seguinte.

Tabela 9.20. Lista dos tamanhos de memória relatados

relato tamanho
Tamanho total no dmesg 1016784k = 1GB - 31792k
Livre no dmesg 990528k
Total sob a shell 997184k
Livre sob a shell 20256k (mas efectivamente 321780k)

9.6.11. Segurança do sistema e verificação de integridade

Uma manutenção pobre do sistema pode expor o seu sistema a exploração externa.

Para segurança do sistema e verificação de integridade, você deve começar com o seguinte.

Tabela 9.21. Lista de ferramentas para segurança do sistema e verificação de integridade

pacote popcon tamanho descrição
logcheck * V:2, I:3 284 daemon para enviar para o administrador por mail as anomalias nos ficheiros de log do sistema
debsums * V:2, I:4 324 utilitário para verifica pacotes instalados contra sumários de verificação MD5
chkrootkit * V:1.9, I:5 808 detector de rootkit
clamav * V:2, I:9 584 utilitário de anti-vírus para Unix - interface de linha de comandos
tiger * V:0.8, I:0.9 3016 relatar vulnerabilidades de segurança do sistema
tripwire * V:0.6, I:0.7 9456 verificador de integridade de ficheiros e directórios
john * V:0.6, I:2 472 ferramenta de crack de palavras-passe activa
aide * V:0.2, I:0.3 1240 Ambiente de Detecção de Intrusão Avançado - binário estático
bastille * V:0.08, I:0.2 1960 ferramenta de endurecimento de segurança
integrit * V:0.07, I:0.14 440 programa de verificação de integridade de ficheiros
crack * V:0.02, I:0.2 204 programa de adivinhação de palavra-passe

Aqui está um script simples para verificar as típicas permissões de ficheiros escritas incorrectamente.

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[Cuidado] Cuidado

Como o pacote debsums usa sumários de verificação MD5 armazenados localmente, não pode ser de total confiança como ferramenta de auditoria à segurança do sistema contra ataques maliciosos.

9.7. O kernel

Debian distribui o kernel Linux modularizado em pacotes para as arquitecturas suportadas.

9.7.1. Kernel Linux 2.6

Existem algumas funcionalidades notáveis no kernel Linux 2.6 comparado ao 2.4.

  • Os dispositivos são criados pelo sistema udev (veja Secção 3.5.11, “O sistema udev”).

  • Os acessos de leitura/escrita a dispositivos CD/DVD IDE não usam o módulo ide-scsi.

  • As funções de filtragem de pacotes de rede usam módulos iptable do kernel.

9.7.2. Parâmetros do kernel

Muitas funcionalidades do Linux são configuráveis via parâmetros de kernel como se segue.

Veja "kernel-parameters.txt(.gz)" e outros documentos relacionados na documentação do kernel Linux ("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*") disponibilizados pelo pacote linux-doc-2.6.*.

9.7.3. Cabeçalhos do kernel

A maioria dos programas normais não precisa dos cabeçalhos do kernel e na verdade podem bloquear se os usar directamente para compilação. Eles devem ser compilados contra os cabeçalhos em "/usr/include/linux" e "/usr/include/asm" disponibilizado pelo pacote libc6-dev (criado a partir do pacote fonte glibc) no sistema Debian.

[Nota] Nota

Para compilar alguns programas específicos do kernel como módulos de kernel a partir de fonte externa e o daemon de auto-montagem (amd), você tem de incluir o caminho para os cabeçalhos de kernel correspondentes, ex. "-I/usr/src/versão-de-linux/include/", à sua linha de comandos.O module-assistant(8) (ou a sua forma abreviada m-a) ajuda os utilizadores a construir e instalar pacotes de módulos facilmente para um ou mais kernels personalizados.

9.7.4. Compilar o kernel e módulos relacionados

O Debian tem o seu método próprio de compilar o kernel e os módulos relacionados.

Tabela 9.22. Lista de pacotes chave a serem instalados para a recompilação do kernel no sistema Debian.

pacote popcon tamanho descrição
build-essential * I:47 48 pacotes essenciais para construir pacotes Debian: make, gcc, …
bzip2 * V:55, I:80 132 utilitários de compressão e descompressão para ficheiros bz2
libncurses5-dev * V:5, I:22 1192 bibliotecas de programadores e documentos para ncurses
git * V:10, I:35 10625 git: sistema de controle de versão distribuído usado pelo kernel Linux
fakeroot * V:6, I:44 369 disponibiliza um ambiente de falso-root para construção de pacotes como não-root
initramfs-tools * V:44, I:98 456 ferramenta para construir uma initramfs (específico de Debian)
kernel-package * V:1.3, I:10 2316 ferramenta para construir pacotes de kernel Linux (específico de Debian)
module-assistant * V:2, I:15 564 ferramenta para ajudar a construir pacotes de módulos (específico de Debian)
dkms * V:7, I:17 452 suporte de módulos de kernel dinâmicos (DKMS) (genérico)
devscripts * V:2, I:9 1499 scripts de ajuda para um responsável de pacote Debian (específico de Debian)
linux-tree-2.6.* N/D N/D meta-pacote da árvore fonte do kernel Linux (específico de Debian)

Se você usa initrd em Secção 3.3, “Estágio 2: o gestor de arranque (boot loader)”, certifique-se de ler a informação relacionada em initramfs-tools(8), update-initramfs(8), mkinitramfs(8) e initramfs.conf(5).

[Atenção] Atenção

Não coloque links simbólicos para os directórios na árvore fonte (ex. "/usr/src/linux*") a partir de "/usr/include/linux" e "/usr/include/asm" quando compilar a fonte do kernel Linux. (Alguns documentos antigos sugerem isto.)

[Nota] Nota

Quando compilar o kernel Linux mais recente no sistema Debian stable, pode ser necessário o uso das ferramentas backport mais recentes do Debian unstable.

[Nota] Nota

O suporte dinâmico a módulos do kernel (DKMS) é uma nova infraestrutura independente da distribuição desenhada para permitir que módulos de kernel individuais sejam actualizados sem se alterar todo o kernel. Isto será aprovado para a manutenção de módulos de fora-da-árvore para squeeze. Isto também facilita a reconstrução de módulos quando actualiza os kernels.

9.7.5. Compilar a fonte do kernel: O método standard do Debian

O método standard de Debian para compilar a fonte do kernel para criar um pacote de kernel personalizado usa o make-kpkg(1). A documentação oficial está no fundo de "/usr/share/doc/kernel-package/README.gz". Veja kernel-pkg.conf(5) e kernel-img.conf(5) para personalização.

Aqui está um exemplo para sistema amd64.

# aptitude install linux-tree-<version>
$ cd /usr/src
$ tar -xjvf linux-source-<version>.tar.bz2
$ cd linux-source-<version>
$ cp /boot/config-<oldversion> .config
$ make menuconfig
 ...
$ make-kpkg clean
$ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=1.0 kernel_image modules_image
$ cd ..
# dpkg -i linux-image*.deb

Reiniciar para o novo kernel com "shutdown -r now".

[Cuidado] Cuidado

Quando você pretende criar um kernel não-modularizado compilado apenas para uma máquina, invoque make-kpkg sem a opção "--initrd" porque a initrd não é usada. A invocação de "make oldconfig" e "make dep" não é precisa porque "make-kpkg imagem_de_kernel" invoca-os.

9.7.6. Compilar o módulo fontes: O método standard do Debian

O método standard de Debian para criar e instalar um pacote de módulo personalizado para um pacote de kernel personalizado usa o module-assistant(8) e pacotes de fonte de módulos. Por exemplo, o seguinte compila o pacote de módulo de kernel unionfs e instala-o.

$ sudo aptitude install module-assistant
...
$ sudo aptitude install unionfs-source unionfs-tools unionfs-utils
$ sudo m-a update
$ sudo m-a prepare
$ sudo m-a auto-install unionfs
...
$ sudo apt-get autoremove

9.7.7. Compilar a fonte do kernel: O método clássico

Você ainda pode construir o kernel Linux a partir das fontes primárias com o método clássico. Você tem de cuidar dos detalhes da configuração do sistema manualmente.

$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2
$ tar -xjvf linux-<version>.tar.bz2
$ cd linux-<version>
$ cp /boot/config-<version> .config
$ make menuconfig
 ...
$ make dep; make bzImage
$ make modules
# cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version>
# make modules_install
# depmod -a
# update-initramfs -c -k <version>

Configurar o bootloader com o seguinte.

  • Edite o "/etc/lilo.conf" e corra "/sbin/lilo", se você usar o lilo.

  • Edite o "/boot/grub/menu.lst", se você usar o grub.

Reiniciar para o novo kernel com "shutdown -r now".

9.7.8. Drivers de hardware não-livres

Apesar da maioria das drivers de hardware estarem disponíveis como software livre e como parte do sistema Debian, você pode precisar de carregar algumas drivers externas e não-livres para suportar alguns hardwares, como os Winmodem, no seu sistema.

Verificar recursos pertinentes.

9.8. Sistema virtualizado

O uso de sistema virtualizado permite-nos correr várias instâncias do sistema simultâneamente num único hardware.

9.8.1. Ferramentas de virtualização

Existem vários pacotes relacionados com sistemas de virtualização e emulação em Debian para além do simples chroot. Alguns pacotes também o ajudam a configurar tais sistemas.

Tabela 9.23. Lista de ferramentas de virtualização

pacote popcon tamanho descrição
schroot * V:0.9, I:1.3 2676 ferramenta especializada para executar pacotes binários Debian em chroot
sbuild * V:0.10, I:0.3 564 ferramenta para construir pacotes binários Debian a partir de fontes Debian
pbuilder * V:0.5, I:2 1320 construtor de pacotes pessoais para pacotes Debian
debootstrap * V:1.5, I:10 224 bootstrap um sistema Debian básico (escrito em sh)
cdebootstrap * V:0.2, I:1.7 71 bootstrap um sistema Debian (escrito em C)
rootstrap * V:0.02, I:0.17 156 ferramenta para construir imagens de sistema de ficheiros de Linux completas
virt-manager * V:0.6, I:2 5225 Virtual Machine Manager: aplicação de ambiente de trabalho para gerir máquinas virtuais
libvirt-bin * V:1.9, I:3 3379 programas para a biblioteca libvirt
user-mode-linux * V:0.05, I:0.3 20800 Modo-de-utilizador Linux (kernel)
bochs * V:0.03, I:0.2 2944 Bochs: emulador PC IA-32
qemu * I:5 344 QEMU: emulador de processador genérico rápido
qemu-system * V:3, I:5 58043 QEMU: binários de emulação de sistema completo
qemu-user * V:0.5, I:5 40909 QEMU: binários de emulação em modo de utilizador
qemu-utils * V:0.8, I:6 1238 QEMU: utilitários
qemu-kvm * V:2, I:3 4290 KVM: virtualização completa em hardware x86 com virtualização assistida por hardware
virtualbox-ose * V:1.2, I:4 117 VirtualBox: solução de virtualização x86 em i386 e amd64
xen-tools * V:0.2, I:1.7 1228 ferramentas para gerir o servidor virtual XEN do debian
wine * V:1.1, I:11 96 Wine: Windows API Implementation (suite standard)
dosbox * V:0.5, I:2 2568 DOSBox: emulador x86 com gráficos Tandy/Herc/CGA/EGA/VGA/SVGA, som e DOS
dosemu * V:0.2, I:1.0 5944 DOSEMU: O Emulador de DOS do Linux
vzctl * V:0.7, I:1.0 769 OpenVZ solução de virtualização de servidor - ferramentas de controle
vzquota * V:0.7, I:1.0 204 OpenVZ solução de virtualização de servidor - ferramentas de cota
lxc * V:0.12, I:0.5 438 ferramentas do espaço de utilizador de contentores de Linux

Veja o artigo da Wikipedia Comparação de plataformas de máquinas virtuais para uma comparação detalhada das diferentes soluções de plataformas de virtualização.

9.8.2. Fluxo de trabalho da virtualização

[Nota] Nota

Algumas funcionalidades descritas aqui apenas estão disponíveis em squeeze.

[Nota] Nota

Os kernels predefinidos de Debian suportam KVM desde lenny.

O fluxo e trabalho típico para virtualização envolve vários passos.

9.8.3. Montar o ficheiro de imagem de disco virtual

Para o ficheiro de imagem de disco raw, veja Secção 10.2, “A imagem de disco”.

Para outros ficheiros de imagem de disco virtual, você pode usar o qemu-nbd para exportá-los usando o protocolo dispositivo de bloco de rede e montá-los usando o módulo de kernel nbd.

O qemu-nbd(8) suporta os formatos de disco suportados pelo QEMU: O QEMU suporta os seguintes formatos de discos: raw, qcow2, qcow, vmdk, vdi, bochs, cow (modo-de-utilizador de Linux de copiar-ao-escrever), parallels, dmg, cloop, vpc, vvfat (VFAT virtual), e dispositivo_máquina.

O dispositivo de bloco em rede pode suportar partições do mesmo modo que o dispositivo de loop (veja Secção 10.2.3, “Montar o ficheiro de imagem de disco”). Você pode montar a primeira partição de "disk.img" como se segue.

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Dica] Dica

Você pode exportar apenas a primeira partição de "disk.img" usando a opção "-P 1" para qemu-nbd(8).

9.8.4. Sistema chroot

chroot(8) oferece a maneira mais básica de correr diferentes instâncias do ambiente GNU/Linux num único sistema em simultâneo sem reiniciar.

[Cuidado] Cuidado

Os exemplos em baixo assumem que ambos os sistemas pai e chroot partilham a mesma arquitectura de CPU.

Você pode aprender a como configurar e usar chroot(8) ao correr o programa pbuilder(8) sob script(1) como se segue.

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

Você vê como debootstrap(8) ou cdebootstrap(1) povoam dados do sistema para ambiente sid sob "/sid-root".

[Dica] Dica

Estes debootstrap(8) ou cdebootstrap(1) são usados para instalar Debian pelo instalador Debian Installer. Estes também podem ser usados para instalar Debian num sistema sem usar um disco de instalação de Debian, mas em vez disso, a partir de outra distribuição de GNU/Linux.

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

Você pode ver como uma shell de sistema a correr sob ambiente sid é criada como o seguinte.

  1. Copiar configuração local ("/etc/hosts", "/etc/hostname", "/etc/resolv.conf")

  2. Montar o sistema de ficheiros "/proc"

  3. Montar o sistema de ficheiros "/dev/pts"

  4. Criar "/usr/sbin/policy-rc.d" o qual sempre existe com 101

  5. Corra "chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'"

[Nota] Nota

Alguns programas sob chroot podem requerer acesso a mais ficheiros do sistema pai para funcionarem do que o pbuilder disponibiliza. Por exemplo, "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc. podem precisar de ser montados em união ou copiados.

[Nota] Nota

O ficheiro "/usr/sbin/policy-rc.d" previne que programas daemon arranquem automaticamente no sistema Debian. Veja "/usr/share/doc/sysv-rc/README.policy-rc.d.gz".

[Dica] Dica

O objectivo original do pacote chroot especializado, pbuilder é construir um sistema chroot system e construir um pacote dentro do chroot. É um sistema ideal para usar para verificar se as dependências de compilação de um pacote estão correctas, e para certificar que dependências de compilação erradas e desnecessárias não existem no pacote resultante.

[Dica] Dica

De modo semelhante, o pacote schroot pode dar-lhe uma uma ideia de correr um sistema chroot i386 sob um sistema pai amd64.

9.8.5. Sistemas de múltiplos ambientes de trabalho

Eu recomendo usar o QEMU ou o VirtualBox num sistema Debian stable para correr múltiplos sistemas de ambiente de trabalho em segurança usando virtualização. Isto permite-lhe correr aplicações de ambiente de trabalho do Debian unstable e testing sem os riscos usuais associados a elas.

Como o QEMU puro é muito lento, é recomendado acelerá-lo com KVM quando o sistema da máquina o suporta.

A imagem de disco virtual "virtdisk.qcow2" que contem o sistema Debian para o QEMU pode ser criada usando o instalador de debian em pequenos CDs como se segue.

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

Veja mais dicas em Debian wiki: QEMU.

O VirtualBox vem com ferramentas GUI Qt e é bastante intuitivo. As suas ferramentas GUI e de linha de comandos estão explicadas em Manual do Utilizador do VirtualBox e Manual do Utilizador do VirtualBox (PDF).

[Dica] Dica

Correr outras distribuições de GNU/Linux como o Ubuntu e o Fedra sob virtualização é um bom modo de aprender dicas de configuração. Também outros SOs proprietários podem correr muito bem sob esta virtualização do GNU/Linux.