Добро пожаловать в сообщество!
Рад, что мне еще 1 человеку удалось “придать уверенности и импульса”.
Ведь страшно только начать крутить педали.. А дальше Вы сборку(тренировочные колесики) открутите и все у Вас будет отлично.
Хотя знаю, что некоторые так и ездят с моими “колесиками” =)
У нас это не запрещено и не осуждается =)
Ему точно будет тяжеловато..
Но время покажет, нужно ли оно Вам в целом и на сколько его скорость Вас устраивает.
Конкретно про квоты там написано следующее (более качественный перевод. чем на их странице):
Квоты хранения и пропускной способности
С одним релизом может быть связано до 1000 ресурсов релиза. Размер каждого файла, включённого в релиз, должен быть менее 2 ГиБ. Ограничений на общий размер релиза и использование пропускной способности нет.
Таким образом можно спокойно выложить два образа для восьмой версии и два для девятой.
Единственное, необходимо будет изменить имена самих файлов, так как сейчас они нарушают лицензию на торговую марку, под которой распространяется Proxmox.
Proxmox® является зарегистрированной торговой маркой Proxmox Server Solutions GmbH в ЕС, США и других странах. Важные ограничения:
Запрещено:
- Использование торговой марки в доменных именах без разрешения
- Названия проектов типа “Proxmox XY App”
- Изменение или включение логотипа в собственный логотип
- Использование логотипа для представления вашей компании или продуктов
Рекомендуемый подход:
- Используйте формулировки типа “XY App для Proxmox Virtual Environment”
- Размещайте логотип Proxmox менее заметно, чем собственный
- При сомнениях запрашивайте письменное разрешение
# Определяем функцию загрузки. Ссылки можно передавать в параметрах вызова.
# Эта реализация для наглядности.
load_functions() {
local primary_source="https://raw.githubusercontent.com/samohosting-
ru/samohosting-scripts/ru_dev/misc/install.func"
local fallback_source="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func"
if command -v curl >/dev/null 2>&1; then
if ! source <(curl -fsSL "$primary_source" 2>/dev/null); then
echo "ВНИМАНИЕ: Основной источник недоступен, используем fallback"
source <(curl -fsSL "$fallback_source") || {
echo "ОШИБКА: Не удалось загрузить функции установки"
exit 1
}
fi
elif command -v wget >/dev/null 2>&1; then
if ! source <(wget -qO- "$primary_source" 2>/dev/null); then
echo "ВНИМАНИЕ: Основной источник недоступен, используем fallback"
source <(wget -qO- "$fallback_source") || {
echo "ОШИБКА: Не удалось загрузить функции установки"
exit 1
}
fi
else
echo "ОШИБКА: Не найден curl или wget"
exit 1
fi
}
# Загружаем функции
load_functions
Немного сложнее, но универсальнее.
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
get_source(){
local -n urls=$1
local -n loaders=$2
for url in "${urls[@]}"; do
echo " Загружаем $url"
for loader in "${loaders[@]}"; do
read -r -a loader_parts <<< "$loader"
local cmd=( "${loader_parts[@]}" "$url" )
if "${cmd[@]}" 2>/dev/null | source /dev/stdin; then
echo " ✓ Успешно: ${loader_parts[0]}"
return 0
fi
done
echo " ✗ Неудачно"
done
echo " ✗ Тотальная неудача!"
}
# - - - - - - - - - - - - - - -
getters=(
"wget -qLO - "
"curl -s "
)
Install_URLs=(
"https://raw.githubusercontent.com/samohosting-ru/samohosting-scripts/ru_dev/misc/install.func"
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func"
)
Build_URLs=(
"https://raw.githubusercontent.com/samohosting-ru/samohosting-scripts/ru_dev/misc/build.func"
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func"
)
get_source Install_URLs getters
get_source Build_URLs getters
Ещё про определние ip-адреса:
IP=$(hostname -I | awk ‘{print $1}’)
не всегда даст правильный результат.
Лучше попробовать несколько последовательно:
средствами ip route get 1.1.1.1;
как и раньше hostname -I;
чтобы иметь возможность хотя бы локальной работы возвращать 127.0.0.1 .
И, если понадобится для настроек узнать внешний (публичный) адрес можно с помощью curl и wget обратиться к внешним сервисам (лучше, опять-таки, к нескольким). Например:
ifconfig.co;
ipecho.net;
ifconfig.me.
Обобщающий скрипт получения ip-адресов.
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
# Возвращает «приватный» IP (локальный интерфейс по умолчанию)
get_private_ip() {
local ip
ip=$(ip route get 1.1.1.1 2>/dev/null | awk '/src/ {print $7; exit}')
[[ -n $ip ]] || ip=$(hostname -I 2>/dev/null | awk '{print $1}')
printf '%s\n' "${ip:-127.0.0.1}"
}
# Возвращает «публичный» IP через внешние сервисы
get_public_ip() {
local ip
for svc in \
"curl -fsSL https://ifconfig.co" \
"curl -fsSL https://ipecho.net/plain" \
"wget -qO- https://ifconfig.me"; do
# разбиваем строку svc на команду и её аргументы
read -r -a parts <<< "$svc"
if ip=$("${parts[@]}" 2>/dev/null); then
printf '%s\n' "$ip"
return 0
fi
done
printf 'Unavailable\n'
}
# Пример использования
echo "Private IP: $(get_private_ip)"
echo "Public IP: $(get_public_ip)"
Ссылка, увы, нерабочая…
`# wget https://dev.test.samohosting.ru/`
--2025-08-31 04:15:54-- https://dev.test.samohosting.ru/ Resolving dev.test.samohosting.ru (dev.test.samohosting.ru)... 38.180.134.240 Connecting to dev.test.samohosting.ru (dev.test.samohosting.ru)|38.180.134.240|:443... connected. GnuTLS: A TLS fatal alert has been received. GnuTLS: received alert [112]: The server name sent was not recognized Unable to establish SSL connection.
Данная ошибка возникает из-за несоответствия между именем сервера, указанным в SSL-сертификате, и именем хоста, к которому вы пытаетесь подключиться. Код ошибки 112 в протоколе TLS означает “unrecognized_name” — сервер не распознает имя, указанное в запросе.
Проблема связана с расширением TLS под названием Server Name Indication (SNI). SNI позволяет серверу размещать несколько SSL-сертификатов на одном IP-адресе, предоставляя правильный сертификат в зависимости от запрашиваемого доменного имени.
Connecting to 38.180.134.240 CONNECTED(00000003) 400723663B760000:error:0A000458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name:../ssl/record/rec_layer_s3.c:916:SSL alert number 112 --- no peer certificate available --- No client certificate CA names sent Negotiated TLS1.3 group: <NULL> --- SSL handshake has read 7 bytes and written 1565 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Protocol: TLSv1.3 This TLS version forbids renegotiation. Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok)
Вывод команды openssl s_client подтверждает проблему с Server Name Indication (SNI). Ключевые моменты из диагностики:
Основные индикаторы проблемы:
TLS Alert 112: error:0A000458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name:../ssl/record/rec_layer_s3.c:916:SSL alert number 112
Отсутствие сертификата: no peer certificate available
Использование TLS 1.3: Protocol: TLSv1.3
Пустой шифр: Cipher is (NONE)
OpenSSL намеренно подавляет алерты warning-уровня в TLS 1.3, поскольку этот протокол не использует градацию серьезности предупреждений - все ошибочные алерты считаются критическими.
--2025-08-31 04:36:25-- https://dev.test.samohosting.ru/ Resolving dev.test.samohosting.ru (dev.test.samohosting.ru)... 38.180.134.240 Connecting to dev.test.samohosting.ru (dev.test.samohosting.ru)|38.180.134.240|:443... connected. GnuTLS: A TLS fatal alert has been received. GnuTLS: received alert [112]: The server name sent was not recognized Unable to establish SSL connection.
Даже с флагом --no-check-certificate wget по-прежнему получает TLS Alert 112, что указывает на фундментальную проблему на уровне TLS-handshake. Это более серьезная проблема, чем обычная ошибка валидации сертификата.
Проблема не в проверке сертификата
Флаг --no-check-certificate должен полностью отключать проверку SSL-сертификата, но сервер активно отклоняет соединение на этапе TLS-handshake, отправляя Alert 112 “unrecognized name”.
Проблема заключается в серверной конфигурации SNI, а не в клиентских настройках SSL. Сервер активно отклоняет соединения для неопознанного домена dev.test.samohosting.ru, что делает невозможным установление TLS-соединения даже с отключенной проверкой сертификата. Решение требует изменений на стороне сервера или использования альтернативных методов доступа к ресурсу.
Я точно не буду поддерживать несколько отдельных “приложений” с разными зеркалами, как это сейчас было реализовано “в моменте, на коленке” чтобы помочь ребятам написавшим в чаты.
Дальше будет только 1 install.samohosting
Концепция была и есть
“Ничего не менять в исходном коде helper scripts”
только создать workflow git clone repo - translate repo - create a new RU brench
и как я уже рассказывал в прошлых роликах, это тоже “затухло”, пайплайн я так и не довел до ума, а теперь нужно “догонять”, т.к. изменений в main HS случилось придостаточно, начиная от предложения по сбору статистики, заканчивая в целом кучей изменений..
Касательно размещения на гитхабе образа - подумаю, я если честно не помню, почему не стал так делать.. Но когда дойдут руки обновить.. пока не знаю, думаю, что дождусь 9.1 PVE..
Еще раз спасибо за предложения и детальные комментарии.
У меня при попытке перестановке ничего не происходит, удалил контейнер ввел в shell pve bash -c “$(wget -qLO - install.samohosting.ru)” но ничего не происходит
Таже самая проблема была! Разобрался, у себя на компьютере откуда подключался через браузер к proxmox, был настроен обход замедления youtube через программку byedpi в виде службы виндоус. Так вот, отключение этой службы (у меня называлась zapred) перед вводом скрипта установки самохостинга, исправило ситуацию, все начало устанавливаться.