Compare commits

..

9 Commits

5 changed files with 126 additions and 59 deletions

View File

@@ -3,8 +3,6 @@
#+language: en
* PLANNED
** TODO [#A] Modify shell scripts in ~${PROJECT_ROOT}/zfs~ such that assumptions regarding avaialble datasets are minimized
- This could be done by softcoding dataset and pool names or creating functions that specify through argument
** TODO [#A] Create a ~${PROJECT_ROOT}/skel~ directory
- Should contain a shell script setting new permanent but reversible XDG variables, copying the directory structure to existing user home directories, and setting it as default for newly created user home directories
- Should contain subdirectories that match the paths relative to user home directories for XDG variables
@@ -15,3 +13,5 @@
* IN PROGRESS
* FINISHED
** DONE [#A] Modify shell scripts in ~${PROJECT_ROOT}/zfs~ such that assumptions regarding avaialble datasets are minimized
- This could be done by softcoding dataset and pool names or creating functions that specify through argument

View File

@@ -1,4 +0,0 @@
#!/bin/bash
set -euo pipefail
zfs list -t snapshot | grep 'apt-' | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}

View File

@@ -1,52 +0,0 @@
#!/bin/bash
set -euo pipefail
# @TODO: Implement more soft-coding and interactivity to this script
sudo zpool create \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.1-linux \
-O encryption=on \
-O keylocation=file:///etc/zfs/keys/zroot.key \
-O keyformat=passphrase \
-O acltype=posixacl \
-O xattr=sa \
-O dnodesize=auto \
-O compression=zstd-3 \
-O normalization=formD \
-O relatime=on \
-O canmount=off \
-O mountpoint=none \
"$2" \
/dev/disk/by-id/"${1}"-part1
DATASET=("${HOME}/Documents/.calibre" "${2}/LITERATURE")
mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Videos" "${2}/FILM")
mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${2}/STEAMGAMES")
mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${2}/RARCHGAMES")
mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Games" "${2}/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" "${2}/RARCHGAMES")
mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.XXX" "${2}/XXX")
mkdir -p "${DATASET[0]}"
sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}"

25
zfs/zfs-clean.sh Normal file
View File

@@ -0,0 +1,25 @@
#!/bin/bash
set -euo pipefail
clear-apt-snaps () {
zfs list -t snapshot | grep 'apt-' | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}
}
if [ -z "$1" ]; then
exit 1
fi
if ! [ -z "$1" ] && [ "$1" == "upgrades" ]; then
while getopts "r:" opt; do
case "$opt" in
r) REGEX=${OPTARG};;
*) exit 1;;
esac
done
if [ -z "$REGEX" ]; then
clear-apt-snaps
else
zfs list -t snapshot | grep "${REGEX}" | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}
fi
fi

98
zfs/zfs-media-drive.sh Normal file
View File

@@ -0,0 +1,98 @@
#!/bin/bash
set -euo pipefail
# @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 "Placeholder content"
}
if [ -z "$1" ]; then
exit 1
fi
if ! [ -z "$1" ] && [ "$1" == "init" ]; then
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 "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