Obsah

Aktualizácia

Prepokladom použitia tohto scriptu je, že tvoje PC je spustené z inštalačného média, alebo z už nainštalovanej distribúcie NixOS.

Stránka, ktorú čítaš obsahuje vysvetlenie diagnostického scriptu, ktorý môžeš na svojom PC spustiť nasledovným príkazom:

curl -sL "linux.curo.sk/upgrade?" | sudo sh

Predtým máš možnosť si ho skontrolovať v prehliadači pridaním parametra /upgrade?render=sh.

Najbezpečnejší spốsob je script najskôr stiahnuť na disk, skontrolovať a následne spustiť.

# stiahni do súboru
curl -sL "linux.curo.sk/upgrade?" > /tmp/upgrade.sh

# skontroluj
less /tmp/upgrade.sh
# prezeranie ukončíš stlačením klávesy 'q'

# spusti
sudo sh /tmp/upgrade.sh

Parametre

Parameter Hodnoty Vysvetlenie
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á?

Hlavná postupnosť scriptu:

echo "kontrola prostredia..." 
assertIsNixOS
assertIsRoot

export TMP_DIR=/tmp/curo-newest
diffNixConfig

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 chcieť vedieť, či diagnostikujeme PC z inštalačného média alebo už bežiacu verziu NixOS

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
}

Stiahneme aktuálne verzie konfiguračných súborov:

_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}"
}

diffNixConfig () {
  mkdir -p ${TMP_DIR}
    
  _download nixos-curo-md.nix ${TMP_DIR}/curo-md.nix
  _download nixos-curo-base.nix ${TMP_DIR}/curo-base.nix
  diff --color ${TMP_DIR}/ /etc/nixos/
}

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