Rod Smith has proposed merging ~rodsmith/maas-cert-server:update-maniacs-setup-for-2204 into maas-cert-server:master.
Commit message: Update maniacs-setup for Ubuntu 22.04 Requested reviews: hardware-certification-users (hardware-certification) For more details, see: https://code.launchpad.net/~rodsmith/maas-cert-server/+git/maas-cert-server/+merge/431157 This updates maniacs-setup for Ubuntu 22.04, including: * Changes to packaging, since MAAS is now snap-only * The script installs the MAAS snap if it's not already installed * Miscellaneous changes to the script to work with MAAS 3.2.6 & Ubuntu 22.04 * Fixed the easiest of the complaints that shellcheck has about the script To test the script: 1) Get an updated package (it can't be tested with an earlier package); either: * Get the repo via git and package it yourself; or * Get the package I made at https://drive.google.com/file/d/15Pw4dlv7vq6uawTUjMa8Q5i91N-49U8u/view?usp=sharing 2) Follow the MANIACS guide; but.... 1) Use Ubuntu 22.04 2) After adding the certification PPA, install the downloaded package rather than the maas-cert-server package via the PPA 3) Do a "snap install maas" (or let the script do it) 4) Ignore the MANIACS guide's advice to install MAAS via a Debian package; it must now be installed via a snap. 5) Run maniacs-setup normally. 6) Because it's now installing from a snap, you'll be asked for a password for PostgresQL. This is expected. 7) Hope it all works! (I may have forgotten something. I'm working on documentation next....) -- Your team hardware-certification-users is requested to review the proposed merge of ~rodsmith/maas-cert-server:update-maniacs-setup-for-2204 into maas-cert-server:master.
diff --git a/debian/changelog b/debian/changelog index 102e899..c2a9691 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +maas-cert-server (0.6.9-0ppa1) jammy; urgency=medium + +* Update for Ubuntu 22.04 + + -- Rod Smith <[email protected]> Thu, 06 Oct 2022 15:16:10 -0400 + maas-cert-server (0.6.8-0ppa1) focal; urgency=medium * Fix build problem on jammy pre-release diff --git a/debian/control b/debian/control index 9a94892..ab089a5 100644 --- a/debian/control +++ b/debian/control @@ -11,7 +11,7 @@ Homepage: https://launchpad.net/maas-cert-server Package: maas-cert-server Architecture: all -Depends: ${misc:Depends}, amtterm, apache2, apt-mirror, certification-docs, certification-tools, distro-info, ipcalc, iperf, iperf3, jshon, maas (>= 2.1), maas-region-api, net-tools, network-manager, postgresql, python3, wsmancli +Depends: ${misc:Depends}, apache2, apt-mirror, certification-docs, certification-tools, distro-info, ipcalc, iperf, iperf3, jshon, net-tools, network-manager, postgresql, python3, wsmancli Description: Ubuntu certification support files for MAAS server Support files used on a MAAS server configured for use in Ubuntu server certification tasks. diff --git a/usr/sbin/maniacs-setup b/usr/sbin/maniacs-setup index 504360b..d507888 100755 --- a/usr/sbin/maniacs-setup +++ b/usr/sbin/maniacs-setup @@ -35,7 +35,6 @@ get_params() { DOWNLOAD_VIRTUALIZATION_IMAGE=0 IMPORT_BOOT_RESOURCES=0 MIRROR_ARCHIVES=0 - UPDATE_POINT_RELEASES=0 UPDATE_PRESEEDS=0 UPDATE_REPOSITORIES=0 while [[ $# -gt 0 ]]; do @@ -87,7 +86,7 @@ get_yn() { echo -n " (y/N)? " fi local answer - read answer + read -r answer if [ -z "$answer" ] ; then YN=$default else @@ -124,10 +123,10 @@ get_release_info() { check_set_progress() { local mystatus=incomplete # Is our current op already in the tracker? - if [ `grep $1 $PROGRESS_TRACKER` ] ; then + if [ "$(grep "$1" "$PROGRESS_TRACKER")" ] ; then mystatus=completed else - echo $1 >> $PROGRESS_TRACKER + echo "$1" >> "$PROGRESS_TRACKER" fi echo "$mystatus" @@ -138,34 +137,34 @@ setup_globals() { # configured, and information on internal and external ports is in # /etc/maas-cert-server/config; but set some defaults here in case # the config file is missing. May automate this in a later version.... - INSTALLED_RELEASE=`lsb_release -c |awk '{print $2}'` + INSTALLED_RELEASE=$(lsb_release -c |awk '{print $2}') INTERNAL_NET=eth0 EXTERNAL_NET=eth1 MCS_DATA=$HOME/.maas-cert-server PROGRESS_TRACKER=$MCS_DATA/progress MIRROR_TRACKER=$MCS_DATA/apt-mirror.out RERUN=no - DEFAULT_USER=`getent passwd | awk -v val=1000 -F ":" '$3==val{print $1}'` + DEFAULT_USER=$(getent passwd | awk -v val=1000 -F ":" '$3==val{print $1}') if [ -z "$DEFAULT_USER" ] ; then echo "The default user (who must have a UID of 1000) can't be determined!" echo "Exiting!" exit 1 fi - DEFAULT_USERDIR=`eval echo ~$DEFAULT_USER` + DEFAULT_USERDIR="$(eval echo ~"$DEFAULT_USER")" MIRROR_HOME="/srv/mirrors" # Make an attempt to get original upstream in case we've previously # configured this machine to use a local mirror. if [ -e /etc/apt/sources.list.save ]; then - MIRROR_FROM_ARCHIVE=`grep -v -e cdrom -e extras -e deb-src -e "#" /etc/apt/sources.list.save | grep "main" | head -n1 | cut -d " " -f 2` + MIRROR_FROM_ARCHIVE=$(grep -v -e cdrom -e extras -e deb-src -e "#" /etc/apt/sources.list.save | grep "main" | head -n1 | cut -d " " -f 2) else - MIRROR_FROM_ARCHIVE=`grep -v -e cdrom -e extras -e deb-src -e "#" /etc/apt/sources.list | grep "main" | head -n1 | cut -d " " -f 2` + MIRROR_FROM_ARCHIVE=$(grep -v -e cdrom -e extras -e deb-src -e "#" /etc/apt/sources.list | grep "main" | head -n1 | cut -d " " -f 2) fi - MIRROR_HOSTNAME=`echo $MIRROR_FROM_ARCHIVE | cut -f3 -d "/"` + MIRROR_HOSTNAME=$(echo "$MIRROR_FROM_ARCHIVE" | cut -f3 -d "/") MIRROR_LIST="$MIRROR_HOME/mirror.list" ARCHIVE_MIRROR="$MIRROR_HOME/archive" # Below is URL given to nodes; it's also verified by the user later. DEFAULT_REPO_URL=$MIRROR_FROM_ARCHIVE - SUPPORTED_RELEASES=`distro-info --supported` + SUPPORTED_RELEASES=$(distro-info --supported) CLOUD_ARCHES="amd64 i386 arm64 armhf ppc64el s390x" CLOUD_MIRROR="$MIRROR_HOME/cloud" RETRY=10 @@ -200,16 +199,16 @@ setup_globals() { } setup_progress_tracker() { - if [ ! -d $MCS_DATA ] ; then - mkdir $MCS_DATA + if [ ! -d "$MCS_DATA" ] ; then + mkdir "$MCS_DATA" fi - if [ ! -e $PROGRESS_TRACKER ] ; then - touch $PROGRESS_TRACKER + if [ ! -e "$PROGRESS_TRACKER" ] ; then + touch "$PROGRESS_TRACKER" fi } setup_network_addresses() { - local internal_with_route=`route | grep default | grep $INTERNAL_NET` + local internal_with_route=$(route | grep default | grep $INTERNAL_NET) if [ ! -z "$internal_with_route" ] ; then echo "Your default route goes through $INTERNAL_NET, but you've set INTERNAL_NET" echo "to $INTERNAL_NET in /etc/maas-cert-server/config. Your internal network" @@ -217,11 +216,11 @@ setup_network_addresses() { exit 1 fi - INTERNAL_IP=`ip -4 addr show $INTERNAL_NET | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f1` - INTERNAL_BROADCAST=`ip -4 addr show $INTERNAL_NET | grep inet | tr -s " " | cut -d" " -f5` - INTERNAL_NETMASK=`ip -4 addr show $INTERNAL_NET | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f2` - INTERNAL_NETSTART=`ipcalc -n $INTERNAL_IP/$INTERNAL_NETMASK | grep Network | tr -s " " | cut -d " " -f 2 | cut -d "/" -f 1` - EXTERNAL_IP=`ip -4 addr show $EXTERNAL_NET | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f1` + INTERNAL_IP=$(ip -4 addr show "$INTERNAL_NET" | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f1) + INTERNAL_BROADCAST=$(ip -4 addr show "$INTERNAL_NET" | grep inet | tr -s " " | cut -d" " -f5) + INTERNAL_NETMASK=$(ip -4 addr show "$INTERNAL_NET" | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f2) + INTERNAL_NETSTART=$(ipcalc -n "$INTERNAL_IP"/"$INTERNAL_NETMASK" | grep Network | tr -s " " | cut -d " " -f 2 | cut -d "/" -f 1) + EXTERNAL_IP=$(ip -4 addr show "$EXTERNAL_NET" | grep inet | tr -s " " | cut -d" " -f3 | cut -d"/" -f1) MAAS_URL="http://$INTERNAL_IP:5240/MAAS" if [ -z "$INTERNAL_IP" ] ; then echo "The internal ($INTERNAL_NET) IP address can't be found; exiting!" @@ -313,7 +312,7 @@ setup_postgresql() { reconfigure_controllers() { echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* Region and Cluster controllers have previously been reconfigured." RERUN=yes return @@ -335,10 +334,10 @@ ensure_running() { local job="$1" local count=1 while true; do - if (service $job status | grep -qs "running"); then + if (service "$job" status | grep -qs "running"); then break fi - invoke-rc.d $job start + invoke-rc.d "$job" start sleep 1 count=$((count+1)) if [ $count -gt $RETRY ]; then @@ -382,7 +381,7 @@ setup_maas_admin() { # so ignore errors for idempotence echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* MAAS Admin user has already been created for $DEFAULT_USER." RERUN=yes return @@ -393,7 +392,7 @@ setup_maas_admin() { get_password echo "* Setting up the $DEFAULT_USER MAAS account using the supplied password" if [ $USE_SNAPS == "1" ] ; then - maas init --mode=region+rack \ + maas init region+rack \ --maas-url="$MAAS_URL" \ --database-uri="postgres://maas:[email protected]/maasdb" \ --admin-password="$PASSWORD" \ @@ -406,23 +405,23 @@ setup_maas_admin() { setup_ssh_keys() { echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* SSH Keys have already been created for $DEFAULT_USER." RERUN=yes return fi local create="create" echo "* Setting up SSH keys for $DEFAULT_USER" - if [ ! -e $DEFAULT_USERDIR/.ssh/id_rsa ]; then - su -l $DEFAULT_USER -c "ssh-keygen -N '' -f $DEFAULT_USERDIR/.ssh/id_rsa > /dev/null" + if [ ! -e "$DEFAULT_USERDIR"/.ssh/id_rsa ]; then + su -l "$DEFAULT_USER" -c "ssh-keygen -N '' -f $DEFAULT_USERDIR/.ssh/id_rsa > /dev/null" fi - maas admin sshkeys $create key="$(cat /$DEFAULT_USERDIR/.ssh/id_rsa.pub)" > /dev/null || true - if [ -f $DEFAULT_USERDIR/.ssh/authorized_keys ] ; then + maas admin sshkeys "$create" key="$(cat /"$DEFAULT_USERDIR"/.ssh/id_rsa.pub)" > /dev/null || true + if [ -f "$DEFAULT_USERDIR"/.ssh/authorized_keys ] ; then echo "* Adding keys in $DEFAULT_USERDIR/.ssh/authorized_keys" local line - while read line ; do + while read -r line ; do maas admin sshkeys $create key="$line" > /dev/null || true - done < $DEFAULT_USERDIR/.ssh/authorized_keys + done < "$DEFAULT_USERDIR"/.ssh/authorized_keys fi if [ -f /etc/ssh/ssh_config ] ; then sed -i '/StrictHostKeyChecking/d' /etc/ssh/ssh_config @@ -432,16 +431,17 @@ setup_ssh_keys() { write_starting_mirror_config() { + base_path="/var/spool/apt-mirror" echo "############# config ##################" > $MIRROR_LIST echo "#" >> $MIRROR_LIST echo "# set base_path /var/spool/apt-mirror" >> $MIRROR_LIST echo "#" >> $MIRROR_LIST - echo '# set mirror_path $base_path/mirror' >> $MIRROR_LIST - echo '# set skel_path $base_path/skel' >> $MIRROR_LIST - echo '# set var_path $base_path/var' >> $MIRROR_LIST - echo '# set cleanscript $var_path/clean.sh' >> $MIRROR_LIST + echo "# set mirror_path $base_path/mirror" >> $MIRROR_LIST + echo "# set skel_path $base_path/skel" >> $MIRROR_LIST + echo "# set var_path $base_path/var" >> $MIRROR_LIST + echo "# set cleanscript $base_path/var/clean.sh" >> $MIRROR_LIST echo "# set defaultarch <running host architecture>" >> $MIRROR_LIST - echo '# set postmirror_script $var_path/postmirror.sh' >> $MIRROR_LIST + echo "# set postmirror_script $base_path/var/postmirror.sh" >> $MIRROR_LIST echo "# set run_postmirror 0" >> $MIRROR_LIST echo "set nthreads 20" >> $MIRROR_LIST echo "set _tilde 0" >> $MIRROR_LIST @@ -469,13 +469,13 @@ write_partial_mirror_config() { write_closing_mirror_config() { - echo >> $MIRROR_LIST - echo "## Clean up archives" >> $MIRROR_LIST - echo >> $MIRROR_LIST - echo "clean $MIRROR_FROM_ARCHIVE" >> $MIRROR_LIST - echo "clean http://ppa.launchpad.net/hardware-certification/public/ubuntu" >> $MIRROR_LIST - echo "clean http://ppa.launchpad.net/checkbox-dev/ppa/ubuntu" >> $MIRROR_LIST - echo "clean http://ppa.launchpad.net/firmware-testing-team/ppa-fwts-stable/ubuntu" >> $MIRROR_LIST + echo >> "$MIRROR_LIST" + echo "## Clean up archives" >> "$MIRROR_LIST" + echo >> "$MIRROR_LIST" + echo "clean $MIRROR_FROM_ARCHIVE" >> "$MIRROR_LIST" + echo "clean http://ppa.launchpad.net/hardware-certification/public/ubuntu" >> "$MIRROR_LIST" + echo "clean http://ppa.launchpad.net/checkbox-dev/ppa/ubuntu" >> "$MIRROR_LIST" + echo "clean http://ppa.launchpad.net/firmware-testing-team/ppa-fwts-stable/ubuntu" >> "$MIRROR_LIST" } @@ -530,16 +530,16 @@ mirror_archive() { if [ $YN = "N" ] ; then echo "*" echo -n "* Enter the correct archive site URL: " - read MIRROR_FROM_ARCHIVE - MIRROR_HOSTNAME=`echo $MIRROR_FROM_ARCHIVE | cut -f3 -d "/"` + read -r MIRROR_FROM_ARCHIVE + MIRROR_HOSTNAME=$(echo "$MIRROR_FROM_ARCHIVE" | cut -f3 -d "/") else if [[ "$MIRROR_FROM_ARCHIVE" =~ "localhost" ]]; then echo "* WARNING: System is configured to use local mirror, you must specify a valid" echo "* Upstream URL for an archive to mirror" echo "*" echo -n "* Enter the correct archive site URL: " - read MIRROR_FROM_ARCHIVE - MIRROR_HOSTNAME=`echo $MIRROR_FROM_ARCHIVE | cut -f3 -d "/"` + read -r MIRROR_FROM_ARCHIVE + MIRROR_HOSTNAME=$(echo "$MIRROR_FROM_ARCHIVE" | cut -f3 -d "/") fi fi done @@ -573,7 +573,7 @@ mirror_archive() { # get installed on 64-bit systems; src is needed because default # /etc/apt/sources.list file refers to it. for architecture in amd64 i386 src ; do - write_partial_mirror_config $release $architecture + write_partial_mirror_config "$release" "$architecture" done done write_closing_mirror_config @@ -587,16 +587,16 @@ mirror_archive() { echo "* Creating archive mirror in the background. Check $MIRROR_TRACKER" echo "* for status information." echo "*" - mkdir -p $MCS_DATA - (apt-mirror &> $MCS_DATA/apt-mirror.out; chown -R www-data:www-data $ARCHIVE_MIRROR/mirror/*; echo -e "Archive Mirror Action from MAAS Setup is now complete.\nYou should now be able to successfully deploy systems." |wall) & + mkdir -p "$MCS_DATA" + (apt-mirror &> "$MCS_DATA"/apt-mirror.out; chown -R www-data:www-data "$ARCHIVE_MIRROR"/mirror/*; echo -e "Archive Mirror Action from MAAS Setup is now complete.\nYou should now be able to successfully deploy systems." |wall) & echo "*" echo "* Mirror operation begun." echo "*" echo "* You will recieve a message on this console when the mirror" echo "* operation is complete. Once complete, running" echo "* $ARCHIVE_MIRROR/var/clean.sh can free up some disk space." - ln -sf $ARCHIVE_MIRROR/mirror/$MIRROR_HOSTNAME/ubuntu /var/www/html/ubuntu - ln -sf `find $ARCHIVE_MIRROR/mirror/ppa.launchpad.net/ -maxdepth 1 -mindepth 1 -type d` /var/www/html/ + ln -sf "$ARCHIVE_MIRROR"/mirror/"$MIRROR_HOSTNAME"/ubuntu /var/www/html/ubuntu + ln -sf "$(find "$ARCHIVE_MIRROR"/mirror/ppa.launchpad.net/ -maxdepth 1 -mindepth 1 -type d)" /var/www/html/ [ -e $ARCHIVE_MIRROR/mirror/maas.ubuntu.com ] && ln -sf $ARCHIVE_MIRROR/mirror/maas.ubuntu.com /var/www/html/ MIRRORED=1 echo "*" @@ -610,7 +610,7 @@ mirror_archive() { echo "*" if [ "$USE_LOCAL_MIRROR" = "Y" ] ; then - sed -i s/$original_apt_source/localhost/g /etc/apt/sources.list + sed -i s/"$original_apt_source"/localhost/g /etc/apt/sources.list apt-get update fi DEFAULT_REPO_URL="http://$INTERNAL_IP/ubuntu" @@ -653,7 +653,7 @@ retrieve_virtualization_image() { fi for release in $SUPPORTED_RELEASES; do local default_response="N" - if [ "$release" == `distro-info --lts` ] ; then + if [ "$release" == "$(distro-info --lts)" ] ; then default_response="Y" fi get_yn "* Do you want to get images for $release release" "$default_response" @@ -682,25 +682,24 @@ retrieve_virtualization_image() { # fail for each release. echo "*" for arch in $get_arches; do - local got_it="N" echo "* Downloading images for $release on $arch in the background...." # Cloud Images if [ "$arch" == "arm64" ] || [ "$arch" == "armhf" ] ; then - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch.tar.gz -o $MCS_DATA/cloudimg-dl-$release-$arch.log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch".tar.gz -o "$MCS_DATA"/cloudimg-dl-"$release"-"$arch".log & else - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch.img -o $MCS_DATA/cloudimg-dl-$release-$arch.log & - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch-disk1.img -o $MCS_DATA/cloudimg-disk1-dl-$release-$arch.log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch".img -o "$MCS_DATA"/cloudimg-dl-"$release"-"$arch".log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch"-disk1.img -o "$MCS_DATA"/cloudimg-disk1-dl-"$release"-"$arch".log & fi # LXD Container Images - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch-lxd.tar.xz -o $MCS_DATA/cloudimg-lxd-dl-$release-$arch.log & - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch-root.tar.xz -o $MCS_DATA/cloudimg-root-dl-$release-$arch.log & - wget -nH -P $CLOUD_MIRROR --timestamping --convert-links \ - http://cloud-images.ubuntu.com/$release/current/$release-server-cloudimg-$arch.squashfs -o $MCS_DATA/cloudimg-squashfs-dl-$release-$arch.log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch"-lxd.tar.xz -o "$MCS_DATA"/cloudimg-lxd-dl-"$release"-"$arch".log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch"-root.tar.xz -o "$MCS_DATA"/cloudimg-root-dl-"$release"-"$arch".log & + wget -nH -P "$CLOUD_MIRROR" --timestamping --convert-links \ + http://cloud-images.ubuntu.com/"$release"/current/"$release"-server-cloudimg-"$arch".squashfs -o "$MCS_DATA"/cloudimg-squashfs-dl-"$release"-"$arch".log & done done set -e @@ -721,7 +720,7 @@ retrieve_virtualization_image() { setup_nat() { echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* NAT has already been configured." RERUN=yes return @@ -747,7 +746,7 @@ setup_nat() { fi set +e iptables -L &> /dev/null - if [ $? != 0 ] ; then + if [ "$?" != 0 ] ; then echo "* WARNING: There is a problem with the iptables/NAT configuration!" echo "* This must be investigated and fixed before MAAS will be able to" echo "* commission or deploy nodes!" @@ -761,27 +760,27 @@ setup_nat() { setup_ip_ranges() { echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* MAAS network ranges have already been configured." RERUN=yes return fi - local internal24=`echo $INTERNAL_IP | cut -d "." -f 1-3` - local internal16=`echo $INTERNAL_IP | cut -d "." -f 1-2` - local third_octet=`echo $INTERNAL_IP | cut -d "." -f 3` - let local third_octet_plus1=$third_octet+1 - let local third_octet_plus2=$third_octet+2 - let local third_octet_plus3=$third_octet+3 - local cidr=`ipcalc -n $INTERNAL_IP/$INTERNAL_NETMASK | grep Netmask | tr -s " " | cut -d " " -f4` + local internal24=$(echo "$INTERNAL_IP" | cut -d "." -f 1-3) + local internal16=$(echo "$INTERNAL_IP" | cut -d "." -f 1-2) + local third_octet=$(echo "$INTERNAL_IP" | cut -d "." -f 3) + let local third_octet_plus1="$third_octet"+1 + let local third_octet_plus2="$third_octet"+2 + let local third_octet_plus3="$third_octet"+3 + local cidr=$(ipcalc -n "$INTERNAL_IP"/"$INTERNAL_NETMASK" | grep Netmask | tr -s " " | cut -d " " -f4) if [ -z "$cidr" ] ; then local is_valid=false local numbers='^[0-9]+$' - while [ $is_valid != true ] ; do + while [ "$is_valid" != true ] ; do echo -n "* Could not compute the CIDR netmask! Please enter it here (1-31): " - read cidr - if [[ $cidr =~ $numbers ]] ; then - if [ $cidr -gt 0 ] && [ $cidr -lt 32 ] ; then + read -r cidr + if [[ "$cidr" =~ $numbers ]] ; then + if [ "$cidr" -gt 0 ] && [ "$cidr" -lt 32 ] ; then is_valid=true fi fi @@ -792,7 +791,7 @@ setup_ip_ranges() { # * A range managed by DHCP (set explicitly) # * A reserved range NOT used by MAAS (set explicitly) # * A range used by MAAS for "auto-assign" addresses (everything not set explicitly) - if [ $cidr -gt 24 ] ; then + if [ "$cidr" -gt 24 ] ; then echo "* Your internal network has too few addresses; please specify the values" echo "* for two IP address ranges: reserved (never used by MAAS) and DHCP" echo "* (used by MAAS with DHCP). Note that a third range is implicit -- those" @@ -800,15 +799,15 @@ setup_ip_ranges() { echo "* range is used by MAAS for auto-assigned static addresses." echo "*" echo -n "* Low IP address for reserved addresses: " - read RESERVED_RANGE_LOW + read -r RESERVED_RANGE_LOW echo -n "* High IP address for reserved addresses: " - read RESERVED_RANGE_HIGH + read -r RESERVED_RANGE_HIGH echo -n "* Low IP address for DHCP addresses: " - read DHCP_RANGE_LOW + read -r DHCP_RANGE_LOW echo -n "* High IP address for DHCP addresses: " - read DHCP_RANGE_HIGH + read -r DHCP_RANGE_HIGH else - if [ $cidr = 24 ] ; then + if [ "$cidr" = 24 ] ; then RESERVED_RANGE_LOW="$internal24.1" RESERVED_RANGE_HIGH="$internal24.9" DHCP_RANGE_LOW="$internal24.10" @@ -816,7 +815,7 @@ setup_ip_ranges() { AUTO_ASSIGN_LOW="$internal24.128" AUTO_ASSIGN_HIGH="$internal24.254" fi - if [ $cidr = 23 ] ; then + if [ "$cidr" = 23 ] ; then RESERVED_RANGE_LOW="$internal24.1" RESERVED_RANGE_HIGH="$internal24.50" DHCP_RANGE_LOW="$internal24.51" @@ -824,7 +823,7 @@ setup_ip_ranges() { AUTO_ASSIGN_LOW="$internal16.$third_octet_plus1.0" AUTO_ASSIGN_HIGH="$internal16.$third_octet_plus1.254" fi - if [ $cidr -lt 23 ] ; then + if [ "$cidr" -lt 23 ] ; then RESERVED_RANGE_LOW="$internal24.1" RESERVED_RANGE_HIGH="$internal24.255" DHCP_RANGE_LOW="$internal16.$third_octet_plus1.0" @@ -842,16 +841,16 @@ setup_ip_ranges() { echo "* Low auto-assign IP address (implicit) = $AUTO_ASSIGN_LOW" echo "* High auto-assign IP address (implicit) = $AUTO_ASSIGN_HIGH" - local RANGES=`maas admin ipranges read | grep end_ip` + local RANGES=$(maas admin ipranges read | grep end_ip) if [ -z "$RANGES" ] ; then echo "* Initializing rack controller" - maas admin ipranges create type=dynamic start_ip=$DHCP_RANGE_LOW end_ip=$DHCP_RANGE_HIGH > /dev/null - maas admin ipranges create type=reserved start_ip=$RESERVED_RANGE_LOW end_ip=$RESERVED_RANGE_HIGH > /dev/null - INTERNAL_FABRIC=`maas admin ipranges read | jshon -a -e subnet -e vlan -e fabric | tr -d '"' | head -n 1` - PRIMARY_RACK=`maas admin rack-controllers read | jshon -a -e hostname | tr -d '"'` - maas admin vlan update $INTERNAL_FABRIC untagged dhcp_on=True primary_rack=$PRIMARY_RACK > /dev/null - local SUBNET_ID=`maas admin ipranges read | jshon -a -e subnet -e id | head -n 1` - maas admin subnet update $SUBNET_ID gateway_ip=$INTERNAL_IP + maas admin ipranges create type=dynamic start_ip="$DHCP_RANGE_LOW" end_ip="$DHCP_RANGE_HIGH" > /dev/null + maas admin ipranges create type=reserved start_ip="$RESERVED_RANGE_LOW" end_ip="$RESERVED_RANGE_HIGH" > /dev/null + INTERNAL_FABRIC=$(maas admin ipranges read | jshon -a -e subnet -e vlan -e fabric | tr -d '"' | head -n 1) + PRIMARY_RACK=$(maas admin rack-controllers read | jshon -a -e hostname | tr -d '"') + maas admin vlan update "$INTERNAL_FABRIC" untagged dhcp_on=True primary_rack="$PRIMARY_RACK" > /dev/null + local SUBNET_ID=$(maas admin ipranges read | jshon -a -e subnet -e id | head -n 1) + maas admin subnet update "$SUBNET_ID" gateway_ip="$INTERNAL_IP" else echo "* Rack controller DHCP configuration already exists; leaving it alone!" echo "* You should use the MAAS web UI to reconfigure your ranges!" @@ -863,7 +862,7 @@ setup_ip_ranges() { # Add escapes ("\") before ".", "[", and "]" characters in the passed string. # Return modified string as modified_string add_escapes() { - local original_string=$1 +# local original_string="$1" modified_string=${1//\./\\\.} modified_string=${modified_string//\[/\\\[} modified_string=${modified_string//\]/\\\]} @@ -872,27 +871,32 @@ add_escapes() { setup_dns() { echo echo "***************************************************************************" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* Upstread DNS has already been configured." RERUN=yes return fi # Set MAAS upstream DNS - local dns=`cat /etc/resolv.conf | grep -v $INTERNAL_IP | grep -v "#" | grep -i nameserver | head -n1 | cut -d ' ' -f2` + local dns=$(cat /etc/resolv.conf | grep -v "$INTERNAL_IP" | grep -v "#" | grep -i nameserver | head -n1 | cut -d ' ' -f2) # Below signals that NetworkManager is in charge of DNS, so extract real # upstream DNS using nmcli.... if [ "$dns" = "127.0.1.1" ] || [ "$dns" = "127.0.0.53" ] ; then - if dpkg --compare-versions "`nmcli -v | grep -oE '[^ ]+$'`" "lt" "0.9.10" ; then - dns=`nmcli dev list iface $EXTERNAL_NET | grep -m 1 domain_name_servers | tr -s " " | grep -oE '[^ ]+$'` || true + if dpkg --compare-versions "$(nmcli -v | grep -oE '[^ ]+$')" "lt" "0.9.10" ; then + dns=$(nmcli dev list iface $EXTERNAL_NET | grep -m 1 domain_name_servers | tr -s " " | grep -oE '[^ ]+$') || true else - dns=`nmcli dev show $EXTERNAL_NET | grep -m 1 DNS | tr -s " " | grep -oE '[^ ]+$'` || true + dns=$(nmcli dev show $EXTERNAL_NET | grep -m 1 DNS | tr -s " " | grep -oE '[^ ]+$') || true fi # Ubuntu 18.04's NetPlan can look like NetworkManager, but NetPlan # doesn't use nmcli, so we must instead use systemd-resolve.... if [ -z "$dns" ] ; then - dns=`systemd-resolve --status $EXTERNAL_NET | grep "DNS Servers" | cut -d ":" -f 2 | xargs` + dns=$(systemd-resolve --status $EXTERNAL_NET | grep "DNS Servers" | cut -d ":" -f 2 | xargs) fi + echo "dns is $dns" + fi + # None of the above works in Ubuntu 22.04, so try yet another approach.... + if [ -z "$dns" ] ; then + dns=$(resolvectl status | grep "Current DNS Server" | head -n 1 | cut -d ":" -f 2 | sed 's/ //g') fi if [ -z "$dns" ] ; then dns="8.8.8.8" @@ -905,17 +909,17 @@ setup_dns() { echo "nameserver $INTERNAL_IP" >> /etc/resolvconf/resolv.conf.d/head resolvconf -u elif [ -f 01-netcfg.yaml ] ; then # New style (NetPlan); Ubuntu 18.04 - nameservers=`grep -A 1 nameservers /etc/netplan/01-netcfg.yaml | tail -n 1 | cut -d ":" -f 2` + nameservers=$(grep -A 1 nameservers /etc/netplan/01-netcfg.yaml | tail -n 1 | cut -d ":" -f 2) if [ -z "$nameservers" ] ; then # No name servers defined - if [ "`grep addresses /etc/netplan/01-netcfg.yaml`" ] ; then + if [ "$(grep addresses /etc/netplan/01-netcfg.yaml)" ] ; then echo " nameservers:" >> /etc/netplan/01-netcfg.yaml echo " addresses: [$INTERNAL_IP]" >> /etc/netplan/01-netcfg.yaml fi - elif [ ! "`echo $nameservers | grep $INTERNAL_IP`" ] ; then + elif [ ! "$(echo "$nameservers" | grep "$INTERNAL_IP")" ] ; then new_nameservers=${nameservers/\[/\[$INTERNAL_IP,} - add_escapes $new_nameservers - new_nameservers=$modified_string - add_escapes $nameservers + add_escapes "$new_nameservers" + new_nameservers="$modified_string" + add_escapes "$nameservers" nameservers=$modified_string sed -i "s/$nameservers/$new_nameservers/" /etc/netplan/01-netcfg.yaml echo "changed $nameservers to $new_nameservers" @@ -929,7 +933,7 @@ setup_dns() { setup_flat_storage() { set +e - dpkg --compare-versions "1.9.0" "le" $MAAS_VERSION + dpkg --compare-versions "1.9.0" "le" "$MAAS_VERSION" if [ "$?" = 0 ] ; then set -e echo @@ -946,7 +950,7 @@ setup_node_archive_site() { echo echo "***************************************************************************" echo "* MAAS tells nodes to look to an Ubuntu repository on the Internet. You" - if [ $(check_set_progress $FUNCNAME) == "completed" ] ; then + if [ "$(check_set_progress "$FUNCNAME")" == "completed" ] ; then echo "* MAAS has already been configured with a repository." RERUN=yes return @@ -956,12 +960,12 @@ setup_node_archive_site() { echo "* to use the default value of $DEFAULT_REPO_URL." echo "*" echo -n "* Type your repository's URL, or press the Enter key: " - read new_repo_url - if [ -z $new_repo_url ] ; then - new_repo_url=$DEFAULT_REPO_URL + read -r new_repo_url + if [ -z "$new_repo_url" ] ; then + new_repo_url="$DEFAULT_REPO_URL" fi echo "* Setting the repository URL to $new_repo_url" - maas admin maas set-config name=main_archive value=$new_repo_url + maas admin maas set-config name=main_archive value="$new_repo_url" } @@ -970,76 +974,22 @@ setup_certification_preseeds() { echo "***************************************************************************" echo "* Setting up certification preseed files...." echo "*" + # The certification preseed file is installed via the maas-cert-server + # package's postinst script; however, if the MAAS snap was not installed + # before the package was installed, the preseed won't be set up, so we + # should do it here.... + if [ -f /usr/share/maas-cert-server/preseed/curtin_userdata_cert ] ; then + cp /usr/share/maas-cert-server/preseed/curtin_userdata_cert "$CURTIN_USERDATA" + else + echo "**" + echo "** /usr/share/mass-cert-server/preseed/curtin_userdata_cert file not found!" + echo "**" + fi if [ $MIRRORED -eq 1 ] ; then sed -i s/ppa.launchpad.net/"$INTERNAL_IP"/g "$CURTIN_USERDATA" fi } - -# Sets COMPLETE_RESOURCES to "true" if at least one boot source is present AND it's complete. -# Also, if boot-resource download has not begun, start it. -are_boot_resources_complete() { - local resource_ids=($(maas admin boot-resources read | jshon -a -e id)) - COMPLETE_RESOURCES="false" - local resource_complete="true" - local resource_present="false" - for i in ${resource_ids[@]}; do - resource_present="true" - if [ "$(maas admin boot-resource read $i | jshon -e sets -a -e complete)" != "true" ] ; then - resource_complete="false" - fi - done - if [ "$resource_complete" = "true" ] && [ "$resource_present" = "true" ] ; then - COMPLETE_RESOURCES="true" - fi - if [ "${#resource_ids[@]}" = "0" ] ; then - # Boot resource import not started; do so - echo "* Beginning import of boot resources" - maas admin boot-resources import - fi -} - - -setup_standard_boot_resources() { - # Importing boot resources - # This might take a long time. - echo - echo "***************************************************************************" - echo "* MAAS requires boot resource images to be useful, and they will now be" - echo "* imported in the background. This can take a LONG time, but will not" - echo "* significantly slow down subsequent configuration steps." - are_boot_resources_complete -} - - -# Determine if any i386 images are loaded on the MAAS server. -# Sets $is_i386 to "N" if no i386 images are found, "Y" if they are. -is_i386_loaded() { - is_i386="N" - local resources=`maas admin boot-resources read` - # Look for evidence of i386 installation. Note that the below can produce - # false positives, so we do more shortly.... - local maybe_i386=`echo $resources | jshon -a -e architecture | grep i386` - if [ ! -z "$maybe_i386" ] ; then - local num_entries=`echo $resources | jshon -l` - let last_entry=$num_entries-1 - for entry in `seq 0 $last_entry`; do - one_entry=`echo $resources | jshon -e $entry` - local found_possible_i386=`echo $one_entry | grep i386` - if [ ! -z "$found_possible_i386" ] ; then - local is_pxelinux=`echo "$one_entry" | jshon -e name | grep pxelinux` - # False positive can result from pxelinux entry, which is why - # we filter it out. AFAIK, any other "i386" in "name" field is - # a legitimate i386 image. - if [ -z "$is_pxelinux" ] ; then - is_i386="Y" - fi - fi - done - fi -} # is_i386_loaded() - - setup_weblinks() { mkdir -p /var/www/html/doc if [ ! -f /var/www/html/index.html-orig ] ; then @@ -1059,7 +1009,7 @@ setup_repositories() { echo "* tools when deploying the SUT." echo "*" # Get the existing repo names - REPO_NAMES=`maas admin package-repositories read |grep name|grep -v key|awk -F'"' '{print "\""$4"\""}'` + REPO_NAMES=$(maas admin package-repositories read |grep name|grep -v key|awk -F'"' '{print "\""$4"\""}') # Figure out what architectures to apply repos to: ARCHES="" for arch in $CLOUD_ARCHES; do @@ -1099,7 +1049,7 @@ GsZVWOB3IQEZDOudR4jc7t4KdbWPAi2LzhOmmkDYiEsQ1dHum/XaaS1J78q3PVgfcJ6E5wM= =yMG1 -----END PGP PUBLIC KEY BLOCK-----' ENABLED='true' - if [[ "$REPO_NAMES" =~ "$NAME" ]]; then + if [[ "$REPO_NAMES" =~ $NAME ]]; then echo "* - $NAME already exists. Please verify it in the MAAS Web Interface" else maas admin package-repositories create name="$NAME" url="$URL" key="$KEY" arches="$ARCHES" enabled="$ENABLED" >/dev/null @@ -1122,7 +1072,7 @@ qBVICuW5JINuTzBTAJepQjz2RgNhsC8/E95P2hWMjrQFtz4GsMBXdi2mxVNE4yVBjBpm2lvn =jZn4 -----END PGP PUBLIC KEY BLOCK-----' ENABLED='true' - if [[ "$REPO_NAMES" =~ "$NAME" ]]; then + if [[ "$REPO_NAMES" =~ $NAME ]]; then echo "* - $NAME already exists. Please verify it in the MAAS Web Interface" else maas admin package-repositories create name="$NAME" url="$URL" key="$KEY" arches="$ARCHES" enabled="$ENABLED" >/dev/null @@ -1147,7 +1097,7 @@ pFd1I9KMiGEhzCrQDp8cYjZkdMDEPsO9A87S5BxpB9rwBj9cnYnpvbw5 =JBdy -----END PGP PUBLIC KEY BLOCK-----' ENABLED='false' - if [[ "$REPO_NAMES" =~ "$NAME" ]]; then + if [[ "$REPO_NAMES" =~ $NAME ]]; then echo "* - $NAME already exists. Please verify it in the MAAS Web Interface" else maas admin package-repositories create name="$NAME" url="$URL" key="$KEY" arches="$ARCHES" enabled="$ENABLED" >/dev/null @@ -1163,13 +1113,14 @@ pFd1I9KMiGEhzCrQDp8cYjZkdMDEPsO9A87S5BxpB9rwBj9cnYnpvbw5 # ######## -if [ `whoami` != "root" ] ; then +if [ "$(whoami)" != "root" ] ; then echo "This script must be run via sudo. Exiting!" exit 1 fi get_params "$@" +snap install maas get_release_info setup_globals setup_progress_tracker @@ -1184,7 +1135,6 @@ if [ $DO_IT_ALL == 0 ] ; then fi if [ $IMPORT_BOOT_RESOURCES == 1 ] ; then setup_flat_storage - setup_standard_boot_resources fi if [ $UPDATE_PRESEEDS == 1 ] ; then setup_network_addresses @@ -1220,7 +1170,6 @@ else setup_flat_storage setup_node_archive_site setup_certification_preseeds - setup_standard_boot_resources setup_repositories fi setup_weblinks @@ -1243,8 +1192,8 @@ if [ "$RERUN" == "yes" ] ; then echo "*" fi -if [ -f $DEFAULT_USERDIR/.maascli.db ] ; then - chown $DEFAULT_USER: $DEFAULT_USERDIR/.maascli.db +if [ -f "$DEFAULT_USERDIR"/.maascli.db ] ; then + chown "$DEFAULT_USER": "$DEFAULT_USERDIR"/.maascli.db fi echo
-- Mailing list: https://launchpad.net/~canonical-hw-cert Post to : [email protected] Unsubscribe : https://launchpad.net/~canonical-hw-cert More help : https://help.launchpad.net/ListHelp

