You wouldn't do anything in your pxe config to install a different operating system. It may be possible to have a non-debian nfsroot to boot from but you probably don't want to do that. Far easier is to use debian for your nfsroot even when installing another flavor of linux. We use ubuntu here and it works fine to use a debian nfsroot.

What you probably want to do is to write a script for the classes directory. By default this is /srv/fai/config/classes/. On our fai server, I have a script in there that uses SOAP to query a database for which operating system to install. I have a web app that allows my co-workers to change the operating system in the database. So without any understanding of the internals of FAI, my co-workers canupgrade a machine from ubuntu xenial to yakkety by going into the web app, changing the prefered operating system for the machine, pxe boot the machine, and come back 20 minutes later to a freshlyupgraded machine.

You don't have to do anything that elaborate. If you just want debian on some machines and ubuntu on others, you can write a script with a case statement based on the host name or the IP address.

Actually, there is one other thing you can do that might be worth mentioning ... Ask which operating system to install during the install. Here is some perl code to ask a question in a FAI class script. The question appears on the console and if the user doesn't answer by the end of the wait/timeout, it returns the default value. You call the function something like this:

my $answer = &askQuestion ("Wich OS?", {d => 'debian', 'x => 'xenial', y => 'yakkety'}, 'y', 30);

sub askQuestion
        {
        my $question = shift;
        my $choices = shift;
        my $default = shift;
        my $wait = shift;
        $wait = WAIT_TIMEOUT unless ($wait);
        my $answer = '';

        if (    open CONSOLE, "</dev/console")
                {
                while (not defined ($choices->{$answer}))
                        {
                        eval
                                {
                                local $SIG{ALRM} = sub { die "alarm clock 
restart" };
                                alarm $wait;
printf STDERR "$question\n\n" . join ("\n ", map ($_ . "=" . $choices->{$_}, sort keys %$choices)) . "\nYour choice (default=$default): \a";
                                $answer = <CONSOLE>;
                                chomp($answer);
                                alarm 0;
                                }; # lave
                        $answer = $default unless ($answer);
                        warn "ANSWER=$answer" if ($Main::VERBOSE);
                        } # elihw
                close (CONSOLE);
                } # fi
        return $answer;
        } # bus AskQuestion








On 03/08/2017 03:05 AM, Bill MacAllister wrote:
I have a minimal FAI server up to the point where it will install
stretch on a client system.  I now need to be able to install other
distributions. I understand that I need to create or download
basefiles.  That is straight forward to me. What I am fuzzy on is how I
create a PXE configuration so that the client picks the correct base file.

For example, for a client system I have a PXE config of:

serial 1 9600 0
default fai-generated

label fai-generated
kernel vmlinuz-4.9.0-1-amd64
append initrd=initrd.img-4.9.0-1-amd64 ip=dhcp
root=172.21.65.51:/srv/fai/nfsroot rootovl console=tty0
console=ttyS0,9600n8 FAI_FLAGS=verbose,sshd,createvt
FAI_CONFIG_SRC=nfs://corpfai.corp.dropbox.com/srv/fai/config
FAI_ACTION=install

How do I tell FAI to add the class XENIAL?

Bill

Antwort per Email an