102 lines
2.6 KiB
Bash
102 lines
2.6 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_ROOT=$(dirname "$0")
|
|
# @TODO: Implement more soft-coding and interactivity to this script
|
|
ZFS_POOL_NAME="media"
|
|
ZFS_COMPAT="openzfs-2.1-linux"
|
|
ZFS_KEY_LOC="file:///etc/zfs/keys/zroot.key"
|
|
ZFS_KEY_FORMAT="passphrase"
|
|
ZFS_COMPRESSION="zstd-3"
|
|
|
|
create_zpool () {
|
|
sudo zpool create \
|
|
-o ashift=12 \
|
|
-o autotrim=on \
|
|
-o compatibility="$3" \
|
|
-O encryption=on \
|
|
-O keylocation="$4" \
|
|
-O keyformat="$5" \
|
|
-O acltype=posixacl \
|
|
-O xattr=sa \
|
|
-O dnodesize=auto \
|
|
-O compression="$6" \
|
|
-O normalization=formD \
|
|
-O relatime=on \
|
|
-O canmount=off \
|
|
-O mountpoint=none \
|
|
"$2" \
|
|
/dev/disk/by-id/"${1}"
|
|
}
|
|
|
|
create_datasets () {
|
|
DATASET=("${HOME}/Documents/.calibre" "${1}/LITERATURE")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
|
|
DATASET=("${HOME}/Videos" "${1}/FILM")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
|
|
DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${1}/STEAMGAMES")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
|
|
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
|
|
DATASET=("${HOME}/Games" "${1}/GAMES")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
ln -s "${HOME}/.var/app/com.valvesoftware.Steam" "${DATASET[0]}/Steam"
|
|
ln -s "${HOME}/.var/app/org.libretro.RetroArch" "${DATASET[0]}/libRetro"
|
|
|
|
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
|
|
DATASET=("${HOME}/.XXX" "${1}/XXX")
|
|
mkdir -p "${DATASET[0]}"
|
|
sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
|
|
}
|
|
|
|
print_menu () {
|
|
echo "$(<"${SCRIPT_ROOT}"/zfs-media-drive.help)"
|
|
}
|
|
|
|
if [ -z "$1" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$1" ] && [ "$1" == "init" ]; then
|
|
shift
|
|
|
|
while getopts "d:p:k:f:c:v:" opt; do
|
|
case $opt in
|
|
k) ZFS_KEY_LOC="${OPTARG}";;
|
|
f) ZFS_KEY_FORMAT="${OPTARG}";;
|
|
c) ZFS_COMPRESSION="${OPTARG}";;
|
|
v) ZFS_COMPAT="${OPTARG}";;
|
|
p) ZFS_POOL_NAME="${OPTARG}";;
|
|
d) ZFS_TARGET_DRIVE="${OPTARG}";;
|
|
*) exit 1;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$ZFS_TARGET_DRIVE" ]; then
|
|
echo "Error: It is necessary to argue a -d option."
|
|
exit 1
|
|
fi
|
|
|
|
create_zpool "$ZFS_TARGET_DRIVE" "$ZFS_POOL_NAME" "$ZFS_COMPAT" "$ZFS_KEY_LOC" "$ZFS_KEY_FORMAT" "$ZFS_COMPRESSION"
|
|
create_datasets "$ZFS_POOL_NAME"
|
|
else
|
|
while getopts "h" flag; do
|
|
case "$flag" in
|
|
h) print_menu;;
|
|
*) exit 1;;
|
|
esac
|
|
done
|
|
fi
|