Public Jet Config Script

From JetResources
Revision as of 02:24, 10 January 2008 by Jetmark (talk | contribs)
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to navigation Jump to search

[Jet_Installation_Recipe|Parent]

Jumpstart Configuration Script

This is a script which will check and configure the jumpstart environment, including tweaking JET configs to suit the example.com standards.

#!/usr/bin/perl
#############################################################################
# Program       : jumpstart_config.pl
# Author        : Mark Ashley mark at ibiblio dot org
# Version       : 1.4
# Initial Date  : 4th December 2007
# Modified Date : 9th January 2008
# Purpose       : Setup Jumpstart environment. Can be safely re-run any time.
#############################################################################

use POSIX;

$JS_TOP_DIR  = '/data/jumpstart';
$JET_TOP_DIR = '/opt/SUNWjet';
# Current version of Sun Explorer
my $explo_ver="5.10";
($c_kernel, $c_hostname, $c_release, $c_version, $c_hardware) = uname();

$| = 1;
$uid = 0;
$gid = 0;

my $verbose = 0;
if ($ARGV[0] eq '-v')        { $verbose++; }
if ($ARGV[0] eq '--verbose') { $verbose++; }
if ($ARGV[0] eq '-d')        { $debug++; }
if ($ARGV[0] eq '--debug')   { $debug++; }
if ($ARGV[0] eq '-h')        { &usage; exit(0); }
if ($ARGV[0] eq '--help')    { &usage; exit(0); }
#
&create_dir($JS_TOP_DIR, $uid, $gid);
&create_dir("${JS_TOP_DIR}/media",   $uid, $gid);
&create_dir("${JS_TOP_DIR}/pkgs",    $uid, $gid);
&create_dir("${JS_TOP_DIR}/patches", $uid, $gid);
#
&setup_jumpstart_conf("JS_PKG_DIR",     "${JS_TOP_DIR}/pkgs");
&setup_jumpstart_conf("JS_PATCH_DIR",   "${JS_TOP_DIR}/patches");
&setup_jumpstart_conf("JS_SOLARIS_DIR", "${JS_TOP_DIR}/media");
&setup_jumpstart_conf("JS_DHCP_VENDOR", '"SUNW.Sun-Fire-T200 SUNW.Netra-T2000 SUNW.Sun-Fire-T1000 SUNW.Sun-Fire-V490 SUNW.Ultra-5_10 SUNW.Ultra-30 SUNW.UltraSPARC-IIi-cEngine SUNW.Sun-Fire-880 SUNW.Netra-440 SUNW.Netra-240 SUNW.Sun-Fire-V240 SUNW.Sun-Fire-V440 SUNW.UltraAX-i2 SUNW.i86pc"');
&setup_jumpstart_conf("JS_CLIENT_MANAGEMENT", '"dhcp grub"');
#
&setup_dhcp_conf("DHCPDIR", "\"${JS_TOP_DIR}/media\"");
#
&setup_module_conf("explo", "explo_product_version", '"5.10"');
&setup_module_conf("explo", "explo_override_old_installs", '"yes"');
&setup_module_conf("explo", "explo_CRONTAB_RUN", '"yes"');
&setup_module_conf("explo", "explo_CRONTAB_HOUR", '"1"');
&setup_module_conf("explo", "explo_CRONTAB_MINUTE", '"1"');
&setup_module_conf("explo", "explo_CRONTAB_WEEKDAY", '"1"');
&setup_module_conf("explo", "explo_CONTRACT_ID", '"Unknown"');
&setup_module_conf("explo", "explo_CUSTOMER_NAME", '"Example Company"');
&setup_module_conf("explo", "explo_USER_NAME", '"Mark Ashley"');
&setup_module_conf("explo", "explo_USER_EMAIL", '"mark at ibiblio dot org"');
&setup_module_conf("explo", "explo_PHONE", '"+1-800-EAT-FOOD"');
&setup_module_conf("explo", "explo_ADDRESS_1", '"123 Smith St"');
&setup_module_conf("explo", "explo_ADDRESS_CITY", '"Sydney"');
&setup_module_conf("explo", "explo_ADDRESS_STATE", '"NSW"');
&setup_module_conf("explo", "explo_ADDRESS_COUNTRY", '"Australia"');
&setup_module_conf("explo", "explo_ADDRESS_ZIP", '"2000"');
&setup_module_conf("explo", "explo_RUN", '"Y"');
&setup_module_conf("explo", "explo_GEO", '"APAC"');
&setup_module_conf("explo", "explo_ADDRESS_COUNTRY_CODE", '"AU"');
&setup_explo_version;
#
&setup_base_conf("solaris", "base_config_sysidcfg_timeserver", '"192.168.100.14"');
#
&setup_base_conf("solariszone", "base_config_sysidcfg_nameservice", '"DNS { domain_name=test.example.com name_server=192.168.100.14 search=test.example.com }"');
&setup_base_conf("solariszone", "base_config_dns_domain", '"test.example.com"');
&setup_base_conf("solariszone", "base_config_dns_nameservers", '"192.168.100.14"');
&setup_base_conf("solariszone", "base_config_sysidcfg_timeserver", '"192.168.100.14"');
&setup_base_conf("solariszone", "base_config_dns_searchpath", '"test.example.com example.com"');
&setup_base_conf("solariszone", "base_config_enable_rootlogin", '"yes"');
&setup_base_conf("solariszone", "base_config_zone_whole_root_zone", '"yes"');
&setup_base_conf("solariszone", "custom_packages", '"SMCsudo"');
#
&setup_module_conf("zones", "zones_default_path", '"/data/zone"');
#
&setup_module_conf("sds", "sds_device_numbers", '"/:d10:d11:d12 /var:d20:d21:d22 /data:d30:d31:d32"');
#
&setup_module_conf("san", "san_product_version", '"default"');
#
&setup_module_conf("custom", "custom_packages", '"SMCsudo"');
if ($c_hostname eq "nsch1mang01") { # UAT only
    &setup_module_conf("custom", "custom_files", '"my_custom.tar:o:/var/tmp/my_custom.tar no_zone_sysidcfg:o:/var/tmp/no_zone_sysidcfg"');
    &setup_module_conf("custom", "custom_scripts_n", '"install_root_config install_sysadmin_config install_sudo_config"');
}
#
&setup_jumpstart_share($JS_TOP_DIR);
&add_post_zone_script;
#
&setup_host_conf("hostd01",     "base_config_sysidcfg_default_route", '"192.168.205.1"');
&setup_host_conf("hostd01",     "base_config_nodename",               '"hostd01"');
&setup_host_conf("hostd01",     "base_config_defaultrouter",          '"192.168.205.1"');
&setup_host_conf("hostd01",     "zones_names",                        '"hostd01-zone1"');
#
&setup_host_conf("hostd02",     "base_config_sysidcfg_default_route", '"192.168.205.1"');
&setup_host_conf("hostd02",     "base_config_nodename",               '"hostd02"');
&setup_host_conf("hostd02",     "base_config_defaultrouter",          '"192.168.205.1"');
&setup_host_conf("hostd02",     "zones_names",                        '"hostd02-zone1"');
#
&setup_host_conf("hosta01",     "base_config_client_allocation",      '"grub"');
&setup_host_conf("hosta01",     "base_config_sysidcfg_default_route", '"192.168.204.1"');
&setup_host_conf("hosta01",     "base_config_nodename",               '"hosta01"');
&setup_host_conf("hosta01",     "zones_names",                        '"hosta01-zone1 hosta01-zone2 hosta01-zone3 hosta01-zone4"');
&setup_host_conf("hosta01",     "base_config_ipmp_networkifs",        '"nge0_nge1 e1000g0_e1000g1"');
&setup_host_conf("hosta01",     "base_config_ipmp_networkif_nge0_nge1", '"ipmp0 sp 192.168.204.4 192.168.204.5 26 hosta01 192.168.204.6"');
&setup_host_conf("hosta01",     "base_config_ipmp_networkif_e1000g0_e1000g1", '"ipmp1 sp 192.168.105.35 192.168.105.36 27 hosta01-stor 192.168.105.37"');
#
&setup_host_conf("hosta01-zone1", "custom_packages",                    '""');
&setup_host_conf("hosta01-zone1", "base_config_nodename",               '"hosta01-zone1"');
&setup_host_conf("hosta01-zone2", "custom_packages",                    '""');
&setup_host_conf("hosta01-zone2", "base_config_nodename",               '"hosta01-zone2"');
&setup_host_conf("hosta01-zone3", "custom_packages",                    '""');
&setup_host_conf("hosta01-zone3", "base_config_nodename",               '"hosta01-zone3"');
&setup_host_conf("hosta01-zone4", "custom_packages",                    '""');
&setup_host_conf("hosta01-zone4", "base_config_nodename",               '"hosta01-zone4"');
# &setup_host_conf("hosta01-zone4", "base_config_networkifs",             '"nge0_5 255.255.255.192 hosta01-zone4 192.168.204.60"');
# &setup_host_conf("hosta01-zone1", "base_config_networkifs",             '"nge0_2 255.255.255.192 hosta01-zone1 192.168.204.7"');
# &setup_host_conf("hosta01-zone2", "base_config_networkifs",             '"nge0_3 255.255.255.192 hosta01-zone2 192.168.204.58"');
# &setup_host_conf("hosta01-zone3", "base_config_networkifs",             '"nge0_4 255.255.255.192 hosta01-zone3 192.168.204.59"');
#
&setup_host_conf("hostas1", "base_config_client_allocation",      '"grub"');
&setup_host_conf("hostas1", "base_config_sysidcfg_default_route", '"192.168.204.1"');
&setup_host_conf("hostas1", "base_config_nodename",               '"hostas1"');
&setup_host_conf("hostas1", "base_config_defaultrouter",          '"192.168.204.1"');
&setup_host_conf("hostas1", "zones_names", '"hostas1-svt hostas1-svt2"');
#
&setup_host_conf("hostf01", "base_config_sysidcfg_default_route",   '"192.168.174.65"');
&setup_host_conf("hostf01", "base_config_nodename",                 '"hostf01"');
&setup_host_conf("hostf01", "base_config_defaultrouter",            '"192.168.174.65"');
&setup_host_conf("hostf01", "zones_names", '"hostf01-zone1 hostf01-zone2 hostf01-zone3 hostf01-zone4"');
&setup_host_conf("hostf01", "base_config_ipmp_networkifs",          '"e1000g0_e1000g1 e1000g2_e1000g3"');
&setup_host_conf("hostf01", "base_config_ipmp_networkif_e1000g0_e1000g1", '"ipmp0 s 192.168.174.68 192.168.174.69 26 hostf01 192.168.174.70"');
&setup_host_conf("hostf01", "base_config_ipmp_networkif_e1000g2_e1000g3", '"ipmp1 s 192.168.105.3 192.168.105.4 27 hostf01-stor 192.168.105.5"');
&setup_host_conf("hostf01-zone1", "custom_packages",                  '""');
&setup_host_conf("hostf01-zone1", "base_config_nodename",             '"hostf01-zone1"');
# &setup_host_conf("hostf01-zone1", "base_config_networkifs",           '"e1000g0_2 255.255.255.192 hostf01-zone1 192.168.174.71"');
&setup_host_conf("hostf01-zone2", "custom_packages",                  '""');
&setup_host_conf("hostf01-zone2", "base_config_nodename",             '"hostf01-zone2"');
# &setup_host_conf("hostf01-zone2", "base_config_networkifs",           '"e1000g0_3 255.255.255.192 hostf01-zone2 192.168.174.122"');
&setup_host_conf("hostf01-zone3", "custom_packages",                  '""');
&setup_host_conf("hostf01-zone3", "base_config_nodename",             '"hostf01-zone3"');
# &setup_host_conf("hostf01-zone3", "base_config_networkifs",           '"e1000g0_4 255.255.255.192 hostf01-zone3 192.168.174.123"');
&setup_host_conf("hostf01-zone4", "custom_packages",                  '""');
&setup_host_conf("hostf01-zone4", "base_config_nodename",             '"hostf01-zone4"');
# &setup_host_conf("hostf01-zone4", "base_config_networkifs",           '"e1000g0_5 255.255.255.192 hostf01-zone4 192.168.174.124"');
#
chmod 0644, "/etc/hosts", "/etc/services", "/etc/passwd", "/etc/rpc";
chmod 0644, "/etc/group", "/etc/netmasks", "/etc/networks";
#
exit(0);

