metal/bsp-files/centos-ks-gen.pl
Don Penney 8267e3ce99 Add ntpd to installer, sync time from active controller during install
To avoid potential issues due to large time jumps when NTP first syncs
the system time at runtime, this update adds ntpd to the installer
rootfs and adds a pre-script to the kickstarts to sync the time from
the active controller before starting to install the software. This
also ensures that any filesystem timestamps will be accurate right
from the node installation.

Change-Id: I166c52430cec6ba64e5a33ebde64ee65639d623c
Signed-off-by: Don Penney <don.penney@windriver.com>
2018-06-27 15:48:41 -04:00

304 lines
12 KiB
Perl
Executable File

#!/usr/bin/perl
#
# Copyright (c) 2017 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
use strict;
use Getopt::Long;
use POSIX qw(strftime);
# Defines the current list of YOW boot servers
my %boot_servers = ("yow-tuxlab", "128.224.150.9",
"yow-tuxlab2", "128.224.151.254",
"yow", "128.224.150.9"); # obsolete; kept for backwards compatibility
my $PLATFORM_RELEASE;
my $files_dir;
my $output_dir = 'generated';
my $pxeboot_output_dir = 'pxeboot';
my $extra_output_dir = 'extra_cfgs';
GetOptions("release=s" => \$PLATFORM_RELEASE,
"basedir=s" => \$files_dir);
die "Please specify release with --release" if (!$PLATFORM_RELEASE);
if (!$files_dir)
{
$files_dir = '.';
}
my $BOOT_SERVER = "none";
my $template_dir = "$files_dir/kickstarts";
system("mkdir -p ${output_dir}");
# Write USB image files
write_config_file("controller",
"${output_dir}/controller_ks.cfg", "filter_out_from_controller",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_controller.cfg",
"post_platform_conf_controller.cfg",
"post_common.cfg",
"post_kernel_controller.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_usb_controller.cfg");
write_config_file("controller-compute",
"${output_dir}/smallsystem_ks.cfg", "filter_out_from_smallsystem",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_usb_controller.cfg");
write_config_file("controller-compute-lowlatency",
"${output_dir}/smallsystem_lowlatency_ks.cfg", "filter_out_from_smallsystem_lowlatency",
"pre_common_head.cfg",
"pre_pkglist_lowlatency.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio_lowlatency.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_usb_controller.cfg");
system("mkdir -p ${pxeboot_output_dir}");
# Write PXE boot files
write_config_file("controller",
"${pxeboot_output_dir}/pxeboot_controller.cfg", "filter_out_from_controller",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_controller.cfg",
"post_platform_conf_controller.cfg",
"post_common.cfg",
"post_kernel_controller.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_pxeboot_controller.cfg");
write_config_file("controller-compute",
"${pxeboot_output_dir}/pxeboot_smallsystem.cfg", "filter_out_from_smallsystem",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_pxeboot_controller.cfg");
write_config_file("controller-compute-lowlatency",
"${pxeboot_output_dir}/pxeboot_smallsystem_lowlatency.cfg", "filter_out_from_smallsystem_lowlatency",
"pre_common_head.cfg",
"pre_pkglist_lowlatency.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio_lowlatency.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_pxeboot_controller.cfg");
# Write same net files
write_config_file("controller",
"${output_dir}/net_controller_ks.cfg", "filter_out_from_controller",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_controller.cfg",
"post_platform_conf_controller.cfg",
"post_common.cfg",
"post_kernel_controller.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_net_controller.cfg",
"post_net_common.cfg");
write_config_file("controller-compute",
"${output_dir}/net_smallsystem_ks.cfg", "filter_out_from_smallsystem",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_net_controller.cfg",
"post_net_common.cfg");
write_config_file("controller-compute-lowlatency",
"${output_dir}/net_smallsystem_lowlatency_ks.cfg", "filter_out_from_smallsystem_lowlatency",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist_lowlatency.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio_lowlatency.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_net_controller.cfg",
"post_net_common.cfg");
write_config_file("compute",
"${output_dir}/net_compute_ks.cfg", "filter_out_from_compute",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_compute.cfg",
"post_platform_conf_compute.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_no_pv_on_rootfs.cfg",
"post_net_common.cfg");
write_config_file("compute-lowlatency",
"${output_dir}/net_compute_lowlatency_ks.cfg", "filter_out_from_compute_lowlatency",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist_lowlatency.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_compute.cfg",
"post_platform_conf_compute_lowlatency.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_no_pv_on_rootfs.cfg",
"post_net_common.cfg");
write_config_file("storage",
"${output_dir}/net_storage_ks.cfg", "filter_out_from_storage",
"pre_common_head.cfg",
"pre_net_common.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_storage.cfg",
"post_platform_conf_storage.cfg",
"post_common.cfg",
"post_kernel_storage.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_net_common.cfg");
system("mkdir -p ${extra_output_dir}");
# write Ottawa Lab files
my $server;
foreach $server (keys %boot_servers)
{
$BOOT_SERVER = $boot_servers{$server};
write_config_file("controller",
"${extra_output_dir}/${server}_controller.cfg", "filter_out_from_controller",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_controller.cfg",
"post_platform_conf_controller.cfg",
"post_common.cfg",
"post_kernel_controller.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_yow_controller.cfg");
write_config_file("controller-compute",
"${extra_output_dir}/${server}_smallsystem.cfg", "filter_out_from_smallsystem",
"pre_common_head.cfg",
"pre_pkglist.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_yow_controller.cfg");
write_config_file("controller-compute-lowlatency",
"${extra_output_dir}/${server}_smallsystem_lowlatency.cfg", "filter_out_from_smallsystem_lowlatency",
"pre_common_head.cfg",
"pre_pkglist_lowlatency.cfg",
"pre_disk_setup_common.cfg",
"pre_disk_aio.cfg",
"post_platform_conf_aio_lowlatency.cfg",
"post_common.cfg",
"post_kernel_aio_and_compute.cfg",
"post_lvm_pv_on_rootfs.cfg",
"post_system_aio.cfg",
"post_yow_controller.cfg");
}
exit 0;
#------------------------#
sub write_config_file {
my ($personality, $ksout, $filter_file, @templates) = @_;
my %filter;
if ($filter_file ne "") {
if (!(open(FILTER, "$files_dir/$filter_file"))) {
die "Could not open template $files_dir/$filter_file";
}
while (<FILTER>) {
chop();
next if ($_ =~ /^#/);
$filter{$_} = 1;
}
close(FILTER);
}
print "Writing: $ksout\n";
open(OUT, ">$ksout") || die "Could not write $ksout";
my $year = strftime "%Y", localtime;
print OUT "#\n";
print OUT "# Copyright (c) $year Wind River Systems, Inc.\n";
print OUT "# SPDX-License-Identifier: Apache-2.0\n";
print OUT "#\n";
print OUT "\n";
# Add functions header
foreach my $block ("\%pre", "\%post") {
if (!(open(FUNCTIONS, "$template_dir/functions.sh"))) {
die "Could not open functions.sh";
}
print OUT "$block\n";
while (<FUNCTIONS>) {
s/xxxPLATFORM_RELEASExxx/$PLATFORM_RELEASE/g;
s/xxxBOOT_SERVERxxx/$BOOT_SERVER/g;
s/xxxYEARxxx/$year/g;
print OUT $_;
}
print OUT "\%end\n\n";
close FUNCTIONS;
}
my $template;
foreach $template (@templates) {
if (!(open(TEMPLATE_IN, "$template_dir/$template"))) {
die "Could not open template $template_dir/$template";
}
print OUT "\n# Template from: $template\n";
while (<TEMPLATE_IN>) {
$_ =~ s/\n$//;
s/xxxPLATFORM_RELEASExxx/$PLATFORM_RELEASE/g;
s/xxxBOOT_SERVERxxx/$BOOT_SERVER/g;
s/xxxYEARxxx/$year/g;
s/xxxPACKAGE_LISTxxx/\@platform-$personality\n\@updates-$personality/;
print OUT "$_\n";
}
close(TEMPLATE_IN);
}
close(OUT);
}