Customizando Kernel do Ubuntu 7.10

De gutocarvalho.net

Aqui vamos abordar como customizar o Kernel do Ubuntu 7.10.

Kernel 2.6.24

  • Patch L7 Filter 2.17
  • Patch POM (Patch-o-Magic) 20080124-Snapshot
  • Patch SquashFS 3.3


Netfilter/Iptables 1.4.0

  • Patch L7 Filter 2.17


IPW 3945 A/B/G

  • ieee80211 1.2.18
  • ipw3945 1.2.2
  • ipw3945-ucode 1.14.2
  • ipw3945d 1.7.22


VMWare 1.0.4-56528

  • Patch wmware-any-any-update 116


Aviso

Cuidado, customizar kernel é uma tarefa avançada, se você nunca compilou um kernel antes, se não estiver seguro, se não tiver certeza do que está fazendo, por favor não faça. Caso decida seguir o artigo, é por sua conta e risco.

Quando devo customizar meu kernel?

Você deve customizar o seu kernel quando desejar adicionar algum recurso específico ou mesmo para performance.

O que eu ganho com isto?

Você pode adicionar patchs ao seu kernel agregando novos recursos, pode otimizá-lo para seu hardware, deixando com um desempenho mais eficaz.

O que significa customizar pelo método Debian Way/Ubuntu Way?

Customizar através do método DebianWay ou UbuntuWay significa que além de compilar o kernel estaremos gerando um pacote .DEB com as modificações deixando o sistema integro e ajustado com as modificações.

O que é o Layer7-Filter ?

É um módulo que faz tratamento na camada 7 do modelo OSI (aplicações), geralmente o netfilter/iptables trabalha na camada 3 (rede) e 4 (transporte), porém hoje em dia para controles mais eficazes, como por exemplo bloqueio de programas P2P se faz necessário um método mais flexível de bloqueio, fazendo isto em camadas mais altas, uma das formas de se fazer isto é com o l7-filter, este método será abordado no paper a seguir.

O que é o POM ou Patch-o-Matic ?

O Patch-O-Magic é um conjunto de módulos/argumentos que podem ser acoplados a iptables aumentando sua flexibilidade, geralmente são módulos experimentais ou para cenários muito específicos, por este motivo não estão na mainstream da netfilter/iptables.

O que é o SquashFS?

O SquashFS é um sistema de arquivos somente leitura, compactado, para uso em linux, ele é geralmente utilizado nos LiveCDs. O Squashfs comprime arquivos, inodes e diretórios, além disto suporta block sizes maiores que 1024 KB para uma melhor compressão.

O que é o VMWARE ?

VMWare é um software/máquina virtual que permite a instalação e utilização de um sistema operacional dentro de outro dando suporte real a software de outros sistemas operativos (fonte: http://pt.wikipedia.org/wiki/VMware)

Por que compilar o módulo da interface Intel® PRO/Wireless 3945ABG?

Para usá-la oras, wifi rox ;)

Agora falando sério, este é um módulo com uma licença que conflita com a gplv2, então não vem junto ao kernel, por isto é necessário compilar manualmente.

Algumas distribuições como o Ubuntu vem com o pacote linux-restricted-modules-xxxx.deb onde disponibilizam pré-compilados estes módulos, mas daria mais trabalho explicar como compilar este pacote tão variado, então vamos deixar isto para um outro momento, por enquanto vamos fazer um recompilação trivial do seu kernel para customizá-lo!


Procure tirar dúvidas deste tutorial no fórum apropriado: http://gutocarvalho.net/phpBB3


Conteúdo

[editar] primeiro passo, vamos verificar qual é o seu kernel

entre no console e vamos nos tornar ROOT.

gutera@defiant:/home/gutera$ sudo -s -H
password:
root@defiant:/home/gutera#

agora vamos descobrir qual kernel está rodando

root@defiant:/home/gutera# uname -r
2.6.22-14-generic

vamos olhar a versão exata

