Skip to content

Instantly share code, notes, and snippets.

@sjpi
Forked from spheromak/boot_setup.sh
Created July 25, 2021 16:28
Show Gist options
  • Save sjpi/7097bab1711cff2ef88e55b9727e3e70 to your computer and use it in GitHub Desktop.
Save sjpi/7097bab1711cff2ef88e55b9727e3e70 to your computer and use it in GitHub Desktop.

Revisions

  1. @spheromak spheromak created this gist Jun 20, 2012.
    117 changes: 117 additions & 0 deletions boot_setup.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,117 @@
    #!/bin/bash
    # vim: set tabstop=2 noexpandtab:
    # Jesse Nelson <[email protected]>
    #
    # Custom setup script to init early networking after VM initialization
    # This script should be run before network init scripts as it preps the network
    #
    # The idea is to pass down ip config settings through boot params so that this
    # script can configure the network on first boot Anaconda will take care of this
    # on machines that are kickstarted, but this lets us just be 100%
    #
    # if no ipaddress is given then the box will setup as dhcp
    #
    # only eth0 will be setup further network setup should be dealt with by chef
    # higher up the stack
    #
    # Kernel Boot Paramaters:
    #-------------------------------------------------------------------------------
    # no_autoconfig: (nil) If set this scirpt will exit immediately
    # ip: (nil) Sets the boxes ip address in ifcfg-eth0
    # netmask: (nil) same for netmask
    # gateway: (nil) same for gateway
    # hostname: (nil) Sets up the hostname in /etc/sysconfig/network
    # dnsdomain: (nil) Sets domain in /etc/sysconfig/network
    # run_list: (nil) Set the chef run_list
    # environemnt: (boot) Set the chef environment
    # ipv6 (No) enable/disable ipv6
    #
    #-------------------------------------------------------------------------------

    # parse kernel boot args and eval them here
    for o in `cat /proc/cmdline` ; do
    case $o in
    no_autoconfig=*) no_autoconfig=${o#no_autoconfig=} ;;
    ip=*) ip=${o#ip=} ;;
    netmask=*) netmask=${o#netmask=} ;;
    gateway=*) gateway=${o#gateway=} ;;
    hostname=*) hostname=${o#hostname=} ;;
    dnsdomain=*) dnsdomain=${o#dnsdomain=} ;;
    run_list=*) run_list=${o#run_list=} ;;
    environment=*) environment=${o#environment} ;;
    ipv6=*) ipv6=${o#ipv6} ;;
    esac
    done
    # set defaults for some vars

    echo "Boot_setup Kernel params:"
    echo "ip: $ip"
    echo "netmask: $netmask"
    echo "gateway: $gateway"
    echo "hostname: $hostname"
    echo "domain: $dnsdomain"
    echo "ipv6: $ipv6"
    echo "run_list: $run_list"
    echo "envioronment: $environment"


    # bail if were asked not to touch the box
    # this handy when developing these scripts on images :D
    if [ -n "$no_autoconfig" ] ; then
    echo "Auto Configuration disabled by bootparam no_autoconfig"
    exit 1
    fi

    function cleanup() {
    rm -f /etc/rc3.d/S01boot_setup
    }

    case $ipv6 in
    yes) ipv6="yes" ;;
    *) ipv6="no" ;;
    esac

    if [ -z $dnsdomain ] ; then
    $dnsdomain="unknown.local"
    fi


    # setup top level network things
    cat > /etc/sysconfig/network <<-EOF
    NETWORKING=yes
    NETWORKING_IPV6=$ipv6
    HOSTNAME=$hostname
    DOMAINNAME=$dnsdomain
    EOF


    # if we are dhcp
    if [ -z $ip ] ; then
    cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
    DEVICE=eth0
    BOOTPROTO=dhcp
    DHCP_HOSTNAME=$hostname
    EOF
    cleanup
    exit
    fi


    # hook up proper resolv.conf
    # chef should fix it as well. this is just enough to get running
    cat > /etc/resolv.conf <<-EOF
    domain $dnsdomain
    search $dnsdomain
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    EOF
    domainname $dnsdomain

    cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-EOF
    DEVICE=eth0
    IPADDR=$ip
    NETMASK=$netmask
    GATEWAY=$gateway
    EOF
    cleanup
    exit