#!/bin/sh
# Einmalige Einrichtung: GPT -> mdadm RAID1 -> LUKS2 aes-xts-plain64 (256-bit-Schlüssel = AES-128) -> btrfs
# Behält vorhandene NAS-Benutzer (Konten, SMB-Passwörter, Freigaben); legt deren Ordner neu an. LÖSCHT BEIDE PLATTEN.
. /usr/lib/nas-gemeinsam.sh
set -e
[ -t 0 ] || { echo "Nur interaktiv ausführen."; exit 1; }
ist_eingehaengt && { echo "NAS ist eingehängt – zuerst nas-sperren."; exit 1; }
for d in sda sdb; do [ -b /dev/$d ] || { echo "/dev/$d fehlt"; exit 1; }; done
echo "Folgende Platten werden VOLLSTÄNDIG GELÖSCHT:"
for d in sda sdb; do echo "  /dev/$d: $(smartctl -i /dev/$d | awk -F': *' '/Device Model|Serial Number/{printf "%s ", $2}')"; done
printf "Zum Fortfahren LOESCHEN eingeben: "; read -r a; [ "$a" = "LOESCHEN" ] || { echo "Abbruch."; exit 1; }

while :; do
	lies_passphrase "Neue Passphrase: "; P1=$PW
	lies_passphrase "Passphrase wiederholen: "
	[ "$P1" = "$PW" ] && [ ${#PW} -ge 12 ] && break
	echo "Nicht gleich oder kürzer als 12 Zeichen – nochmal."
done
P1=""

aufraeumen() {
	echo "Abbruch – räume auf. Platten sind nicht (vollständig) eingerichtet."
	grep -q " $MNT " /proc/mounts && umount $MNT
	[ -e /dev/mapper/$CRYPT ] && cryptsetup close $CRYPT
	[ -b $MD ] && mdadm --stop $MD
	rm -f $NASCONF
}
trap aufraeumen EXIT

# Altbestand abbauen (alte Einrichtung mit zwei LUKS-Geräten oder altes RAID)
for m in /dev/mapper/nas*; do [ -e "$m" ] && cryptsetup close "${m##*/}"; done
[ -b $MD ] && mdadm --stop $MD
rm -f $NASCONF

i=0
for d in sda sdb; do
	i=$((i + 1))
	mdadm --zero-superblock /dev/${d}1 >/dev/null 2>&1 || true
	dd if=/dev/zero of=/dev/$d bs=1M count=1 conv=fsync 2>/dev/null
	sek=$(cat /sys/block/$d/size)
	dd if=/dev/zero of=/dev/$d bs=512 count=2048 seek=$((sek - 2048)) conv=fsync 2>/dev/null
	sgdisk -o /dev/$d >/dev/null
	sgdisk -n1:1MiB:0 -t1:fd00 -c1:nas-raid$i /dev/$d >/dev/null
	sleep 2; [ -b /dev/${d}1 ] || { echo "/dev/${d}1 erscheint nicht"; exit 1; }
done

echo "Lege RAID1 an ..."
mdadm --create $MD --run --level=1 --raid-devices=2 --metadata=1.2 --bitmap=internal --name=nas /dev/sda1 /dev/sdb1
MD_UUID=$(mdadm --detail $MD | awk '/UUID :/{print $3}')
uci -q delete mdadm.nas || true
uci set mdadm.nas=array
uci set mdadm.nas.uuid="$MD_UUID"
uci set mdadm.nas.device="$MD"
uci commit mdadm
/etc/init.d/mdadm restart >/dev/null 2>&1 || true   # Überwachung (mdadm --monitor --syslog) mit neuem RAID

echo "Verschlüssele $MD (aes-xts-plain64, 256-bit-Schlüssel = AES-128) ..."
printf '%s' "$PW" | cryptsetup luksFormat --type luks2 -c aes-xts-plain64 -s 256 --label nas-luks --batch-mode --key-file=- $MD
printf '%s' "$PW" | cryptsetup open --key-file=- $MD $CRYPT
PW=""; unset PW
LUKS_UUID=$(cryptsetup luksUUID $MD)

mkfs.btrfs -f -L nas -m dup -d single /dev/mapper/$CRYPT
mkdir -p $MNT; mount -t btrfs -o noatime /dev/mapper/$CRYPT $MNT
btrfs subvolume create $MNT/$SUBVOL
printf 'MD_UUID="%s"\nLUKS_UUID="%s"\n' "$MD_UUID" "$LUKS_UUID" > $NASCONF

grep -q "^$NASGROUP:" /etc/group || groupadd -g 2000 $NASGROUP
mkdir -p $MNT/$SUBVOL/benutzer $MNT/$SUBVOL/gemeinsam
chown root:root $MNT/$SUBVOL $MNT/$SUBVOL/benutzer; chmod 0755 $MNT/$SUBVOL $MNT/$SUBVOL/benutzer
chown root:$NASGROUP $MNT/$SUBVOL/gemeinsam; chmod 2770 $MNT/$SUBVOL/gemeinsam
if ! uci -q get ksmbd.gemeinsam >/dev/null; then
	uci set ksmbd.gemeinsam=share
	uci set ksmbd.gemeinsam.name=gemeinsam
	uci set ksmbd.gemeinsam.path="$MNT/$SUBVOL/gemeinsam"
	uci set ksmbd.gemeinsam.users="@$NASGROUP"
	uci set ksmbd.gemeinsam.read_only=no
	uci set ksmbd.gemeinsam.guest_ok=no
	uci set ksmbd.gemeinsam.create_mask=0660
	uci set ksmbd.gemeinsam.dir_mask=2770
	uci commit ksmbd
fi
# vorhandene NAS-Benutzer übernehmen: private Ordner neu anlegen
gid=$(awk -F: -v n=$NASGROUP '$1==n{print $3}' /etc/group)
for n in $(awk -F: -v g="$gid" '$4==g{print $1}' /etc/passwd); do
	mkdir -p "$MNT/$SUBVOL/benutzer/$n"; chown "$n:$NASGROUP" "$MNT/$SUBVOL/benutzer/$n"; chmod 0700 "$MNT/$SUBVOL/benutzer/$n"
	echo "Benutzer $n übernommen (Ordner neu angelegt, Passwort unverändert)."
done
trap - EXIT
/etc/init.d/ksmbd start
logger -t nas "eingerichtet: mdadm RAID1 + LUKS2 aes-xts-plain64 256 + btrfs (metadata dup)"
btrfs filesystem usage -T $MNT | head -8
echo "Fertig. Das RAID synchronisiert jetzt im Hintergrund (cat /proc/mdstat), das NAS ist aber schon nutzbar."
echo "Weitere Benutzer: nas-benutzer anlegen NAME"
