Fedora 18でユーザーモードLinux用のrootfsを作成するには?

Fedora 18でユーザーモードLinux用のrootfsを作成するには?

UMLカーネルで動作し、インターネットを使用できるrootfsを作成したいと思います。私はfebootstrapパッケージを使用しています:bash、、、、。使用後に私のものを得ましたが、UMLを使用して実行しようとすると、次のエラーが発生します。coreutilsnet-toolsiputilsfebootstrap-supermin-helperrootfs

[    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

rootfsどのパッケージが必要なのか、それ以外の方法があるのか​​知りたいですfebootstrap

答え1

たぶんPROOTを試してみてください(http://proot.me)UMLの代替として使用されます。どちらもptrace(2)に基づいていますが、PRootはゲストシステムからインターネットアクセスを得るために設定を必要としません。

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

そのうち「./fedora-18-x86_64/」は以下からダウンロードしたrootfsの内容です。http://download.openvz.org/template/precreated/

答え2

ルート構築

defconfigはqemu_x86_64_defconfigほとんど動作します::sysinit:/sbin/mdev -sinittabCONFIG_DEVTMPFS_MOUNT/dev

ルートファイルシステム:

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

その後、カーネルのソースコードから:

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

これで仮想マシンの内部にあるので、次のコマンドを使用して終了できます。

poweroff

ファイルシステムは永続的です。以下を試してください。

date >f

そして再起動してください。

TODOネットワークが正しく機能するようにしてください。現在は、eth0=Buildrootのinitがネットワークデバイスの待機を停止するのを防ぐためのダミー値です。

次のようにカーネルを段階的に実行することもできます。https://stackoverflow.com/questions/4943857/linux-kernel-live-debugging-how-its-done-and-what-tools-are-used/44669413#44669413

TODOカーネルモジュールはx86ではなくUML用にコンパイルする必要があるため、カーネルモジュールで何をすべきかわかりません。最初の問題は、UMLが効果がinsmodないために失敗し、強制的にvermagicを実行すると何も印刷しないなど、奇妙なことが起こるということです。関連:SMPvermagicprintkhttps://stackoverflow.com/questions/2488625/user-mode-linux-installing-a-module-error

必要に応じてQEMUを使用して画像を確認することもできます。

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

Ubuntu 14.04、カーネル3.13.0ホストでテストされました。

関連情報