root@defiant:/home/gutera# dpkg --list|grep linux-image
ii  linux-image-2.6.22-14-generic              2.6.22-14.47                         Linux kernel image for version 2.6.22 on x86
ii  linux-image-generic                        2.6.22.14.21                         Generic Linux kernel image


[editar] instalando pacotes necessários para a customização

instalando pacotes via apt

root@defiant:/home/gutera# apt-get install debhelper build-essential bin86 kernel-package libncurses5-dev


[editar] vamos usar o último kernel vanilla

vamos fazer o download do último kernel, no momento em que escrevo o artigo é o kernel 2.6.23.12

entrando no diretorio de sources

root@defiant:/home/gutera# cd /usr/src

fazendo o download via wget

root@defiant:/usr/src# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2

descompactando

root@defiant:/usr/src# tar jxvf linux-2.6.24.tar.bz2


vamos criar um link simbólico necessário para a compilação

root@defiant:/usr/src# ln -s /usr/src/linux-2.6.24 /usr/src/linux


[editar] aplicanto patch layer7

removendo iptables do seu sistema

root@defiant:/usr/src# apt-get remove --purge iptables

fazendo download do iptables versão 1.4.0

root@defiant:/usr/src# wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.0.tar.bz2
root@defiant:/usr/src# tar jxvf iptables-1.4.0.tar.bz2
root@defiant:/usr/src# ln -s iptables-1.4.0.tar.bz2 iptables

baixando patchs

root@defiant:/usr/src# wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.17.tar.gz
root@defiant:/usr/src# wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2008-01-16.tar.gz
root@defiant:/usr/src# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080124.tar.bz2

descompactando patchs

root@defiant:/usr/src# tar zxvf netfilter-layer7-v2.17.tar.gz
root@defiant:/usr/src# tar zxvf l7-protocols-2008-01-16.tar.gz
root@defiant:/usr/src# tar jxvf patch-o-matic-ng-20080124.tar.bz2

aplicando patch layer7 no kernel 2.6.24

root@defiant:/usr/src# cd /usr/src/linux
root@defiant:/usr/src/linux# patch -p1 < ../netfilter-layer7-v2.17/kernel-2.6.22-2.6.24-layer7-2.17.patch
patching file net/netfilter/Kconfig
patching file net/netfilter/Makefile
patching file net/netfilter/xt_layer7.c
patching file net/netfilter/regexp/regexp.c
patching file net/netfilter/regexp/regexp.h
patching file net/netfilter/regexp/regmagic.h
patching file net/netfilter/regexp/regsub.c
patching file net/netfilter/nf_conntrack_core.c
patching file net/netfilter/nf_conntrack_standalone.c
patching file include/net/netfilter/nf_conntrack.h
patching file include/linux/netfilter/xt_layer7.h

aplicando patch layer7 no iptables

root@defiant:/usr/src/linux# cd /usr/src/iptables
root@defiant:/usr/src/iptables# patch -p1 < ../netfilter-layer7-v2.17/iptables-1.4-for-kernel-2.6.20forward-layer7-2.17.patch
patching file extensions/libipt_layer7.c
patching file extensions/libipt_layer7.man
patching file extensions/.layer7-tes
root@defiant:/usr/src/iptables# chmod +x extensions/.layer7-test

exemplo de uso do layer7

bloqueando msn

iptables -A FORWARD -m layer7 --l7proto msnmessenger -s 192.168.0.0/24 -j DROP 

bloqueando transferencia de arquivos

iptables -A FORWARD -m layer7 --l7proto msn-filetransfer -s 192.168.0.0/24 -j DROP

[editar] aplicando patch POM (patch-o-matic)

baixando patch

root@defiant:/usr/src/iptables# cd ../patch-o-matic-ng-20080124

execute o comando abaixo e escola os patchs para aplicar

root@defiant:/usr/src/patch-o-matic-ng-20080124# ./runme --download

aplicando patch ipp2p

