mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-04 01:45:55 +01:00
Compare commits
3 Commits
fix/vm-sdn
...
fix/github
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e52111ca0 | ||
|
|
375dccacb1 | ||
|
|
1c463369c7 |
6
ct/headers/zerobyte
Normal file
6
ct/headers/zerobyte
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ __ __
|
||||||
|
/__ / ___ _________ / /_ __ __/ /____
|
||||||
|
/ / / _ \/ ___/ __ \/ __ \/ / / / __/ _ \
|
||||||
|
/ /__/ __/ / / /_/ / /_/ / /_/ / /_/ __/
|
||||||
|
/____/\___/_/ \____/_.___/\__, /\__/\___/
|
||||||
|
/____/
|
||||||
123
misc/tools.func
123
misc/tools.func
@@ -783,16 +783,25 @@ github_api_call() {
|
|||||||
|
|
||||||
for attempt in $(seq 1 $max_retries); do
|
for attempt in $(seq 1 $max_retries); do
|
||||||
local http_code
|
local http_code
|
||||||
http_code=$(curl -fsSL -w "%{http_code}" -o "$output_file" \
|
http_code=$(curl -sSL -w "%{http_code}" -o "$output_file" \
|
||||||
-H "Accept: application/vnd.github+json" \
|
-H "Accept: application/vnd.github+json" \
|
||||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||||
"${header_args[@]}" \
|
"${header_args[@]}" \
|
||||||
"$url" 2>/dev/null || echo "000")
|
"$url" 2>/dev/null) || true
|
||||||
|
|
||||||
case "$http_code" in
|
case "$http_code" in
|
||||||
200)
|
200)
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
401)
|
||||||
|
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||||
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
||||||
|
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
|
||||||
|
else
|
||||||
|
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
403)
|
403)
|
||||||
# Rate limit - check if we can retry
|
# Rate limit - check if we can retry
|
||||||
if [[ $attempt -lt $max_retries ]]; then
|
if [[ $attempt -lt $max_retries ]]; then
|
||||||
@@ -801,11 +810,22 @@ github_api_call() {
|
|||||||
retry_delay=$((retry_delay * 2))
|
retry_delay=$((retry_delay * 2))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
msg_error "GitHub API rate limit exceeded. Set GITHUB_TOKEN to increase limits."
|
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
||||||
|
msg_error "To increase the limit, export a GitHub token before running the script:"
|
||||||
|
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
404)
|
404)
|
||||||
msg_error "GitHub API endpoint not found: $url"
|
msg_error "GitHub repository or release not found (HTTP 404): $url"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
000 | "")
|
||||||
|
if [[ $attempt -lt $max_retries ]]; then
|
||||||
|
sleep "$retry_delay"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
msg_error "GitHub API connection failed (no response)."
|
||||||
|
msg_error "Check your network/DNS: curl -sSL https://api.github.com/rate_limit"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -813,7 +833,7 @@ github_api_call() {
|
|||||||
sleep "$retry_delay"
|
sleep "$retry_delay"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
msg_error "GitHub API call failed with HTTP $http_code"
|
msg_error "GitHub API call failed (HTTP $http_code)."
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -833,14 +853,18 @@ codeberg_api_call() {
|
|||||||
|
|
||||||
for attempt in $(seq 1 $max_retries); do
|
for attempt in $(seq 1 $max_retries); do
|
||||||
local http_code
|
local http_code
|
||||||
http_code=$(curl -fsSL -w "%{http_code}" -o "$output_file" \
|
http_code=$(curl -sSL -w "%{http_code}" -o "$output_file" \
|
||||||
-H "Accept: application/json" \
|
-H "Accept: application/json" \
|
||||||
"$url" 2>/dev/null || echo "000")
|
"$url" 2>/dev/null) || true
|
||||||
|
|
||||||
case "$http_code" in
|
case "$http_code" in
|
||||||
200)
|
200)
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
401)
|
||||||
|
msg_error "Codeberg API authentication failed (HTTP 401)."
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
403)
|
403)
|
||||||
# Rate limit - retry
|
# Rate limit - retry
|
||||||
if [[ $attempt -lt $max_retries ]]; then
|
if [[ $attempt -lt $max_retries ]]; then
|
||||||
@@ -849,11 +873,20 @@ codeberg_api_call() {
|
|||||||
retry_delay=$((retry_delay * 2))
|
retry_delay=$((retry_delay * 2))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
msg_error "Codeberg API rate limit exceeded."
|
msg_error "Codeberg API rate limit exceeded (HTTP 403)."
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
404)
|
404)
|
||||||
msg_error "Codeberg API endpoint not found: $url"
|
msg_error "Codeberg repository or release not found (HTTP 404): $url"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
000 | "")
|
||||||
|
if [[ $attempt -lt $max_retries ]]; then
|
||||||
|
sleep "$retry_delay"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
msg_error "Codeberg API connection failed (no response)."
|
||||||
|
msg_error "Check your network/DNS: curl -sSL https://codeberg.org"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -861,7 +894,7 @@ codeberg_api_call() {
|
|||||||
sleep "$retry_delay"
|
sleep "$retry_delay"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
msg_error "Codeberg API call failed with HTTP $http_code"
|
msg_error "Codeberg API call failed (HTTP $http_code)."
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -1441,7 +1474,7 @@ get_latest_github_release() {
|
|||||||
|
|
||||||
if ! github_api_call "https://api.github.com/repos/${repo}/releases/latest" "$temp_file"; then
|
if ! github_api_call "https://api.github.com/repos/${repo}/releases/latest" "$temp_file"; then
|
||||||
rm -f "$temp_file"
|
rm -f "$temp_file"
|
||||||
return 1
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local version
|
local version
|
||||||
@@ -1449,7 +1482,8 @@ get_latest_github_release() {
|
|||||||
rm -f "$temp_file"
|
rm -f "$temp_file"
|
||||||
|
|
||||||
if [[ -z "$version" ]]; then
|
if [[ -z "$version" ]]; then
|
||||||
return 1
|
msg_error "Could not determine latest version for ${repo}"
|
||||||
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$version"
|
echo "$version"
|
||||||
@@ -1466,7 +1500,7 @@ get_latest_codeberg_release() {
|
|||||||
# Codeberg API: get all releases and pick the first non-draft/non-prerelease
|
# Codeberg API: get all releases and pick the first non-draft/non-prerelease
|
||||||
if ! codeberg_api_call "https://codeberg.org/api/v1/repos/${repo}/releases" "$temp_file"; then
|
if ! codeberg_api_call "https://codeberg.org/api/v1/repos/${repo}/releases" "$temp_file"; then
|
||||||
rm -f "$temp_file"
|
rm -f "$temp_file"
|
||||||
return 1
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local version
|
local version
|
||||||
@@ -1480,7 +1514,8 @@ get_latest_codeberg_release() {
|
|||||||
rm -f "$temp_file"
|
rm -f "$temp_file"
|
||||||
|
|
||||||
if [[ -z "$version" ]]; then
|
if [[ -z "$version" ]]; then
|
||||||
return 1
|
msg_error "Could not determine latest version for ${repo}"
|
||||||
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$version"
|
echo "$version"
|
||||||
@@ -1567,13 +1602,34 @@ get_latest_gh_tag() {
|
|||||||
"${header_args[@]}" \
|
"${header_args[@]}" \
|
||||||
"https://api.github.com/repos/${repo}/tags?per_page=100" 2>/dev/null) || true
|
"https://api.github.com/repos/${repo}/tags?per_page=100" 2>/dev/null) || true
|
||||||
|
|
||||||
|
if [[ "$http_code" == "401" ]]; then
|
||||||
|
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||||
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
||||||
|
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
|
||||||
|
else
|
||||||
|
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
|
||||||
|
fi
|
||||||
|
rm -f /tmp/gh_tags.json
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$http_code" == "403" ]]; then
|
if [[ "$http_code" == "403" ]]; then
|
||||||
msg_warn "GitHub API rate limit exceeded while fetching tags for ${repo}"
|
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
||||||
|
msg_error "To increase the limit, export a GitHub token before running the script:"
|
||||||
|
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
||||||
|
rm -f /tmp/gh_tags.json
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$http_code" == "000" || -z "$http_code" ]]; then
|
||||||
|
msg_error "GitHub API connection failed (no response)."
|
||||||
|
msg_error "Check your network/DNS: curl -sSL https://api.github.com/rate_limit"
|
||||||
rm -f /tmp/gh_tags.json
|
rm -f /tmp/gh_tags.json
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$http_code" != "200" ]] || [[ ! -s /tmp/gh_tags.json ]]; then
|
if [[ "$http_code" != "200" ]] || [[ ! -s /tmp/gh_tags.json ]]; then
|
||||||
|
msg_error "Unable to fetch tags for ${repo} (HTTP ${http_code})"
|
||||||
rm -f /tmp/gh_tags.json
|
rm -f /tmp/gh_tags.json
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -1659,6 +1715,15 @@ check_for_gh_release() {
|
|||||||
|
|
||||||
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
|
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
|
||||||
releases_json="[$(</tmp/gh_check.json)]"
|
releases_json="[$(</tmp/gh_check.json)]"
|
||||||
|
elif [[ "$http_code" == "401" ]]; then
|
||||||
|
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||||
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
||||||
|
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
|
||||||
|
else
|
||||||
|
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
|
||||||
|
fi
|
||||||
|
rm -f /tmp/gh_check.json
|
||||||
|
return 1
|
||||||
elif [[ "$http_code" == "403" ]]; then
|
elif [[ "$http_code" == "403" ]]; then
|
||||||
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
||||||
msg_error "To increase the limit, export a GitHub token before running the script:"
|
msg_error "To increase the limit, export a GitHub token before running the script:"
|
||||||
@@ -1679,12 +1744,26 @@ check_for_gh_release() {
|
|||||||
|
|
||||||
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
|
if [[ "$http_code" == "200" ]] && [[ -s /tmp/gh_check.json ]]; then
|
||||||
releases_json=$(</tmp/gh_check.json)
|
releases_json=$(</tmp/gh_check.json)
|
||||||
|
elif [[ "$http_code" == "401" ]]; then
|
||||||
|
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||||
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
||||||
|
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
|
||||||
|
else
|
||||||
|
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
|
||||||
|
fi
|
||||||
|
rm -f /tmp/gh_check.json
|
||||||
|
return 1
|
||||||
elif [[ "$http_code" == "403" ]]; then
|
elif [[ "$http_code" == "403" ]]; then
|
||||||
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
||||||
msg_error "To increase the limit, export a GitHub token before running the script:"
|
msg_error "To increase the limit, export a GitHub token before running the script:"
|
||||||
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
||||||
rm -f /tmp/gh_check.json
|
rm -f /tmp/gh_check.json
|
||||||
return 1
|
return 1
|
||||||
|
elif [[ "$http_code" == "000" || -z "$http_code" ]]; then
|
||||||
|
msg_error "GitHub API connection failed (no response)."
|
||||||
|
msg_error "Check your network/DNS: curl -sSL https://api.github.com/rate_limit"
|
||||||
|
rm -f /tmp/gh_check.json
|
||||||
|
return 1
|
||||||
else
|
else
|
||||||
msg_error "Unable to fetch releases for ${app} (HTTP ${http_code})"
|
msg_error "Unable to fetch releases for ${app} (HTTP ${http_code})"
|
||||||
rm -f /tmp/gh_check.json
|
rm -f /tmp/gh_check.json
|
||||||
@@ -2608,12 +2687,22 @@ function fetch_and_deploy_gh_release() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
if ! $success; then
|
if ! $success; then
|
||||||
if [[ "$http_code" == "403" ]]; then
|
if [[ "$http_code" == "401" ]]; then
|
||||||
|
msg_error "GitHub API authentication failed (HTTP 401)."
|
||||||
|
if [[ -n "${GITHUB_TOKEN:-}" ]]; then
|
||||||
|
msg_error "Your GITHUB_TOKEN appears to be invalid or expired."
|
||||||
|
else
|
||||||
|
msg_error "The repository may require authentication. Try: export GITHUB_TOKEN=\"ghp_your_token\""
|
||||||
|
fi
|
||||||
|
elif [[ "$http_code" == "403" ]]; then
|
||||||
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
msg_error "GitHub API rate limit exceeded (HTTP 403)."
|
||||||
msg_error "To increase the limit, export a GitHub token before running the script:"
|
msg_error "To increase the limit, export a GitHub token before running the script:"
|
||||||
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
msg_error " export GITHUB_TOKEN=\"ghp_your_token_here\""
|
||||||
|
elif [[ "$http_code" == "000" || -z "$http_code" ]]; then
|
||||||
|
msg_error "GitHub API connection failed (no response)."
|
||||||
|
msg_error "Check your network/DNS: curl -sSL https://api.github.com/rate_limit"
|
||||||
else
|
else
|
||||||
msg_error "Failed to fetch release metadata from $api_url after $max_retries attempts (HTTP $http_code)"
|
msg_error "Failed to fetch release metadata (HTTP $http_code)"
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -288,8 +288,8 @@ function default_settings() {
|
|||||||
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
||||||
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||||
echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
|
echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
|
||||||
if ! ip link show "${BRG}" &>/dev/null; then
|
if ! grep -q "^iface ${BRG}" /etc/network/interfaces; then
|
||||||
msg_error "Bridge '${BRG}' does not exist"
|
msg_error "Bridge '${BRG}' does not exist in /etc/network/interfaces"
|
||||||
exit
|
exit
|
||||||
else
|
else
|
||||||
echo -e "${DGN}Using LAN Bridge: ${BGN}${BRG}${CL}"
|
echo -e "${DGN}Using LAN Bridge: ${BGN}${BRG}${CL}"
|
||||||
@@ -305,8 +305,8 @@ function default_settings() {
|
|||||||
if [ "$NETWORK_MODE" = "dual" ]; then
|
if [ "$NETWORK_MODE" = "dual" ]; then
|
||||||
echo -e "${DGN}Network Mode: ${BGN}Dual Interface (Firewall)${CL}"
|
echo -e "${DGN}Network Mode: ${BGN}Dual Interface (Firewall)${CL}"
|
||||||
echo -e "${DGN}Using WAN MAC Address: ${BGN}${WAN_MAC}${CL}"
|
echo -e "${DGN}Using WAN MAC Address: ${BGN}${WAN_MAC}${CL}"
|
||||||
if ! ip link show "${WAN_BRG}" &>/dev/null; then
|
if ! grep -q "^iface ${WAN_BRG}" /etc/network/interfaces; then
|
||||||
msg_error "Bridge '${WAN_BRG}' does not exist"
|
msg_error "Bridge '${WAN_BRG}' does not exist in /etc/network/interfaces"
|
||||||
exit
|
exit
|
||||||
else
|
else
|
||||||
echo -e "${DGN}Using WAN Bridge: ${BGN}${WAN_BRG}${CL}"
|
echo -e "${DGN}Using WAN Bridge: ${BGN}${WAN_BRG}${CL}"
|
||||||
@@ -424,8 +424,8 @@ function advanced_settings() {
|
|||||||
if [ -z $BRG ]; then
|
if [ -z $BRG ]; then
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
fi
|
fi
|
||||||
if ! ip link show "${BRG}" &>/dev/null; then
|
if ! grep -q "^iface ${BRG}" /etc/network/interfaces; then
|
||||||
msg_error "Bridge '${BRG}' does not exist"
|
msg_error "Bridge '${BRG}' does not exist in /etc/network/interfaces"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
echo -e "${DGN}Using LAN Bridge: ${BGN}$BRG${CL}"
|
echo -e "${DGN}Using LAN Bridge: ${BGN}$BRG${CL}"
|
||||||
@@ -474,8 +474,8 @@ function advanced_settings() {
|
|||||||
if [ -z $WAN_BRG ]; then
|
if [ -z $WAN_BRG ]; then
|
||||||
WAN_BRG="vmbr1"
|
WAN_BRG="vmbr1"
|
||||||
fi
|
fi
|
||||||
if ! ip link show "${WAN_BRG}" &>/dev/null; then
|
if ! grep -q "^iface ${WAN_BRG}" /etc/network/interfaces; then
|
||||||
msg_error "WAN Bridge '${WAN_BRG}' does not exist"
|
msg_error "WAN Bridge '${WAN_BRG}' does not exist in /etc/network/interfaces"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
echo -e "${DGN}Using WAN Bridge: ${BGN}$WAN_BRG${CL}"
|
echo -e "${DGN}Using WAN Bridge: ${BGN}$WAN_BRG${CL}"
|
||||||
|
|||||||
Reference in New Issue
Block a user