Instalar kernel custom no Linux

O Kernel Linux

O Linux usa um kernel monolítico, um arquivo binário. Kernel em tradução livre é núcleo. Drivers de dispositivo e extensões do kernel são executados no espaço do kernel (entre o hardware e o SO), com acesso total ao hardware, embora algumas exceções sejam executadas no espaço do usuário, por exemplo, sistemas de arquivos baseado em FUSE ("FileSystem in Userspace" como o ntfs-3g usado para gravar dados em partições NTFS).

O sistema de gráficos usado no Linux (X.org) não é executado no kernel, em contraste com a encontrada no Microsoft Windows. O kernel vem das distribuições como genérico, ver no ubuntu que o kernel aparece com a extensão -generic em todas as versões. Geralmente é um kernel estável e exaustivamente testado, mas como iremos customizar o kernel ele vai deixar de ser genérico para atender as necessidades da máquina, fazendo uso de todos os recursos possíveis e com o último suporte a hardware existente no mundo linux.

A tarefa de compilar e instalar um kernel não é difícil e pode ser feita por qualquer usuário de computador, mas é recomendável um conhecimento básico de inglês e de hardware, eles ajudam (e muito) nos passos que iremos seguir.

Conhecer o hardware:
Dispositivos de vídeo, som, rede, wireless, webcam, chipset, controladora SATA, etc.

Verificar o hardware com os seguintes comandos e fazer anotações, para posterior uso na hora de selecionar as opções de compilação.
lsmod, lscpu, lspci, lsusb, lshw, lshal, gtk-lshw, hardinfo.
Por exemplo, pode-se usar o comando lspci -v e redirecionar sua saída para um arquivo texto, onde depois podemos fazer a consulta do mesmo:
lspci -v > pci-list.txt



Alguns comandos básicos do Linux:
Concatena arquivos e mostra na tela ou redireciona para outro arquivo:
cat /proc/cpuinfo

Cria diretorios (make dir):
mkdir diretorio

Remove diretorios (remove):
rmdir diretorio

Remove arquivos/diretorios - O rm é poderoso, como root use-o com cautela, pois apagar um arquivo que não tenha backup ou até mesmo um diretorio inteiro, pode ser trabalhoso recuperar (remove).
rm arquivo

Cria arquivo vazio, como num passe de mágica. Voce da um toque e o arquivo é criado !
touch arquivo

Lista arquivos/diretorios (list):
ls

Muda de diretorios .. indica o diretorio anterior, assim como . indica o diretorio corrente e ../../ indica 2 diretorios abaixo.(change dir):
cd ..

Torna um usuário comum em root (SuperUser):
su -

Compacta e descompacta arquivos. O tar vem do tempo das fitas DAT para backup, daí o nome (tape archive):
tar

Descompacta arquivos .gz:
gunzip arquivo.gz

Descompacta arquivos .bz2:
bunzip2 arquivo.bz2

Copia arquivos/diretorios (copy):
cp arquivo1 arquivo2

Move/renomeia arquivos/diretorios:
mv arquivo1 arquivo2

Compilar, instalar, desinstalar programas, ver make --help para opções (faça):
make --help

Mostra informações do sistema:
uname -a

Baixa arquivos, pode-se baixar até um site inteiro com o wget:
wget http://www.site.com/arquivo

Editor de texto que faz parte da suíte mc (Midnight Commander, um gerenciador de arquivos modo texto). No mcedit voce usa as teclas de função para salvar (F2), sair (F10), mostrar menu (F9) e outras funções:
mcedit arquivo.txt

Identifica os dispositivos de bloco (hd e partições, block id):
blkid /dev/sda



Comandos para os módulos do hardware:
Usado para adiconar e remover módulos do kernel:
modprobe nomedomodulo

Lista os módulos usados pelo kernel:
lsmod

Mostra informações sobre o módulo, exemplo abaixo mostra informações sobre o módulo video:
modinfo video

Remove módulo do kernel, tem duas opções que fazem a mesma coisa (rmmod ou modprobe -r):
rmmod nomedomodulo

Para todos os comandos existe uma ajuda rápida com o "--help" APÓS o comando e uma ajuda completa com o "man" ANTES do comando.


Entendendo o comando "uname -a":
Saída do comando no Ubuntu 11.10 na máquina usada:
Linux lucky 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 athlon i386 GNU/Linux