root@defiant:/usr/src/patch-o-matic-ng-20080124# ./runme ipp2p

exemplo de uso

iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
iptables -A FORWARD -m ipp2p --kazaa -j DROP


[editar] aplicando patch squashfs 3.3

cd /usr/src
wget http://ufpr.dl.sourceforge.net/sourceforge/squashfs/squashfs3.3.tgz
tar zxvf squashfs3.3.tgz
cd /usr/src/linux
patch -p1 < ../squashfs3.3/kernel-patches/linux-2.6.24/squashfs3.3-patch

pronto agora siga com o próximo passo!

[editar] configurando e compilado o kernel linux 2.6.24

agora vamos copiar a configuração do kernel em vigor para facilitar a customização. É aconselhável utilizar este arquivo para agilizar o processo.

root@defiant:/usr/src/iptables# cd ../linux
root@defiant:/usr/src/linux# cp /boot/config-`uname -r` /usr/src/linux/.config
root@defiant:/usr/src/linux# make menuconfig

Vá na opção "Load an Alternate Configuration File" e indique o caminho do arquivo .config que você acaba de copiar.

Após esta etapa otimize o kernel da forma que lhe convier, ajuste de acordo com seu hardware.

Não se esqueça de ativar os módulos correspondentes ao L7-filter, TIME, U32, IPP2P e SQUASFS.

Network
- Networking Options - - Network Packet Filtering Framework (netfilter)
- - - Core Netfilter Configuration
- - - - conmark target support
- - - - trace target support
- - - - layer7 match support
- - - - time match support
- - - - u32 match support

Network
- Networking Options
- - Network Packet Filtering Framework (netfilter)
- - - IP Netfilter Configuration
- - - - ipp2p match support

Filesystem
- Miscellaneous Filesystem
- - SquashFS

Marque [M] nestas opções

[editar] compilando o kernel

a compilação de kernel demora bastante, por isto vá fazer algo útil enquanto isto.

primeiro vamos garantir que não tenha nenhum arquivo perdido de configurações anterior.

root@defiant:/usr/src/linux# make-kpkg clean

agora vamos compilar e gerar o pacote deb

root@defiant:/usr/src/linux# make-kpkg --config menuconfig --append-to-version "gutera-l7" --initrd --revision=01 --us --uc kernel_image  kernel_headers

Esse comando irá criar os arquivos .deb no /usr/src relativos ao kernel custom que você acaba de construir.


[editar] instalando o seu kernel ubuntu customizado

vamos utilizar o dpkg para isto

root@defiant:/usr/src/linux# cd ..
root@defiant:/usr/src# dpkg -i <nome-do-pacote>.deb

no meu caso

root@defiant:/usr/src# dpkg -i linux-headers-2.6.24-gutera-l7_02_i386.deb
root@defiant:/usr/src# dpkg -i linux-image-2.6.24-gutera-l7_02_i386.deb

o grub será atualizado, reinicie o sistema e selecione seu kernel customizado.

Aproveite!

[editar] compilando o iptables 1.4.0

Depois de instalar o novo kernel vamos compilar o novo iptables!

vamos entrar no diretório iptables (link simbólico criado quando descompactamos o iptables)

root@defiant:/usr/src/# cd iptables

removendo o iptables antigo

root@defiant:/usr/src/iptables# apt-get remove iptables

compilando

root@defiant:/usr/src/iptables# make KERNEL_DIR=/usr/src/linux

instalando

root@defiant:/usr/src/iptables# make install KERNEL_DIR=/usr/src/linux

finalizado

Qualquer dúvida leia o documento /usr/src/iptables/INSTALL

[editar] dicas

seguem dicas para complementar a customização do seu kernel


[editar] compilando e configurando módulo ipw3945 no seu sistema

baixando arquivos necessários

wget http://ufpr.dl.sourceforge.net/sourceforge/ieee80211/ieee80211-1.2.18.tgz

wget http://ufpr.dl.sourceforge.net/sourceforge/ipw3945/ipw3945-1.2.2.tgz

