More beginner questions

John G Heim jheim at
Wed Mar 8 15:31:15 CET 2017

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}))
				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>;
				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= rootovl console=tty0
> console=ttyS0,9600n8 FAI_FLAGS=verbose,sshd,createvt
> FAI_ACTION=install
> How do I tell FAI to add the class XENIAL?
> Bill

More information about the linux-fai mailing list