Linux ::: nome do kernel
lucky ::: nome da máquina
3.0.0-12-generic ::: release/versão do kernel instalado
#20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 ::: Quantas vezes o kernel foi compilado (20 vezes), e quando.
i686 ::: Harware da máquina - Podemos customizar para o hardware usado (Core2, Atom, Athlon, etc).
athlon ::: Tipo de processador
i386 GNU/Linux ::: Plataforma de hardware e sistema operacional (GNU/Linux), se fosse 64 bits seria x86_64


Os arquivos que iremos trabalhar são os seguintes:
A última versão estável até 24/10/2011, a 3.1:
linux-3.1

O patch de compatibilidade para o apparmor usado no ubuntu, sem esse patch recebemos a mensagem:
Cache read/write disabled: /sys/kernel/security/apparmor/features interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.)

O que torna o processo de boot mais lento e algumas funcionalidades são desabilitadas.
apparmor-2.7.0.tar.gz

O -pf «post-factum» patchset, que se aplica à versão 3.1, transformando-a em 3.1.6:
Versão de 10/12/2011. O site do pf patchset informa que a versão 3.x.y não corresponde à versão estável do kernel e sim a sua versão de release.
patch-3.1.6-pf


A versão 3.1.6 do -pf patchset tem as seguintes vantagens:
Linux Intermediate Queueing Device (LinuxIMQ): Permite "traffic shaping", usado para limitar a largura de banda tanto de saída quanto de entrada quando é usado determinado programa/protocolo. Com o LinuxIMQ, traffic shaping pode ser feito em várias interfaces de rede, usa o iptables.

BFS (Brain Fuck Scheduler): Escalonador de tarefas. Será usado o "cgroup scheduler" que distribui as tarefas para os processos do sistema em grupos dentre outras vantagens como, mais largura de banda de rede e I/O de disco. Ativando o "cgroup", o BFS é automaticamente desabilitado.

BFQ (Budget Fair Queueing): Escalonador de disco, permite a que cada processo/thread possa ser atribuída uma fração da largura de banda de disco de forma compartilhada e proporcional.

TuxOnIce (hibernar): Sistema avançado de hibernacão. O equivalente Linux da funcionalidade do Windows "hibernar", mas melhor. Ele salva o conteúdo da memória para o disco e desliga. Quando o computador é iniciado novamente, ele recarrega o conteúdo e o usuário pode continuar de onde parou. Nenhum documento precisa ser recarregado ou aplicações reabertas e o processo é muito mais rápido que reiniciar.

PowerFix para kernel 3.1: usando ASPM (Active State Power Management) em dispositivos que tenham PCIe, permite diminuir consumo de energia no barramento. Mais usado em dispositivos móveis.


Algumas dicas sobre trabalhar no shell (linha de comando):
  • Se errar a senha do usuário, pode-se apagar o que foi digitado com ctrl+u e começar de novo.

  • Se estiver em um shell de interface gráfica como o xterm, pode-se copiar o conteúdo da tela selecionando-o e colando com o botão do meio do mouse (vale pra qualquer aplicativo no X). Tem-se 2 áreas de transferências, uma do ctrl+c e outra que está selecionada.

  • Quando começar a digitar um comando pode-se usar o autocompletar com a tecla TAB.

  • Pode-se navegar entre os comandos digitados usando as teclas seta pra cima e seta pra baixo no teclado.

  • Control+z suspende um processo aberto via shell liberando o prompt, bg manda o processo pra "background" dando continuidade ao mesmo e fg traz o processo pra "foreground", fechando o shell novamente até terminar/suspender o processo.

  • O caracter | é usado para concatenar 2 (ou mais) comandos em uma linha.

  • O comando grep é usado para filtrar resultados, (por ex. dmesg | grep -i mem) mostra todas as referências a 'mem' na saída do comando dmesg.

  • Pode-se iniciar vários X (ambiente gráfico) através do comando xinit -- :X onde X é o número do VT (Virtual Terminal 1,2,3,etc), caso já tenha um X ativo em 0. Por exemplo, se voce logou no sistema pelo ambiente gráfico, o 0 está em uso no VT7 e alternando para o modo texto com ctrl+alt+f1 depois de fazer login pode-se abrir outro X com o xinit -- :1 o xinit abre um terminal básico, para ter acesso a janelas no caso do ubuntu digita-se unity para abrir o gerenciador, startkde pra iniciar o KDE, gnome-session para o gnome, depende do ambiente estar instalado.



