YAFI or Yet Another FreeBSD Installer

Hi folks,

I've been working on an installer for FreeBSD for the past month,
and I've finally come along far enough that I have something usable
that people can play with and provide feedback.

Our sysinstall(8) is actually pretty darn nice. No really. Think about
it. Forget for a moment that it doesn't have a spiffy GUI and look at
some of the things it does right:
1. It doesn't have any 3rd party dependency (it builds out of the src
2. You're not limited by the physical media the installer is on.
You can install from CD, FTP, HTTP, NFS, UFS, FAT, etc.
3. If you want to build your own release you can use a configuration
file for unattended setup.
4. libdisk(3)

On the other hand it suffers from one major flaw (which is the root
cause of its other problems): the presentation and logic is so tightly
coupled together that it's damn hard to make non-trivial changes without
breaking it. So, it hasn't been able to move with the times or change
significantly over the years because it would essentially have meant a
complete rewrite.

The DragonFly folks went ahead and did a complete re-write, but while
their implementation addressed sysinstall's major problem, they didn't
keep (or re-implement) its good points. Worse, from our stand-point,
the BSD Installer (www.bsdinstaller.org) only works from a live-cd
and depends on messy command lines and string-parsing to install the
system. Recently, I believe they've gone even further and re-implemented
the back-end using the Lua scripting language (making it even more
unusable for us). Having said that; however, there is one thing that
I really like about it: they've managed to completely divorce the
presentation layer from the installer logic. All the logic for
installing the system is contained in the back-end application, and
all the front-end does is essentially just display forms and return
the user's choices to the back-end. What I like even better is that
the front-end and the back-end don't even have to be on the same
machine, which opens up a whole new area of installation options.

So essentially, what I'm doing is taking all the parts I like about
sysinstall(8), putting it on the framework provided by the BSD Installer
folks, and adding a couple of ideas of my own. Here's what I envision
the end-product to look like:
1. One back-end (in C), multiple front-ends (curses, web browser, X)
2. Supports multiple installation media
3. XML based application configuration
- no hard coded options/distributions/packages in source files
- no flat file (key=value) configuration files
4. Supports Internationalization
5. Clean and modular backend so that the installer can grow right
along FreeBSD itself (i.e. - ZFS support, etc)

What I have so far is alpha quality. It will install a basic FreeBSD
system that you can boot into, but that's about it. It works on
i386/amd64, uses libdisk(3) for slicing and dicing disks, and looks
for the install cd on the first IDE CD-Rom. It installs the complete
base system (all distributions), and doesn't know about packages yet.

You can find the tarball at: http://people.freebsd.org/~mtm/fin.tar.bz2
The tarball contains the modified BSD Installer source code, a script
to copy the code into the right places in the source tree, and a diff
against src/ to integrate it into the build system and make a release
The script I use to build a release is here:

I'm very much interested in your comments and suggestions.

Mike Makonnen | GPG-KEY: http://people.freebsd.org/~mtm/mtm.asc
mmakonnen @ gmail.com | AC7B 5672 2D11 F4D0 EBF8 5279 5359 2B82 7CD4 1F55
mtm @ FreeBSD.Org | FreeBSD - http://www.freebsd.org
freebsd-current@xxxxxxxxxxx mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"