Files
meezi/mirrors/nexus/add-liara-mirrors.sh
T
soroush.asadi 345ae0a4b5
CI/CD / CI · Admin API (dotnet build) (push) Successful in 41s
CI/CD / CI · Admin Web (tsc) (push) Failing after 5s
CI/CD / CI · Website (tsc) (push) Failing after 4s
CI/CD / CI · Koja (tsc) (push) Failing after 5s
CI/CD / CI · API (dotnet build + test) (push) Successful in 1m13s
CI/CD / CI · Dashboard (tsc) (push) Failing after 2m32s
CI/CD / Deploy · all services (push) Has been skipped
first commit
2026-05-31 11:06:24 +03:30

154 lines
6.7 KiB
Bash

#!/usr/bin/env bash
# ─────────────────────────────────────────────────────────────────────────────
# Add Liara mirror repos to Nexus and create groups (Liara → Runflare fallback)
#
# New repos:
# npm-liara-proxy → https://package-mirror.liara.ir/repository/npm/
# npm-group → npm-liara-proxy + npm-proxy (Runflare)
# pypi-liara-proxy → https://package-mirror.liara.ir/repository/pypi/
# pypi-group → pypi-liara-proxy + pypi-proxy (Runflare)
# ubuntu-proxy → http://linux-mirror.liara.ir/repository/ubuntu/
# ubuntu-security-proxy → http://linux-mirror.liara.ir/repository/ubuntu-security/
#
# Usage:
# ./mirrors/nexus/add-liara-mirrors.sh
# NEXUS_ADMIN_PASS=MyPass ./mirrors/nexus/add-liara-mirrors.sh
# UBUNTU_DIST=focal ./mirrors/nexus/add-liara-mirrors.sh # default: jammy
# ─────────────────────────────────────────────────────────────────────────────
set -euo pipefail
NEXUS_URL="http://localhost:8081"
ADMIN_PASS="${NEXUS_ADMIN_PASS:-Mirror@2024!}"
UBUNTU_DIST="${UBUNTU_DIST:-jammy}" # change to focal/bionic if your Dockerfiles use older Ubuntu
AUTH="-u admin:$ADMIN_PASS"
ok() { echo "$1"; }
skip() { echo "⚠️ $1 already exists (skipped)"; }
fail() { echo "$1 — HTTP $2"; }
add_repo() {
local TYPE="$1" JSON="$2"
local NAME
NAME=$(echo "$JSON" | grep -o '"name":"[^"]*"' | head -1 | cut -d'"' -f4)
local HTTP
HTTP=$(curl -s -o /dev/null -w "%{http_code}" $AUTH \
-X POST "$NEXUS_URL/service/rest/v1/repositories/$TYPE" \
-H "Content-Type: application/json" -d "$JSON")
case "$HTTP" in
201) ok "$NAME" ;;
400) skip "$NAME" ;;
*) fail "$NAME" "$HTTP" ;;
esac
}
# ── npm ───────────────────────────────────────────────────────────────────────
echo ""
echo "📦 npm"
add_repo "npm/proxy" '{
"name": "npm-liara-proxy",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": false},
"proxy": {
"remoteUrl": "https://package-mirror.liara.ir/repository/npm/",
"contentMaxAge": 1440, "metadataMaxAge": 1440
},
"negativeCache": {"enabled": true, "timeToLive": 1440},
"httpClient": {"blocked": false, "autoBlock": true}
}'
add_repo "npm/group" '{
"name": "npm-group",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": false},
"group": {
"memberNames": ["npm-liara-proxy", "npm-proxy"]
}
}'
# ── PyPI ──────────────────────────────────────────────────────────────────────
echo ""
echo "🐍 PyPI"
add_repo "pypi/proxy" '{
"name": "pypi-liara-proxy",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": true},
"proxy": {
"remoteUrl": "https://package-mirror.liara.ir/repository/pypi/",
"contentMaxAge": 1440, "metadataMaxAge": 1440
},
"negativeCache": {"enabled": true, "timeToLive": 1440},
"httpClient": {"blocked": false, "autoBlock": true}
}'
add_repo "pypi/group" '{
"name": "pypi-group",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": true},
"group": {
"memberNames": ["pypi-liara-proxy", "pypi-proxy"]
}
}'
# ── Ubuntu APT ────────────────────────────────────────────────────────────────
echo ""
echo "🐧 Ubuntu APT (distribution: $UBUNTU_DIST)"
echo " If your Dockerfiles use a different Ubuntu version, re-run with:"
echo " UBUNTU_DIST=focal $0"
echo ""
add_repo "apt/proxy" '{
"name": "ubuntu-proxy",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": false},
"proxy": {
"remoteUrl": "http://linux-mirror.liara.ir/repository/ubuntu/",
"contentMaxAge": 1440, "metadataMaxAge": 1440
},
"negativeCache": {"enabled": true, "timeToLive": 1440},
"httpClient": {
"blocked": false, "autoBlock": true,
"connection": {"useTrustStore": false}
},
"apt": {"distribution": "'"$UBUNTU_DIST"'", "flat": false}
}'
add_repo "apt/proxy" '{
"name": "ubuntu-security-proxy",
"online": true,
"storage": {"blobStoreName": "default", "strictContentTypeValidation": false},
"proxy": {
"remoteUrl": "http://linux-mirror.liara.ir/repository/ubuntu-security/",
"contentMaxAge": 1440, "metadataMaxAge": 1440
},
"negativeCache": {"enabled": true, "timeToLive": 1440},
"httpClient": {
"blocked": false, "autoBlock": true,
"connection": {"useTrustStore": false}
},
"apt": {"distribution": "'"$UBUNTU_DIST"'", "flat": false}
}'
# ── Done ──────────────────────────────────────────────────────────────────────
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo "🎉 Done!"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo " npm-group → https://mirror.soroushasadi.com/repository/npm-group/"
echo " Liara first, Runflare as fallback"
echo ""
echo " pypi-group → https://mirror.soroushasadi.com/repository/pypi-group/"
echo " Liara first, Runflare as fallback"
echo ""
echo " Ubuntu APT → https://mirror.soroushasadi.com/repository/ubuntu-proxy/"
echo " distribution: $UBUNTU_DIST"
echo " security: https://mirror.soroushasadi.com/repository/ubuntu-security-proxy/"
echo ""
echo "To use Ubuntu APT in a Dockerfile:"
echo " RUN echo 'deb https://mirror.soroushasadi.com/repository/ubuntu-proxy/ $UBUNTU_DIST main restricted universe' > /etc/apt/sources.list && \\"
echo " echo 'deb https://mirror.soroushasadi.com/repository/ubuntu-security-proxy/ $UBUNTU_DIST-security main restricted universe' >> /etc/apt/sources.list && \\"
echo " apt-get update"
echo ""