Compare commits

...

25 Commits

Author SHA1 Message Date
e38eed4906 Add README.md 2025-08-24 16:09:02 +00:00
84a33e4779 revert disk usage 2025-07-21 21:04:54 -05:00
f20d46a132 Update host_profile.sh 2025-07-22 02:01:15 +00:00
7648dea72b Update host_profile.sh 2025-07-22 01:57:01 +00:00
1b11f0eab4 Add host_profile.sh 2025-07-22 01:39:28 +00:00
5840e5509a Update backup_named_volumes.sh 2025-07-18 14:15:57 +00:00
a165b304ed Update backup_named_volumes.sh 2025-07-18 14:12:52 +00:00
3a1a1de536 Update backup_named_volumes.sh 2025-07-18 14:11:28 +00:00
b2cb15b431 Update backup_named_volumes.sh 2025-07-18 14:08:51 +00:00
0afd8b4f47 Update backup_named_volumes.sh 2025-07-18 14:06:57 +00:00
47764ac1e7 Update backup_named_volumes.sh 2025-07-18 12:25:41 +00:00
55fdf6aee6 Add backup_named_volumes.sh 2025-07-18 12:21:17 +00:00
4493d7e6db Update docker-network.sh 2025-07-12 18:38:21 +00:00
822b03cc7a Update docker-network.sh 2025-07-12 18:36:02 +00:00
6d054806a3 Update docker-network.sh 2025-07-12 18:28:35 +00:00
60f982121b Update docker-network.sh 2025-07-12 18:27:39 +00:00
c84be7b02a Update docker-network.sh 2025-07-12 18:16:32 +00:00
7e53420e96 Update docker-network.sh 2025-07-12 18:16:00 +00:00
9dcfe05342 Update docker-network.sh 2025-07-12 18:15:20 +00:00
f0e7f10dfb Update docker-network.sh 2025-07-12 18:10:34 +00:00
d6447493d5 Update docker-network.sh 2025-07-12 18:10:24 +00:00
0c19daf0d6 Update docker-network.sh 2025-07-12 18:10:05 +00:00
ea6b35c0df Update docker-network.sh. 2025-07-12 18:09:57 +00:00
f9f3997f7e Comment out network creation and inspection in docker-network.sh 2025-07-12 07:53:58 -05:00
07471259b8 Fix variable name for Docker daemon configuration file in docker-network.sh 2025-07-12 07:53:50 -05:00
4 changed files with 173 additions and 42 deletions

9
README.md Normal file
View File

@@ -0,0 +1,9 @@
```bash
bash <(curl -sL https://ryans.tools/createuser)
```
```bash
bash <(curl -sL https://ryans.tools/dockernet)
```

38
backup_named_volumes.sh Normal file
View File

@@ -0,0 +1,38 @@
#!/bin/bash
set -euo pipefail
PROJECT_NAME=$(basename "$(pwd)")
echo "📦 Docker Compose project: $PROJECT_NAME"
# Get all named volumes for this project
VOLUMES=$(docker volume ls --format '{{.Name}}' | grep "^${PROJECT_NAME}_")
if [[ -z "$VOLUMES" ]]; then
echo "❌ No volumes found for project '$PROJECT_NAME'"
exit 1
fi
for FULL_VOL in $VOLUMES; do
SHORT_VOL="${FULL_VOL#${PROJECT_NAME}_}"
VOLUME_PATH="/var/lib/docker/volumes/${FULL_VOL}/_data"
OUTPUT_FILE="${SHORT_VOL}.tar.gz"
echo "📁 Found volume: $SHORT_VOL"
read -rp "→ Backup this volume to ${OUTPUT_FILE}? (Y/n) " REPLY
REPLY=${REPLY:-Y}
if [[ "$REPLY" =~ ^[Yy]$ ]]; then
if [[ ! -d "$VOLUME_PATH" ]]; then
echo "⚠️ Volume path not found: $VOLUME_PATH"
continue
fi
echo "📦 Backing up $VOLUME_PATH$OUTPUT_FILE"
sudo tar -czf "$OUTPUT_FILE" -C "$VOLUME_PATH" .
echo "✅ Done."
else
echo "⏭️ Skipped $SHORT_VOL"
fi
done

View File

