Separate system configuration from Dotfiles_ArchAP. Add package manifests, system inventories, reusable templates, safer backup/deployment scripts, on-demand service management, TLP and zram configuration, and updated maintenance documentation.
70 lines
2.2 KiB
Bash
Executable file
70 lines
2.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
if (( EUID != 0 )); then
|
|
echo "Lance ce script avec sudo." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if (( $# != 1 )); then
|
|
printf 'Usage : %s /dev/nvmeXnY\n' "$0" >&2
|
|
exit 2
|
|
fi
|
|
|
|
readonly DISK="$(readlink -f "$1")"
|
|
readonly MOUNT_ROOT="/mnt"
|
|
|
|
[[ -b "$DISK" ]] || { echo "Périphérique invalide : $DISK" >&2; exit 1; }
|
|
|
|
if findmnt -rn "$MOUNT_ROOT" >/dev/null 2>&1; then
|
|
echo "$MOUNT_ROOT est déjà monté. Démonte-le avant de continuer." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if lsblk -nr -o MOUNTPOINTS "$DISK" | grep -q '/'; then
|
|
echo "Le disque ou une de ses partitions est monté. Abandon." >&2
|
|
lsblk -o NAME,MODEL,SIZE,FSTYPE,MOUNTPOINTS "$DISK"
|
|
exit 1
|
|
fi
|
|
|
|
lsblk -o NAME,MODEL,SIZE,TRAN,FSTYPE,MOUNTPOINTS "$DISK"
|
|
printf '\nCette opération efface entièrement %s.\n' "$DISK"
|
|
read -rp "Tape exactement ERASE $DISK : " confirmation
|
|
[[ "$confirmation" == "ERASE $DISK" ]] || { echo "Annulé."; exit 0; }
|
|
|
|
part_suffix=""
|
|
[[ "$DISK" =~ [0-9]$ ]] && part_suffix="p"
|
|
readonly EFI_PART="${DISK}${part_suffix}1"
|
|
readonly ROOT_PART="${DISK}${part_suffix}2"
|
|
|
|
wipefs -af "$DISK"
|
|
parted -s "$DISK" mklabel gpt
|
|
parted -s "$DISK" mkpart ESP fat32 1MiB 1025MiB
|
|
parted -s "$DISK" set 1 esp on
|
|
parted -s "$DISK" mkpart ARCH btrfs 1025MiB 100%
|
|
partprobe "$DISK"
|
|
udevadm settle
|
|
|
|
mkfs.fat -F 32 -n EFI "$EFI_PART"
|
|
mkfs.btrfs -f -L ARCH "$ROOT_PART"
|
|
|
|
mount "$ROOT_PART" "$MOUNT_ROOT"
|
|
btrfs subvolume create "$MOUNT_ROOT/@"
|
|
btrfs subvolume create "$MOUNT_ROOT/@home"
|
|
btrfs subvolume create "$MOUNT_ROOT/@log"
|
|
btrfs subvolume create "$MOUNT_ROOT/@pkg"
|
|
umount "$MOUNT_ROOT"
|
|
|
|
readonly OPTS="rw,relatime,ssd,discard=async,space_cache=v2"
|
|
mount -o "$OPTS,subvol=@" "$ROOT_PART" "$MOUNT_ROOT"
|
|
mkdir -p "$MOUNT_ROOT"/{boot,home,var/log,var/cache/pacman/pkg,.snapshots}
|
|
btrfs subvolume create "$MOUNT_ROOT/.snapshots"
|
|
mount -o "$OPTS,subvol=@home" "$ROOT_PART" "$MOUNT_ROOT/home"
|
|
mount -o "$OPTS,subvol=@log" "$ROOT_PART" "$MOUNT_ROOT/var/log"
|
|
mount -o "$OPTS,subvol=@pkg" "$ROOT_PART" "$MOUNT_ROOT/var/cache/pacman/pkg"
|
|
mount -o "$OPTS,subvol=@/.snapshots" "$ROOT_PART" "$MOUNT_ROOT/.snapshots"
|
|
mount "$EFI_PART" "$MOUNT_ROOT/boot"
|
|
|
|
printf '\n[+] Disque préparé et monté sous %s\n' "$MOUNT_ROOT"
|
|
lsblk -o NAME,SIZE,FSTYPE,LABEL,MOUNTPOINTS "$DISK"
|