Como posso inicializar em um chroot sem sair da sessão atual do sistema operacional?

1

Estou construindo sistemas Linux, transformando-os em ISOs e, em seguida, testando-os em uma VM.

Mas esse passo leva minutos, o que eu gostaria de evitar, enquanto desenvolvo.

Existe uma maneira de eu pegar os arquivos, que basicamente formam um chroot, e inicializá-los, sem ter que reinicializar minha máquina host?

Editar:

O que eu quero fazer é usar o kernel do meu chroot para inicializá-lo em uma máquina virtual. Eu quero evitar o passo de ter que construir um ISO apenas para a VM ter algo para inicializar.

    
por Minix 30.11.2015 / 15:07

1 resposta

1

Se eu estivesse fazendo isso, construiria a coisa toda em um ISO, então, quando estiver funcionando, você estará pronto. Para fazer isso, você precisará criar um ISO vazio para começar com

truncate -s 100M image.iso

Em seguida, verifique se há uma tabela de partições em uma tabela de partições (geralmente ela tem uma automagicamente)

# fdisk -l image.iso
Disk image.iso: 100 MiB, 104857600 bytes, 204800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x602a438a

Device     Boot Start    End Sectors Size Id Type
image.iso1       2048 204799  202752  99M 83 Linux

A próxima coisa que você quer fazer é criar seu sistema de arquivos no .iso, mas desde que você o queira na partição e não no dispositivo bruto, você precisará criar um dispositivo de loop de deslocamento para referenciar a partição. Observe a saída anterior de que um setor tem 512 bytes e a partição começa no setor 2048. Para calcular o deslocamento, na próxima etapa, você precisará de 512 * 2048 = 1048576 bytes. Em seguida, crie o dispositivo de loop de deslocamento.

losetup --offset 1048576 /dev/loop2 image.iso

Agora você está pronto para criar o sistema de arquivos e montá-lo.

mkfs.ext4 -O dir_index /dev/loop2
mount /dev/loop2 /mnt/temp

O passo final é instalar o grub no iso bruto para que ele possa inicializar.

grub-install image.iso

Construa seu sistema em /mnt/temp e quando você estiver pronto para testá-lo, basta umount /mnt/temp e fazer um vm que inicialize a partir de sua iso. Uma nota de cautela, se você inicializar o iso enquanto ele ainda estiver montado, você quase certamente irá corromper seu sistema de arquivos e terá que começar tudo de novo. Além disso, funciona muito bem.

    
por 02.12.2015 / 19:26

Tags