#############################################################################

sub create_dir {
    my ($dir, $uid, $gid) = @_;
    if (! -d $dir) { mkdir $dir, 0755; }
    chown $uid, $gid, $dir;
}

sub usage {
    print STDOUT "$0 -v : verbose output\n";
    print STDOUT "$0 -h : this help\n";
}

sub setup_jumpstart_conf { # Adjust settings for JET jumpstart.conf
    my ($var, $setting) = @_;
    &mod_file_value("${JET_TOP_DIR}/etc/jumpstart.conf", $var, $setting);
}

sub setup_dhcp_conf { # Adjust settings for JET dhcp.conf
    my ($var, $setting) = @_;
    &mod_file_value("${JET_TOP_DIR}/etc/dhcp.conf", $var, $setting);
}

sub setup_base_conf { # Tweak module values to Bigpond values
    my ($config, $var, $setting) = @_;
    if (! -d "${JET_TOP_DIR}/Products/base_config") {
        print STDOUT "WARNING: JET base_config module not present in ${JET_TOP_DIR}/Products\n";
        return;
    }
    if ($config eq "solaris") {
        &mod_file_value("${JET_TOP_DIR}/Products/base_config/solaris/base_config.conf", $var, $setting);
    }
    if ($config eq "solariszone") {
        &mod_file_value("${JET_TOP_DIR}/Products/base_config/solariszone/base_config.conf", $var, $setting);
    }
}

