73 lines · 2133 bytes
1 #!/bin/bash
2 set -euo pipefail
3
4 # Configuration
5 DISK_SIZE_MB="${OPENHUB_DISK_SIZE_MB:-1024}" # Total disk limit (default 1 GiB)
6 DATA_DIR="/srv/openhub"
7 DISK_IMG="/srv/openhub.img"
8
9 echo "=== openhub setup ==="
10
11 # 1. Create service user
12 if ! id openhub &>/dev/null; then
13 echo "Creating openhub user..."
14 useradd --system --shell /usr/sbin/nologin --home-dir "$DATA_DIR" openhub
15 fi
16
17 # 2. Create fixed-size loopback filesystem for disk quota
18 if [ ! -f "$DISK_IMG" ]; then
19 echo "Creating ${DISK_SIZE_MB}MB disk image at $DISK_IMG..."
20 dd if=/dev/zero of="$DISK_IMG" bs=1M count="$DISK_SIZE_MB" status=progress
21 mkfs.ext4 -m 0 "$DISK_IMG"
22 fi
23
24 mkdir -p "$DATA_DIR"
25
26 # Mount if not already mounted
27 if ! mountpoint -q "$DATA_DIR"; then
28 echo "Mounting disk image..."
29 mount -o loop "$DISK_IMG" "$DATA_DIR"
30 fi
31
32 # Add fstab entry if missing
33 if ! grep -q "$DISK_IMG" /etc/fstab; then
34 echo "$DISK_IMG $DATA_DIR ext4 loop,defaults 0 0" >> /etc/fstab
35 echo "Added fstab entry."
36 fi
37
38 # 3. Create directories
39 mkdir -p "$DATA_DIR/repos"
40 chown -R openhub:openhub "$DATA_DIR"
41
42 # 4. Build and install binaries
43 echo "Building release binaries..."
44 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
45 PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
46
47 # Need DATABASE_URL for sqlx compile-time checks
48 if [ ! -f "$DATA_DIR/openhub.db" ]; then
49 echo "Initializing database..."
50 sqlite3 "$DATA_DIR/openhub.db" < "$PROJECT_DIR/migrations/0001_init.sql"
51 chown openhub:openhub "$DATA_DIR/openhub.db"
52 fi
53
54 export DATABASE_URL="sqlite:$DATA_DIR/openhub.db"
55 cd "$PROJECT_DIR"
56 cargo build --release
57
58 echo "Installing binaries..."
59 install -m 755 target/release/openhub /usr/local/bin/openhub
60 install -m 755 target/release/git-quota-hook /usr/local/bin/git-quota-hook
61
62 # 5. Install systemd unit
63 install -m 644 deploy/openhub.service /etc/systemd/system/openhub.service
64 systemctl daemon-reload
65 systemctl enable openhub
66
67 echo ""
68 echo "=== Setup complete ==="
69 echo "Disk limit: ${DISK_SIZE_MB}MB at $DATA_DIR"
70 echo ""
71 echo "Start with: systemctl start openhub"
72 echo "Logs: journalctl -u openhub -f"
73 echo "Status: systemctl status openhub"