mirror of
https://github.com/Zygo/bees.git
synced 2025-06-16 17:46:16 +02:00
Allow custom libexec location
To install for different distributions, LIBEXEC_PREFIX can now be set. It defaults to $(PREFIX)/usr/lib/bees as used in most common distributions. Local overrides are possible by setting variables in a "localconf" file which will be included by the Makefile if it exists. For some distributions you may want to set it to /usr/libexec or /usr/libexec/bees.
This commit is contained in:
127
scripts/beesd.in
Executable file
127
scripts/beesd.in
Executable file
@ -0,0 +1,127 @@
|
||||
#!/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=@PREFIX@/etc/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
|
||||
UUID="$1"
|
||||
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 <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))}"
|
||||
LOG_SHORT_PATH="${LOG_SHORT_PATH:-N}"
|
||||
LOG_FILTER_TIME="${LOG_FILTER_TIME:-N}"
|
||||
|
||||
INFO "Check: Disk exists"
|
||||
if [ ! -b "/dev/disk/by-uuid/$UUID" ]; then
|
||||
ERRO "Missing disk: /dev/disk/by-uuid/$UUID"
|
||||
fi
|
||||
|
||||
it_btrfs(){ [ "$(blkid -s TYPE -o value "$1")" == "btrfs" ]; }
|
||||
|
||||
INFO "Check: Disk with btrfs"
|
||||
if ! it_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//\/\//\/}"
|
||||
|
||||
filter_time(){
|
||||
if YN $LOG_FILTER_TIME; then
|
||||
sed -e 's/^.*crawl:/crawl:/g' \
|
||||
-e 's/^.*status:/status:/g' \
|
||||
-e 's/^.*bees:/bees:/g' \
|
||||
-e 's/^.*crawl_writeback:/crawl_writeback:/g' \
|
||||
-e 's/^.*main:/main:/g' \
|
||||
-e 's/^.*hash_prefetch:/hash_prefetch:/g'
|
||||
else
|
||||
cat
|
||||
fi
|
||||
}
|
||||
|
||||
filter_path(){
|
||||
if YN $LOG_SHORT_PATH; then
|
||||
sed -e "s#$MNT_DIR##g"
|
||||
else
|
||||
cat
|
||||
fi
|
||||
}
|
||||
|
||||
@LIBEXEC_PREFIX@/bees "$MNT_DIR" 3>&1 2>&1 | filter_time | filter_path
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user