Vamos aos comandos:
(SuperUser Do) ### passwd altera a senha do root:
sudo passwd root

(SuperUSer) ### became root, esse '-' logo depois do su pertmite atualizar a variáveis de ambiente do usuário, permitindo o root abrir um programa gráfico, como por exemplo o gedit:
su -

Entra no diretorio do root, note que ele fica em /root e é separado do /home dos usuários comuns:
cd /root

Cria o diretorio kernel:
mkdir kernel

Entra no diretorio kernel criado anteriormente:
cd kernel


Download das dependências ubuntu:
O Comando patch:
apt-get install patch

Biblioteca necessária pra o menuconfig:
apt-get install libncurses5-dev

Midnight Commander file manager e mcedit (editor de texto) Opcional:
apt-get install mc


Arquivos necessários para instalação e customização do novo kernel:
Download kernel 3.1:
=> wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1.tar.bz2

Download patches 3.1 (bootsplash, apparmor e -pf patchset):
=> wget http://files.myopera.com/lopanrs/blog/bootsplash-3.1.6a-3.1.zip

=> wget http://pf.natalenko.name/sources/3.1/patch-3.1.6-pf.bz2

=> wget http://launchpad.net/apparmor/2.7/2.7.0/+download/apparmor-2.7.0.tar.gz

Descompactar o kernel:
Explicação dos comandos e parâmetros:
"x" usado para eXtrair o arquivo ### "j" usado para filtrar pela extensão .bz2, se fosse .gz seria "z" e se fosse .xz seria "J" ### "v" (verbose), mostra na tela ### "f" de file, indica o arquivo usado.
tar jxvf linux-3.1.tar.bz2

Descompactar os patches:
bunzip2 descompacta arquivos com extensão .bz2:
bunzip2 patch-3.1.6-pf.bz2

unzip descompacta arquivos com extensão .zip:
unzip bootsplash-3.1.6a-3.1.zip

Arquivos estarão no diretorio com os nomes patch-3.1.6-pf e bootsplash-3.1.6a-3.1.diff, respectivamente.
Agora o descompactar o patch do apparmor:
tar zxvf apparmor-2.7.0.tar.gz

Copiar os arquivos do -pf e bootsplash para o diretorio do kernel:
cp patch-3.1.6-pf bootsplash-3.1.6a-3.1.diff linux-3.1/ 

Copiar o patch de compatibilidade do apparmor para kernel 3.1:
cp apparmor-2.7.0/kernel-patches/3.1/000* linux-3.1/

Mudar para o diretorio linux-3.1 e verificar os arquivos copiados:
cd linux-3.1

ls

Aplicar os patches ao kernel 3.1:
Primeiro o bootsplash, pois ele se aplica diretamente a versão 3.1, alguns me perguntaram do porquê do bootsplash, se o Ubuntu não o usa, o Vector Linux usa, e o Slackware pode usar também:
patch -Np1 -i bootsplash-3.1.6a-3.1.diff

Depois o apparmor, que também se aplica a versão 3.1, pode-se navegar com a seta cima e autocompletar com a tecla TAB, pra não digitar novamente.
patch -Np1 -i 0001-AppArmor-compatibility-patch-for-v5-network-controll.patch

patch -Np1 -i 0002-AppArmor-compatibility-patch-for-v5-interface.patch

patch -Np1 -i 0003-AppArmor-Allow-dfa-backward-compatibility-with-broke.patch

E finalmente o patch que atualiza a versão 3.1 em 3.1.6.
patch -Np1 -i patch-3.1.6-pf

Explicação dos parâmetros:
patch -- Aplica o patch doh ### -Np1 -- ignora patches já aplicados e indica que o patch está no diretorio, tirando a / do início do arquivo ### -i de input, indica que o patch vem de um arquivo.
Voltamos ao diretorio anterior:
cd ..

Explicação dos parâmetros:
cd muda de diretorio ### .. indica o diretorio anterior, assim como . indica o diretorio corrente e ../../ indica 2 diretorios abaixo, cd / vai para o diretorio raiz e cd ~ vai para o diretorio do usuario.


