Install

'+please see [[http://cloud9p.org/doc/vmm.html]] instead of this document.+'

Attach:plan9-desktop.png

In /etc/vm.conf:

vm "username-plan9" {
        owner username
        memory 1024M
        cdrom "/home/iso/9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso"
        disk /home/username/username-plan9.qcow2 
        interface {
                locked lladdr aa:bb:cc:dd:ee:ff
                switch "switch0"
        }
}

Download the plan9 ISO:

$ ftp http://9front.org/iso/9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz
$ doas mv 9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz /home/iso/
$ doas chown -R iso:iso /home/iso/
$ cd /home/iso
$ sha256 9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz
SHA256 (9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz) = af6dfae894dcb1e43f1e7e3d085b50f6d1dcf396e09a37d23c174ea94d8bf244
$ gunzip 9front-8593.acc504c319a4b4188479cfa602e40cb6851c0528.amd64.iso.gz

Create a user account and make sure to set the folder as go-rx:

$ doas chmod -R go-rx ~/
$ doas su username

In the home folder:

$ vmctl create -s 20G ~/username-plan9.qcow2

Then log out of the user with ^D, then as admin user in group wheel:

$ doas vmctl reload
$ doas vmctl start -c username-plan9
Connected to /dev/ttypr (speed 115200)                                                  
Boot failed: not a bootable disk                                                        
*e820=1 0x0000000000000000 0x000000000009f800 2 0x000000000009f800 0x00000000000a0000 2 
0x00000000000f0000 0x0000000000100000 1 0x0000000000100000 0x000000003fffc000 2 0x000000
003fffc000 0x0000000040000000 2 0x00000000fffc0000 0x0000000100000000                   
cdboot=yes                                                                              
mouseport=ask                                                                           
monitor=ask                                                                             
vgasize=ask                                                                             
bootfile=/386/9pc                                                                       
>console=0                                                                              
ccoonnssoollee==00
>>bboooott
bboooott
Plan 9
125 holes free
0x00021000 0x0009f000 516096
0x00100000 0x00110000 65536
0x005dd000 0x19cc8000 426684416
427266048 bytes free
cpu0: 4600MHz GenuineIntel Xeon5000-series (AX 000206D7 CX 96982203 DX 079BA97F)
ELCR: 02E8
#l0: virtio: 1000Mbps port 0x2000 irq 5 ea f2b2b3daeb05
i8042: kbd init failed
1000M memory: 413M kernel data, 587M user, 1212M swap
nusb/usbd: no hubs
/dev/sd00: OpenBSD VMM CD-ROM 001
/dev/sd00/data   9660
/dev/sdF0:
/dev/sdF0/data
bootargs is (tcp, tls, il, local!device)[local!/dev/sd00/data] 
user[glenda]: 
init: starting /bin/rc
cirno Sep 23 06:50:25 starting dns resolver on /net
vgasize is (text, 640x480x8, 1024x768x16, ...) [1024x768x16] text
bind: #i: no frame buffer
init: rc exit status: rc 215: webcookies 330: interrupt
init: starting /bin/rc
%25 inst/start
Thu Sep 23 04:51:42 CET 2021 Installation process started
--------------------------------------
Preparing menu...
The following unfinished tasks are ready to be done:
        configfs        - choose the type of file system to install
        confignet       - configure the network
        tzsetup - choose time zone
Task to do [configfs]: 
--------------------------------------
You can install the following types of file systems:
        cwfs64x the cached-worm file server
        hjfs    the new 9front file server (experimental!)
File system (cwfs64x, hjfs)[cwfs64x]: hjfs
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
The following unfinished tasks are ready to be done:
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        mountfs - choose and mount file system partition
        confignet       - configure the network
        tzsetup - choose time zone
Task to do [partdisk]: 
--------------------------------------
The following disk devices were found.
sd00 - OpenBSD VMM CD-ROM 001
   empty                0 485       (485 cylinders, 1.89 GB) 
 * p1                 485 486       (1 cylinders, 4.00 MB) ESP
sdF0 -
Disk to partition (sd00, sdF0)[no default]: sdF0
The disk you selected HAS NO master boot record on its first sector.
(Perhaps it is a completely blank disk.)
Shall we create a blank EFI partition table (GPT)
or install traditional DOS partition table (MBR)?
Install mbr or gpt (mbr, gpt)[no default]: mbr
This is disk/fdisk; use it to create a Plan 9 partition.
If there is enough room, a Plan 9 partition will be
suggested; you can probably just type 'w' and then 'q'.
cylinder = 8225280 bytes
'* p1                     0 2610        (2610 cylinders, 19.99 GB) PLAN9
>>> w
>>> q 
--------------------------------------
Preparing menu...
The following tasks are done:                                                           
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
The following unfinished tasks are ready to be done:                                    
        prepdisk        - subdivide plan 9 disk partition               
        mountfs - choose and mount file system partition                                
        confignet       - configure the network
        tzsetup - choose time zone
