Files
git-server-appliance/gitgk-datamove.sh
2025-06-20 11:21:53 -04:00

107 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# gitgk-datamove.sh - Moves Gitea and MariaDB data to mounted external storage (e.g., VHD)
#
# Copyright 2025 Robbie Ferguson
# Category5 TV Network
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
# === Configurable Variables ===
TARGET_BASE="${1}"
if [[ -z "$TARGET_BASE" ]] || [[ ! -d "$TARGET_BASE" ]]; then
echo "Usage: sudo ./gitgk-datamove.sh /mnt/your-mounted-disk"
echo ""
echo "This script will move all gitGK data to the given target directory."
echo "Make sure the disk is mounted first. Example:"
echo ""
echo " sudo mount /dev/sdb1 /mnt/gitgk-data"
echo ""
echo "Then run:"
echo " sudo ./gitgk-datamove.sh /mnt/gitgk-data"
echo ""
echo "IMPORTANT: If you reboot your system without mounting this path again,"
echo " gitGK will FAIL TO START. You must add an fstab entry first."
echo ""
echo "Example fstab entry:"
echo " /dev/sdX1 /mnt/gitgk-data ext4 defaults 0 2"
echo ""
exit 1
fi
GITEA_SRC="/var/lib/gitea/data"
MYSQL_SRC="/var/lib/mysql"
GITEA_DEST="$TARGET_BASE/data"
MYSQL_DEST="$TARGET_BASE/mysql"
MYSQL_CONFIG="/etc/mysql/mariadb.conf.d/50-server.cnf"
# Ensure root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root."
exit 1
fi
# === Determine what to move ===
echo ""
read -p "Would you like to move Gitea repository data to $TARGET_BASE? [y/N]: " MOVE_GITEA
read -p "Would you like to move MariaDB database data to $TARGET_BASE? [y/N]: " MOVE_MYSQL
echo "Stopping services..."
systemctl stop gitea || true
systemctl stop mariadb || true
# === Gitea Data ===
if [[ "$MOVE_GITEA" =~ ^[Yy]$ ]]; then
if mountpoint -q "$GITEA_SRC" || df "$GITEA_SRC" | grep -q "$TARGET_BASE"; then
echo "Gitea data already resides on the target mount. Skipping Gitea move."
else
echo "Moving Gitea data to $GITEA_DEST"
mkdir -p "$GITEA_DEST"
rsync -av "$GITEA_SRC/" "$GITEA_DEST/"
chown -R gitea:gitea "$GITEA_DEST"
mv "$GITEA_SRC" "${GITEA_SRC}.bak"
ln -s "$GITEA_DEST" "$GITEA_SRC"
fi
else
echo "Skipping Gitea data move."
fi
# === MariaDB Data ===
if [[ "$MOVE_MYSQL" =~ ^[Yy]$ ]]; then
echo "Moving MariaDB data to $MYSQL_DEST"
mkdir -p "$MYSQL_DEST"
rsync -av "$MYSQL_SRC/" "$MYSQL_DEST/"
chown -R mysql:mysql "$MYSQL_DEST"
cp "$MYSQL_CONFIG" "$MYSQL_CONFIG.bak"
sed -i "s|^datadir\s*=.*|datadir = $MYSQL_DEST|" "$MYSQL_CONFIG"
mv "$MYSQL_SRC" "${MYSQL_SRC}.bak"
ln -s "$MYSQL_DEST" "$MYSQL_SRC"
else
echo "Skipping MariaDB data move."
fi
# === Restart services ===
echo "Starting services..."
systemctl start mariadb
systemctl start gitea
echo ""
echo "Selected gitGK data has been moved to $TARGET_BASE (if requested)"
echo "IMPORTANT: Ensure this mount is present before reboot or services may fail."
echo "Example fstab line:"
echo " /dev/sdX1 $TARGET_BASE ext4 defaults 0 2"