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
[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
- http://www.debian.org/doc/manuals/reference/ch-kernel.pt-br.html
- http://www.howtogeek.com/howto/ubuntu/how-to-customize-your-ubuntu-kernel
- http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux
- http://newbiedoc.sourceforge.net/tutorials/kernel-pkg/build-kernel-pkg.html.en
- http://www.howtoforge.com/kernel_compilation_ubuntu_p2
- http://ubuntuforums.org/showthread.php?t=157560
layer7 e patch-o-matic
- http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4446
- http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1536
- http://www.vivaolinux.com.br/comunidades/verTopico.php?codigo=135&codtopico=6340
- http://suchart.wordpress.com/2007/12/10/kernel-26239-iptables-138-l7-filter-ipp2p/
squashfs
- http://en.wikipedia.org/wiki/SquashFS
- http://squashfs.sourceforge.net/
- http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
vmware-server 1.0.4
- http://www.vivaolinux.com.br/dicas/verDica.php?codigo=9636
- http://blog.riopro.com.br/2007/12/03/instalando-o-vmware-server-no-ubuntu-710/
- http://guga.blog.digi.com.br/2007/11/15/vmware/
intel wireless pro ipw3945
erros & correções - kernel 2.6.24

