Como criar rootfs para o modo de usuário Linux no Fedora 18?

4

Eu quero criar um rootfs para ser usado com um kernel UML e ser capaz de usar a internet. Eu estava usando febootstrap com os pacotes: bash , coreutils , net-tools , iputils . Depois de usar febootstrap-supermin-helper , obtive meu rootfs , mas ao tentar inicializá-lo com a UML, recebi esses erros:

[    4.340000] systemd[1]: systemd-logind.service holdoff time over, scheduling restart.
[    4.340000] systemd[1]: dbus.service start request repeated too quickly, refusing to start.
[    4.340000] systemd-logind[638]: Failed to get system D-Bus connection: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
[    4.340000] systemd-logind[638]: Failed to fully start up daemon: Connection refused

Eu estou querendo saber quais pacotes são necessários para rootfs e se há outra maneira além de febootstrap .

    
por erch 21.04.2013 / 15:23

2 respostas

0

Talvez você possa experimentar o PRoot ( link ) como alternativa à UML. Ambos são baseados no ptrace (2), embora o PRoot não exija nenhuma configuração para obter acesso à Internet do sistema convidado:

host$ proot -R ./fedora-18-x86_64/ bash
guest$ wget http://google.fr
...

onde "./fedora-18-x86_64/" é o conteúdo de um rootfs baixado do link

    
por 23.10.2013 / 21:14
0

Buildroot

O qemu_x86_64_defconfig defconfig quase funcionou, exceto que eu tive que adicionar ::sysinit:/sbin/mdev -s ao inittab . Eu acho que isso é porque o Buildroot depende de CONFIG_DEVTMPFS_MOUNT para criar /dev .

Rootfs:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2017.02
make qemu_x86_64_defconfig

# Custom inittab.
echo 'BR2_ROOTFS_OVERLAY="rootfs_overlay"' >>.config
make olddefconfig
mkdir -p rootfs_overlay/etc
printf '
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -o remount,rw /
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -a
::sysinit:/sbin/mdev -s
::sysinit:/bin/hostname -F /etc/hostname
::sysinit:/etc/init.d/rcS
console::respawn:/sbin/getty -n -L console 0 vt100
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
' > rootfs_overlay/etc/inittab

# Build image.
make BR2_JLEVEL=$(($(nproc)-2))
cp output/images/rootfs.ext2 /path/to/linux

Em seguida, na fonte do kernel:

cd /path/to/linux
git checkout v4.9
make mrproper
make defconfig ARCH=um
make ARCH=um
./linux eth0=tuntap,,,192.168.0.254

Agora você está dentro da VM e pode sair com:

poweroff

O sistema de arquivos é persistente, experimente com:

date >f

e reinicie.

TODO funciona na rede. O atual eth0= é apenas um manequim para impedir que o init do Buildroot pare de esperar pelo dispositivo de rede.

Você também pode depurar o kernel conforme mostrado em: link

TODO Eu não sei como lidar com os módulos do kernel, já que eles devem ser compilados na UML, não no x86. O primeiro problema é que insmod falhará porque a UML não tem SMP , o que afeta vermagic , e se você forçar vermagic, coisas estranhas acontecem como printk não imprime nada. Relacionado: link

Você também pode inspecionar a imagem com o QEMU, se preferir:

qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user

Testado no Ubuntu 14.04, host do kernel 3.13.0.

    
por 20.06.2017 / 14:37