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
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. |
Hlavná postupnosť scriptu:
echo "kontrola prostredia..."
assertIsNixOS
assertIsRoot
export TMP_DIR=/tmp/curo-newest
diffNixConfig
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/
}