sub setup_module_conf { # Tweak module values to Bigpond values
    my ($module, $var, $setting) = @_;
    if (! -d "${JET_TOP_DIR}/Products/${module}") {
        print STDOUT "WARNING: JET ${module} module not present in ${JET_TOP_DIR}/Products\n";
        return;
    }
    &mod_file_value("${JET_TOP_DIR}/Products/${module}/${module}.conf", $var, $setting);
}

sub setup_host_conf { # Tweak host values to Bigpond values
    my ($host, $var, $setting) = @_;
    if (! -f "${JET_TOP_DIR}/Templates/${host}") {
        return;
    }
    my $done = &mod_file_value("${JET_TOP_DIR}/Templates/${host}", $var, $setting);
    if (! $done) {
        open(CONFNEW, ">>${JET_TOP_DIR}/Templates/${host}");
        print CONFNEW "${var}=${setting}\n";
        close(CONFNEW);
    }
}

sub mod_file_value {
    my ($file, $var, $setting) = @_;
    if (! -f $file) { return; }
    if ($debug) { print STDOUT "Editing ${file}\n"; }
    my $found = 0;
    open(CONF, $file);
    open(CONFNEW, ">${file}.temp");
    while (<CONF>) {
        if ($debug) { print STDOUT "conf: $_"; }
        if (/^${var}=/) { # Found our setting, fix it.
            print CONFNEW "${var}=${setting}\n";
            if ($debug) { print STDOUT "conf_fix: ${var}=${setting}\n"; }
            $found++;
        } else {
            print CONFNEW $_;
        }
    }
    close(CONF);
    close(CONFNEW);
    rename("${file}.temp", $file);
    chmod 0644, $file;
    return($found);
}

