Files
kosync-rs/scripts/export-to-old-redis.sh
2026-06-12 15:18:19 +00:00

102 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
set -eu
OLD_CONTAINER=kosync
SQLITE=./data/kosync.sqlite3
IMAGE=sodium/kosync-rs:v2.1.1
REDIS_URL=redis://127.0.0.1:6379/1
PULL=1
FLUSH_TARGET=0
KOSYNC_UID=${KOSYNC_UID:-10001}
KOSYNC_GID=${KOSYNC_GID:-10001}
usage() {
echo "Usage: $0 [--old-container NAME] [--sqlite PATH] [--image IMAGE] [--redis-url URL] [--flush-target] [--no-pull]" >&2
}
while [ "$#" -gt 0 ]; do
case "$1" in
--old-container)
OLD_CONTAINER=$2
shift 2
;;
--sqlite)
SQLITE=$2
shift 2
;;
--image)
IMAGE=$2
shift 2
;;
--redis-url)
REDIS_URL=$2
shift 2
;;
--flush-target)
FLUSH_TARGET=1
shift
;;
--no-pull)
PULL=0
shift
;;
-h|--help)
usage
exit 0
;;
*)
usage
exit 2
;;
esac
done
case "$SQLITE" in
/*) SQLITE_ABS=$SQLITE ;;
*) SQLITE_ABS=$(pwd)/$SQLITE ;;
esac
case "$SQLITE_ABS" in
*/) SQLITE_ABS=${SQLITE_ABS%/}/kosync.sqlite3 ;;
esac
if [ -d "$SQLITE_ABS" ]; then
SQLITE_ABS=$SQLITE_ABS/kosync.sqlite3
fi
SQLITE_DIR=$(dirname "$SQLITE_ABS")
SQLITE_BASE=$(basename "$SQLITE_ABS")
mkdir -p "$SQLITE_DIR"
DOCKER_USER_ARGS=
if [ "$(id -u)" -eq 0 ]; then
chown "$KOSYNC_UID:$KOSYNC_GID" "$SQLITE_DIR"
for path in "$SQLITE_ABS" "$SQLITE_ABS-wal" "$SQLITE_ABS-shm" "$SQLITE_ABS-journal"; do
if [ -e "$path" ]; then
chown "$KOSYNC_UID:$KOSYNC_GID" "$path"
fi
done
else
DOCKER_USER_ARGS="--user $(id -u):$(id -g)"
fi
if [ "$PULL" -eq 1 ]; then
docker pull "$IMAGE"
fi
echo "image: $IMAGE"
echo "old container: $OLD_CONTAINER"
echo "redis url: $REDIS_URL"
echo "sqlite: $SQLITE_ABS"
set -- export-redis --redis-url "$REDIS_URL" --db "/data/$SQLITE_BASE"
if [ "$FLUSH_TARGET" -eq 1 ]; then
set -- "$@" --flush-target
fi
docker run --rm \
$DOCKER_USER_ARGS \
--network "container:$OLD_CONTAINER" \
-v "$SQLITE_DIR:/data" \
"$IMAGE" \
"$@"