commit 8f672c9404819334aff3054cd4b024c9ed121f90 Author: Sergey Paramoshkin Date: Sat Aug 17 11:27:42 2024 +0300 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2608ec2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +.vscode \ No newline at end of file diff --git a/3party/cprocsp/linux-amd64_deb.tgz b/3party/cprocsp/linux-amd64_deb.tgz new file mode 100644 index 0000000..a870101 Binary files /dev/null and b/3party/cprocsp/linux-amd64_deb.tgz differ diff --git a/3party/okular/install.sh b/3party/okular/install.sh new file mode 100755 index 0000000..3738a9c --- /dev/null +++ b/3party/okular/install.sh @@ -0,0 +1,170 @@ +#!/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}" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f252924 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:22.04 + +RUN apt update && apt install -y wget libgtk-3-0 +COPY 3party/cprocsp/linux-amd64_deb.tgz /tmp/src/ +RUN cd /tmp/src && \ + tar -xf linux-amd64_deb.tgz && \ + linux-amd64_deb/install.sh && \ + dpkg -i linux-amd64_deb/cprocsp-pki-cades-64*.deb && \ + dpkg -i linux-amd64_deb/cprocsp-rdr-gui-gtk-64*.deb && \ + # делаем симлинки + cd /bin && \ + ln -s /opt/cprocsp/bin/amd64/certmgr && \ + ln -s /opt/cprocsp/bin/amd64/cpverify && \ + ln -s /opt/cprocsp/bin/amd64/cryptcp && \ + ln -s /opt/cprocsp/bin/amd64/csptest && \ + ln -s /opt/cprocsp/bin/amd64/csptestf && \ + ln -s /opt/cprocsp/bin/amd64/der2xer && \ + ln -s /opt/cprocsp/bin/amd64/inittst && \ + ln -s /opt/cprocsp/bin/amd64/wipefile && \ + ln -s /opt/cprocsp/sbin/amd64/cpconfig && \ + # прибираемся + rm -rf /tmp/src + +COPY 3party/okular/install.sh /tmp/ +RUN bash /tmp/install.sh && rm -fv /tmp/install.sh \ No newline at end of file