Task to do [prepdisk]: 
--------------------------------------
The following Plan 9 disk partitions were found.
/dev/sdF0/plan9
  empty                  0 41929587    (41929587 sectors, 19.99 GB)
Plan 9 partition to subdivide (/dev/sdF0/plan9)[/dev/sdF0/plan9]: 
This is disk/prep; use it to subdivide the Plan 9 partition.
If it is not yet subdivided, a sensible layout will be suggested;
you can probably just type 'w' and then 'q'.
no plan9 partition table found
9fat 204800
nvram 1
fs 41724786
' 9fat                   0 204800      (204800 sectors, 100.00 MB)
' nvram             204800 204801      (1 sectors, 512 B )
' fs                204801 41929587    (41724786 sectors, 19.89 GB)
>>> w
>>> q
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
The following unfinished tasks are ready to be done:
        mountfs - choose and mount file system partition
        confignet       - configure the network
        tzsetup - choose time zone
Task to do [mountfs]: 
--------------------------------------
Please choose your hjfs partition
--rw-r----- S 0 glenda glenda 21363090432 Jul 18 17:25 /dev/sdF0/fs
Hjfs partition (/dev/sdF0/fs)[/dev/sdF0/fs]: 
Size of RAM filesystem cache (MB)? [192]: 
Ream the filesystem? (yes, no)[yes]: 
Starting hjfs file server for /dev/sdF0/fs                                              
hjfs: reaming /dev/sdF0/fs                                                              
hjfs: ream successful                                                                   
hjfs: fs is /dev/sdF0/fs          
Configuring hjfs file server for /dev/sdF0/fs
hjfs: >create /dist sys sys 775 d
hjfs: >create /usr sys sys 775 d
hjfs: >newuser glenda
hjfs: >newuser adm +glenda
hjfs: >newuser sys +glenda
hjfs: >newuser upas +glenda
hjfs: >echo off
Mounting hjfs file server for /dev/sdF0/fs
%25 mount -c /srv/hjfs.newfs /n/newfs
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
        mountfs - choose and mount file system partition
The following unfinished tasks are ready to be done:
        configdist      - choose the source of the distribution archive
        confignet       - configure the network
        tzsetup - choose time zone
Task to do [configdist]: 
--------------------------------------
Are you going to download the distribution
from the internet or do you have it on local media?
Distribution is from (local, net)[local]: 
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
        mountfs - choose and mount file system partition
        configdist      - choose the source of the distribution archive
The following unfinished tasks are ready to be done:
        confignet       - configure the network
        mountdist       - locate and mount the distribution
        tzsetup - choose time zone
Task to do [confignet]: 
--------------------------------------
We will configure the ethernet.
Please choose a method for configuring your ethernet connection.
        manual - specify IP address, network mask, gateway IP address
        automatic - use DHCP and SLAAC to automatically configure
Configuration method (manual, automatic)[automatic]: 
starting ethernet automatic config                                                      
ipconfig: write(try fe80::f0b2:b3ff:feda:eb05 /64): interface does not support multicast
ipconfig: can't start IPv6 on /net/ether0, address fe80::f0b2:b3ff:feda:eb05
ipconfig: dialicmp6: cs: can't translate address                                    
--------------------------------------                                                  
Preparing menu...                                                                       
The following tasks are done:                                                           
        configfs        - choose the type of file system to install                     
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)    
        prepdisk        - subdivide plan 9 disk partition                               
        mountfs - choose and mount file system partition                                
        configdist      - choose the source of the distribution archive                 
        confignet       - configure the network                                         
The following unfinished tasks are ready to be done:                                    
        mountdist       - locate and mount the distribution                             
        download        - download or continue to download the distribution archives    
        tzsetup - choose time zone                                                      
Task to do [mountdist]: 
--------------------------------------
Please wait... Scanning storage devices...
        /dev/sd00/data
        /dev/sdF0/9fat
        /dev/sdF0/data
        /dev/sdF0/fs
The following storage media were detected.
Choose the one containing the distribution.
        /dev/sd00/data (iso9660 cdrom)
Distribution disk (/dev/sd00/data, /dev/sdF0/fs, /)[/]: 
%25 mount /srv/boot /n/distmedia                                                          
Which directory contains the distribution?                                              
Any of the following will suffice (in order of preference):                             
        - the root directory of the cd image                                            
        - the directory containing 9front.iso                                           
        - the directory containing 9front.iso.bz2                                       
