#!/bin/sh # CREDITS: https://github.com/MidnightRocket/posix-colors if [ -z "${NO_COLOR+x}" ] && { [ -t 1 ] && [ -t 2 ] || [ -n "${CLICOLOR_FORCE+x}" ];} ; then readonly T_USE_COLOR=true; else unset T_USE_COLOR; fi T_ESC="\033[" # ¯\_(ツ)_/¯ readonly T_ESC="${T_USE_COLOR+"$T_ESC"}" readonly TR="${T_ESC}${T_USE_COLOR+"0m"}" readonly TR_F="${T_ESC}${T_USE_COLOR+"39m"}" TR_B="${T_ESC}${T_USE_COLOR+"49m"}" readonly TF_BLACK="${T_ESC}${T_USE_COLOR+"30m"}" TF_WHITE="${T_ESC}${T_USE_COLOR+"97m"}" readonly TF_RED="${T_ESC}${T_USE_COLOR+"31m"}" TF_BRIGHT_RED="${T_ESC}${T_USE_COLOR+"91m"}" readonly TF_GREEN="${T_ESC}${T_USE_COLOR+"32m"}" TF_BRIGHT_GREEN="${T_ESC}${T_USE_COLOR+"92m"}" readonly TF_YELLOW="${T_ESC}${T_USE_COLOR+"33m"}" TF_BRIGHT_YELLOW="${T_ESC}${T_USE_COLOR+"93m"}" readonly TF_BLUE="${T_ESC}${T_USE_COLOR+"34m"}" TF_BRIGHT_BLUE="${T_ESC}${T_USE_COLOR+"94m"}" readonly TF_MAGENTA="${T_ESC}${T_USE_COLOR+"35m"}" TF_BRIGHT_MAGENTA="${T_ESC}${T_USE_COLOR+"95m"}" readonly TF_CYAN="${T_ESC}${T_USE_COLOR+"36m"}" TF_BRIGHT_CYAN="${T_ESC}${T_USE_COLOR+"96m"}" readonly TF_DARK_GRAY="${T_ESC}${T_USE_COLOR+"90m"}" TF_BRIGHT_GRAY="${T_ESC}${T_USE_COLOR+"37m"}" print() { printf "%b%b" "${1-""}" "${2-"${TR}\\n"}"; } stderr() { print "$@" 1>&2; } if [ -f /etc/os-release ]; then . /etc/os-release else print 'Операционная система не поддерживается.' exit 1 fi packages= type= distrib="${VERSION_CODENAME}" if [ $(id -u) -ne 0 ]; then print "${TF_BRIGHT_RED}Установка требует запуска с правами суперпользователя (root).${TR}" exit 1 fi check_package_rpm() { if rpm --quiet --query $1>/dev/null 2>&1; then retval='установлен' return 0 else retval="${TF_WHITE}не установлен${TR}" return 1 fi } check_package_deb() { if dpkg-query -W -f='${Status}' $1>/dev/null 2>&1; then retval='установлен' return 0 else retval="${TF_WHITE}не установлен${TR}" return 1 fi } check_cryptopro() { status=0 print 'Проверка КриптоПро:' for pkg in lsb-cprocsp-base cprocsp-pki-cades-64 lsb-cprocsp-capilite-64 lsb-cprocsp-rdr-64; do if [ "$type" = 'apt' ]; then check_package_deb $pkg status=$((status+$?)) else check_package_rpm $pkg status=$((status+$?)) fi print " пакет $pkg: $retval" done return $status } case "${ID}_${VERSION_ID}" in debian_12) print "Установка для ${TF_GREEN}Debian 12${TR} «Bookworm»" type=apt ;; ubuntu_20.04) print "Установка для ${TF_GREEN}Ubuntu 20.04${TR} «Focal Fossa»" type=apt ;; ubuntu_22.04) print "Установка для ${TF_GREEN}Ubuntu 22.04${TR} «Jammy Jellyfish»" type=apt ;; ubuntu_24.04) print "Установка для ${TF_GREEN}Ubuntu 24.04${TR} «Noble Numbat»" type=apt ;; astra_1.7_x86-64) print "Установка для ${TF_GREEN}Astra Linux Special Edition 1.7${TR} «Смоленск»" type=apt distrib=alse17 packages='libkf5js5=5.78.0-0ubuntu2+alse17 libkf5jsapi5=5.78.0-0ubuntu2+alse17' ;; fedora_40) print "Установка для ${TF_GREEN}Fedora 40${TR}" type=dnf distrib=fedora ;; rosa_2021.1) print "Установка для ${TF_GREEN}Росы 2021.1${TR}" type=dnf distrib=rosa ;; redos_7.3*) print "Установка для ${TF_GREEN}РEД ОС 7.3${TR}" type=dnf distrib=redos ;; redos_8.0) print "Установка для ${TF_GREEN}РEД ОС 8${TR}" type=dnf distrib=redos ;; altlinux_10* | altlinux_p10) print "Установка для ${TF_GREEN}Альт 10${TR}" type=alt distrib=p10 ;; altlinux_11* | altlinux_p11) print "Установка для ${TF_GREEN}Альт 11${TR}" type=alt distrib=p11 ;; *) print "Операционная система «$PRETTY_NAME» ${TF_BRIGHT_REF}не поддерживается.${TR}" exit 1 ;; esac if check_cryptopro; then packages="$packages okular-csp" else packages="$packages okular-gost" print "${TF_BRIGHT_RED}КриптоПро не установлен.${TR} Окуляр ГОСТ будет установлен без модуля КриптоПро." print 'После установки недостающих пакетов вы можете перезапустить установку.' fi set -e # Установка плагинов dnf для РЕД ОС. if [ "$distrib" = 'redos' ]; then dnf install -y dnf-plugins-core fi if [ "$type" = 'apt' ]; then echo "deb http://packages.lab50.net/okular $distrib main non-free" > /etc/apt/sources.list.d/okulargost.list if [ ! -f /etc/apt/trusted.gpg.d/lab50.gpg ]; then wget -q -O /etc/apt/trusted.gpg.d/lab50.gpg http://packages.lab50.net/lab50.gpg > /dev/null chmod 0644 /etc/apt/trusted.gpg.d/lab50.gpg fi apt-get update > /dev/null apt-get install -y $packages elif [ "$type" = 'dnf' ]; then dnf config-manager --add-repo http://packages.lab50.net/okular/$distrib/okularcsp.repo dnf install -y $packages else echo "rpm http://packages.lab50.net/okular/alt $distrib/x86_64 okulargost" > /etc/apt/sources.list.d/okulargost.list apt-get update > /dev/null apt-get install -y $packages fi print "${TF_WHITE}Окуляр ГОСТ успешно установлен.${TR}"