Inštalácia CuroMD servera na NixOS

Tento script je potrebné spustiť s parametrom iniciačného kódu, ktorý ti poskytne obchodné oddelenie Curo s.r.o..

curl -sL "linux.curo.sk/inst-curomd?lic=demo" | sudo sh

Pre účely testovania AIS Curo je možné použiť iniciačný kód demo. V prípade, že máš vlastný, tak ho použi v predchádzajúcom príkaze ako parameter lic=TVOJ-KOD.

Parametre

Parameter Hodnoty Vysvetlenie
lic číslo poskytne obchodné oddelenie Curo s.r.o., alebo sa použije DEMO
render sh alebo html Určuje, či sa má stránka vytvoriť pre Internetový prehliadač alebo príkazový riadok.
debug-render-script 1 alebo 0 Používa sa pri zlepšovaní a testovaní scriptov.

Čo sa vykoná?

echo "kontrola prostredia..." 
assertIsNixOS
assertIsNotNixInstaller
assertIsRoot

Kontrola, či je dodaný parameter potrebný na stiahnutie licenčného súboru:

LIC=""
if [ -z "${LIC}" ]; then
  echo "ERROR: Tento script je potrebné stiahnuť s parametrom `lic`. Pozri dokumentáciu na stránke http://linux.curo.sk/inst-curomd."
  exit 1
fi

Pokiaľ je všetko v poriadku, stiahne sa licencia a zistí sa identifikátor inštalácie, potrebný pre ďalšie inštalácie:

# stiahnut licenciu
_download demo.txt /tmp/licencia.txt
# extrahovat instid
INSTID=$(grep "Inštalácia: " /tmp/licencia.txt)
INSTID=$(echo $INSTID | cut -c15-19)

Kontrola, či už to náhodou nie je inicializované

DIR="/var/lib/curo-a${INSTID}"
if [ -e "${DIR}" ]; then
  echo "Konfigurácia už existuje v adresári: ${DIR}"
  exit 1
fi

Môžeme zinicializovať

sudo mkdir -p ${DIR}/config-pzs
sudo mv /tmp/licencia.txt ${DIR}/config-pzs/licencia.txt
sudo chown root:root ${DIR}/config-pzs/licencia.txt

stiahnutie nix configu a jeho zmena instID

mkdir -p /opt/curo
curl -sL https://kb.curo.sk/nixos/announce-md > /opt/curo/announce-md
chmod +x /opt/curo/announce-md
_download nixos-curo-md.nix /etc/nixos/curo-md.nix
sed -i "s/instID = \"00000\";/instID = \"${INSTID}\";/" /etc/nixos/curo-md.nix

build systemu

nixos-rebuild switch

Jednotlivé časti scriptu

Začneme hlavičkou scriptu, ktorá zabezpečí, aby sme nepokračovali, ak nastane nepredvídaná chyba:

#!/usr/bin/env bash

set -e -o errexit
set -o pipefail
if [[ "${DEBUG}" == 'true' ]]; then
  set -o xtrace
else
  export DEBUG=
fi
set -o nounset

Skontrolujeme, či sme v NixOS distribúcii

isNixOS() {
  if [ -f /etc/NIXOS ]; then
    echo 1
  else
    echo 0
  fi
}

assertIsNixOS() {
  MESSAGE="${1:-Program vyžaduje prostedie Linux distribúcie NixOS.}"
  if [ "x$(isNixOS)" == "x0" ]; then
    echo "ERROR: $MESSAGE" >/dev/stderr
    exit 1
  fi
}

assertIsSupportedNixOS() {
  REQUIRED_VER="${1:-22.05}"
  assertIsNixOS
  source /etc/os-release
  if [ "${VERSION_ID}" != "${REQUIRED_VER}" ]; then
    echo "ERROR: Vyžaduje sa verzia NixOS ${REQUIRED_VER}. Aktuálne máš spustenú verziu ${VERSION_ID}." >/dev/stderr
    exit 1
  fi
}

Skontrolujeme, či máme oprávnenia používateľa root, lebo inak by všetky detekcie nemuseli byť správne

isRoot() {
  if [ $UID != 0 ]; then
    echo 0
  else
    echo 1
  fi
}

assertIsRoot() {
  MESSAGE="${1:-Program vyžaduje práva super používateľa. Použite príkaz 'sudo -i'.}"
  if [ "x$(isRoot)" == "x0" ]; then
    echo "ERROR: $MESSAGE" >/dev/stderr
    exit 1
  fi
}

Budeme sa chcieť uistiť, že NixOS nie je spustený z inštalačného média

isNixInstaller() {
  if grep -q "imports = \[ <nixpkgs/nixos/modules/installer" /etc/nixos/configuration.nix; then
    echo 1
  else
    echo 0
  fi
}

assertIsNixInstaller() {
  MESSAGE="${1:-Program vyžaduje prostredie Linux distribúcie NixOS spustenej z inštalačného média.}"
  if [ "x$(isNixInstaller)" == "x0" ]; then
    echo "ERROR: $MESSAGE" >/dev/stderr
    exit 1
  fi
}

assertIsNotNixInstaller() {
  MESSAGE="${1:-Program nie je možné spustiť v prostredí NixOS inštalačného média.}"
  if [ "x$(isNixInstaller)" != "x0" ]; then
    echo "ERROR: $MESSAGE" >/dev/stderr
    exit 1
  fi
}

Budeme potrebovať stiahnuť niektoré konfiguračné súbory

_log() {
  local text=$1
  echo ": ${text}"
  #  >&2
}

export _ADD_PARAMS=()

_join() {
  (($#)) || return 1 # At least delimiter required
  local -- delim="$1" str IFS=
  shift
  str="${*/#/$delim}" # Expand arguments with prefixed delimiter (Empty IFS)
  echo "${str:${#delim}}" # Echo without first delimiter
}

_download() {
  if [[ $# -ne 2 ]]; then
    echo 'missing parameters source and target'
    exit 1
  fi

  local srcName=$1
  local dstName=$2
  local add=""
  if [ ${#_ADD_PARAMS[@]} -gt 0 ]; then
    add=$(_join '&' "${_ADD_PARAMS[@]}")
  fi

  # TODO test that local files work
  # TODO should dstName contain the /mnt prefix or should we test if we are in installation mode?
  _log "INFO kopirujem ${srcName} do $dstName"
  curl -sL "linux.curo.sk/d/${srcName}?&${add}" -o "${dstName}"
}

Verzia: 0.1.0 © Curo s.r.o. | Táto stránka nepoužíva keksíky a nepotrebuje JavaScript.
Komunikujeme cez  Matrix