Первичная настройка, часть 4: HTTPS веб-интерфейса (:8443, самоподписанный сертификат на имя и адреса сервера, свой сертификат, перенаправление браузера с HTTP); сервер времени из настроек (ntpd/chrony/timesyncd — bj-system-admin); постоянный адрес — bj-network (netplan try с откатом), вопрос при первой загрузке с образа; раздел «Сервер: HTTPS, время, сеть»; HTTPS в итоговой проверке; адреса https:// на экране установщика и консоли
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
# bj-system-admin — системные настройки сервера bj из веб-интерфейса (через root-демон bj-keymedia).
|
||||
# ntp — серверы времени (BJ_EXTRA: "ntp1.example.ru ntp2.example.ru"): ntpd, chrony или systemd-timesyncd —
|
||||
# что стоит на сервере. Время важно для подписей и обмена с НРД.
|
||||
set -uo pipefail
|
||||
q() { python3 -c "import json,sys;print(json.dumps(sys.argv[1],ensure_ascii=False))" "$1"; }
|
||||
ok() { echo "{\"ok\":true,\"output\":$(q "$1")}"; }
|
||||
err() { echo "{\"ok\":false,\"error\":$(q "$1")}"; exit 0; }
|
||||
cmd=${1:-}
|
||||
case "$cmd" in
|
||||
ntp)
|
||||
servers=$(printf '%s' "${BJ_EXTRA:-}" | tr ',;' ' ' | xargs)
|
||||
[ -n "$servers" ] || err "не указан сервер времени"
|
||||
for s in $servers; do [[ "$s" =~ ^[A-Za-z0-9][A-Za-z0-9.-]{0,252}$ ]] || err "недопустимое имя сервера времени: $s"; done
|
||||
if systemctl is-active --quiet ntp || systemctl is-active --quiet ntpd || [ -f /etc/ntp.conf ] && ! systemctl is-active --quiet chrony && ! systemctl is-active --quiet systemd-timesyncd; then
|
||||
conf=/etc/ntp.conf; [ -f "$conf" ] || err "нет /etc/ntp.conf"
|
||||
cp -a "$conf" "$conf.bak-bj" 2>/dev/null
|
||||
python3 - "$conf" $servers <<'PY' || err "не удалось изменить /etc/ntp.conf"
|
||||
import sys,re
|
||||
p,servers=sys.argv[1],sys.argv[2:]
|
||||
out=[]
|
||||
for l in open(p).read().split("\n"):
|
||||
if l.startswith("server ") and l.rstrip().endswith("# bj"): continue # прежние наши
|
||||
if re.match(r"^(server|pool) ",l): l="#bj# "+l # чужие — выключаем
|
||||
out.append(l)
|
||||
out+=[f"server {s} iburst # bj" for s in servers]
|
||||
open(p,"w").write("\n".join(out).rstrip("\n")+"\n")
|
||||
PY
|
||||
svc=ntp; systemctl is-active --quiet ntpd && svc=ntpd
|
||||
systemctl restart "$svc" || err "служба $svc не перезапустилась"
|
||||
ok "серверы времени: $servers (служба $svc)"
|
||||
elif systemctl is-active --quiet chrony || [ -d /etc/chrony ]; then
|
||||
d=/etc/chrony/sources.d; mkdir -p "$d"
|
||||
: > "$d/bj.sources"; for s in $servers; do echo "server $s iburst" >> "$d/bj.sources"; done
|
||||
grep -q '^sourcedir /etc/chrony/sources.d' /etc/chrony/chrony.conf 2>/dev/null || echo 'sourcedir /etc/chrony/sources.d' >> /etc/chrony/chrony.conf
|
||||
systemctl restart chrony || err "служба chrony не перезапустилась"
|
||||
ok "серверы времени: $servers (служба chrony)"
|
||||
else
|
||||
mkdir -p /etc/systemd/timesyncd.conf.d
|
||||
printf '[Time]\nNTP=%s\n' "$servers" > /etc/systemd/timesyncd.conf.d/bj.conf
|
||||
timedatectl set-ntp true >/dev/null 2>&1
|
||||
systemctl restart systemd-timesyncd || err "служба systemd-timesyncd не перезапустилась"
|
||||
ok "серверы времени: $servers (служба systemd-timesyncd)"
|
||||
fi ;;
|
||||
*) err "неизвестная команда: $cmd" ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user