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 parameterlic=TVOJ-KOD
.
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. |
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
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}"
}