Caso tenha lido o artigo sobre 9p com virt-manager para Linux, notou como o 9p é pratico para pegar arquivos do hospedeiro pelo hóspede em um ambiente de máquina virtual KMS, e talvez queira a mesma praticidade com NetBSD.
No momento em que este post foi digitado, a versão de release do NetBSD é a 9.3. Ela não possui suporte ao virtio com procolo 9p e nem sua aplicação para montagem de sistemas de arquivos 9p suporta receber argumento apontando para um device no /dev, apenas URL de algum sistema remoto.
Mas o NetBSD Current, futuro 10, suporta! Este tutorial assume que já esteja em execução um NetBSD Current e já tenha os fontes recentes dele em /usr/src.
Mas isso requer compilar um kernel customizado, pois por alguma razão, até o momento, a configuração padrão do kernel para o NetBSD Current tem o driver para virtio 9p excluído.
Testament-Current$ cd /usr/src/sys/arch/amd64/conf/
Testament-Current$ cp GENERIC CUSTOMKERNEL
Abra, e procure pela linha e então retire o # em seu inicio:
#vio9p* at virtio? # Virtio 9P device
Compile as ferramentas para compilar o kernel.
./build.sh -D/root/sysbuild/amd64/destdir -M/root/sysbuild/amd64/obj -N2 -R/root/sysbuild/release -T/root/sysbuild/amd64/tools -U -X/usr/xsrc -j4 -mamd64 tools
Agora compile o novo kernel customizado. Repare no ultimo argumento, com no nome do arquivo de configuração criado.
./build.sh -D/root/sysbuild/amd64/destdir -M/root/sysbuild/amd64/obj -N2 -R/root/sysbuild/release -T/root/sysbuild/amd64/tools -U -X/usr/xsrc -j4 -mamd64 -x kernel=CUSTOMKERNEL
Crie os devices que o driver irá usar para mapear todos os dispositivos 9p encontrados da máquina virtual:
mknod /dev/vio9p0 c 356 0
mknod /dev/vio9p1 c 356 1
mknod /dev/vio9p2 c 356 2
mknod /dev/vio9p3 c 356 3
mknod /dev/vio9p4 c 356 4
mknod /dev/vio9p5 c 356 5
mknod /dev/vio9p6 c 356 6
mknod /dev/vio9p7 c 356 7
Instale o novo kernel.
Testament-Current# mv /netbsd /onetbsd
Testament-Current# cp /root/sysbuild/amd64/obj/usr/src/sys/arch/amd64/compile/CUSTOMKERNEL/netbsd /
Reinicie está pronto! Veja no seu “dmesg” pela linha mapeando o device vio9p0 para a tag projects que foi criar no virt-manager.
[ 1.039458] viomb0 at virtio2: features: 0x110000000<V1,INDIRECT_DESC>
[ 1.044136] viomb0 at virtio2: features: 0x110000000<V1,INDIRECT_DESC>
[ 1.039481] vio9p0 at virtio1: features: 0x110000001<V1,INDIRECT_DESC,MOUNT_TAG>
[ 1.039481] virtio1: allocated 24576 byte for virtqueue 0 for vio9p, size 128
[ 1.039481] vio9p0: tagged as projects
Se tudo ocorreu certo, o 9p chamado “projects”, que foi criado no virt-manager previamente, está mapeado em /dev/vio9p0 e pode ser montado com o comando mount_9p do NetBSD:
mkdir /mnt/projects
mount_9p -cu /dev/vio9p0 /mnt/project
E pronto! Está mapeado e pronto para uso.