canonical-hw-cert team mailing list archive
-
canonical-hw-cert team
-
Mailing list archive
-
Message #77343
[Merge] ~rodsmith/maas-cert-server:fix-uuid-1000 into maas-cert-server:master
Rod Smith has proposed merging ~rodsmith/maas-cert-server:fix-uuid-1000 into maas-cert-server:master.
Commit message:
Updated maniacs-setup for MAAS 3.3.0 & to fix problem if no UID 1000 present
Requested reviews:
hardware-certification-users (hardware-certification)
For more details, see:
https://code.launchpad.net/~rodsmith/maas-cert-server/+git/maas-cert-server/+merge/437853
This started as a UID 1000 fix (for bug #2004543); but in fixing that bug, I discovered that the MAAS snap is now installing MAAS 3.3.0 by default, and that has created a series of problems for maniacs-setup, the most serious of which is described in bug #2008022. I also discovered a bug in MAAS 3.3.0 (bug #2008421), and incorporated a workaround for that. This MR therefore addresses all of these bug reports, and a number of minor tweaks (although it does not fix the MAAS bug; it just works around it).
--
Your team hardware-certification-users is requested to review the proposed merge of ~rodsmith/maas-cert-server:fix-uuid-1000 into maas-cert-server:master.
diff --git a/debian/changelog b/debian/changelog
index 0513a08..4c040cc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+maas-cert-server (0.7.3-0ppa1) jammy; urgency=medium
+
+ * Fixed bug in maniacs-setup that caused it to fail if there
+ was no user with a UID of 1000 on the computer.
+ * Adjusted maniacs-setup to work with MAAS 3.3.0.
+
+ -- Rod Smith <rodsmith@xxxxxxxxxxxxxxxxxxxxx> Thu, 23 Feb 2023 17:10:13 -0500
+
maas-cert-server (0.7.2-0ppa1) jammy; urgency=medium
* Clean up maniacs-setup code
diff --git a/usr/sbin/maniacs-setup b/usr/sbin/maniacs-setup
index 2ca34ca..adef490 100755
--- a/usr/sbin/maniacs-setup
+++ b/usr/sbin/maniacs-setup
@@ -144,7 +144,8 @@ setup_globals() {
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=$(logname)
+ DEFAULT_GROUP=$(id -gn "$DEFAULT_USER")
if [ -z "$DEFAULT_USER" ] ; then
echo "The default user (who must have a UID of 1000) can't be determined!"
echo "Exiting!"
@@ -167,7 +168,6 @@ setup_globals() {
SUPPORTED_RELEASES=$(distro-info --supported)
CLOUD_ARCHES="amd64 i386 arm64 armhf ppc64el s390x"
CLOUD_MIRROR="$MIRROR_HOME/cloud"
- RETRY=10
MIRRORED=0
# Any of the preceding values can be overridden in the config file....
@@ -219,6 +219,7 @@ setup_network_addresses() {
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_NETBLOCK=$(ipcalc -n "$INTERNAL_IP"/"$INTERNAL_NETMASK" | grep Network | tr -s " " | cut -d " " -f 2) || true
# INTERNAL_NETSTART is currently unused; but if necessary in the future,
# uncomment the below line....
# INTERNAL_NETSTART=$(ipcalc -n "$INTERNAL_IP"/"$INTERNAL_NETMASK" | grep Network | tr -s " " | cut -d " " -f 2 | cut -d "/" -f 1)
@@ -299,6 +300,7 @@ setup_postgresql() {
echo "* you supply."
get_password
DB_PASS=$PASSWORD
+ sudo usermod -a -G "$DEFAULT_GROUP" postgres
sudo -u postgres psql -c "CREATE USER \"maas\" WITH ENCRYPTED PASSWORD '$PASSWORD'"
echo "*"
echo "* Now creating a PostgresQL database (called 'maasdb')...."
@@ -331,24 +333,51 @@ reconfigure_controllers() {
dpkg-reconfigure -fnoninteractive maas-rack-controller
}
+ENSURE_RUNNING_TRIES=2
ensure_running() {
- local job="$1"
- local count=1
- while true; do
- if (service "$job" status | grep -qs "running"); then
- break
- fi
- invoke-rc.d "$job" start
- sleep 1
- count=$((count+1))
- if [ $count -gt $RETRY ]; then
- echo "$job refused to start [$RETRY] times"
+ local controller_online="Offline"
+
+ local PRIMARY_RACK
+ PRIMARY_RACK=$(maas admin rack-controllers read | jshon -a -e system_id | tr -d '"')
+ controller_online=$(maas admin rack-controller read "$PRIMARY_RACK" | \
+ jshon -e commissioning_status_name | tr -d '"' | \
+ head -n 1)
+
+ # MAAS 3.3.0 sometimes doesn't finish its initial commissioning, so we
+ # restart it to give it a kick in the pants and wait for commissioning
+ # to complete....
+ if [[ $USE_SNAPS == 1 && $controller_online != "Passed" ]] ; then
+ echo "* Restarting MAAS"
+ snap restart maas.supervisor &> /dev/null
+ until maas admin events query &> /dev/null ; do
+ echo "* Waiting for MAAS to restart...."
+ sleep 2
+ done
+ # Sleep 5 more seconds, just for good measure....
+ sleep 5
+ fi
+
+ local TRIES_LEFT=20
+ while [[ $controller_online != "Passed" && $TRIES_LEFT -gt 0 ]] ; do
+ sleep 3
+ controller_online=$(maas admin rack-controller read "$PRIMARY_RACK" | \
+ jshon -e commissioning_status_name | tr -d '"' | \
+ head -n 1)
+ echo "* Waiting for the MAAS controller; current status is $controller_online...."
+ (( TRIES_LEFT-- )) || true
+ done
+ if [[ $TRIES_LEFT -eq 0 ]] ; then
+ if [[ $ENSURE_RUNNING_TRIES -gt 0 ]] ; then
+ # Sometimes even one restart fails, so try again....
+ ((ENSURE_RUNNING_TRIES--))
+ ensure_running
+ else
+ echo "* MAAS commissioning is incomplete; exiting!"
exit 1
fi
- done
-}
-
+ fi
+} # ensure_running()
login_maas_admin() {
if [ $USE_SNAPS == 1 ] ; then
@@ -358,22 +387,22 @@ login_maas_admin() {
local APIKEY
APIKEY=$(maas-region apikey --username "$DEFAULT_USER" | tail -n1)
fi
- echo "Logging into maas at '$MAAS_URL' with '$APIKEY'"
+ echo "* Logging into maas at '$MAAS_URL' with '$APIKEY'"
+
set +e
local RETURN_CODE=1
local TRIES_LEFT=20
# MAAS can take a while to become accessible, so keep trying to
# log in until it is available, or until we get tired of trying....
while [[ $RETURN_CODE != 0 && $TRIES_LEFT -gt 0 ]] ; do
- echo "Attempting a login...."
+ echo "* Attempting a login...."
maas login admin "$MAAS_URL" "$APIKEY" &> /dev/null
RETURN_CODE=$?
(( TRIES_LEFT-- )) || true
- if [ $RETURN_CODE != 0 ] ; then
- sleep 3
- fi
+ sleep 3
done
set -e
+ ensure_running
}
@@ -381,6 +410,7 @@ setup_maas_admin() {
# Configure the MAAS admin user
# Sadly, there's no way to test if the user has been created already,
# so ignore errors for idempotence
+
echo
echo "***************************************************************************"
if [ "$(check_set_progress "${FUNCNAME[0]}")" == "completed" ] ; then
@@ -775,7 +805,6 @@ setup_ip_ranges() {
local third_octet_plus3
local internal16
local internal24
- local cidr
echo
echo "***************************************************************************"
if [ "$(check_set_progress "${FUNCNAME[0]}")" == "completed" ] ; then
@@ -790,26 +819,13 @@ setup_ip_ranges() {
((third_octet_plus1="$third_octet"+1))
((third_octet_plus2="$third_octet"+2))
((third_octet_plus3="$third_octet"+3))
- cidr=$(ipcalc -n "$INTERNAL_IP"/"$INTERNAL_NETMASK" | grep Netmask | tr -s " " | cut -d " " -f4) || true
- if [ -z "$cidr" ] ; then
- local is_valid=false
- local numbers='^[0-9]+$'
- while [ "$is_valid" != true ] ; do
- echo -n "* Could not compute the CIDR netmask! Please enter it here (1-31): "
- read -r cidr
- if [[ "$cidr" =~ $numbers ]] ; then
- if [ "$cidr" -gt 0 ] && [ "$cidr" -lt 32 ] ; then
- is_valid=true
- fi
- fi
- done
- fi
+
# In MAAS 2.1 and later, two IP address ranges can be explicitly marked,
# leaving a third implied:
# * 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 [ "$INTERNAL_NETMASK" -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"
@@ -825,7 +841,7 @@ setup_ip_ranges() {
echo -n "* High IP address for DHCP addresses: "
read -r DHCP_RANGE_HIGH
else
- if [ "$cidr" = 24 ] ; then
+ if [ "$INTERNAL_NETMASK" = 24 ] ; then
RESERVED_RANGE_LOW="$internal24.1"
RESERVED_RANGE_HIGH="$internal24.9"
DHCP_RANGE_LOW="$internal24.10"
@@ -833,7 +849,7 @@ setup_ip_ranges() {
AUTO_ASSIGN_LOW="$internal24.128"
AUTO_ASSIGN_HIGH="$internal24.254"
fi
- if [ "$cidr" = 23 ] ; then
+ if [ "$INTERNAL_NETMASK" = 23 ] ; then
RESERVED_RANGE_LOW="$internal24.1"
RESERVED_RANGE_HIGH="$internal24.50"
DHCP_RANGE_LOW="$internal24.51"
@@ -841,7 +857,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 [ "$INTERNAL_NETMASK" -lt 23 ] ; then
RESERVED_RANGE_LOW="$internal24.1"
RESERVED_RANGE_HIGH="$internal24.255"
DHCP_RANGE_LOW="$internal16.$third_octet_plus1.0"
@@ -863,14 +879,26 @@ setup_ip_ranges() {
RANGES=$(maas admin ipranges read | grep end_ip) || true
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
+ if dpkg --compare-versions "$MAAS_VERSION" "ge" "3.3" ; then
+ maas admin ipranges create type=dynamic start_ip="$DHCP_RANGE_LOW" \
+ end_ip="$DHCP_RANGE_HIGH" cidr="$INTERNAL_NETBLOCK" > /dev/null
+ maas admin ipranges create type=reserved start_ip="$RESERVED_RANGE_LOW" \
+ end_ip="$RESERVED_RANGE_HIGH" cidr="$INTERNAL_NETBLOCK" > /dev/null
+ else
+ 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
+ fi
+ 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 system_id | tr -d '"')
+ maas admin vlan update "$INTERNAL_FABRIC" untagged dhcp_on=True \
+ primary_rack="$PRIMARY_RACK" > /dev/null
local SUBNET_ID
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 subnet update "$SUBNET_ID" gateway_ip="$INTERNAL_IP" > /dev/null
else
echo "* Rack controller DHCP configuration already exists; leaving it alone!"
echo "* You should use the MAAS web UI to reconfigure your ranges!"
Follow ups