From 181aa876a7212f8a332ec7a0d151c2688f93feb3 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 30 Mar 2023 16:36:40 -0400 Subject: [PATCH] Draft initramfs addons for Ubuntu 18 For older Ubuntu 18, the automated installer is debian-installer. Derive from the prototype debian work, with same limitation about more limited network bringup that we are stuck with from Debian limitations. --- .../S25confluentinit | 2 +- .../S25confluentinit | 164 ++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 confluent_osdeploy/ubuntu18.04/initramfs/lib/debian-installer-startup.d/S25confluentinit diff --git a/confluent_osdeploy/debian/initramfs/lib/debian-installer-startup.d/S25confluentinit b/confluent_osdeploy/debian/initramfs/lib/debian-installer-startup.d/S25confluentinit index 64859809..42f5ab97 100644 --- a/confluent_osdeploy/debian/initramfs/lib/debian-installer-startup.d/S25confluentinit +++ b/confluent_osdeploy/debian/initramfs/lib/debian-installer-startup.d/S25confluentinit @@ -69,7 +69,7 @@ if [ "$v4cfgmeth" = "static" ]; then for namesrv in "$namesrvs"; do setdebopt netcfg/get_nameservers $namesrv string done -elif [ "$vpcfgmeth" = "dhcp" ]; then +elif [ "$v4cfgmeth" = "dhcp" ]; then setdebopt netcfg/disable_dhcp false boolean setdebopt netcfg/confirm_static false boolean fi diff --git a/confluent_osdeploy/ubuntu18.04/initramfs/lib/debian-installer-startup.d/S25confluentinit b/confluent_osdeploy/ubuntu18.04/initramfs/lib/debian-installer-startup.d/S25confluentinit new file mode 100644 index 00000000..44156d36 --- /dev/null +++ b/confluent_osdeploy/ubuntu18.04/initramfs/lib/debian-installer-startup.d/S25confluentinit @@ -0,0 +1,164 @@ +reverse_uuid() { + echo $1 | head -c 8 | tail -c 2 + echo $1 | head -c 6 | tail -c 2 + echo $1 | head -c 4 | tail -c 2 + echo $1 | head -c 2 | tail -c 2 + echo $1 | head -c 13 | tail -c 2 + echo $1 | head -c 11 | tail -c 2 + echo $1 | head -c 18 | tail -c 2 + echo $1 | head -c 16 | tail -c 2 + echo $1 | tail -c 18 | sed -e s/-// +} +setdebopt() { + debconf-set $1 $2 + echo d-i $1 $3 $2 >> /preseed.cfg +} + +mkdir -p /etc/confluent +for i in /sys/class/net/*; do + ip link set $(basename $i) up +done +TRIES=5 +while [ ! -e /dev/disk ] && [ $TRIES -gt 0 ]; do + sleep 2 + TRIES=$((TRIES - 1)) +done +for i in /sys/class/net/*; do + ip link set $(basename $i) up +done +cp -a /tls/* /etc/ssl/certs/ +if [ -e /dev/disk/by-label/CNFLNT_IDNT ]; then + tmnt=$(mktemp -d) + tcfg=$(mktemp) + mount /dev/disk/by-label/CNFLNT_IDNT $tmnt + cd $tmnt + deploysrvs=$(sed -n '/^deploy_servers:/,/^[^-]/p' cnflnt.yml |grep ^-|sed -e 's/^- //'|grep -v :) + nodename=$(grep ^nodename: cnflnt.yml|cut -f 2 -d ' ') + sed -n '/^net_cfgs:/,/^[^- ]/{/^[^- ]/!p}' cnflnt.yml |sed -n '/^-/,/^-/{/^-/!p}'| sed -e 's/^[- ]*//'> $tcfg + autoconfigmethod=$(grep ^ipv4_method: $tcfg) + autoconfigmethod=${autoconfigmethod#ipv4_method: } + NICGUESS=$(ip link|grep LOWER_UP|grep -v LOOPBACK|cut -d ' ' -f 2 | sed -e 's/:$//'|head -n 1) + if [ "$autoconfigmethod" = "static" ]; then + setdebopt netcfg/disable_dhcp true boolean + v4addr=$(grep ^ipv4_address: $tcfg|cut -d: -f 2|sed -e 's/ //') + v4gw=$(grep ^ipv4_gateway: $tcfg|cut -d: -f 2| sed -e 's/ //') + if [ "$v4gw" = "null" ]; then + v4gw="" + fi + v4nm=$(grep ^ipv4_netmask: $tcfg|cut -d: -f 2|sed -e 's/ //') + setdebopt netcfg/get_netmask $v4nm string + setdebopt netcfg/get_ipaddress ${v4addr%/*} string + setdebopt netcfg/confirm_static true boolean + ip addr add dev $NICGUESS $v4addr + if [ ! -z "$v4gw" ]; then + setdebopt netcfg/get_gateway $v4gw string + ip route add default via $v4gw + fi + #TODO: nameservers + elif [ "$v4cfgmeth" = "dhcp" ]; then + setdebopt netcfg/disable_dhcp false boolean + setdebopt netcfg/confirm_static false boolean + udhcpc $NICGUESS + fi + mgr=$deploysrvs + ln -s /opt/confluent/bin/clortho /opt/confluent/bin/genpasshmac + hmackeyfile=/tmp/cnflnthmackeytmp + passfile=/tmp/cnflnttmppassfile + passcrypt=/tmp/cnflntcryptfile + hmacfile=/tmp/cnflnthmacfile + echo -n $(grep ^apitoken: cnflnt.yml|cut -d ' ' -f 2) > $hmackeyfile + wget --header="CONFLUENT_NODENAME: $nodename" --header="CONFLUENT_CRYPTHMAC: $(cat $hmacfile)" --post-file=$passcrypt https://$mgr/confluent-api/self/registerapikey -O - --quiet + rm registerapikey + cp $passfile /etc/confluent/confluent.apikey + nic=$NICGUESS +else + dhuuid=$(reverse_uuid $(cat /sys/devices/virtual/dmi/id/product_uuid)) + dhcpid=$(mktemp) + mkdir -p /etc/confluent + cp /tls/* /etc/ssl/certs/ + for nic in $(ip link | grep mtu|grep -v LOOPBACK|cut -d: -f 2|sed -e 's/ //'); do + ip link set $nic up + done + for nic in $(ip link | grep mtu|grep -v LOOPBACK|grep LOWER_UP|cut -d: -f 2|sed -e 's/ //'); do + if udhcpc -i $nic -p $dhcpid -t 2 -T 2 -n -x 93:0007 -x 97:00$dhuuid -q; then + /opt/confluent/bin/copernicus > /etc/confluent/confluent.info + if grep ^MANAGER:.*\\. /etc/confluent/confluent.info ; then + break + fi + fi + ip -4 flush dev $nic + done + mgr=$(grep ^MANAGER:.*\\. /etc/confluent/confluent.info|head -n 1|cut -d: -f 2|sed -e 's/ //') + nodename=$(grep ^NODENAME: /etc/confluent/confluent.info|head -n 1|cut -d: -f 2|sed -e 's/ //') + /opt/confluent/bin/clortho $nodename $mgr > /etc/confluent/confluent.apikey +fi +apikey=$(cat /etc/confluent/confluent.apikey) +cd /etc/confluent +wget --header="CONFLUENT_NODENAME: $nodename" --header="CONFLUENT_APIKEY: $apikey" https://$mgr/confluent-api/self/deploycfg +cd - +predir=$(mktemp -d) +cd $predir +profile=$(grep ^profile: /etc/confluent/deploycfg|cut -d ' ' -f 2) +namesrvs=$(sed -n '/^nameservers:/,/^[^-]/p' /etc/confluent/deploycfg|grep ^- | cut -d ' ' -f 2|sed -e 's/ //') +for namesrv in "$namesrvs"; do + setdebopt netcfg/get_nameservers $namesrv string +done +rootpass=$(grep ^rootpassword: /etc/confluent/deploycfg|cut -d ' ' -f 2|sed -e 's/ //') +if [ "$rootpass" = null ] || [ -z "$rootpass" ]; then + setdebopt passwd/root-login false boolean +else + setdebopt passwd/root-login true boolean + setdebopt passwd/root-password-crypted $rootpass string +fi +setdebopt time/zone $(grep ^timezone: /etc/confluent/deploycfg|cut -d ' ' -f 2|sed -e 's/ //') string +ntpsrvs=$(sed -n '/^ntpservers:/,/^[^-]/p' /etc/confluent/deploycfg|grep ^- | cut -d ' ' -f 2|sed -e 's/ //') +for ntpsrv in "$ntpsrvs"; do + setdebopt clock-setup/ntp true boolean + setdebopt clock-setup/ntep-server $ntpsrv string +done +setdebopt debian-installer/locale $(grep ^locale: /etc/confluent/deploycfg|cut -d ' ' -f 2) select +domainname=$(grep ^dnsdomain: /etc/confluent/deploycfg|cut -d ' ' -f 2) +if [ ! -z "$domainname" ] && [ "$domainname" != "null" ]; then + setdebopt netcfg/get_domain $domainname string +fi + + + + +wget https://$mgr/confluent-public/os/$profile/scripts/pre.sh +chmod u+x pre.sh +wget https://$mgr/confluent-public/os/$profile/preseed.cfg +cat preseed.cfg >> /preseed.cfg +setdebopt auto-install/enable true boolean +setdebopt partman/early_command $predir/pre.sh string +cd - +ip -4 a flush dev $nic +setdebopt netcfg/choose_interface $nic select +setdebopt netcfg/get_hostname $nodename string +if [ ! -e /dev/disk/by-label/CNFLNT_IDNT ]; then + v4cfgmeth=$(grep ipv4_method: /etc/confluent/deploycfg |cut -d: -f 2|sed -e 's/ //') + if [ "$v4cfgmeth" = "static" ]; then + setdebopt netcfg/disable_dhcp true boolean + v4addr=$(grep ^ipv4_address: /etc/confluent/deploycfg|cut -d: -f 2|sed -e 's/ //') + v4gw=$(grep ^ipv4_gateway: /etc/confluent/deploycfg|cut -d: -f 2| sed -e 's/ //') + if [ "$v4gw" = "null" ]; then + v4gw="" + fi + v4nm=$(grep ^ipv4_netmask: /etc/confluent/deploycfg|cut -d: -f 2|sed -e 's/ //') + setdebopt netcfg/get_netmask $v4nm string + setdebopt netcfg/get_ipaddress $v4addr string + setdebopt netcfg/confirm_static true boolean + if [ ! -z "$v4gw" ]; then + setdebopt netcfg/get_gateway $v4gw string + fi + namesrvs=$(sed -n '/^nameservers:/,/^[^-]/p' /etc/confluent/deploycfg|grep ^- | cut -d ' ' -f 2|sed -e 's/ //') + for namesrv in "$namesrvs"; do + setdebopt netcfg/get_nameservers $namesrv string + done + elif [ "$vpcfgmeth" = "dhcp" ]; then + setdebopt netcfg/disable_dhcp false boolean + setdebopt netcfg/confirm_static false boolean + fi +fi + +