Renomeamos o diretorio 3.1 para 3.1.6-pf que é a versão do kernel depois de aplicado o patch.
mv linux-3.1 linux-3.1.6-pf

Diretorio linux-3.1 pronto com os patches aplicados, podemos criar uma cópia de segurança desse diretorio com:
tar jcvf linux-3.1.6-pf.tar.bz2 linux-3.1.6-pf

O parametro -c indica que é pra criar o arquivo compactado linux-3.1.6-pf.tar.bz2 a partir do diretorio linux-3.1.6-pf.

Mover o diretorio linux-3.1.6-pf para /usr/src que é o lugar correto (mas não necessário) pra trabalhar e compilar o kernel novo:
mv linux-3.1.6-pf /usr/src

Muda para o diretorio /usr/src:
cd /usr/src

Cria um link simbolico(-s) e força(-f) a criá-lo, caso já exista.
rm linux ln -sf linux-3.1.6-pf linux

Lista os arquivos/diretorios ### -l (long) formato longo e -a de (all) mostra inclusive arquivos ocultos, que são precedidos por um . (ponto) e os arquivos que tem um link (->).
ls -la

Entrar no diretorio linux onde vamos ao menu de configuração:
cd linux

Entra no menu de configuração baseado em ncurses (texto):
make menuconfig

Entra no menu de configuração baseado em ncurses (texto):
make nconfig
Entra no menu de configuração baseado em GTK (Gnome): Precisa do pacote ??
make gconfig
Entra no menu de configuração baseado em QT (KDE): Precisa do pacote qt3-dev-tools
make xconfig

Outras opções do make no diretorio do kernel, através do "make help", como por ex:
Limpa o diretorio de compilação e deixa os arquivos de configuração:
make clean

Remove arquivos de configuração (.config) e todos arquivos gerados em uma compilação anterior:
make mrpropper

Igual ao mrpropper mas remove inclusive os patches aplicados:
make distclean


Suporte ao hardware através dos módulos e o arquivo .config:
Existem 3 estados na configuração, alterna-se entre eles com a tecla "ESPAÇO":
[*] Incluso no kernel - Driver estático
[M] Como módulo do kernel - Driver dinâmico
[ ] Desabilitado
Algumas configurações específicas usam o (X) para selecionar a opção desejada.


Vamos ao menu de configuração, usaremos o menuconfig.
make menuconfig

.config - Linux/i386 3.1.6-pf Kernel Configuration


### Brain Fuck Scheduler, desabilitado em favor do "cgroup".
General setup ---> [ ] BFS cpu scheduler

### Modo de compressão (GZIP, BZIP2, LZMA, XZ, LZO), na ajuda do menu tem mais explicações.
Kernel compression mode (Bzip2) --->

### Exemplo de nova funcionalidade.
[ ] Enable extended accounting over taskstats (EXPERIMENTAL) (NEW)

### Gerar o arquivo de configuração usado na compilação do kernel no diretorio /proc.
[*] Enable access to .config through /proc/config.gz

### Suporte ao "cgroup".
-*- Control Group support --->

### Escalonador usado como padrão.
-*- Group CPU scheduler --->

### Round Robin / FIFO.
[*] Group scheduling for SCHED_RR/FIFO <M> Block IO controller

### Initramfs é um sistema de arquivos que está embutido no kernel e carregado no boot. Permite módulos e um mini-sistema em caso de pane no SO.
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

### Como diz o nome, otimiza para diminuir o tamanho.
[*] Optimize for size

### Para carregar módulos externos (drivers proprietários video 3d, vbox, etc.)
[*] Enable loadable module support --->

### Forçar a carregar módulo (insmod -f nomedomódulo):
[*] Forced module loading

### Descarregar módulo
[*] Module unloading

### Habilita a camada para dispositivos de bloco (hd).
[*] Enable the block layer --->

### Escalonadores de I/O
IO Schedulers --->

### CFQ Provavelmente a causa do erro "Compress_read returned -22." no TuxOnIce.
<M> CFQ I/O scheduler

### Escalonador de I/O Budget Fair Queueing, usado como padrão no lugar do CFQ (ver gráficos).
Default I/O scheduler (BFQ) ---> (X) BFQ



### Desativar, só serve pra máquinas Eurobraille.
Processor type and features ---> < > Eurobraille/Iris poweroff module

### O tipo de CPU usado.
Processor family (Opteron/Athlon64/Hammer/K8) ---> 

