v86/docs/linux-9p-image.md
Rick van de Loo bfff744a1c update linux 9p image mount hook doc
should be host9p, otherwise the initcpio hook will try to mount
/dev/sda1 (or whatever you have configured) over /new_root as a 9p
fs (which it isn't) and the system will complain with "no channels
available" and drop you in the emergency shell. Instead, host9p
should be mounted over /new_root as type 9p.
2017-05-01 12:11:31 -04:00

1.2 KiB

In order to create a Linux image that can mount the 9p file system, use add the following lines to the kernel config:

CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_9P_FS=y
CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y

A Dockerfile for this build is here: https://github.com/ysangkok/build-v86-9p-linux

Using initcpio

This allows you to remount the root file system using 9p. No changes are necessary if you only want to mount a 9p filesystem after booting.

Add the following files:

/etc/initcpio/hooks/9p_root

#!/usr/bin/bash

run_hook() {
    mount_handler="mount_9p_root"
}

mount_9p_root() {
    msg ":: mounting '$root' on real root (9p)"
    if ! mount -t 9p host9p "$1"; then
        echo "You are now being dropped into an emergency shell."
        launch_interactive_shell
        msg "Trying to continue (this will most likely fail) ..."
    fi
}

/etc/initcpio/install/9p_root

#!/bin/bash
build() {
	add_runscript
}

Change the following options in /etc/mkinitcpio.conf:

MODULES="virtio_pci 9p 9pnet 9pnet_virtio"
HOOKS="base udev autodetect modconf block filesystems keyboard fsck 9p_root" # appended 9p_root