Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vincentbernat/eudyptula-boot
Boot a Linux kernel in a VM without a dedicated root filesystem.
https://github.com/vincentbernat/eudyptula-boot
Last synced: 18 days ago
JSON representation
Boot a Linux kernel in a VM without a dedicated root filesystem.
- Host: GitHub
- URL: https://github.com/vincentbernat/eudyptula-boot
- Owner: vincentbernat
- Created: 2014-05-29T13:46:06.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-06-27T06:28:24.000Z (5 months ago)
- Last Synced: 2024-10-11T14:39:46.706Z (about 1 month ago)
- Language: Shell
- Size: 174 KB
- Stars: 116
- Watchers: 14
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
eudyptula-boot
==============`eudyptula-boot` boots a Linux kernel in a VM without a dedicated root
filesystem. The root filesystem is the underlying root filesystem (or
some pre-built chroot). This is a convenient way to do quick tests
with a custom kernel.The name comes from [Eudyptula][] which is a genus for penguins. This
is also the name of a [challenge for the Linux kernel][].This utility is aimed at development only. This is a hack. It relies
on AUFS/overlayfs and 9P to build the root filesystem from the running
system.[Eudyptula]: http://en.wikipedia.org/wiki/Eudyptula
[challenge for the Linux kernel]: http://eudyptula-challenge.org/Also see
[this blog post](http://vincent.bernat.ch/en/blog/2014-eudyptula-boot)
for a quick presentation of this tool.Usage
-----It is preferable to have a kernel with AUFS or OverlayFS
enabled. Ubuntu and Debian kernels are patched to support AUFS. Since
3.18, vanilla kernels have OverlayFS built-in. Ubuntu kernels also
come with OverlayFS support. Check you have one of those options:CONFIG_AUFS_FS=y
CONFIG_OVERLAY_FS=y
CONFIG_OVERLAYFS_FS=yEnsure you have the following options enabled (as a module or builtin):
CONFIG_9P_FS=y
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_CONSOLE=yTo get a somewhat minimal configuration, have a look at the
`minimal-configuration` script.Once compiled, the kernel needs to be installed in some work directory:
$ make modules_install install INSTALL_MOD_PATH=$WORK INSTALL_PATH=$WORK
Then, boot your kernel with:
$ eudyptula-boot --kernel $WORK/vmlinuz-3.15.0~rc5-02950-g7e61329b0c26
Use `--help` to get additional available options.
Before booting the kernel, the path to GDB socket will be
displayed. You can use it by running gdb on `vmlinux` (which is
somewhere in the source tree):$ gdb vmlinux
GNU gdb (GDB) 7.4.1-debian
Reading symbols from /home/bernat/src/linux/vmlinux...done.
(gdb) target remote /path/to/vm-eudyptula-gdb.pipe
Remote debugging using /path/to/vm-eudyptula-gdb.pipe
native_safe_halt () at /home/bernat/src/linux/arch/x86/include/asm/irqflags.h:50
50 }
(gdb)If you have modules, you also need to manually load debug symbols for
them. In guest:$ grep . /sys/module/vxlan/sections/{.text,.data,.bss}
/sys/module/vxlan/sections/.text:0xffffffffc0370000
/sys/module/vxlan/sections/.data:0xffffffffc0378000
/sys/module/vxlan/sections/.bss:0xffffffffc0378900In GDB:
(gdb) add-symbol-file /usr/lib/debug/lib/modules/$(uname -r)/kernel/drivers/net/vxlan.ko \
0xffffffffc0370000 \
-s .data 0xffffffffc0378000 \
-s .bss 0xffffffffc0378900This can be automated with `lx-symbols` command if you source
`vmlinux-gdb.py` from a compiled kernel.A serial port is also exported. It can be convenient for remote
debugging of userland processes. More details can be found in this
[blog post][] (which also covers debugging the kernel).[blog post]: http://vincent.bernat.ch/en/blog/2012-network-lab-kvm
QEMU monitor is also attached to a UNIX socket. You can use the
following command to interact with it:$ socat - UNIX:/path/to/vm-eudyptula-console.pipe
QEMU 2.0.0 monitor - type 'help' for more information
(qemu)You can also get something similar to [guestfish][]:
$ eudyptula-boot --qemu="-drive file=someimage.qcow2,media=disk,if=virtio"
With `--extra-gettys`, you can allocate additional consoles. To access
one of them, use:$ socat STDIO,echo=0,icanon=0 UNIX:/tmp/tmp.oCshB5ryj4/getty-1.pipe
[guestfish]: http://libguestfs.org/guestfish.1.html
Alternatives
------------Similar projects exist:
- https://github.com/g2p/vido
- https://git.kernel.org/cgit/utils/kernel/virtme/virtme.git/