[PC-BSD Dev] PC-BSD 8 installer (long)

Kris Moore kris at pcbsd.com
Mon May 18 07:58:45 PDT 2009

This weekend I had a chance to sit down and try to think out how our new 
installer should work for PC-BSD 8.x. Below is kind what I've come up 
with, to meet our requirements, and those suggested by users. Feel free 
to read and send your comments of what you like / don't like, or think 
we should add.

I would like to setup 8.0 to be both a LiveDVD, and installer all rolled 
into one. The idea is that at the FreeBSD boot menu, we'll have various 
options, like "LiveDVD" or "InstallOnly". When running the LiveDVD, we 
can also provide a link on the desktop to the installer, which allows 
the user to install directly from it. Install Only will be much faster 
to boot, and do an install of course, and may work better on systems 
which aren't capable of running KDE4 direct from DVD.

I would like to get rid of the 3 disk CD installer, and instead make 
just a small "boot-only" CD-ROM, which can then install PC-BSD 8.0 via 
FTP across the net, or local mirror. Ditto with USB, I would like to 
keep the boot-only USB image we use now, and just set it up to install 
via network.

Installation Options
I would like to offer 3 types of installation from the installer.

* Desktop - Regular PC-BSD KDE4 desktop
* Server - PC-BSD which defaults to fluxbox instead of KDE4, and set's 
up SSH / other services
* FreeBSD - Installs a regular FreeBSD 8.0 system, same as regular 
FreeBSD isos, except done via our nice installer :)

Installation Process

Here's what I'm thinking we should do for the actual installation 
program flow:

  * Locale Selection (We may be able to skip license stuff, since BSD 
license doesn't require us to agree and I can move nvidia license to 
only require user to accept if they use it specifically)
  * Select install type / options
      - Desktop, Server, FreeBSD
      - Fresh, Upgrade, Repair
      - Install from DVD or Network
  * Select disk / partition to install to and do any advanced partioning
  * Select optional components. (Add PBIs, or KDE components, or 
Source/Ports on FreeBSD install)
  * Setup User / Password (Only on FreeBSD Install, explained below)
  * Perform Installation

Then after the Desktop / Server installation is performed:

    * Boot to a custom PC-BSD Welcome Screen
    * Set Locale (If we did OEM-scripted install and skipped this setup)
    * Ask user to set root-password and setup user accounts
    * Ask user to set Xorg resolution / drivers, similar to how we do now

Installation Guts

Here's were we get down to the guts of the installation itself.

For the new installer, I think we need to approach a backend/frontend 
driven hybrid model.


The front-end should be able to query the backend for pieces of 
information, such as available disks, partition information, networking 
availability, etc. Then the front-end can use this information to work 
its logic and allow the user to make their selections in any way it sees 
fit. Once the front-end is "ready to install", it then takes the users 
selections, and simply writes a small configuration file for the 
installer backend, such as pcinstall.cfg. Then the backend takes over 
and performs the installation automatically, and only provides 
information to the front-end to display the progress.

I think this model will provide us with several advantages:

First, this gives us great flexibility in the actual installation. We 
can easily tailor our GUI to fit any particular theme / program flow we 
wish. We can re-adjust front-end at any point, without re-writing the 
backend, or we could even add multiple installer front-ends, such as 

Second, This will provide us with an easily script-able installation. 
One of the things people still like about FreeBSD's sysinstall, is that 
its script support is (fairly) easy to work with. This would give us the 
same functionality, and provide a great option for OEM installs. For 
example, an OEM could take a PC-BSD ISO, unpack it, throw in the 
pcinstall.cfg file, repack it and burn for the customer. Then if a 
desktop gets a new hard disk, or the user just wants to restore back to 
the original config, they boot the DVD and the installation takes place 
automatically with no interaction. Then at first boot, they are prompted 
to setup locale, username, and X configuration, just like when the 
received their new PC.


With this type of model, the most important question is going to be how 
we do the backend, since it'll be responsible for the actual 
installation itself. I know we've looked at finstall and bsdinstaller, 
but I'm not 100% certain they could do what I'm talking about without a 
lot of re-writing. I'll let Ivan and Scott answer that respectively, 
since they know those backends far better than I do :)

If necessary I could simply adapt our existing scripts to this format, 
and provide a SVN-like CLI interface, or even a C library which could be 
called. (Our existing installer is almost entirely script driven now) 
The trick will be that we need to keep the backend as small as possible, 
and provide ways for the front-end to "query" the backend for system 
information, and let the backend actually perform the installation via 
front-end generated config file.



Kris Moore
PC-BSD Software

More information about the Dev mailing list