Location of archives [/]:                   
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
        mountfs - choose and mount file system partition
        configdist      - choose the source of the distribution archive
        confignet       - configure the network
        mountdist       - locate and mount the distribution
The following unfinished tasks are ready to be done:
        copydist        - copy the distribution into the file system
        tzsetup - choose time zone
Task to do [copydist]: 
--------------------------------------                                                  
processing /sys/lib/sysconfig/proto/allproto                                            
file system made                                                              
--------------------------------------
Preparing menu...                           
The following tasks are done:                                                           
        configfs        - choose the type of file system to install                     
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition                           
        mountfs - choose and mount file system partition               
        configdist      - choose the source of the distribution archive
        confignet       - configure the network                        
        mountdist       - locate and mount the distribution         
        copydist        - copy the distribution into the file system
The following unfinished tasks are ready to be done: 
        ndbsetup        - setup network configuration               
        tzsetup - choose time zone                                                      
        bootsetup       - configure hard disk to boot plan 9
Task to do [ndbsetup]:  
--------------------------------------
Setup network configuration
sysname [cirno]: username.example.com
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
        mountfs - choose and mount file system partition
        configdist      - choose the source of the distribution archive
        confignet       - configure the network
        mountdist       - locate and mount the distribution
        copydist        - copy the distribution into the file system
        ndbsetup        - setup network configuration
The following unfinished tasks are ready to be done:
        tzsetup - choose time zone                                                      
        bootsetup       - configure hard disk to boot plan 9        
Task to do [tzsetup]: 
--------------------------------------                                                  
Setup Time Zone                                                                         
Time Zone (Argentina, Asia_Bahrain, Asia_India, Australia_ACT, Australia_Broken-Hill, Au
stralia_LHI, Australia_NSW, Australia_North, Australia_Queensland, Australia_South, Aust
ralia_Sturt, Australia_Tasmania, Australia_Victoria, Australia_West, Australia_Yancowinn
a, Brazil_Acre, Brazil_DeNoronha, Brazil_East, Brazil_West, CET, Canada_Atlantic, Canada
_Central, Canada_East-Saskatchewan, Canada_Eastern, Canada_Mountain, Canada_Newfoundland
, Canada_Pacific, Canada_Yukon, Chile_Continental, Chile_EasterIsland, Cuba, EET, Egypt,
 GB-Eire, GMT, HST, Hongkong, Iceland, Iran, Israel, Jamaica, Japan, Libya, Mexico_BajaN
orte, Mexico_BajaSur, Mexico_General, NZ, NZ_CHAT, Navajo, PRC, Poland, ROC, ROK, Singap
ore, Turkey, US_Alaska, US_Arizona, US_Central, US_East-Indiana, US_Eastern, US_Hawaii, 
US_Michigan, US_Mountain, US_Pacific, US_Yukon, Uruguay, W-SU, WET)[US_Eastern]: US_Central
--------------------------------------                                                  
Preparing menu...                                                                       
The following tasks are done:                                                           
        configfs        - choose the type of file system to install                     
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)    
        prepdisk        - subdivide plan 9 disk partition                               
        mountfs - choose and mount file system partition                                
        configdist      - choose the source of the distribution archive          
        confignet       - configure the network
        mountdist       - locate and mount the distribution
        copydist        - copy the distribution into the file system
        ndbsetup        - setup network configuration
        tzsetup - choose time zone
The following unfinished tasks are ready to be done:                                
        bootsetup       - configure hard disk to boot plan 9