### Kernel preemptivo.
Preemption Model (Preemptible Kernel (Low-Latency Desktop)) ---> 

### Suporte a mais de 4GB de RAM.
High Memory Support (64GB) --->



### Hibernar o computador, gravando o conteúdo da RAM em disco e desligando a máquina.
Power management and ACPI options ---> <*> Enhanced Hibernation (TuxOnIce) ---> 

### Desativar o debug, usa muito espaço e recursos.
[ ] Power Management Debug Support

### Desativar APM, não é mais usado em hardwares novos, em favor do ACPI.
< > APM (Advanced Power Management) BIOS support ---> [*] ACPI (Advanced Configuration and Power Interface) Support ---> 

### Mantido por questões de compatibilidade com alguns aplicativos mais antigos (que monitoram bateria por ex.).
[ ] Deprecated /proc/acpi files [ ] Deprecated power /proc/acpi directories [ ] Deprecated /proc/acpi/event support 

### No ubuntu está 2000, para desabilitar o ACPI e instalar em máquinas de antes de 01/01/2000, que suportavam APM.
(0) Disable ACPI for systems before Jan 1st this year 

### Permite mudar a velocidade (clock) das CPUs em tempo real, quanto menor o clock, menor o consumo de energia.
CPU Frequency scaling ---> 

### Permite rodar o cpufreq de modo que VOCE controle a velocidade do processador. Muda-se a frequência manualmente, passando parâmetros direto ao kernel ou um programa capaz de mudar a frequência, como applet gnome, kde, xfce, etc.
Default CPUFreq governor (userspace) ---> 

### Drivers específicos para o hardware (AMD, Intel, nVidia, etc.).
x86 CPU frequency scaling drivers ---> 



### Suporte aos barramentos, PCI, AGP, PCIe, etc.
Bus options (PCI etc.) ---> 

### Somente se possui uma placa mãe com suporte a hotplug (plugar o dispositivo com a máquina ligada).
<M> PCI Express Hotplug driver

### Ajuda é intuitiva ("Se voce não sabe o que fazer aqui, diga Sim").
[*] Message Signaled Interrupts (MSI and MSI-X)

### Active State Power Management, permite ao linux controlar o clock e consumo de energia no barramento PCIe.
[*] PCI Express ASPM control 

### Por motivos de compatibilidade, suporte ao barramento ISA, E-ISA e VLB (Vesa Local Bus). Antes do PCI.
[ ] ISA support 

### Por motivos de compatibilidade, Microchannel usado em IBM PS/2...vixx.
[ ] MCA support 

### Suporta RapidIO interconnect devices, usado em dispositivos embarcados, não comum em desktops.
[ ] RapidIO 



### Suporte a binários de outras plataformas como .exe do windows e .jar java, através de um 'wrapper' configurado posteriormente. Ex: Voce digita notepad.exe no shell e se o notepad.exe estiver no PATH, executa direto, sem necessidade de chamar o "wine" na linha de comando.
Executable file formats / Emulations ---> <M> Kernel support for MISC binaries 



### Suporte a conectividade.
Networking support ---> 

### Suporte ao subsistema Infra vermelho, inclusive dispositivos USB -> IRDA.
<M> IrDA (infrared) subsystem support ---> 

### Suporte ao subsistema bluetooth
<M> Bluetooth subsystem support ---> 

### Opções de conectividade.
Networking options ---> 

### Se não usa o IPv6, pode desativar.
<M> The IPv6 protocol ---> 

### Necessário para firewall/iptables
[*] Network packet filtering framework (Netfilter) ---> 



### Dispositivos de drivers. Não tem como abranger todas as opções de dispositivos, pois são muitas, mas as mais comuns serão apresentadas abaixo.
Device Drivers ---> 

### Drivers SATA e PATA.
<*> Serial ATA and Parallel ATA drivers 

### Suporte a AHCI, usado em controladoras SATA novas.
<*> AHCI SATA support 

### Outros hardware que usam AHCI.
<*> Platform AHCI SATA support 

### Emula suporte IDE a dispositivos SATA e suporte a dispositivos PATA.
[*] ATA SFF support 

### DMA (Direct Memory Access) para dispositivos SATA e PATA
[*] ATA BMDMA support 

### Suporte a dispositivos de rede.
[*] Network device support ---> 