wget http://bughost.org/ipw3945/ucode/ipw3945-ucode-1.14.2.tgz

wget http://bughost.org/ipw3945/daemon/ipw3945d-1.7.22.tgz

configurando ieee80211 tar zxvf ieee80211-1.2.18.tgz cd ieee80211-1.2.18 make make install

configurnado ipw3945

cd ..
tar zxvf ipw3945-1.1.2.tgz
cd ipw3945-1.1.2

precisamos aplicar um patch para compilar no 2.6.24 crie um arquivo chamado ipw3945.h.patch com o conteúdo abaixo

--- ipw3945.h.orig	2007-07-31 09:53:39.000000000 +0300
+++ ipw3945.h	2007-12-23 04:09:59.000000000 +0200
@@ -2414,6 +2414,18 @@ enum {
 #define IPW_ORD_TABLE_7_MASK              0x0000F700

 /*
+ * For backword Kernel compatibility (after 2.6.24)
+ */
+#if !defined(MAC_ARG)
+#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
+#endif
+
+#if !defined(SET_MODULE_OWNER)
+#define SET_MODULE_OWNER(dev) do { } while (0)
+#endif
+
+
+/*
  * Table 0 Entries (all entries are 32 bits)
  */
 enum {

para aplicar o patch

patch -p1 < ipw3945.h.patch

depois vamos compilar

make

e agora instalar

make install

configurando ipw3945-ucode

tar zxvf ipw3945-ucode-1.14.2.tgz
cp ipw3945-ucode-1.14.2/ipw3945.ucode /lib/firmware/

configurando ipw3945d

tar zxvf ipw3945d-1.7.22.tgz
cp ipw3945d-1.7.22/x86/ipw3945d /sbin/ipw3945d

copiando módulo necessário para o diretorio lib do seu kernel

cd ipw3945-1.1.2
cp ipw3945.ko /lib/modules/2.6.24-gutera-l7/

configurando modprobe

cd /etc/modprobe.d/
mv ipw3945 /etc/ipw3945.backup

vamos criar um arquivo com o conteúdo abaixo

vim ipw3945
install ipw3945 /sbin/modprobe –ignore-install ipw3945 ; sleep 0.5 ; /sbin/ipw3945d –quiet
remove ipw3945 /sbin/ipw3945d –kill ; /sbin/modprobe -r –ignore-remove ipw3945
depmod -a
modprobe ipw3945
ifconfig eth1 up


[editar] compilando vmware-server 1.04 para funcionar com seu kernel custom

fazendo download dos pacotes necessários

root@defiant:/usr/src# wget http://download3.vmware.com/software/vmserver/VMware-server-1.0.4-56528.tar.gz
root@defiant:/usr/src# http://vmkernelnewbies.googlegroups.com/web/vmware-any-any-update-116.tgz

descompactando

root@defiant:/usr/src# tar zxvf VMware-server-1.0.4-56528.tar.gz
root@defiant:/usr/src# tar zxvf vmware-any-any-update116.tar.gz

configurando vmware server

root@defiant:/usr/src# cd VMware-server-1.0.4-56528

vamos configurar mas não mande compilar os módulos, faremos isto com o outro

root@defiant:/usr/src/VMware-server-1.0.4-56528# ./vmware-install.pl

utilizando o patch vmware-any-any para compilar os módulos

root@defiant:/usr/src/VMware-server-1.0.4-56528# cd ..
root@defiant:/usr/src# cd vmware-any-any-update115

configurando e compilando

vá ao site do vmware se registrar gratuitamente para pegar o serial number de instalação

root@defiant:/usr/src/vmware-any-any-update115# ./runme.pl

responda as perguntas e estará com o vmware funcionando!


[editar] referências

kernel linux custom

layer7 e patch-o-matic

squashfs

vmware-server 1.0.4

intel wireless pro ipw3945

erros & correções - kernel 2.6.24

Ferramentas pessoais