mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 21:35:45 +02:00
This commit removes USR_PREFIX and introduces ETC_PREFIX instead. The purpose of PREFIX is the installation prefix in the system, not the installation destination. The latter one is what DESTDIR is used for. This should clear up the confusion. PREFIX was already mis-used as installation destination. But that doesn't mix well with how the make targets are designed. CC: Timofey Titovets <nefelim4ag@gmail.com> Signed-off-by: Kai Krakow <kai@kaishome.de>
120 lines
2.9 KiB
Bash
Executable File
120 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
## Helpful functions
|
|
INFO(){ echo "INFO:" "$@"; }
|
|
ERRO(){ echo "ERROR:" "$@"; exit 1; }
|
|
YN(){ [[ "$1" =~ (1|Y|y) ]]; }
|
|
|
|
## Global vars
|
|
export BEESHOME BEESSTATUS
|
|
export WORK_DIR CONFIG_DIR
|
|
export CONFIG_FILE
|
|
export UUID AL16M
|
|
|
|
readonly AL16M="$((16*1024*1024))"
|
|
readonly CONFIG_DIR=@ETC_PREFIX@/bees/
|
|
|
|
## Pre checks
|
|
{
|
|
[ ! -d "$CONFIG_DIR" ] && ERRO "Missing: $CONFIG_DIR"
|
|
[ "$UID" == "0" ] || ERRO "Must be run as root"
|
|
}
|
|
|
|
command -v @LIBEXEC_PREFIX@/bees &> /dev/null || ERRO "Missing 'bees' agent"
|
|
|
|
## Parse args
|
|
ARGUMENTS=()
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-*)
|
|
ARGUMENTS+=($1)
|
|
;;
|
|
*)
|
|
if [ -z "$UUID" ]; then
|
|
UUID="$1"
|
|
else
|
|
ERRO "Only one filesystem may be supplied"
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
case "$UUID" in
|
|
*-*-*-*-*)
|
|
FILE_CONFIG=""
|
|
for file in "$CONFIG_DIR"/*.conf; do
|
|
[ ! -f "$file" ] && continue
|
|
if grep -q "$UUID" "$file"; then
|
|
INFO "Find $UUID in $file, use as conf"
|
|
FILE_CONFIG="$file"
|
|
fi
|
|
done
|
|
[ ! -f "$FILE_CONFIG" ] && ERRO "No config for $UUID"
|
|
source "$FILE_CONFIG"
|
|
;;
|
|
*)
|
|
echo "beesd [options] <btrfs_uuid>"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
WORK_DIR="${WORK_DIR:-/run/bees/}"
|
|
MNT_DIR="${MNT_DIR:-$WORK_DIR/mnt/$UUID}"
|
|
BEESHOME="${BEESHOME:-$MNT_DIR/.beeshome}"
|
|
BEESSTATUS="${BEESSTATUS:-$WORK_DIR/$UUID.status}"
|
|
DB_SIZE="${DB_SIZE:-$((64*AL16M))}"
|
|
|
|
INFO "Check: Disk exists"
|
|
if [ ! -b "/dev/disk/by-uuid/$UUID" ]; then
|
|
ERRO "Missing disk: /dev/disk/by-uuid/$UUID"
|
|
fi
|
|
|
|
is_btrfs(){ [ "$(blkid -s TYPE -o value "$1")" == "btrfs" ]; }
|
|
|
|
INFO "Check: Disk with btrfs"
|
|
if ! is_btrfs "/dev/disk/by-uuid/$UUID"; then
|
|
ERRO "Disk not contain btrfs: /dev/disk/by-uuid/$UUID"
|
|
fi
|
|
|
|
INFO "WORK DIR: $WORK_DIR"
|
|
mkdir -p "$WORK_DIR" || exit 1
|
|
|
|
INFO "MOUNT DIR: $MNT_DIR"
|
|
mkdir -p "$MNT_DIR" || exit 1
|
|
|
|
umount_w(){ mountpoint -q "$1" && umount -l "$1"; }
|
|
force_umount(){ umount_w "$MNT_DIR"; }
|
|
trap force_umount SIGINT SIGTERM EXIT
|
|
|
|
mount -osubvolid=5 /dev/disk/by-uuid/$UUID "$MNT_DIR" || exit 1
|
|
|
|
if [ ! -d "$BEESHOME" ]; then
|
|
INFO "Create subvol $BEESHOME for store bees data"
|
|
btrfs sub cre "$BEESHOME"
|
|
else
|
|
btrfs sub show "$BEESHOME" &> /dev/null || ERRO "$BEESHOME MUST BE A SUBVOL!"
|
|
fi
|
|
|
|
# Check DB size
|
|
{
|
|
DB_PATH="$BEESHOME/beeshash.dat"
|
|
touch "$DB_PATH"
|
|
OLD_SIZE="$(du -b "$DB_PATH" | sed 's/\t/ /g' | cut -d' ' -f1)"
|
|
NEW_SIZE="$DB_SIZE"
|
|
if (( "$NEW_SIZE"%AL16M > 0 )); then
|
|
ERRO "DB_SIZE Must be multiple of 16M"
|
|
fi
|
|
if (( "$OLD_SIZE" != "$NEW_SIZE" )); then
|
|
INFO "Resize db: $OLD_SIZE -> $NEW_SIZE"
|
|
[ -f "$BEESHOME/beescrawl.$UUID.dat" ] && rm "$BEESHOME/beescrawl.$UUID.dat"
|
|
truncate -s $NEW_SIZE $DB_PATH
|
|
fi
|
|
chmod 700 "$DB_PATH"
|
|
}
|
|
|
|
MNT_DIR="${MNT_DIR//\/\//\/}"
|
|
|
|
cd "$MNT_DIR"
|
|
@LIBEXEC_PREFIX@/bees "${ARGUMENTS[@]}" $OPTIONS "$MNT_DIR"
|