### Placas que suportam 10/100 Mbit.
[*] Ethernet (10 or 100Mbit) 

Placas de rede que suportam 1000Mbit (Gigabit ethernet).
[*] Ethernet (1000 Mbit) ---> 

### A placa de rede do meu PC (por exemplo).
<M> Realtek 8169 gigabit ethernet support 

### Série de placas wireless pci, pcie, pcmcia, usb. As que não estão listadas aqui, estão no diretorio 'staging'
[*] Wireless LAN ---> 

### Placas wireless atheros, no exemplo abaixo, precisa de um "firmware" externo pra funcionar, assim como outras placas wireless.
<M> Atheros Wireless Cards ---> <M> Linux Community AR9170 802.11n USB support 

### Dispositivo novo, à partir do kernel 3.1.
< > Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter (NEW) 

### Experimental foi esquecido aqui, há muito tempo que funciona, e bem.
<M> PPP over Ethernet (EXPERIMENTAL) 

### Driver que monitora as temperaturas do sistema, drivers para chips de sensor.
{*} Hardware Monitoring support ---> 

### Tomar cuidado, pois em algumas coisas não se deve mexer. Voce controla a velocidade do cooler manualmente.
[ ] Include fan control support (DANGEROUS) 

### Video4Linux, cria o dispositivo /dev/videoX, onde X e o numero de dispositivos no sistema. Ex: /dev/video0 em sistema com uma webcam USB.
<M> Multimedia support ---> 

### Placas de captura de TV, Radio, receptores de TV Digital.
[*] Video capture adapters ---> 

### Webcams USB tem seu suporte aqui, quase sempre tem um driver novo para webcam.
[*] V4L USB devices ---> <M> GSPCA based webcams ---> 

### Suporte a gráficos.
Graphics support ---> 

### Precisa estar habilitado pra 3D no vídeo.
<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> 

### Suporte ao som, a maioria das placas novas são HD Audio. Mas não todas, é claro.
<M> Sound card support ---> <M> Advanced Linux Sound Architecture ---> [*] PCI sound devices ---> <M> Intel HD Audio ---> 

### Alguns consideram uma curva de rio (só junta lixo), outros consideram um mal necessário. Eu considero necessário.
[*] Staging drivers ---> 

### Driver 3D open source pra placas nvidia, atualmete não suporta o controle de velocidade do cooler, o que em placas novas torna o barulho muito alto.
< > Nouveau (nVidia) cards 

### Drivers para hardwares específicos, como alguns modelos e fabricantes de laptop.
[*] X86 Platform Specific Device Drivers ---> 

### Alguns Notebooks CCE sao reconhecidos pelo kernel como sendo desse fabricante. Controla o volume, brilho da tela, wifi, webcam e etc pelas teclas Fn.
<M> Topstar Laptop Extras 



### Firmwares usados pelos servidores do google, somente útil se usado em um dos seus servidores. Curioso, o que eles fazem aqui !?
Firmware Drivers ---> [ ] Google Firmware Drivers 



### Sistemas de arquivos.
File systems ---> 

### data=ordered Tem baixa performance, mas é mais seguro em caso de falha de energia. Prefiro a 'performance' o dia que der pau no HD não vai ser essa opção que irá salvá-lo.
[ ] Default to 'data=ordered' in ext3 

### Definir o tipo de sistema de arquivo usado na instalação como driver estático, uma das maiores causas de "kernel panic" é não ter o sistema de arquivos do disco no kernel ou dentro do initramfs. Ext4 é o mais usado atualmente.
<*> The Extended 4 (ext4) filesystem 

### Carregar o suporte a UDF como driver estatico, Ele serve pra gravar arquivos maiores que 2GB em DVD
CD-ROM/DVD Filesystems ---> <*> UDF file system support 

### Sistema de arquivos de rede. Suporte ao SAMBA, montar compartilhamentos windows.
[*] Network File Systems ---> 
<M> CIFS support (advanced network filesystem, SMBFS successor) 



Kernel hacking ---> 

### Teclas magicas do SysRq. Com um sistema travado, através delas pode-se gravar o buffer do cache para o disco, sincronizando os sistemas de arquivos montados, remontar o sistema de arquivos somente leitura (evitando perda de dados) e reiniciar o sistema. Em caso de crash do sistema, as Magic SysRq devem ainda funcionar (ou não). Pra fazer a sequência citada usa-se:Alt+SysRq+s, Alt+SysRq+u, Alt+SysRq+b. Mais informações em /Documentation/sysrq.txt
[*] Magic SysRq key 