sub add_post_zone_script {
    my $found = 0;
    open(PI, "/opt/SUNWjet/Products/zones/postinstall");
    while (<PI>) {
        if (/no_zone_sysidcfg/) { $found++; }
    }
    close(PI);
    if (!$found) {
        open(PI, ">>/opt/SUNWjet/Products/zones/postinstall");
        print PI "/var/tmp/no_zone_sysidcfg\n";
    }
    close(PI);
}

sub setup_jumpstart_share { # Add NFS shares for jumpstart server
    my ($js_share) = @_;
    my $found_share = 0;
    open(DFSTAB, "/etc/dfs/dfstab");
    while (<DFSTAB>) {
        chomp;
        next if (/^#/);
        if ($debug) { print STDOUT "dfstab: $_\n"; }
        if (/ ${js_share}$/) {
            $found_share++;
            if ($debug) { print STDOUT "dfstab: found ${js_share} share\n"; }
        }
    }
    close(DFSTAB);
    if (! $found_share) {
        open(DFSTAB, ">>/etc/dfs/dfstab");
        print DFSTAB "share -F nfs -o ro,anon=0 ${js_share}\n";
        close(DFSTAB);
        `/usr/sbin/unshareall`;
        `/usr/sbin/shareall`;
    }
}

sub setup_explo_version { # Add current SUNWexplo version to explo package.matrix
    if (! -d "${JET_TOP_DIR}/Products/explo") {
        print STDOUT "WARNING: JET explo module not present in ${JET_TOP_DIR}/Products\n";
        return;
    }
    my $os_rev = `/bin/uname -r`;
    chomp($os_rev);
    my $explo_ver_found = 0;
    open(PKGMATRIX, "${JET_TOP_DIR}/Products/explo/package.matrix");
    while (<PKGMATRIX>) {
        chomp;
        if (/^${os_rev}:${explo_ver}:/) { $explo_ver_found++; }
    }
    close(PKGMATRIX);
    if (! $explo_ver_found) {
        open(PKGMATRIX, ">>${JET_TOP_DIR}/Products/explo/package.matrix");
        print PKGMATRIX "${os_rev}:${explo_ver}:SUNWexplo SUNWexplu\n";
        close(PKGMATRIX);
    }
}