Fedora 18에서 사용자 모드 Linux용 rootfs를 만드는 방법은 무엇입니까?

Fedora 18에서 사용자 모드 Linux용 rootfs를 만드는 방법은 무엇입니까?

UML 커널과 작동하고 인터넷을 사용할 수 있는 rootfs를 만들고 싶습니다. 나는 febootstrap패키지를 사용하고 있습니다: bash, coreutils, net-tools, iputils. 사용한 후 febootstrap-supermin-helper내 것을 얻었 rootfs지만 UML을 사용하여 실행하려고 하면 다음 오류가 발생합니다.

[    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 -s하지만 inittab.CONFIG_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 호스트에서 테스트되었습니다.

관련 정보