### Evita acesso a toda memória do sistema pelo usuário, reservando o espaço do kernel.
[*] Filter access to /dev/mem 



Opções de segurança.
Security options ---> 

### Somente root pode ver o log do kernel, usuário comum não tem acesso ao comando dmesg por exemplo.
[*] Restrict unprivileged access to the kernel syslog 



API de Criptografia, algoritmo 'lzo' necessário para o TuxOnIce executar, definido como driver estático.
Cryptographic API ---> {*} Deflate compression algorithm <*> Zlib compression algorithm {*} LZO compression algorithm ### <*> LZF compression algorithm 



Salvar, sair, compilar:
### O make pode ter o parâmetro -j2 para usar dois núcleos de CPU e aumentar de forma significativa o tempo de compilação. -j3 usa 3 núcleos e assim por diante.
make -j2 bzImage 

### Esse é o kernel novo:
Kernel: arch/x86/boot/bzImage is ready 

Compilar módulos:
make -j2 modules 

Instalar os módulos no diretorio /lib/modules/`uname -r`/ ### o uname -r retorna a versão do kernel.
make -j2 modules_install 



### UBUNTU ###
### Instala o kernel em /boot e atualiza o grub.cfg:
make install 

Mumu com fanta, no meu tempo não tinha isso. Tinha que copiar no dedo, linkar os arquivos e criar o init (caso use).
Se quiser mais alguma modificação no grub, o arquivo a ser editado é o /boot/grub/grub.cfg no grub2 e /boot/grub/menu.lst no caso do grub legacy.
No meu caso tive que comentar a linha abaixo no grub2.
#set gfxpayload=$linux_gfx_mode 

### Então finalmente...
reboot



Se o sistema iniciar corretamente vamos ao TuxOnIce.
### Configuração do TuxOnIce:
### Download do hibernate script:
wget http://tuxonice.net/files/hibernate-script-2.0.tar.gz
### Instalar hibernate-script:
tar zxvf hibernate-script-2.0.tar.gz cd hibernate-script-2.0 ./install.sh 


### O TuxOnIce já estará rodando em nosso sistema com o kernel novo, mas ainda não sabe disso. Então vamos dizer a ele qual arquivo será usado para gravar os dados da RAM no disco. Estamos usando o File Allocator, mas poderíamos usar o SWAP Allocator, esse último grava os dados da RAM na partição de SWAP do sistema, que deve ter o tamanho da memória RAM, por motivos óbvios, se voce estiver com a RAM no limite e for hibernar sem compactação, vai dar problema, pois não terá espaço na partição pra gravar o conteúdo da memória.
echo /suspend_file > /sys/power/tuxonice/file/target echo /suspend_file > /sys/power/tuxonice/resume 

### Modificar arquivo de configuração do TuxOnIce.
mcedit /etc/hibernate/tuxonice.conf

### Trocar o algoritmo de compactação de lzf para lzo
Compressor lzo

### Cria um arquivo no diretorio raiz com nome suspend_file de tamanho 2000MB.
FilewriterLocation /suspend_file 2000

### Verifica o arquivo gerado.
VerifyFilewriterResume2 yes 

### Modificar /etc/hibernate/common.conf (se necessário):
mcedit /etc/hibernate/common.conf 

### Executa verificações adicionais conforme a distribuição linux.
Distribution debian

### Em 20% da hibernação mostra a mensagem "Good night!"
OnSuspend 20 echo "Good night!" 

### Em 20% do resume mostra a mensagem "Good morning!"
OnResume 20 echo "Good morning!" 

### Remove da memória os módulos em /etc/hibernate/blacklisted-modules. Blacklisted modules, são módulos que estão em uma lista para serem removidos da memória no ato da hibernação, conhecidos e reportados por usuários por darem problema na retomada (resume) do sistema.
UnloadBlacklistedModules yes 

### UBUNTU ###
### Editar o arquivo /usr/share/initramfs-tools/init e adicionar a linha:
echo 1 > /sys/power/tuxonice/do_resume 

Acima de:
ln -sf /proc/mounts /etc/mtab 

