From f1548c5b0633774505e85b97fc21d882ef6f6160 Mon Sep 17 00:00:00 2001 From: tavo-wasd Date: Sun, 5 May 2024 19:21:58 -0600 Subject: [PATCH] debian & macosx --- .gitignore | 1 + 01-utils.sh | 78 ++++++++++++++++++++++++ 02-language.sh | 42 ++++++------- 05-install.sh => 03-install.sh | 89 +++++++++++++++++---------- 03-set_version.sh | 33 ---------- 04-main.sh | 106 ++++++++++++++++++++++++++++++++ 04-utils-menus.sh | 20 ------ 06-firmador-libre.sh | 19 ------ 06-main.sh | 107 --------------------------------- Makefile | 8 ++- 10 files changed, 267 insertions(+), 236 deletions(-) rename 05-install.sh => 03-install.sh (56%) delete mode 100644 03-set_version.sh create mode 100644 04-main.sh delete mode 100644 04-utils-menus.sh delete mode 100644 06-firmador-libre.sh delete mode 100644 06-main.sh diff --git a/.gitignore b/.gitignore index 9e4569e..bac5ea6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +debug-instalador-certificados.sh instalador-certificados.sh diff --git a/01-utils.sh b/01-utils.sh index 7b4507d..bc0fe7d 100644 --- a/01-utils.sh +++ b/01-utils.sh @@ -1,4 +1,6 @@ #!/bin/sh +# - TODO: +# - kdialog (and terminal ?) get_pass urlencode() { ENCODEDURL="$(curl -Gs -w %{url_effective} --data-urlencode @- ./ ||: )" @@ -28,3 +30,79 @@ download_iso() { --data-raw "ctl00%24certContents%24chkConfirmo=on" \ -o - } + +set_version() { + # Linux + for os in /etc/os-release /usr/lib/os-release; do + [ -f $os ] && . $os && break + done + [ "$ID" = "debian" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 10) print $1}')" + [ "$ID" = "ubuntu" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 18.04) print $1}')" + [ "$ID" = "fedora" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 34) print $1}')" + [ "$ID" = "centos" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 = 7) print $1}')" + [ "$ID" = "centos" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 = 9) print "fedora"}')" + + # MacOS + if v=/System/Library/CoreServices/SystemVersion.plist; [ -f "$v" ]; then + temp= + while read -r line; do + case $line in + *ProductVersion*) temp=.;; + *) + [ "$temp" ] || continue + VERSION_ID=${line#*>} + break + esac + done < "$v" + ID="$(printf '%s' "$VERSION_ID" | awk '{if ($1 >= 10.14) print "macos"}')" + fi + + [ "$ID" = "debian" ] || [ "$ID" = "ubuntu" ] && FILE="ClientesLinux_DEB64_Rev25.zip" + [ "$ID" = "fedora" ] && FILE="ClientesLinux_RPM64_Rev24.zip" + [ "$ID" = "centos" ] && FILE="ClientesLinux_CentOS7_Rev6.zip" + [ "$ID" = "macos" ] && FILE="ClientesMAC_rev35.dmg" +} + +get_pass() { + MENU="$1" TITLE="$2" + + if [ "$MENU" = "zenity" ] ; then + zenity --title "$TITLE" --password + else + echo + fi +} + +term_prompt() { + TITLE="$1" ; PROMPT="$2" ; MODE="$3" ; LIST="$4" + if [ "$MODE" = "info" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s ENTER' "$TITLE" "$PROMPT" ; fi + if [ "$MODE" = "entry" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s\n -> ' "$TITLE" "$PROMPT" ; fi + if [ "$MODE" = "list" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s (1, 2, 3, ...)\n%s\n -> ' "$TITLE" "$PROMPT" "$LIST" ; fi + if [ "$MODE" = "error" ] ; then printf '\n\033[1m\033[31m=== %s ===\033[0m\n%s\n' "$TITLE" "$PROMPT" ; fi +} + +firmador_libre() { +FIRMADOR="https://firmador.libre.cr/firmador.jar" + +if [ "$FILE" = "ClientesMAC_rev35.dmg" ] ; then + echo +elif [ "$FILE" = "ClientesLinux_DEB64_Rev25.zip" ] ; then + DIR="$HOME/.local/share/firmador" +elif [ "$FILE" = "ClientesLinux_CentOS7_Rev6" ] ; then + echo +elif [ "$FILE" = "ClientesLinux_RPM64_Rev24" ] ; then + echo +fi + +mkdir -p "$DIR" +(cd "$DIR" && curl -O "$FIRMADOR") +# Add DESKTOP entry +} + +check_deps() { +for cmd in curl unzip ; do + if ! command -v "$cmd" > /dev/null ; then + printf '%s ' "$cmd" + fi +done +} diff --git a/02-language.sh b/02-language.sh index 957187f..c90820c 100644 --- a/02-language.sh +++ b/02-language.sh @@ -2,64 +2,60 @@ set_lang() { # See: /var/lib/AccountsService/users/ - . /etc/default/locale + [ -e "/etc/default/locale" ] && . /etc/default/locale SLANG="${LANG%%_*}" [ -z "$SLANG" ] && SLANG="es" if [ "$SLANG" = "es" ] ; then TITLE="Instalador firma digital" PROMPT_WELCOME="Bienvenido al asistente de instalación de certificados para firma digial." + PROMPT_ERR_DEPS="Error, la instalación requiere de los siguientes programas no presentes: " PROMPT_FILE="Seleccione el fichero que corresponde a su sistema operativo." - PROMPT_DEPS="Instalando dependencias." FILENAME="Archivo" FILEDESC="Sistema" PROMPT_SERIAL="Ingrese el número serial impreso al reverso de la tarjeta." PROMPT_ERR_SERIAL="Error al obtener el número serial de la tarjeta, abortando." - PROMPT_ERR_DOWNLOAD="Error al descargar el fichero desde Centro de Soporte Firma Digital, abortando." PROMPT_DIR_FILE="A continuación, deberá seleccionar la carpeta donde quiere que se descargue y se extraigan los contenidos del fichero seleccionado" PROMPT_ERR_DIR_FILE="Error al seleccionar la carpeta de descarga para el fichero, abortando." - PROMPT_DOWNLOAD="Descargando $FILE desde Centro de Soporte Firma Digital..." - PROMPT_ERR_DOWN_FILE="Error al descargar el fichero, abortando." - SUDO_DEB_BROWSER="Ingrese la contraseña de la computadora para instalar Firefox desde mozilla." - SUDO_DEB_DEPS="Ingrese la contraseña de la computadora para instalar las dependencias." - SUDO_DEB_CERTS="Ingrese la contraseña de la computadora para instalar los certificados." + PROMPT_DOWNLOAD="Descargando desde Centro de Soporte Firma Digital..." + PROMPT_DEPS_INSTALL="Instalando dependencias y otros complementos" + PROMPT_ERR_DEPS_INSTALL="Error instalando dependencias." + PROMPT_ERR_DOWNLOAD="Error al descargar el fichero, abortando." + PROMPT_END_SUCCESS="El instalador ha concluido." elif [ "$SLANG" = "en" ] ; then TITLE="Digital signature installer" PROMPT_WELCOME="Welcome to the digital signing certificate installation wizard." + PROMPT_ERR_DEPS="Error, installation requires the following programs not present: " PROMPT_FILE="Select the file that corresponds to your operating system." - PROMPT_DEPS="Installing dependencies." FILENAME="File" FILEDESC="System" PROMPT_SERIAL="Enter the serial number printed on the back of the card." PROMPT_ERR_SERIAL="Error obtaining the card serial number, aborting." - PROMPT_ERR_DOWNLOAD="Error downloading the file from the Digital Signature Support Center, aborting." PROMPT_DIR_FILE="Next, you must select the folder where you want the contents of the selected file to be downloaded and extracted" PROMPT_ERR_DIR_FILE="Error selecting the download folder for the file, aborting." - PROMPT_DOWNLOAD="Downloading $FILE from the Digital Signature Support Center..." - PROMPT_ERR_DOWN_FILE="Error downloading file, aborting." - SUDO_DEB_BROWSER="Enter the computer password to install Firefox from mozilla." - SUDO_DEB_DEPS="Enter the computer password to install dependencies." - SUDO_DEB_CERTS="Enter the computer password to install certificates." + PROMPT_DOWNLOAD="Downloading from the Digital Signature Support Center..." + PROMPT_DEPS_INSTALL="Installing dependencies and other components" + PROMPT_ERR_DEPS_INSTALL="Error installing dependencies." + PROMPT_ERR_DOWNLOAD="Error downloading file, aborting." + PROMPT_END_SUCCESS="The installer has completed." elif [ "$SLANG" = "fr" ] ; then TITLE="Installation de signature" - TITLE="Installateur de signature" PROMPT_WELCOME="Bienvenue dans l'assistant d'installation du certificat de signature." + PROMPT_ERR_DEPS="Erreur, l'installation requise des programmes suivants ne présente pas: " PROMPT_FILE="Sélectionnez le fichier qui correspond à votre système d'exploitation." - PROMPT_DEPS="Installation des dépendances." FILENAME="Fichier" FILEDESC="Système" PROMPT_SERIAL="Entrez le numéro de série imprimé au dos de la carte." PROMPT_ERR_SERIAL="Erreur d'obtention du numéro de série de la carte, abandon." - PROMPT_ERR_DOWNLOAD="Erreur lors du téléchargement du fichier depuis le Centre de support des signatures numériques, abandon." PROMPT_DIR_FILE="Ensuite, vous devez sélectionner le dossier dans lequel vous souhaitez que le contenu du fichier sélectionné soit téléchargé et extrait" PROMPT_ERR_DIR_FILE="Erreur lors de la sélection du dossier de téléchargement du fichier, abandon." - PROMPT_DOWNLOAD="Téléchargement de $FILE depuis le Centre de support des signatures numériques..." - PROMPT_ERR_DOWN_FILE="Erreur de téléchargement du fichier, abandon." - SUDO_DEB_BROWSER="Entrez le mot de passe de l'ordinateur pour installer Firefox depuis mozilla." - SUDO_DEB_DEPS="Entrez le mot de passe de l'ordinateur pour installer les dépendances." - SUDO_DEB_CERTS="Entrez le mot de passe de l'ordinateur pour installer les certificats." + PROMPT_DOWNLOAD="Téléchargement du fichier depuis le Centre de support des signatures numériques..." + PROMPT_DEPS_INSTALL="Installation des dépendances et d'autres composants" + PROMPT_ERR_DEPS_INSTALL="Erreur lors de l'installation des dépendances." + PROMPT_ERR_DOWNLOAD="Erreur de téléchargement du fichier, abandon." + PROMPT_END_SUCCESS="Le programme d'installation est terminé." fi } diff --git a/05-install.sh b/03-install.sh similarity index 56% rename from 05-install.sh rename to 03-install.sh index fb4a00e..7eca4a7 100644 --- a/05-install.sh +++ b/03-install.sh @@ -1,42 +1,52 @@ #!/bin/sh -config_deb_install_certs() { +deb_install_certs() { # Source: https://fran.cr/instalar-firma-digital-costa-rica-gnu-linux-ubuntu-debian/ SAVE_FILE="$1" SAVE_DIR="${SAVE_FILE%/*}" [ -z "$SAVE_DIR" ] && return 1 -get_pass "$MENU" "$TITLE" | sudo -S sh -c ' -apt install -y p11-kit pcscd binutils bubblewrap icedtea-netx +SUDO_PASSWORD="$(get_pass "$MENU" "$TITLE")" +[ -z "$SUDO_PASSWORD" ] && return 1 + +printf '\033[1mInstalando y habilitando dependencias...\033[0m\n' # DEBUG +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c ' +apt install -y p11-kit pcscd binutils bubblewrap icedtea-netx > /dev/null systemctl enable --now pcscd.socket ' # Instalación de los certificados -(cd "$SAVE_DIR" && unzip -u "$SAVE_FILE") -printf '\033[1mInstalando Certificados...\033[0m\n' -for cert in "$(find "$SAVE_DIR" -name "Certificados")"/* ; do certname="${cert##*/}" ; sudo cp "$cert" /usr/local/share/ca-certificates/"${certname%.cer}.crt" ; done -sudo sh -c ' +(cd "$SAVE_DIR" && unzip -u "$SAVE_FILE" > /dev/null) +printf '\033[1mInstalando Certificados...\033[0m\n' # DEBUG +for cert in "$(find "$SAVE_DIR" -name "Certificados")"/* ; do + certname="${cert##*/}" ; printf '%s' "$SUDO_PASSWORD" | sudo -S cp "$cert" /usr/local/share/ca-certificates/"${certname%.cer}.crt" +done +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c ' for file in /usr/local/share/ca-certificates/*.crt ; do openssl x509 -inform DER -in "$file" -out "$file.tmp" 2> /dev/null ; done find /usr/local/share/ca-certificates/ -type f -empty -delete for i in /usr/local/share/ca-certificates/*.tmp ; do mv "$i" "${i%.tmp}" ; done -update-ca-certificates --fresh +update-ca-certificates --fresh > /dev/null ' # Instalación del módulo PKCS#11 -printf '\033[1mInstalando Módulo PKCS#11...\033[0m\n' -ar p "$(find "$SAVE_DIR" -name "idprotectclient_7.24.02-0_amd64.deb")" data.tar.gz | tar zx "$SAVE_DIR"/usr/lib/x64-athena/libASEP11.so -sudo cp -p "$SAVE_DIR"/usr/lib/x64-athena/libASEP11.so /usr/lib/x86_64-linux-gnu/ -sudo sh -c ' -mkdir -p /usr/lib/x64-athena/ ; mkdir -p /Firma_Digital/LIBRERIAS/ -ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/x64-athena/ -ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/ -ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/local/lib/ -ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /Firma_Digital/LIBRERIAS/ -ln -s /usr/local/share/ca-certificates /Firma_Digital/CERTIFICADOS +printf '\033[1mInstalando Módulo PKCS#11...\033[0m\n' # DEBUG +PACKAGE="$(find "$SAVE_DIR" -name "idprotectclient_*.deb")" +PACKAGE_DIR="${PACKAGE%/*}" +PACKAGE="${PACKAGE##*/}" +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c ' +mkdir -p /usr/lib/x64-athena/ ; mkdir -p /Firma_Digital/LIBRERIAS/ ; mkdir -p /usr/lib/x86_64-linux-gnu/' +(cd "$PACKAGE_DIR" && ar p "$PACKAGE" data.tar.gz | tar zx ./usr/lib/x64-athena/libASEP11.so) +printf '%s' "$SUDO_PASSWORD" | sudo -S cp -p "$PACKAGE_DIR"/usr/lib/x64-athena/libASEP11.so /usr/lib/x86_64-linux-gnu/ +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c ' +ln -sf /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/x64-athena/ +ln -sf /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/ +ln -sf /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/local/lib/ +ln -sf /usr/lib/x86_64-linux-gnu/libASEP11.so /Firma_Digital/LIBRERIAS/ +ln -sf /usr/local/share/ca-certificates /Firma_Digital/CERTIFICADOS ' -printf '\033[1mConfigurando IDPClientDB...\033[0m\n' -sudo sh -c " +printf '\033[1mConfigurando IDPClientDB...\033[0m\n' # DEBUG +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c " mkdir -p /etc/Athena/ echo \" @@ -58,17 +68,17 @@ echo \" -\" | tee /etc/Athena/IDPClientDB.xml +\" > /etc/Athena/IDPClientDB.xml " -printf '\033[1mConfigurando p11-kit/modules...\033[0m\n' -sudo sh -c " +printf '\033[1mConfigurando p11-kit/modules...\033[0m\n' # DEBUG +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c " mkdir -p /usr/share/p11-kit/modules -echo 'remote: |bwrap --unshare-all --dir /tmp --ro-bind /etc/Athena /etc/Athena --proc /proc --dev /dev --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /var/run/pcscd /var/run/pcscd --ro-bind /run/pcscd /run/pcscd p11-kit remote /usr/lib/x86_64-linux-gnu/libASEP11.so' | tee /usr/share/p11-kit/modules/firma-digital.module +echo 'remote: |bwrap --unshare-all --dir /tmp --ro-bind /etc/Athena /etc/Athena --proc /proc --dev /dev --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /var/run/pcscd /var/run/pcscd --ro-bind /run/pcscd /run/pcscd p11-kit remote /usr/lib/x86_64-linux-gnu/libASEP11.so' > /usr/share/p11-kit/modules/firma-digital.module " -printf '\033[1mConfigurando p11-kit update symlinks...\033[0m\n' -sudo sh -c " +printf '\033[1mConfigurando p11-kit update symlinks...\033[0m\n' # DEBUG +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c " mkdir -p /usr/local/sbin echo \"#!/bin/sh @@ -115,11 +125,11 @@ then mv -f \"\$NSS_LIB\" \"\$NSS_LIB\".bak ln -s /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so \"\$NSS_LIB\" fi -fi\" | tee /usr/local/sbin/update-p11-kit-symlinks +fi\" > /usr/local/sbin/update-p11-kit-symlinks chmod +x /usr/local/sbin/update-p11-kit-symlinks " -printf '\033[1mConfigurando módulo mantenimiento systemd...\033[0m\n' +printf '\033[1mConfigurando módulo mantenimiento systemd...\033[0m\n' # DEBUG sudo sh -c " mkdir -p /etc/systemd/system echo \"[Unit] @@ -131,13 +141,28 @@ ExecStart=/usr/local/sbin/update-p11-kit-symlinks [Install] WantedBy=multi-user.target -\" | tee /etc/systemd/system/p11-kit-proxy-updater.service +\" > /etc/systemd/system/p11-kit-proxy-updater.service systemctl enable --now p11-kit-proxy-updater.service " -printf '\033[1mInstalando trust module pk11...\033[0m\n' -sudo sh -c " +printf '\033[1mInstalando trust module pk11...\033[0m\n' # DEBUG +printf '%s' "$SUDO_PASSWORD" | sudo -S sh -c " mkdir -p /etc/pkcs11/modules/ -echo 'disable-in:' | tee /etc/pkcs11/modules/p11-kit-trust.module +echo 'disable-in:' > /etc/pkcs11/modules/p11-kit-trust.module " } + +install_certs() { +SAVE_FILE="$1" +FILE="${SAVE_FILE##*/}" + +if [ "$FILE" = "ClientesMAC_rev35.dmg" ] ; then + open "$SAVE_FILE" +elif [ "$FILE" = "ClientesLinux_DEB64_Rev25.zip" ] ; then + deb_install_certs "$SAVE_FILE" || return 1 +elif [ "$FILE" = "ClientesLinux_CentOS7_Rev6" ] ; then + echo +elif [ "$FILE" = "ClientesLinux_RPM64_Rev24" ] ; then + echo +fi +} diff --git a/03-set_version.sh b/03-set_version.sh deleted file mode 100644 index c079af5..0000000 --- a/03-set_version.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -set_version() { - # Linux - for os in /etc/os-release /usr/lib/os-release; do - [ -f $os ] && . $os && break - done - [ "$ID" = "debian" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 10) print $1}')" - [ "$ID" = "ubuntu" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 18.04) print $1}')" - [ "$ID" = "fedora" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 >= 34) print $1}')" - [ "$ID" = "centos" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 = 7) print $1}')" - [ "$ID" = "centos" ] && ID="$(printf '%s %s' "$ID" "$VERSION_ID" | awk '{if ($2 = 9) print "fedora"}')" - - # MacOS - if v=/System/Library/CoreServices/SystemVersion.plist; [ -f "$v" ]; then - temp= - while read -r line; do - case $line in - *ProductVersion*) temp=.;; - *) - [ "$temp" ] || continue - VERSION_ID=${line#*>} - break - esac - done < "$v" - ID="$(printf '%s' "$VERSION_ID" | awk '{if ($1 >= 10.14) print "macos"}')" - fi - - [ "$ID" = "debian" -o "$ID" = "ubuntu" ] && FILE="ClientesLinux_DEB64_Rev25.zip" - [ "$ID" = "fedora" ] && FILE="ClientesLinux_RPM64_Rev24.zip" - [ "$ID" = "centos" ] && FILE="ClientesLinux_CentOS7_Rev6.zip" - [ "$ID" = "macos" ] && FILE="ClientesMac_rev34.zip" -} diff --git a/04-main.sh b/04-main.sh new file mode 100644 index 0000000..03ae5d0 --- /dev/null +++ b/04-main.sh @@ -0,0 +1,106 @@ +#!/bin/sh +# TODO: +# - Check if installation is successful +# - Check if already installed +# - Uninstall + +# main +set_lang +set_version +MISSING="$(check_deps)" + +if command -v zenity > /dev/null ; then + MENU="zenity" + zenity --title "$TITLE" --text "$PROMPT_WELCOME" --info + [ -n "$MISSING" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DEPS $MISSING" --error && exit 1 + + # Select file to be downloaded if os can't be determined + [ -z "$FILE" ] && FILE="$(zenity --title "$TITLE" --text "$PROMPT_FILE" --list \ + --column "$FILENAME" --column "$FILEDESC" \ + "ClientesMAC_rev35.dmg" "macOSX 10.14 o superior" \ + "ClientesLinux_DEB64_Rev25.zip" "Ubuntu 18.04 LTS o superior, Debian 10" \ + "ClientesLinux_CentOS7_Rev6.zip" "CentOS 7" \ + "ClientesLinux_RPM64_Rev24.zip" "Fedora 34 o superior, CentOS Stream 9" \ + --print-column=1)" + + # Serial number is required for download + SERIAL="$(zenity --title "$TITLE" --text "$PROMPT_SERIAL" --entry)" + [ -z "$SERIAL" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_SERIAL" --error && exit 1 + # Generate tempkey & Define DOWNLOAD_URL + TEMPKEY="$(download_iso "$FILE" "$SERIAL" | sed '/tempkey/!d;s/.*tempkey=//g;s/".*$//g')" + [ -z "$TEMPKEY" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DOWNLOAD" --error && exit 1 + DOWNLOAD_URL="https://soportefirmadigital.com/sfdj/getiso.aspx?tempkey=$TEMPKEY" + # Define where to save file + if [ -d "/tmp" ] ; then + SAVE_DIR="/tmp/soportefirmadigital" + mkdir -p "$SAVE_DIR" + else + zenity --title "$TITLE" --text "$PROMPT_DIR_FILE" --info + SAVE_DIR="$(zenity --file-selection --directory)" + fi + [ -z "$SAVE_DIR" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DIR_FILE" --error && exit 1 + SAVE_FILE="$SAVE_DIR/$FILE" + + # Download file & show progress + SIZE="$(curl -sI "$DOWNLOAD_URL" | sed '/[Cc]ontent-[Ll]ength/!d;s/^.*: //g' | awk '{$1/=1024;printf "%d",$1}')" + (curl -sL "$DOWNLOAD_URL" -o "$SAVE_FILE") & + while true ; do + sleep 0.5 + DOWN="$(du "$SAVE_FILE" 2>/dev/null | awk '{print $1}')" ; [ -z "$DOWN" ] && DOWN=0 + r=$(((DOWN*10000)/SIZE)) + printf '%d\n' ${r%??} + done | zenity --title "$TITLE" --text "$PROMPT_DOWNLOAD" --progress --auto-close + while true ; do + ACTIVE="$(ps aux | grep 'curl.*soportefirmadigital' | sed '/grep/d')" + [ -z "$ACTIVE" ] && break + sleep 0.5 + done | zenity --title "$TITLE" --text "$PROMPT_DOWNLOAD" --progress --pulsate --auto-close + ACTIVE="$(ps aux | grep 'curl.*soportefirmadigital' | sed '/grep/d')" + [ -n "$ACTIVE" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DOWNLOAD" --error && exit 1 + + # Install dependencies, components and + # certificates according to OS + install_certs "$SAVE_FILE" | zenity --title "$TITLE" --text "$PROMPT_DEPS_INSTALL" --progress --pulsate --auto-close + # zenity --title "$TITLE" --text "$PROMPT_ERR_DEPS_INSTALL" --error && exit 1 + + zenity --title "$TITLE" --text "$PROMPT_END_SUCCESS" --info + +else + term_prompt "$TITLE" "$PROMPT_WELCOME" info && read -r NULL + [ -n "$MISSING" ] && term_prompt "$TITLE" "$PROMPT_ERR_DEPS $MISSING" error && exit 1 + + # Select file automatically or manually otherwise + LIST="$(printf '1 - ClientesMAC_rev35.dmg | macOSX 10.14 o superior +2 - ClientesLinux_DEB64_Rev25.zip | Ubuntu 18.04 LTS o superior, Debian 10 +3 - ClientesLinux_CentOS7_Rev6.zip | CentOS 7 +4 - ClientesLinux_RPM64_Rev24.zip | Fedora 34 o superior, CentOS Stream 9')" + [ -z "$FILE" ] && term_prompt "$TITLE" "$PROMPT_FILE" list "$LIST" && read -r FILE + [ "$FILE" = "1" ] && FILE="ClientesMAC_rev35.dmg" + [ "$FILE" = "2" ] && FILE="ClientesLinux_DEB64_Rev25.zip" + [ "$FILE" = "3" ] && FILE="ClientesLinux_CentOS7_Rev6.zip" + [ "$FILE" = "4" ] && FILE="ClientesLinux_RPM64_Rev24.zip" + + # Serial number is required for download + term_prompt "$TITLE" "$PROMPT_SERIAL" entry && read -r SERIAL + [ -z "$SERIAL" ] && term_prompt "$TITLE" "$PROMPT_ERR_SERIAL" error && exit 1 + # Generate tempkey & Define DOWNLOAD_URL + TEMPKEY="$(download_iso "$FILE" "$SERIAL" | sed '/tempkey/!d;s/.*tempkey=//g;s/".*$//g')" + [ -z "$TEMPKEY" ] && term_prompt "$TITLE" "$PROMPT_ERR_DOWNLOAD" error && exit 1 + DOWNLOAD_URL="https://soportefirmadigital.com/sfdj/getiso.aspx?tempkey=$TEMPKEY" + # Define where to save file + SAVE_DIR="/tmp/soportefirmadigital" + SAVE_FILE="$SAVE_DIR/$FILE" + mkdir -p "$SAVE_DIR" + + # Download file & show progress + term_prompt "$TITLE" "$PROMPT_DOWNLOAD" info && echo + curl "$DOWNLOAD_URL" -o "$SAVE_FILE" --progress-bar + + # Install dependencies, components and + # certificates according to OS + term_prompt "$TITLE" "$PROMPT_DEPS_INSTALL" info && echo + install_certs "$SAVE_FILE" + + term_prompt "$TITLE" "$PROMPT_END_SUCCESS" info && echo + +fi diff --git a/04-utils-menus.sh b/04-utils-menus.sh deleted file mode 100644 index 4944034..0000000 --- a/04-utils-menus.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -get_pass() { - # @@@ Add kdialog - MENU="$1" TITLE="$2" - - if [ "$MENU" = "zenity" ] ; then - zenity --title "$TITLE" --password - else - echo - fi -} - -term_prompt() { - TITLE="$1" ; PROMPT="$2" ; MODE="$3" ; LIST="$4" - if [ "$MODE" = "info" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s ENTER' "$TITLE" "$PROMPT" ; fi - if [ "$MODE" = "entry" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s\n -> ' "$TITLE" "$PROMPT" ; fi - if [ "$MODE" = "list" ] ; then printf '\n\033[1m\033[34m=== %s ===\033[0m\n%s (1, 2, 3, ...)\n%s\n -> ' "$TITLE" "$PROMPT" "$LIST" ; fi - if [ "$MODE" = "error" ] ; then printf '\n\033[1m\033[31m=== %s ===\033[0m\n%s\n' "$TITLE" "$PROMPT" ; fi -} diff --git a/06-firmador-libre.sh b/06-firmador-libre.sh deleted file mode 100644 index 7bf4bb7..0000000 --- a/06-firmador-libre.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -firmador_libre() { -FIRMADOR="https://firmador.libre.cr/firmador.jar" - -if [ "$FILE" = "ClientesMac_rev34.zip" ] ; then - echo -elif [ "$FILE" = "ClientesLinux_DEB64_Rev25.zip" ] ; then - DIR="$HOME/.local/share/firmador" -elif [ "$FILE" = "ClientesLinux_CentOS7_Rev6" ] ; then - echo -elif [ "$FILE" = "ClientesLinux_RPM64_Rev24" ] ; then - echo -fi - -mkdir -p "$DIR" -(cd "$DIR" && curl -O "$FIRMADOR") -# DESKTOP -} diff --git a/06-main.sh b/06-main.sh deleted file mode 100644 index 1ababe1..0000000 --- a/06-main.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh -# TODO: -# - Extraer fichero y automatizar el proceso de instalación descrito en: -# https://fran.cr/instalar-firma-digital-costa-rica-gnu-linux-ubuntu-debian/ - -# main -set_lang -set_version - -if [ -e "/bin/zenity" ] ; then - MENU="zenity" - # Welcome - zenity --title "$TITLE" --text "$PROMPT_WELCOME" --info - - # Select file to be downloaded if os can't be determined - [ -z "$FILE" ] && FILE="$(zenity --title "$TITLE" --text "$PROMPT_FILE" --list \ - --column "$FILENAME" --column "$FILEDESC" \ - "ClientesMac_rev34.zip" "macOSX 10.14 o superior" \ - "ClientesLinux_DEB64_Rev25.zip" "Ubuntu 18.04 LTS o superior, Debian 10" \ - "ClientesLinux_CentOS7_Rev6.zip" "CentOS 7" \ - "ClientesLinux_RPM64_Rev24.zip" "Fedora 34 o superior, CentOS Stream 9" \ - --print-column=1)" - - install_deps "$MENU" | zenity --title "$TITLE" --text "$PROMPT_DEPS" --progress --pulsate --auto-close - - # Ask for serial number - SERIAL="$(zenity --title "$TITLE" --text "$PROMPT_SERIAL" --entry)" - [ -z "$SERIAL" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_SERIAL" --error && exit 1 - - # Generate tempkey & Define DOWNLOAD_URL - TEMPKEY="$(download_iso "$FILE" "$SERIAL" | sed '/tempkey/!d;s/.*tempkey=//g;s/".*$//g')" - [ -z "$TEMPKEY" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DOWNLOAD" --error && exit 1 - DOWNLOAD_URL="https://soportefirmadigital.com/sfdj/getiso.aspx?tempkey=$TEMPKEY" - - # Define where to save file - if [ -d "/tmp" ] ; then - SAVE_DIR="/tmp/soportefirmadigital" - mkdir -p "$SAVE_DIR" - else - zenity --title "$TITLE" --text "$PROMPT_DIR_FILE" --info - SAVE_DIR="$(zenity --file-selection --directory)" - fi - [ -z "$SAVE_DIR" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DIR_FILE" --error && exit 1 - SAVE_FILE="$SAVE_DIR/$FILE" - - # Download file & show progress - SIZE="$(curl -sI "$DOWNLOAD_URL" | sed '/[Cc]ontent-[Ll]ength/!d;s/^.*: //g' | awk '{$1/=1024;printf "%d",$1}')" - (curl "$DOWNLOAD_URL" -o "$SAVE_FILE") & - while true ; do - sleep 0.5 - DOWN="$(du "$SAVE_FILE" 2>/dev/null | awk '{print $1}')" ; [ -z "$DOWN" ] && DOWN=0 - r=$(((DOWN*10000)/SIZE)) - printf '%d\n' ${r%??} - done | zenity --title "$TITLE" --text "$PROMPT_DOWNLOAD" --progress --auto-close - - while true ; do - ACTIVE="$(ps aux | grep 'curl.*soportefirmadigital' | sed '/grep/d')" - [ -z "$ACTIVE" ] && break - sleep 0.5 - done | zenity --title "$TITLE" --text "$PROMPT_DOWNLOAD" --progress --pulsate --auto-close - - ACTIVE="$(ps aux | grep 'curl.*soportefirmadigital' | sed '/grep/d')" - [ -n "$ACTIVE" ] && zenity --title "$TITLE" --text "$PROMPT_ERR_DOWNLOAD" --error && exit 1 - - if [ "$FILE" = "ClientesMac_rev34.zip" ] ; then - echo - elif [ "$FILE" = "ClientesLinux_DEB64_Rev25.zip" ] ; then - config_deb_install_certs "$SAVE_FILE" - elif [ "$FILE" = "ClientesLinux_CentOS7_Rev6" ] ; then - echo - elif [ "$FILE" = "ClientesLinux_RPM64_Rev24" ] ; then - echo - fi - -else - echo - # Welcome - #term_prompt "$TITLE" "$PROMPT_WELCOME" info && read -r NULL - - # Select file to be downloaded - #LIST="$(printf '\033[4m1\033[0m - ClientesMac_rev34.zip | macOSX 10.14 o superior -# \03[4m2\033[0m - ClientesLinux_DEB64_Rev25.zip | Ubuntu 18.04 LTS o superior, Debian 10 -# \03[4m3\033[0m - ClientesLinux_CentOS7_Rev6.zip | CentOS 7 -# \03[4m4\033[0m - ClientesLinux_RPM64_Rev24.zip | Fedora 34 o superior, CentOS Stream 9')" - #term_prompt "$TITLE" "$PROMPT_FILE" list "$LIST" && read -r FILE - #[ "$FILE" = "1" ] && FILE="ClientesMac_rev34.zip" - #[ "$FILE" = "2" ] && FILE="ClientesLinux_DEB64_Rev25.zip" - #[ "$FILE" = "3" ] && FILE="ClientesLinux_CentOS7_Rev6.zip" - #[ "$FILE" = "4" ] && FILE="ClientesLinux_RPM64_Rev24.zip" - - # Ask for serial number - #term_prompt "$TITLE" "$PROMPT_SERIAL" entry && read -r SERIAL - #[ -z "$SERIAL" ] && term_prompt "$TITLE" "$PROMPT_ERR_SERIAL" error && exit 1 - - # Generate tempkey & Define DOWNLOAD_URL - #TEMPKEY="$(download_iso "$FILE" "$SERIAL" | sed '/tempkey/!d;s/.*tempkey=//g;s/".*$//g')" - #[ -z "$TEMPKEY" ] && term_prompt "$TITLE" "$PROMPT_ERR_DOWNLOAD" error && exit 1 - #DOWNLOAD_URL="https://soportefirmadigital.com/sfdj/getiso.aspx?tempkey=$TEMPKEY" - - # Define where to save file - #mkdir -p "$HOME/Library/Caches/TemporaryItems/instalador-firma-digital" - #SAVE_FILE="$HOME/Library/Caches/TemporaryItems/instalador-firma-digital/$FILE" - - # Download file & show progress - #term_prompt "$TITLE" "$PROMPT_DOWNLOAD" info && echo - #curl "$DOWNLOAD_URL" -o "$SAVE_FILE" --progress-bar -fi diff --git a/Makefile b/Makefile index cf3d0da..500abb6 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,11 @@ all: $(SCRIPT) $(SCRIPT): $(wildcard [0-9][0-9]-*.sh) printf '#!/bin/sh\n' > $@ - for i in $? ; do cat $$i ; done | sed '/^ *#.*$$/d' >> $@ + for i in $? ; do cat $$i ; done | sed '/^ *#.*$$/d;/.*# *DEBUG/d' >> $@ + +debug: $(wildcard [0-9][0-9]-*.sh) + printf '#!/bin/sh\n' > $@-$(SCRIPT) + for i in $? ; do cat $$i ; done >> $@-$(SCRIPT) clean: - rm -rf $(SCRIPT) + rm -rf debug-$(SCRIPT) $(SCRIPT)