mirror of
https://git.valherun.com/valherun/pxe_boot_alma.git
synced 2026-10-15 22:22:03 -04:00
- 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]>
258 lines
6.9 KiB
Bash
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
|