Criação de uma distribuição minimalista

Fazer o download dos pacotes base

Instalação de pacotes adicionais

  • build-essential
  • libncurses-dev
  • bison
  • flex
  • libelf-dev

Pré-configuração

  • Criação de um directório de trabalho
  mkdir MyDistro
  • Mover os downloads efectuados para o directório anteriormente criado
  mv Transferências/linux-4.17.12.tar.xz MyDistro/
  mv Transferências/busybox-1.29.2.tar.bz2 MyDistro/
  cd MyDistro
  • Descompactar os downloads
  tar -jxf busybox-1.29.2.tar.bz2
  tar -Jxf linux-4.17.12.tar.xz

Compilação do Kernel

Compilação_do_Kernel

Compilação do BusyBox

Entrar no directório BusyBox previamente descompactado

  • Entrar no menu de configuração do BusyBox
 make menuconfig


Importante: Adicionar no menu Settings -> Build Options -> Build static binary (no shared libs)

  • Compilar o BusyBox
 make

ou

 make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui)

ou

 time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando)
  • Verificar o tamanho do novo BusyBox
 ls -l

Verificar o tamanho do ficheiro busybox.

Preparação da máquina de teste

O teste do novo kernel pode ser feita na máquina local. Contudo, neste tutorial foi utilizada uma máquina virtual, com 10GB de disco e duas partições, e uma distribuição linux instalada.

  • 8GB para o sistema base
  • 2GB para /MyDistro em jfs (ou o sistema de ficheiros que desejar)

Após a instalação da máquina é necessário executar os comandos de update e upgrade:

 sudo apt update
 sudo apt upgrade


Antes de passar os ficheiros, deverá verificar se a partição onde vão ficar os novos ficheiros do kernel está montada.

 mount | grep "MyDistro"

Deverá, de seguida, passar os ficheiros do kernel, o bzImage, e o do Busybox, busybox, para a partição /MyDistro da máquina virtual. Umas das formas utilizadas para passar os ficheiros foi via ssh. E necessário instalar o pacote ssh na máquina virtual (sudo apt install ssh) e na máquina real, basta aceder a uma pasta e ligar a um servidor remoto (sftp://<ip_máquina_virtual>/<pasta>).

Criação da estrutura de directórios e arquivos

Dentro da partição do MyDistro e em root:

  • Modificar dono e grupo dos arquivos anteriormente copiados
 chown root:root busybox bzImage
  • Criação dos directórios
 mkdir sbin bin dev
  • Criação de links simbólicos
 ln -s busybox init
 ln -s /busybox sbin/init
  • Criação dos arquivos que representam os dispositivos
 mknod -m 600 console c 5 1
 mknod -m 666 null c 1 3
 mknod -m 620 tty1 c 4 1
 mknod -m 620 tty2 c 4 2
 mknod -m 660 sda b 8 0
 mknod -m 660 sda1 b 8 1
 mknod -m 660 sda2 b 8 2
  • Criação dos arquivos que representam as consolas
 cd bin
  ln -s ../busybox sh
  ln -s ../busybox bash
  • Verificar se o BusyBox está OK
 chroot /MyDistro /busybox

Modificação do Grub

Entrar no ficheiro default do grub nano /etc/grub.d/40_custom e colocar no final do ficheiro:

 menuentry "MyDistro" {
     set root='hd0,msdos2' 
     search --set=root --hint-bios=hd0,msdos2
     linux /bzImage root=/dev/sda2
 }


No final, gravar o ficheiro e executar o comando:

 update-grub


Reiniciar e testar!