Task to do [bootsetup]:                                                                 
--------------------------------------
Setup Plan 9 FAT boot partition (9fat)                                        
Plan 9 FAT partition (/dev/sdF0/9fat)[/dev/sdF0/9fat]: 
dossrv: serving #s/dos                                                        
%25 dd -bs 512 -count 1 -if /dev/sdF0/9fat -of /tmp/pbs.bak
1+0 records in                                                                
1+0 records out
Initializing Plan 9 FAT partition.                                            
%25 disk/format -r 2 -d -b /n/newfs/386/pbs -l PLAN9 /dev/sdF0/9fat
Initializing FAT file system
type hard, 12 tracks, 255 heads, 63 sectors/track, 512 bytes/sec
used 4096 bytes
%25 mount -c /srv/dos /n/9fat /dev/sdF0/9fat
%25 rm -f /n/9fat/9bootfat /n/9fat/plan9.ini /n/9fat/9pc
%25 cp /n/newfs/386/9bootfat /n/9fat/9bootfat
%25 chmod +al /n/9fat/9bootfat
%25 cp /tmp/plan9.ini /n/9fat/plan9.ini
%25 cp /n/newfs/386/9pc /n/9fat/
%25 mkdir -p /n/9fat/efi/boot
%25 cp /386/bootia32.efi /386/bootx64.efi /n/9fat/efi/boot
%25 cp /tmp/pbs.bak /n/9fat
%25 unmount /n/9fat
If you use the Windows NT/2000/XP master boot record
or a master boot record from a Unix clone (e.g., LILO or
FreeBSD bootmgr), it is probably safe to continue using
that boot record rather than install the Plan 9 boot record.
Install the Plan 9 master boot record (yes, no)[no default]: yes
Mark the Plan 9 partition active (yes, no)[no default]: yes
The Plan 9 partition is now marked as active.
--------------------------------------
Preparing menu...
The following tasks are done: 
        configfs        - choose the type of file system to install
        partdisk        - edit partition tables (e.g., to create a plan 9 partition)
        prepdisk        - subdivide plan 9 disk partition
        mountfs - choose and mount file system partition
        configdist      - choose the source of the distribution archive
        confignet       - configure the network
        mountdist       - locate and mount the distribution
        copydist        - copy the distribution into the file system
        ndbsetup        - setup network configuration
        tzsetup - choose time zone
        bootsetup       - configure hard disk to boot plan 9
The following unfinished tasks are ready to be done:
        finish  - finish the installation and reboot
Task to do [finish]: 
--------------------------------------
Congratulations; you've completed the install.
halting...halted at Thu Sep 23 05:46:49 2021.
/srv/cwfs.newfs.cmd...
done halting
rebooting...
cpu0: exiting
Takes a licking and keeps on ticking...
can't reset

At this point, plan9 is unable to reboot on its own, so type ~~. then:

$ doas vmctl stop username-plan9
$ doas vmctl start -c username-plan9


Connected to /dev/ttyph (speed 115200)
MBR...pbs.................ok
*e820=1 0x0000000000000000 0x000000000009f800 2 0x000000000009f800 0x000000000
00a0000 2 0x00000000000f0000 0x0000000000100000 1 0x0000000000100000 0x0000000
03fffc000 2 0x000000003fffc000 0x0000000040000000 2 0x00000000fffc0000 0x00000
00100000000                                                                   
bootfile=9pc
bootargs=local!/dev/sdF0/fs -m 192
mouseport=ask
monitor=ask
vgasize=text
ccoonnssoollee==00
bboooott
Plan 9
126 holes free
0x0001a000 0x0009f000 544768
0x0060a000 0x0ffff000 262098944
262643712 bytes free
cpu0: 4623MHz GenuineIntel Xeon5000-series (AX 000206D7 CX 96982203 DX 079BA97
F)
ELCR: 02E8
#l0: virtio: 1000Mbps port 0x2000 irq 5 ea de4baa668f07
i8042: kbd init failed
1024M memory: 256M kernel data, 767M user, 1392M swap
nusb/usbd: no hubs
/dev/sd00: OpenBSD VMM CD-ROM 001
/dev/sd00/data   9660
/dev/sdF0:
/dev/sdF0/9fat   dos
/dev/sdF0/data
/dev/sdF0/fs     hjfs
/dev/sdF0/nvram
/dev/sdF0/plan9
bootargs is (tcp, tls, il, local!device)[local!/dev/sdF0/fs -m 192] 
user[glenda]: 
hjfs: fs is /dev/sdF0/fs
init: starting /bin/rc
ipconfig: write(try fe80::dc4b:aaff:fe66:8f07 /64): interface does not support multicast
ipconfig: can't start IPv6 on /net/ether0, address fe80::dc4b:aaff:fe66:8f07
ipconfig: dialicmp6: cs: can't translate address
bind: #i: no frame buffer
rio: can't open display: initdisplay: /dev/draw/new: '/dev/draw' file does not exist
init: rc exit status: rc 260: rio 396: display open
init: starting /bin/rc
%25 auth/wrkey
bad nvram des key
bad authentication id
bad authentication domain
authid: glenda
authdom: username.example.com
secstore key:                               
password: 
%25 9fs 9fat
%25 echo 'service=cpu' >> /n/9fat/plan9.ini
%25 echo 'while() { sleep 5; ip/ping 38.87.162.1 > /dev/null } &' >> /bin/cpurc
%25 fshalt -r

~~. to escape serial console, then:

host# vmctl stop username-plan9     
stopping vm username-plan9: requested to shutdown vm 6
host# vmctl start -c username-plan9

To start VNC (optional):

# vncs -A /bin/rio -s