A linha mágica echo 1 > /sys/power/tuxonice/do_resume diz para o TuxOnIce retomar a máquina logo após o /sys e /proc serem montados.
### Recriar o initramfs:
update-initramfs -c -k 3.1.6-pf

### Criar o arquivo /suspend_file com o tamanho definido em /etc/hibernate/tuxonice.conf (2000 MB).
hibernate -v1 --no-suspend 

### Retorna o blkid e a localização do arquivo no disco, em HEX.
cat /sys/power/tuxonice/resume 

### Colocar esses dados no boot, ao lado da linha do kernel (linux /vmlinuz):
mcedit /boot/grub/grub.cfg 

### Por exemplo:
linux /vmlinuz-3.1.6-pf root=UUID=b9450e9d-a521-4f93-aa45-9f8f617647cd ro resume=UUID=b9450e9da5214f93aa459f8f617647cd:0xf06f0 quiet splash vt.handoff=7 

### Copiar o arquivo http://files.myopera.com/lopanrs/blog/tuxoniceui para o diretorio /usr/local/sbin, esse arquivo é o binário do ubuntu 11.10 extraído do pacote .deb, optei por não instalar o pacote, pois além do binário (que é instalado em outro local) também é instalado uma série de scripts que não são usados. Ver referência.
cp tuxoniceui /usr/local/sbin 

### Reboot novamente, para o TuxOnIce saber pelo grub aonde vai hibernar:
reboot

### De volta ao sistema...testamos a hibernação:
hibernate -v1 -n

### Se tudo pareceu correto, o sistema vai hibernar corretamente:
hibernate



Abaixo scripts em modo gráfico para hibernar. Precisa copiar o arquivo para /usr/bin, dar permissão de execução chmod +x arquivo.sh e rodá-lo com o sudo ou gksu:
Usa o python e pygtk:
py-hib.sh


Usa o X-Dialog:
x-hib.sh


Usa o zenity:
zen-hib.sh


E por último, mas não menos importante, um atalho que roda o zen-hib.sh com o gksu:
hibernation.desktop


### Algumas dicas:
Botões da janela no lado direito no Ubuntu 11.10:
gconftool-2 --set /apps/metacity/general/button_layout --type string "menu:minimize,maximize,close"

### Não atualizar kernel pelo gerenciador: (Pin kernel)
Editar o arquivo /etc/apt/preferences:
mcedit /etc/apt/preferences 

### Verificar a versão do kernel que veio com o sistema, no caso do Ubuntu 11.10 é a 3.0.0.12.14. E deixá-lo com o seguinte conteúdo:
Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic Pin: version 3.0.0.12.14 Pin-Priority: 1001 



Alguns softwares que precisam de módulo como os drivers proprietários de vídeo (ati e nvidia), Virtualbox, VMware, etc. Terão que ser instalados a partir de download e compilação dos mesmos na máquina, os softwares baixados pelo gerenciador de pacotes não irão funcionar, pois foram "empacotados" para o kernel específico da distribuição, e estamos usando um kernel custom.


O blog será atualizado constantemente com as últimas versões do kernel e seus patches. Agradecimento à José Luis Lara Carrascal, que permitiu o uso de seu site como referência para esse artigo e pelo patch do bootsplash.


Original aqui

0 comentários:

O conteúdo deste blog/site pode e deve ser divulgado, conforme lei a 9.610/98 meus direitos estão assegurados, portanto eu permito a copia e reprodução gratuita, seja total ou parcial, não acarretando qualquer onûs financeiro aos interessados, porém, vedo o uso para fins lucrativos, toda reprodução para o público deve citar a fonte extraída, no caso o Técnico Linux - O Espaço do Software Livre e seja citada junto com um link para a postagem original, onde a referência deve estar numa fonte de tamanho igual ou maior a do texto, obviamente que os links citados não estão sujeitos ao mesmo termo. O conteúdo textual original desta página está disponível sob a licença GNU FDL 1.2.

Todas as marcas citadas pertencem aos seus respectivos proprietários. Os direitos autorais de todas as ilustrações pertencem aos respectivos autores, e elas são reproduzidas na intenção de atender ao disposto no art. 46 da Lei 9.610 - se ainda assim alguma delas infringe direito seu, entre em contato para que possamos removê-la imediatamente ou ainda lhe dar os devidos créditos.

Copyright © 2016 O Espaço do Software Livre