@@ -1,64 +1,92 @@
#!/bin/bash
set -euo pipefail
# -------------------------------
# Prompt user for subnet base
# -------------------------------
DOCKER_CONFIG="/etc/docker/daemon.json"
JQ=$(command -v jq || true)
read -rp "Enter the second octet for your Docker network (e.g., 100 for 10.100.0.0/16): " octet
# Validate that it's a number between 1 and 254
if ! [[ "$octet" =~ ^[0-9]{1,3}$ ]] || ((octet < 1 || octet > 254)); then
echo "Invalid input. Must be a number between 1 and 254."
if [[ -z "$JQ" ]]; then
echo "❌ jq is required but not installed."
exit 1
fi
# -------------------------------
# Define values
# -------------------------------
# Step 1: Check if default-address-pools exists and extract current second octet
DEFAULT_OCTET=""
if [[ -f "$DOCKER_CONFIG" ]] && grep -q '"default-address-pools"' "$DOCKER_CONFIG"; then
BASE=$(jq -r '.["default-address-pools"][0].base' "$DOCKER_CONFIG")
if [[ "$BASE" =~ ^10\.([0-9]+)\. ]]; then
DEFAULT_OCTET="${BASH_REMATCH[1]}"
echo "Found existing default-address-pools base: $BASE"
fi
fi
DOCKER_CONFIG_FILE="/etc/docker/daemon.json"
ADDRESS_POOL_BASE="10.${octet}.0.0/16"
ADDRESS_POOL_SIZE=24
NETWORK_NAME="bridge_default"
NETWORK_SUBNET="10.${octet}.1.0/24"
# Step 2: Ask for second octet (suggest default if available)
USE_EXISTING_CONFIG=false
# -------------------------------
# Replace daemon.json
# -------------------------------
if [[ -n "$DEFAULT_OCTET" ]]; then
read -rp "Use existing second octet ($DEFAULT_OCTET)? [Y/n]: " confirm
confirm=${confirm:-Y}
if [[ "$confirm" =~ ^[Nn]$ ]]; then
read -rp "Enter new second octet (e.g. 102): " OCTET
else
OCTET="$DEFAULT_OCTET"
USE_EXISTING_CONFIG=true
fi
else
read -rp "Enter second octet for Docker address pool (e.g. 102): " OCTET
fi
echo "Writing Docker daemon.json with base $ADDRESS_POOL_BASE..."
# Validate input
if ! [[ "$OCTET" =~ ^[0-9]+$ ]] || ((OCTET < 1 || OCTET > 254)); then
echo "❌ Invalid octet: $OCTET"
exit 1
fi
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee "$DOCKER_CONFIG_FILE" > /dev/null
# Step 3: Write daemon.json (overwrite or create) only if needed
if [[ "$USE_EXISTING_CONFIG" == false ]]; then
echo "Writing Docker daemon config with base: 10.${OCTET}.0.0/16"
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee "$DOCKER_CONFIG" > /dev/null
{
"default-address-pools": [
{
"base": "10.${octet}.0.0/16",
"base": "10.${OCTET}.0.0/16",
"size": 24
}
]
}
EOF
echo "Docker config updated at $DOCKER_CONFIG_FILE"
# -------------------------------
# Delete and recreate network
# -------------------------------
if docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
echo "Network '$NETWORK_NAME' exists. Deleting it..."
docker network rm "$NETWORK_NAME"
echo "Restarting Docker..."
sudo systemctl restart docker
else
echo "🟡 Skipping daemon config update and Docker restart (using existing settings)"
fi
echo "Creating network '$NETWORK_NAME' with subnet $NETWORK_SUBNET..."
docker network create \
--driver=bridge \
--subnet="$NETWORK_SUBNET" \
"$NETWORK_NAME"
# Step 4: Create standard networks
declare -A networks
networks[internet]="10.${OCTET}.100.0/24"
networks[pangolin_transport]="10.${OCTET}.200.0/24"
echo "✅ Done. You may need to restart Docker to apply default address pool changes:"
echo " sudo systemctl restart docker"
for name in "${!networks[@]}"; do
subnet="${networks[$name]}"
if docker network inspect "$name" >/dev/null 2>&1; then
echo "✅ Network '$name' already exists."
else
echo "Creating network '$name' with subnet $subnet"
if [[ "$name" == "internet" ]]; then
docker network create \
--driver=bridge \
--subnet="$subnet" \
"$name"
else
docker network create \
--driver=bridge \
--subnet="$subnet" \
--internal \
"$name"
fi
fi
done
echo "✅ Done. Docker daemon configured and standard networks created."

56
host_profile.sh Normal file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
set -euo pipefail
echo "hostname: $(hostname)"
echo "uptime: $(uptime -p)"
echo "os: $(lsb_release -ds)"
echo "kernel: $(uname -r)"
echo "architecture: $(uname -m)"
# CPU Info
echo "cpu:"
echo " model: $(lscpu | awk -F: '/Model name/ {print $2}' | xargs)"
echo " cores: $(nproc)"
echo " threads: $(lscpu | awk -F: '/^CPU\(s\)/ {print $2}' | xargs)"
# Frequency fallback: lscpu -> /proc/cpuinfo
freq=$(lscpu | awk -F: '/^CPU MHz/ { gsub(/^[ \t]+/, "", $2); printf "%.2f", $2 / 1000 }' 2>/dev/null)
if [[ -z "$freq" ]]; then
freq=$(awk -F: '/cpu MHz/ {print $2; exit}' /proc/cpuinfo | awk '{printf "%.2f", $1 / 1000}')
fi
echo " frequency_ghz: ${freq:-unknown}"
# Memory Info
mem_total=$(free -g | awk '/^Mem:/ {print $2}')
mem_free=$(free -g | awk '/^Mem:/ {print $4}')
if [[ "$mem_total" == "0" ]]; then
mem_total=$(free -m | awk '/^Mem:/ {printf "%.1f", $2 / 1024}')
mem_free=$(free -m | awk '/^Mem:/ {printf "%.1f", $4 / 1024}')
fi
echo "memory_gb:"
echo " total: $mem_total"
echo " free: $mem_free"
# Disk Devices (excluding loop and ram)
echo "disks:"
lsblk -dno NAME,SIZE,MODEL | grep -Ev '^loop|^ram' | while read -r name size model; do
echo " - device: /dev/$name"
echo " size: \"$size\""
echo " model: \"${model:-unknown}\""
done
# Disk Usage
echo "disk_usage:"
df -h --output=source,size,used,avail,target -x tmpfs -x devtmpfs | tail -n +2 | while read -r src size used avail target; do
echo " - mount: \"$target\""
echo " device: \"$src\""
echo " size: \"$size\""
echo " used: \"$used\""
echo " available: \"$avail\""
done
# Network Interfaces
echo "network_interfaces:"
ip -o -4 addr show | awk '!/ lo / {print " - iface: \"" $2 "\"\n ip: \"" $4 "\"" }'
# Machine ID
echo "machine_id: $(cat /etc/machine-id)"