% Notes on FreeBSD 2.2.8/9 in QEMU For reasons I don't actually understand, I found myself trying to install FreeBSD 2.2.9 in a VM yesterday. What follows are my notes on the proces. My installation attempts used the CD image for installation, which worked normally with QEMU's `-cdrom` argument. It appears that the installer crashes during file extraction with a page fault if the drive sizes are too large. A size of 1 GB failed. A size of 800 MB worked, whether in raw or qcow2 format. To be able to install everything from the CD without worrying about space, I used two 800 MB drive images, with the `-hda` and `-hdb` options, and used the second drive, after auto-partitioning the first, to hold partitions for `/usr/ports`{.file} and `/usr/local`{.file}. This allowed the installation to proceed successfully. 2.2.8 installs, despite the old forum post suggesting that it would not. It does have similar page fault, but in my case, had it after everything had been installed and extracted, thus only losing the final configuration steps that could be run later. # Network Configuration The device that appears to work is `ne2k_isa`. `ne2k_pci` does not appear to be supported. Note that QEMU's default iobase and interrupt (0x300, 9) is different from FreeBSD's default (0x280, 10). In QEMU, with "user" networking, the following values are used: - `10.0.2.15`: guest - `10.0.2.2`: gateway and host - `10.0.2.3`: DNS Once set up, the network works correctly, though during transfers there are occasionally errors (that don't affect the transferred data, at least for TCP). # X Configuration XFree86 graphical configurators failed for me, regardless of QEMU graphics driver. I wasn't successful with reasonable configuration using the default QEMU graphics driver: this appeared to result in support for only unusably low resolutions. The Cirrus driver worked, selecting any Cirrus 54xx option in the text configurator with some caveats: - `Option "nobitblt"` was necessary for text to work reasonably. - `Option "swcursor"` was necessary for the cursor to be visible (though the invisible cursor in the alternative situation still worked, if one could guess where it was.) - `VideoRAM` as a custom value helped higher resolutions: I used 8192. - 8 bits per pixel, the default, resulted in a dark green hue to everything. Using `-bpp 24`{.sh} as an argument to the X server fixed this, eg, `startx -- -bpp 24`{.sh}. - I don't remember how to select a specific mode, and so I deleted all but a reasonable (`1280x1024`) mode in XF86Config. # Ports and packages Packages for 2.2.8 are still available: <ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/i386/packages-2.2.8-release/> These are easily installed and work. Ports work in 2.2.8, though all files need to be found and downloaded separately. I'm not sure where an easily-usable copy of the files (to go into `distfiles`) exists, unfortunately. Ports do not work by default on 2.2.9. `/usr/ports`{.file}, as installed by the CD, does not contain the subdirectory `Mk`{.file}. All port Makefiles rely on included files from `/usr/share/mk`{.file}, which in turn rely on files in `/usr/ports/Mk`{.file}. I am not sure where to find a suitable copy of these files. Using files from the current, or anywhere near recent, ports collection would presumably fail. Looking into this further, it appears that there was a change in 1999 from having full makefiles supporting ports in the bin part of the base installation to having skeletons there[^1], and the base system. The inclusion of these more modern skeletons in 2.2.9 appears to be the problem. On a 2.2.9 installation, installing `bin` from the 2.2.8 CD fixed the problem, but caused the next boot to fail. [^1]: In git as [`500ada61bf4c0a89b61d5f49b36742ac296aa7df`](https://github.com/freebsd/freebsd-src/commit/500ada61bf4c0a89b61d5f49b36742ac296aa7df#diff-1b15551c03b0839d920bf5ed574504041b6a9bef99fb49451c5893edc0243132). # Miscellaneous Caveats - `ftp` and `wget` use active mode by default, while almost everything wants passive mode now. - Emacs 20 does not have `normal-erase-is-backspace-mode`. Another method for [handling backspace](https://www.emacswiki.org/emacs/BackspaceKey) must be used, though Delete does work as backspace. Meta does not work by default, but ESC works.