Files
pxe_boot_alma/work/KickStart/cfg/probe-config/N100-probe-config.sh
T
andersenandClaude Fable 5 6d398b826a refactor: move tree under homelab/, add alma10 hardening and kickstart docs
- restructure boot/kickstarts/scripts/docs into homelab/
- docs: alma9->10 breaking changes, CIS hardening, kickstart changes
- add find_cron_entries.sh helper and codex running memory notes

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 22:35:07 -04:00

258 lines
6.9 KiB
Bash

OLDCUST=
if [ -e "/opt/iglass/conf/.probe-config" ]; then
echo "Probe looks to already be configured."
PCFG=$(head -1 /opt/iglass/conf/.probe-config)
if [[ "$PCFG" =~ ^([0-9]+):(.+): ]]; then
CUST="${BASH_REMATCH[2]}"
OLDCUST="$CUST"
echo -n " $CUST at "
date -d "@${BASH_REMATCH[1]}"
fi
if NotContinue "Continue?"; then
echo "OK"
else
Die "Exiting..."
fi
fi
FIRST=
declare -A INTERFACES
for IF in $(nmcli --colors no --get-values device device status | sort); do
if [ -z "$FIRST" ] && [[ "$IF" =~ ^"eno" ]]; then
FIRST="$IF"
elif [[ "$IF" =~ ^"lo" ]]; then
continue
elif [[ "$IF" =~ ^"idrac" ]]; then
continue
else
INTERFACES[$IF]=
fi
done
if [ -z "$FIRST" ]; then
Die "No primary network interface found"
fi
REDO=1
while [ "$REDO" -eq 1 ]; do
GCUST="$CUST"
CUST=
while [ -z "$CUST" ]; do
read -r -p "Customer Code [$GCUST]: " CUST
[ -z "$CUST" ] && CUST=$GCUST
done
GPROBE="$PROBE"
PROBE=
if [ -z "$GPROBE" ]; then
QUERY="select probes.name FROM probes LEFT OUTER JOIN customers USING(customersid) WHERE code = '$CUST' ORDER BY probes.name LIMIT 1"
Debug "ssh ${SSHOPTS[@]}"
GPROBE=$(ssh "${SSHOPTS[@]}" "PGSERVICE=iglass2 psql -Aqt -U noc -c \"$QUERY\"" 2>/dev/null)
if [ -z "$GPROBE" ]; then
QUERY="select 'iprobe' || SUBSTRING(name,7,9)::int + 1 from probes where name like 'iprobe%' order by name desc limit 1"
GPROBE=$(ssh "${SSHOPTS[@]}" "PGSERVICE=iglass2 psql -Aqt -U noc -c \"$QUERY\"")
fi
fi
while [ -z "$PROBE" ]; do
read -r -p "Probe Name: [$GPROBE] " PROBE
[ -z "$PROBE" ] && PROBE="$GPROBE"
done
GZONE="$ZONE"
ZONE=
if [ -z "$GZONE" ]; then
QUERY="SELECT tz FROM customers WHERE code = '$CUST' LIMIT 1"
GZONE=$(ssh "${SSHOPTS[@]}" "PGSERVICE=iglass2 psql -Aqt -U noc -c \"$QUERY\"")
[ -z "$GZONE" ] && GZONE="$DEFZONE"
fi
while [ -z "$ZONE" ]; do
read -r -p "Time Zone: [$GZONE] " ZONE
[ -z "$ZONE" ] && ZONE="$GZONE"
if ! timedatectl list-timezones | grep -q "$ZONE"; then
Warn "Invalid Time Zone $ZONE"
ZONE=
fi
done
echo
GPADDR="$PADDR"
PADDR=
[ -z "$GPADDR" ] && GPADDR=$(dig +short ${PROBE}.iglass.net @$KSRV)
echo "Configure primary interface $FIRST:"
while [ -z "$PADDR" ]; do
read -r -p "Probe IP: [$GPADDR] " PADDR
[ -z "$PADDR" ] && PADDR="$GPADDR"
done
GMASK="$PMASK"
[ -z "$GMASK" ] && GMASK="$IGMASK"
PPREFIX=
while [ -z "$PPREFIX" ]; do
read -r -p "Probe Mask: [$GMASK] " PMASK
[ -z "$PMASK" ] && PMASK="$GMASK"
PPREFIX=$(ipcalc -j $PADDR $PMASK 2>/dev/null | jq -r .PREFIX)
done
GGATEWAY="$GATEWAY"
GATEWAY=
[ -z "$GGATEWAY" ] && GGATEWAY=$(ipcalc -j $PADDR/$PPREFIX 2>/dev/null | jq -r .MAXADDR)
while [ -z "$GATEWAY" ]; do
read -r -p "Gateway: [$GGATEWAY] " GATEWAY
[ -z "$GATEWAY" ] && GATEWAY="$GGATEWAY"
done
for IF in "${!INTERFACES[@]}"; do
if Continue "Configure interface $IF?"; then
declare -a A=()
while [ -z "${A[0]}" -o -z "${A[1]}" ]; do
GA=; GM=;
TA=; TM=;
[ -n "${INTERFACES[$IF]}" ] && GA="$(ipcalc -j ${INTERFACES[$IF]} | jq -r .ADDRESS)" && GM="$(ipcalc -j ${INTERFACES[$IF]} | jq -r .NETMASK)"
[ -z "$GM" ] && GM="$DEFMASK"
while [ -z "$TA" ]; do
read -r -p "Address [$GA]: " TA
[ -z "$TA" ] && TA="$GA"
done
while [ -z "$TM" ]; do
read -r -p "Mask: [$GM] " TM
[ -z "$TM" ] && TM="$GM"
done
readarray -t A <<< "$(ipcalc -j $TA $TM | jq -r .ADDRESS,.PREFIX)"
done
INTERFACES[$IF]="${A[0]}/${A[1]}"
else
INTERFACES[$IF]=
fi
done
echo
echo "Configure Remote Access:"
GRADDR="$RADDR"
RADDR=
[ -z "$GRADDR" ] && [[ "$PADDR" =~ ^(.+\.)([0-9]+)$ ]] && GRADDR="${BASH_REMATCH[1]}$(( ${BASH_REMATCH[2]} + 1 ))"
while [ -z "$RADDR" ]; do
read -r -p "RAC IP: [$GRADDR] " RADDR
[ -z "$RADDR" ] && RADDR="$GRADDR"
done
GRMASK="$RMASK"
[ -z "$GRMASK" ] && GRMASK="$PMASK"
while [ -z "$RMASK" ]; do
read -r -p "RAC Mask: [$GRMASK] " RMASK
[ -z "$RMASK" ] && RMASK="$GRMASK"
done
GRGATEWAY="$RGATEWAY"
[ -z "$GRGATEWAY" ] && GRGATEWAY="$GATEWAY"
while [ -z "$RGATEWAY" ]; do
read -r -p "RAC Gateway: [$GRGATEWAY] " RGATEWAY
[ -z "$RGATEWAY" ] && RGATEWAY="$GRGATEWAY"
done
if [ -n "$RPW" ]; then
if Continue "Re-enter RAC password?"; then
RPW=
fi
fi
while [ -z "$RPW" ]; do
read -r -s -p "RAC password: " PWT1
echo
read -r -s -p "Re-enter password: " PWT2
echo
if [ "$PWT1" != "$PWT2" ]; then
echo
echo "Passwords do not match!"
else
RPW="$PWT1"
fi
echo
done
echo
echo -e "Customer Code: \t$CUST"
echo -e "Probe Name: \t$PROBE"
echo -e "Time Zone: \t$ZONE"
echo
echo -e "Probe $FIRST: \t$PADDR/$PPREFIX"
echo -e "Gateway: \t$GATEWAY"
echo
for IF in "${!INTERFACES[@]}"; do
if [ -n "${INTERFACES[$IF]}" ]; then
echo "Interface $IF: ${INTERFACES[$IF]}"
fi
done
echo
echo "RAC Address: $RADDR"
echo "RAC Mask: $RMASK"
echo "RAC Gateway: $RGATEWAY"
if Continue "Is this information correct?"; then
REDO=0
fi
echo
done
if Continue "Commit Configuration?"; then
if ! [[ "$PROBE" =~ ".iglass.net"$ ]]; then
HN="$PROBE.iglass.net"
else
HN="$PROBE"
fi
echo "Setting hostname to $HN"
hostnamectl hostname $HN
echo "Setting Time Zone to $ZONE"
timedatectl set-timezone "$ZONE"
echo "Setting primary probe interface $FIRST to $PADDR/$PPREFIX"
nmcli connection modify $FIRST ipv4.addresses $PADDR/$PPREFIX
nmcli connection modify $FIRST ipv4.method manual
nmcli connection modify $FIRST connection.autoconnect yes
echo "Setting default route to $GATEWAY"
nmcli connection modify $FIRST ipv4.gateway $GATEWAY
# Make the changes active now
# nmcli dev reapply $FIRST
for IF in "${!INTERFACES[@]}"; do
if [ -n "${INTERFACES[$IF]}" ]; then
echo "Setting interface $IF: ${INTERFACES[$IF]}"
nmcli connection modify $IF ipv4.addresses ${INTERFACES[$IF]}
nmcli connection modify $IF ipv4.method manual
nmcli connection modify $IF connection.autoconnect yes
fi
done
echo "Setting RAC:"
echo -n " "; ipmitool lan set 1 ipaddr $RADDR
echo -n " "; ipmitool lan set 1 netmask $RMASK
echo -n " "; ipmitool lan set 1 defgw ipaddr $RGATEWAY
echo -n " "; ipmitool user set password 2 $RPW
else
echo "No changes made"
fi
HOST=$(hostname)
if ! [[ "$HOST" =~ ".iglass.net"$ ]]; then
HOST="$HOST.iglass.net"
echo "Setting hostname to $HOST"
hostnamectl set-hostname $HOST
fi
Continue