Upload files to "/"

This commit is contained in:
2026-05-13 08:41:15 +00:00
commit 8dc8326efd
+462
View File
@@ -0,0 +1,462 @@
#!/bin/bash
#installer nethserver 8 V2.0
# Esci su errore
set -e
while true; do
clear
echo " === Installazione Nethserver 8, swap, aggiornamenti automatici e notifiche backup ==="
echo ""
echo "1 - Installazione automatica"
echo "2 - Modifica Swap"
echo "3 - Modifica notifiche mail"
echo "4 - Attiva aggiornamenti automatici Rocky Linux"
echo "5 - Modifica Rete"
echo "6 - Installa SOLO Nethserver 8 senza modifiche"
echo "0 - Esci"
echo ""
read -p "Scegli: " SELECTION
if [[ -z "$SELECTION" ]]; then
echo "Nessuna selezione." >&2
read -p "Scegli: " SELECTION
continue
fi
case "$SELECTION" in
1) #Installazione Automatica
clear
echo " === Installazione AUTOMATICA Nethserver 8 con swap, aggiornamenti automatici e notifiche backup ==="
#Richiesta di inserimento mail TO per notifiche
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
while true; do
if [[ -z "$MAIL_ADDR_TO" ]]; then
echo "==Errore: E-mail non fornita!" >&2
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
continue
fi
read -p "-La mail inserita è '$MAIL_ADDR_TO', è corretta? (s/n): " CONFIRM_MAIL_TO
case "$CONFIRM_MAIL_TO" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
;;
*)
echo "Risposta non valida."
;;
esac
done
#Richiesta di inserimento mail TO per notifiche
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
while true; do
if [[ -z "$MAIL_ADDR_FROM" ]]; then
echo "==Errore: E-mail non fornita!" >&2
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
continue
fi
echo "-La mail inserita è '$MAIL_ADDR_FROM', è corretta? (s/n): "
read -r CONFIRM_MAIL_FROM
case "$CONFIRM_MAIL_FROM" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
;;
*)
echo "Risposta non valida."
;;
esac
done
sleep 1
#Richiesta di inserimento dimensione swap
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
while true; do
if [[ -z "$SWAP_SIZE" ]]; then
SWAP_SIZE="4096"
fi
if [[ ! "$SWAP_SIZE" =~ ^[0-9]+$ || "$SWAP_SIZE" -le 1024 ]]; then
echo "-Errore: deve essere un numero intero > 1024 (es: 2048)"
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
continue
fi
read -p "-Verrà creata una swap di $SWAP_SIZE MB, è corretto? (s/n): " CONFIRM_SWAP
case "$CONFIRM_SWAP" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
;;
*)
echo "Risposta non valida."
;;
esac
done
#creazione della swap
if swapon --show | grep -q "^/swapfile "; then
swapoff /swapfile
fi
dd if=/dev/zero of=/swapfile count="$SWAP_SIZE" bs=1MiB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap sw 0 0' >> /etc/fstab
systemctl daemon-reload
swapon --show
echo ""
echo "=Creata swap di dimensione $SWAP_SIZE MB="
sleep 5
#Attivazione aggiornamenti automatici rocky linux
dnf upgrade -y
dnf install dnf-automatic curl nano -y
if ! [[ -d "/etc/systemd/system/dnf-automatic.timer.d" ]]; then
mkdir /etc/systemd/system/dnf-automatic.timer.d
fi
echo '[Unit]
Description=dnf-automatic timer
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=10m
Persistent=true
[Install]
WantedBy=timer.target' > /etc/systemd/system/dnf-automatic.timer.d/override.conf
systemctl enable --now dnf-automatic.timer
echo "=Aggiornamenti automatici attivati ogni giorno alle 6:00="
sleep 2
#Installazione di nethserver 8
echo "=Avvio installazione nethserver="
sleep 2
if [[ -d "/var/lib/nethserver" ]]; then
echo "Nethserver 8 è già installato"
sleep 2
else
curl https://raw.githubusercontent.com/NethServer/ns8-core/ns8-stable/core/install.sh | bash
echo "=Installazione Nethserver 8 Completata="
fi
sleep 5
#Configurazione delle notifiche post installazione di nethserver
TARGET_PATH="/var/lib/nethserver/cluster/events/backup-status-changed/20notify"
cat > "$TARGET_PATH" << 'SCRIPT_EOF'
#!/bin/bash
# Change the following variables to match your environment
MAIL_FROM="MAIL_PLACEHOLDER_FROM"
MAIL_TO="MAIL_PLACEHOLDER_TO"
MAIL_SUBJECT="Backup status changed:"
MAIL_TEMPLATE="The backup status for {BACKUP_NAME} on {MODULE_ID} has changed to {STATUS}. Please check the system for details."
# WARNING - DO NOT EDIT BELOW THIS LINE (unless you know what you're doing)
# Redis command
rdb="redis-cli --raw"
# Read event data from stdin
read -r event_data
if ! echo "$event_data" | jq . >/dev/null 2>&1; then
echo "Failed to parse JSON input" >&2
exit 1
fi
# Extract necessary fields from event_data
module_id=$(echo "$event_data" | jq -r '.module_id')
backup_id=$(echo "$event_data" | jq -r '.backup_id')
leader_id=$($rdb hget cluster/environment NODE_ID)
self_id=$NODE_ID
if [[ "$self_id" != "$leader_id" ]]; then
exit 0 # LEADER ONLY! Do not run this procedure in worker nodes.
fi
backup_name=$($rdb hget "cluster/backup/$backup_id" "name")
errors=$($rdb hget "module/$module_id/backup_status/$backup_id" errors)
if [[ -z "$errors" ]]; then
echo "INFO: Status unknown, exiting." >&2
exit 0
fi
if [[ "$errors" == "0" ]]; then
status="SUCCESS"
else
status="FAIL"
fi
# Send email
subject="$backup_name ($module_id): $status"
msg="$(echo "$MAIL_TEMPLATE" | sed "s/{BACKUP_NAME}/$backup_name/g; s/{STATUS}/$status/g; s/{MODULE_ID}/$module_id/g")"
echo "$msg" | runagent ns8-sendmail -s "$subject" -f "$MAIL_FROM" "$MAIL_TO"
SCRIPT_EOF
sed -i "s|MAIL_PLACEHOLDER_FROM|$MAIL_ADDR_FROM|g" "$TARGET_PATH"
sed -i "s|MAIL_PLACEHOLDER_TO|$MAIL_ADDR_TO|g" "$TARGET_PATH"
chmod a+x "$TARGET_PATH"
echo ""
echo "=Impostate notifiche mail con mittente $MAIL_ADDR_FROM e destinatario $MAIL_ADDR_TO="
echo ""
echo "=Proseguire con la creazione del cluster poi impostare i parametri server mail per le notifiche.="
echo ""
echo "==Installazione Completata=="
read -p "Premere un tasto per continuare ..." _
;;
2) #Modifica Swap
clear
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
while true; do
if [[ -z "$SWAP_SIZE" ]]; then
SWAP_SIZE="4096"
fi
if [[ ! "$SWAP_SIZE" =~ ^[0-9]+$ || "$SWAP_SIZE" -le 1024 ]]; then
echo "-Errore: deve essere un numero intero > 1024 (es: 2048)"
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
continue
fi
read -p "-Verrà creata una swap di $SWAP_SIZE MB, è corretto? (s/n): " CONFIRM_SWAP
case "$CONFIRM_SWAP" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Indica la dimensione della swap in MB (es: 2048) [Default 4096MB]: " SWAP_SIZE
;;
*)
echo "Risposta non valida."
;;
esac
done
#creazione della swap
if swapon --show | grep -q "^/swapfile "; then
swapoff /swapfile
fi
dd if=/dev/zero of=/swapfile count="$SWAP_SIZE" bs=1MiB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap sw 0 0' >> /etc/fstab
systemctl daemon-reload
swapon --show
echo ""
echo "=Creata swap di dimensione $SWAP_SIZE MB="
read -p "Premere un tasto per continuare ..." _
;;
3) #Modifica notifiche mail
clear
if [[ -d "/var/lib/nethserver" ]]; then
#Richiesta di inserimento mail TO per notifiche
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
while true; do
if [[ -z "$MAIL_ADDR_TO" ]]; then
echo "==Errore: E-mail non fornita!" >&2
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
continue
fi
read -p "-La mail inserita è '$MAIL_ADDR_TO', è corretta? (s/n): " CONFIRM_MAIL_TO
case "$CONFIRM_MAIL_TO" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Inserisci l'indirizzo e-mail su cui ricevere le notifiche: " MAIL_ADDR_TO
;;
*)
echo "Risposta non valida."
;;
esac
done
sleep 2
#Richiesta di inserimento mail TO per notifiche
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
while true; do
if [[ -z "$MAIL_ADDR_FROM" ]]; then
echo "==Errore: E-mail non fornita!" >&2
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
continue
fi
read -p "-La mail inserita è '$MAIL_ADDR_FROM', è corretta? (s/n): " CONFIRM_MAIL_FROM
case "$CONFIRM_MAIL_FROM" in
s|S|si|SI|Si|||y|Y|Yes|YES)
break
;;
n|N|no|NO|No)
echo "-Reinserisci..."
read -p "-Inserisci l'indirizzo e-mail da cui inviare le notifiche: " MAIL_ADDR_FROM
;;
*)
echo "Risposta non valida."
;;
esac
done
sleep 2
#Configurazione delle notifiche post installazione di nethserver
TARGET_PATH="/var/lib/nethserver/cluster/events/backup-status-changed/20notify"
cat > "$TARGET_PATH" << 'SCRIPT_EOF'
#!/bin/bash
# Change the following variables to match your environment
MAIL_FROM="MAIL_PLACEHOLDER_FROM"
MAIL_TO="MAIL_PLACEHOLDER_TO"
MAIL_SUBJECT="Backup status changed:"
MAIL_TEMPLATE="The backup status for {BACKUP_NAME} on {MODULE_ID} has changed to {STATUS}. Please check the system for details."
# WARNING - DO NOT EDIT BELOW THIS LINE (unless you know what you're doing)
# Redis command
rdb="redis-cli --raw"
# Read event data from stdin
read -r event_data
if ! echo "$event_data" | jq . >/dev/null 2>&1; then
echo "Failed to parse JSON input" >&2
exit 1
fi
# Extract necessary fields from event_data
module_id=$(echo "$event_data" | jq -r '.module_id')
backup_id=$(echo "$event_data" | jq -r '.backup_id')
leader_id=$($rdb hget cluster/environment NODE_ID)
self_id=$NODE_ID
if [[ "$self_id" != "$leader_id" ]]; then
exit 0 # LEADER ONLY! Do not run this procedure in worker nodes.
fi
backup_name=$($rdb hget "cluster/backup/$backup_id" "name")
errors=$($rdb hget "module/$module_id/backup_status/$backup_id" errors)
if [[ -z "$errors" ]]; then
echo "INFO: Status unknown, exiting." >&2
exit 0
fi
if [[ "$errors" == "0" ]]; then
status="SUCCESS"
else
status="FAIL"
fi
# Send email
subject="$backup_name ($module_id): $status"
msg="$(echo "$MAIL_TEMPLATE" | sed "s/{BACKUP_NAME}/$backup_name/g; s/{STATUS}/$status/g; s/{MODULE_ID}/$module_id/g")"
echo "$msg" | runagent ns8-sendmail -s "$subject" -f "$MAIL_FROM" "$MAIL_TO"
SCRIPT_EOF
sed -i "s|MAIL_PLACEHOLDER_FROM|$MAIL_ADDR_FROM|g" "$TARGET_PATH"
sed -i "s|MAIL_PLACEHOLDER_TO|$MAIL_ADDR_TO|g" "$TARGET_PATH"
chmod a+x "$TARGET_PATH"
echo ""
echo "=Impostate notifiche mail con mittente $MAIL_ADDR_FROM e destinatario $MAIL_ADDR_TO="
read -p "Premere un tasto per continuare ..." _
else
echo "Nethserver 8 non è installato."
read -p "Premere un tasto per continuare ..." _
fi
;;
4)
clear
#Attivazione aggiornamenti automatici rocky linux
dnf upgrade -y
dnf install dnf-automatic curl nano -y
if ! [[ -d "/etc/systemd/system/dnf-automatic.timer.d" ]]; then
mkdir /etc/systemd/system/dnf-automatic.timer.d
fi
echo '[Unit]
Description=dnf-automatic timer
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=10m
Persistent=true
[Install]
WantedBy=timer.target' > /etc/systemd/system/dnf-automatic.timer.d/override.conf
systemctl enable --now dnf-automatic.timer
clear
echo ""
echo ""
echo ""
echo "=Aggiornamenti automatici attivati ogni giorno alle 6:00="
read -p "Premere un tasto per continuare ..." _
;;
5)
nmtui
read -p "Premere un tasto per continuare ..." _
;;
6)
#Installazione di nethserver 8
clear
echo "=Avvio installazione nethserver="
sleep 2
if [[ -d "/var/lib/nethserver" ]]; then
echo "Nethserver 8 è già installato"
else
curl https://raw.githubusercontent.com/NethServer/ns8-core/ns8-stable/core/install.sh | bash
echo "=Installazione Nethserver 8 Completata="
fi
read -p "Premere un tasto per continuare ..." _
;;
0)
exit 0
;;
*)
clear
echo "Selezione invalida."
read -p "Premere un tasto per continuare ..." _
;;
esac
done
sleep 2