Na terceira semana de desenvolvimento relacionado ao Kernel do Linux na disciplina MAC0472 - LabXP objetivo foi compilar e instalar uma versão do ArchLinux em uma máquina virtual (vm). Também iniciei (junto com o Giuliano Belinassi) o desenvolvimento de código para melhoria da ferramenta de trabalho que iremos utilizar.
Como minha distro de desenvolvimento é o Ubuntu 18.04.1 LTS os passos que vou descrever são para utilização nesse ambiente.
- Tendo instalado a ferramenta KWorkflow
procurei configurar o acesso via ssh à uma vm que possuia um Linux Arch
instalado para que o comando
kw prepare
do KWorkflow configurase o restante do ambiente. Obs.: A própria melhoria em que estamos trabalhando se encarregará de poupar a configuração manual do acesso ssh à vm e este passo não será mais necessário no futuro.# @host kw up ssh-copy-id -i ~/.ssh/arch_ssh.pub -p 2222 marcelo@localhost # dizer yes # colocar a senha da VM
# @vm # Com usuário root, copiar a chave ssh pública para ~/.ssh/authorized_keys # (criar diretório e arquivo se necessário) sudo su mkdir .ssh cd ~/.ssh touch authorized_keys nano authorized_keys # Copiar o conteúdo da sua chave pública (provavelmente em ~/.ssh/<sua_chave>.pub no @host) # para o arquivo ~/.ssh/authorized_keys na @vm
# @host kw prepare
- Instalar os pacotes de dependência necessários para compilar
o kernel do linux no Ubuntu.
sudo apt-get install libguestfs-tools python-guestfs samba libelf-dev
- Gerar o arquivo de configuração para a compilcação do kernel.
Supondo que você clonou o
kernel do linux
no diretório ~/linux, execute os seguintes comandos:
# @vm cd ~/shared/linux/ make clean zcat /proc/config.gz > .config
# @host cd ~/linux make nconfig make olddefconfig
# @vm make kvmconfig make localmodconfig
- Compilar o kernel do linux.
# @host cd ~/linux make ARCH=x86_64 -j8
A compilação do kernel deve demorar algum tempo que pode ser de 15 minutos até 2 ou 3 horas. No fim, se tudo tiver dado certo, as últimas linhas na saída do terminal devem indicar que uma nova imagem do kernel foi gerada. Algo semelhante a:
Setup is 16188 bytes (padded to 16384 bytes). System is 5449 kB CRC dc413c09 Kernel: arch/x86/boot/bzImage is ready (#1)
- Instalar os módulos do kernel.
# @vm sudo make modules_install
- Copiar a nova imagem do kernel que foi gerada para o diretório
/boot/
para que seja possível iniciar a vm com ela. No lugar de<nome>
coloque um nome que o ajude a distinguir a sua compilação do kernel das demais.# @vm sudo cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-<nome>
-
Criar um novo
mkinitcpio
. Fazemos isso copiando omkinitcpio
existente e editando-o manualmente.7.1 Criar uma cópia do
mkinitcpio
.# @vm sudo cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/<nome>.preset
7.2. Edite o arquivo criado.
# @vm sudo vim /etc/mkinitcpio.d/<nome>.preset
Na minha instalação eu utilizei LABXP no lugar de
<nome>
e o meu arquivo /etc/mkinitcpio.d/LABXP.preset ficou com as seguintes linhas:# mkinitcpio preset file for the 'linux' package ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-LABXP" PRESETS=('default' 'fallback') #default_config="/etc/mkinitcpio.conf" default_image="/boot/initramfs-LABXP.img" #default_options="" #fallback_config="/etc/mkinitcpio.conf" fallback_image="/boot/initramfs-LABXP-fallback.img" fallback_options="-S autodetect"
7.3 Gerar um novo
initramfs
.# @vm sudo mkinitcpio -p <nome>
- Atualizar o grub.
# @vm sudo grub-mkconfig -o /boot/grub/grub.cfg sudo reboot
8.1. Se necessário, atualizar as permições de acesso à nova imagem.
# @host # Veja http://libguestfs.org/guestfs-faq.1.html sudo chmod 0644 /boot/vmlinuz*
- Por fim rode
kw up
, selecione*Advanded options for Arch Linux
no menu do grub e em seguida*Arch Linux, with Linux <nome>