Загрузка данных


#!/usr/bin/env bash
set -uo pipefail

# ОСнова (ОСОн, НППКТ) 2.14 — ФАЙЛ 1/2: базовая преднастройка «как руками через диск».
#
# Что делает (ровно те шаги, что довели стенд до рабочего apt + python3.9):
#   1. поднимает сеть (ens18 через ifupdown — после установки интерфейс DOWN);
#   2. подключает установочные диски (disk1/disk2) как apt-репозиторий file:;
#   3. чистит остатки прошлых попыток (сетевые/Debian-списки, 401 от dl.nppct.ru);
#   4. ставит базовые пакеты С ДИСКОВ (python3.9, git, tools).
#
# Это САМОДОСТАТОЧНАЯ точка старта. Сборка 3.9.6, venv, зависимости, SDK и продукт —
# в файле 2 (osnova_local_setup.sh), который запускается ПОСЛЕ этого.
#
# Запуск ПОД ОБЫЧНЫМ пользователем (нужен sudo NOPASSWD или пароль):
#     bash osnova_base_disk.sh

IFACE="${IFACE:-ens18}"                     # сетевой интерфейс (после установки обычно ens18)
ok(){ echo "  [OK]   $*"; }
act(){ echo "  [DO]   $*"; }
warn(){ echo "  [WARN] $*"; }
die(){ echo "ОШИБКА: $*" >&2; exit 1; }

. /etc/os-release 2>/dev/null || true
echo "=== ОСнова base-disk (сеть + репозиторий-диски + база) ==="
echo "  система: ${PRETTY_NAME:-?} (VERSION_ID=${VERSION_ID:-?})"
[ "$(id -u)" -ne 0 ] || die "Запусти под обычным пользователем, НЕ root"
sudo -v || die "нужен sudo"

echo "== 1. сеть (ifupdown) =="
# NetworkManager на ОСнове-станции неактивен, сетью правит ifupdown, а /etc/network/interfaces
# после установки знает только lo → ens18 остаётся DOWN. Каталога interfaces.d может не быть,
# поэтому пишем в основной файл (идемпотентно).
if ip -4 addr show "$IFACE" 2>/dev/null | grep -q 'inet '; then
  ok "$IFACE уже с адресом: $(ip -4 -o addr show "$IFACE" | awk '{print $4}' | head -1)"
else
  if ! grep -qE "iface[[:space:]]+$IFACE[[:space:]]+inet" /etc/network/interfaces 2>/dev/null; then
    printf '\nallow-hotplug %s\niface %s inet dhcp\n' "$IFACE" "$IFACE" | sudo tee -a /etc/network/interfaces >/dev/null
    act "в /etc/network/interfaces добавлен $IFACE (dhcp)"
  fi
  sudo ifup "$IFACE" 2>/dev/null || sudo dhclient -v "$IFACE" 2>/dev/null || true
  ip -4 addr show "$IFACE" | grep -q 'inet ' && ok "$IFACE поднят: $(ip -4 -o addr show "$IFACE" | awk '{print $4}' | head -1)" \
    || warn "$IFACE без адреса — проверь DHCP на бридже (в Proxmox — qaanat1)"
fi

echo "== 2. репозиторий = установочные диски =="
# Диски в Proxmox (ide0/ide2) → в госте /dev/sr0,/dev/sr1. Обычно уже примонтированы
# системой в /media/osnova/srN; если нет — монтируем ro сами. Регистрируем как file:.
sudo install -d -m 0755 /media/osnova
FOUND=0
for dev in /dev/sr0 /dev/sr1 /dev/sr2; do
  [ -b "$dev" ] || continue
  n="$(basename "$dev")"
  # уже примонтирован где-то? возьмём тот путь; иначе смонтируем в /media/osnova/srN
  mp="$(findmnt -n -o TARGET --source "$dev" 2>/dev/null | head -1)"
  if [ -z "$mp" ]; then
    mp="/media/osnova/$n"; sudo install -d -m 0755 "$mp"
    sudo mount -o ro "$dev" "$mp" 2>/dev/null || { warn "$dev не смонтировался (нет диска) — пропуск"; continue; }
  fi
  [ -d "$mp/dists" ] || { warn "$dev ($mp) без dists/ — не репозиторий ОСновы, пропуск"; continue; }
  SUITE="$(ls "$mp/dists" 2>/dev/null | grep -vi stable | head -1)"; [ -n "$SUITE" ] || SUITE="onyx"
  echo "deb file:${mp} ${SUITE} main contrib non-free" | sudo tee "/etc/apt/sources.list.d/osnova-${n}.list" >/dev/null
  # для доступности после ребута
  grep -q " ${mp} " /etc/fstab 2>/dev/null || \
    echo "${dev}  ${mp}  iso9660  ro,nofail  0  0" | sudo tee -a /etc/fstab >/dev/null
  act "диск ${n} → file:${mp} (suite=${SUITE})"
  FOUND=$((FOUND+1))
done
[ "$FOUND" -gt 0 ] || die "дисков ОСновы не найдено. Подключи disk1/disk2 в Proxmox (Hardware → CD/DVD)."
# закомментировать родные cdrom:-строки (интерактивны — вешают apt), с бэкапом
grep -q '^deb cdrom:' /etc/apt/sources.list 2>/dev/null && \
  sudo sed -i.bak 's/^deb cdrom:/# deb cdrom:/' /etc/apt/sources.list && act "cdrom:-строки закомментированы (бэкап .bak)"

echo "== 3. чистка остатков прошлых попыток =="
# Сетевые/Debian-списки и 401-репозиторий вендора роняли apt update — сносим.
sudo rm -f /etc/apt/sources.list.d/nppct-onyx.list \
           /etc/apt/sources.list.d/zz-debian-*.list \
           /etc/apt/apt.conf.d/99-archive-valid-until \
           /etc/apt/apt.conf.d/zz99-default-release-off \
           /etc/apt/auth.conf.d/nppct.conf 2>/dev/null
ok "остатки убраны"

echo "== 4. индекс + базовые пакеты с дисков =="
sudo DEBIAN_FRONTEND=noninteractive apt-get update </dev/null || warn "apt-get update с ошибкой — проверь file:-источники"
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y </dev/null \
  python3.9 git wget curl zip unzip make ca-certificates \
  || warn "часть базовых пакетов не встала — смотри вывод"
ok "python3.9: $(python3.9 --version 2>&1)"

echo
echo "=== База готова. Дальше: bash osnova_local_setup.sh (сборка 3.9.6 + тесты) ==="