#!/bin/bash # При изменении версий плагинов обязательно обновить EXT_CHROME_VERSION EXT_FIREFOX_VERSION EXT_OPERA_VERSION set -e APP_NAME="ru.ssksoft.workspace_host_app" VERSION="1.1" BASE_URL="http://stimate.krista.ru/WorkspaceEx/$VERSION" USING_ARCH="zip" HOST_ARCHIVE="host-app.$USING_ARCH" HOST_URL="$BASE_URL/$HOST_ARCHIVE" #extensions EXT_CHROME_VERSION="0.3" EXT_FIREFOX_VERSION="0.3" EXT_OPERA_VERSION="0.1" EXT_BASE_URL="http://stimate.krista.ru/WorkspaceEx/extension" EXT_CHROME_URL="$EXT_BASE_URL/chrome/workspaceex-$EXT_CHROME_VERSION.crx" EXT_FIREFOX_URL="$EXT_BASE_URL/firefox/workspaceex-$EXT_FIREFOX_VERSION.xpi" EXT_OPERA_URL="$EX_BASE_URL/opera/workspaceex-$EXT_OPERA_VERSION.crx" EXT_CHROME_NAME="workspaceex-$EXT_CHROME_VERSION-chrome.crx" EXT_FIREFOX_NAME="workspaceex-$EXT_FIREFOX_VERSION-firefox.xpi" EXT_OPERA_NAME="workspaceex-$EXT_OPERA_VERSION-opera.crx" MANIFEST_NAME="$APP_NAME.json" USE_LOCAL_FILES=false KERNEL_NAME=$(uname -s) # Find target dirs for various browsers & OS'es if [ "$KERNEL_NAME" = 'Darwin' ]; then if [ "$(whoami)" = "root" ]; then MANIFEST_PATH_CHROME="/Library/Google/Chrome/NativeMessagingHosts" MANIFEST_PATH_FIREFOX="/Library/Application Support/Mozilla/NativeMessagingHosts" else MANIFEST_PATH_CHROME="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts" MANIFEST_PATH_FIREFOX="$HOME/Library/Application Support/Mozilla/NativeMessagingHosts" fi else MAN_DIR1="native-messaging-hosts" MAN_DIR2="NativeMessagingHosts" MANIFEST_PATH_CHROME_BETA="" if [ "$(whoami)" = "root" ]; then MANIFEST_PATH_CHROME="/etc/opt/chrome/$MAN_DIR1" MANIFEST_PATH_CHROMIUM="/etc/opt/chromium-browser/$MAN_DIR1" # MANIFEST_PATH_YANDEX="/etc/chromium/$MAN_DIR1" MANIFEST_PATH_FIREFOX="/usr/lib64/mozilla/$MAN_DIR1" else MANIFEST_PATH_CHROME="$HOME/.config/google-chrome/$MAN_DIR2" MANIFEST_PATH_CHROME_BETA="$HOME/.config/google-chrome-beta/$MAN_DIR2" MANIFEST_PATH_CHROMIUM="$HOME/.config/chromium/$MAN_DIR2" MANIFEST_PATH_FIREFOX="$HOME/.mozilla/$MAN_DIR1" fi fi usage() { echo "Usage: $0 [OPTION] [BROWSER] Options: -l, --local Install files from disk instead of downloading them -с, --curl Use curl for download (default use wget) -u, --uninstall Uninstall files from disk (workspace host app and json manifest) -d, --download Download files for localy install -h, --help Show this message Browser: chrome|firefox|opera Used with --local option" } check_for_package() { if [ -f /etc/debian_version ]; then if dpkg-query -s "$1" 1>/dev/null 2>&1; then return 0 # package is installed else if apt-cache show "$1" 1>/dev/null 2>&1; then return 1 # package is not installed, it is available in package repository else return 2 # package is not installed, it is not available in package repository fi fi elif [ -f /etc/redhat-release ]; then #DIST=$(cat /etc/redhat-release | sed s/\ release.*//) #if [ "$DIST" >= 8 ]; then # TODO #else if yum list installed "$1" 1>/dev/null 2>&1; then return 0 # package is installed else if yum info "$1" 1>/dev/null 2>&1; then return 1 # package is not installed, it is available in package repository else return 2 # package is not installed, it is not available in package repository fi fi #fi fi } check_and_install() { if check_for_package "$1"; then tput setaf 2; printf "require %-20s - %s\n" "$1" "package is installed" tput sgr0; else if test "$?" -eq 1; then tput setaf 3; printf "%-20s - %s\n" "$1l" "package is not installed, it is available in package repository" tput sgr0; if [ -f /etc/debian_version ]; then sudo -S apt-get install $1 elif [ -f /etc/redhat-release ]; then #DIST=$(cat /etc/redhat-release | sed s/\ release.*//) #if [ "$DIST" >= 8 ]; then # TODO #else sudo -S yum install $1 #fi fi else tput setaf 1; printf "%-20s - %s\n" "$1" "package is not installed, it is not available in package repository" tput sgr0; exit 1 fi fi } make_lib_link() { #variable=$(objdump -p "$1" | grep SONAME) #IFS=" " read -ra ADDR <<< "$variable"; sudo -S ln -s $1 $2"libkcrypt.so.1" } download() { # Download manifest and set host app if [ "$USE_CURL" = true ]; then curl -o "$1" "$2" else wget -O "$1" "$2" fi } while [ $# -gt 0 ]; do case $1 in chromium) BROWSER_NAME="Chromium" ;; chrome) BROWSER_NAME="Chrome" ;; firefox) BROWSER_NAME="Firefox" ;; opera) BROWSER_NAME="Opera" ;; -l|--local) USE_LOCAL_FILES=true ;; -c|--curl) USE_CURL=true ;; -u|--uninstall) UNINSTALL=true ;; -d|--download) DOWNLOAD_ONLY=true ;; -h|--help) usage exit 0 ;; *) usage exit 1 ;; esac shift done #install/uninstallhost application paths LIBRARY_PATH="/opt/krista/workspaceex" KCRYPT_LIBRARY_PATH="/opt/krista/workspaceex" HOST_FILE_PATH="/opt/krista/workspaceex" EXECUTABLE_HOST="$HOST_FILE_PATH/workspace-host-app" CHROMIUM_MANIFEST="$MANIFEST_PATH_CHROMIUM/$MANIFEST_NAME" CHROME_MANIFEST="$MANIFEST_PATH_CHROME/$MANIFEST_NAME" CHROME_BETA_MANIFEST="" if [ -n "$MANIFEST_PATH_CHROME_BETA" ]; then CHROME_BETA_MANIFEST="$MANIFEST_PATH_CHROME_BETA/$MANIFEST_NAME" fi FIREFOX_MANIFEST="$MANIFEST_PATH_FIREFOX/$MANIFEST_NAME" # YANDEX_MANIFEST="$MANIFEST_PATH_YANDEX/$MANIFEST_NAME" if [ "$UNINSTALL" = true ]; then #remove broken so file links (warn!) sudo -S find "$LIBRARY_PATH" -xtype l -name '*.so*' -exec rm {} \; sudo -S rm -f -R "$HOST_FILE_PATH" echo "Removed $HOST_FILE_PATH" sudo -S rm -f -R "$KCRYPT_LIBRARY_PATH" echo "Removed $KCRYPT_LIBRARY_PATH" rm -f "$CHROMIUM_MANIFEST" echo "Removed $CHROMIUM_MANIFEST" rm -f "$CHROME_MANIFEST" echo "Removed $CHROME_MANIFEST" if [ -n "$CHROME_BETA_MANIFEST" ]; then rm -f "$CHROME_BETA_MANIFEST" echo "Removed $CHROME_BETA_MANIFEST" fi rm -f "$FIREFOX_MANIFEST" echo "Removed $FIREFOX_MANIFEST" # rm -f "$YANDEX_MANIFEST" # echo "Removed $YANDEX_MANIFEST" #remove production plugin (warn!) #sudo -S find "$TARGET_DIR" -name '@WorkspaceEx.xpi' -exec rm {} \; echo "Removed $LIBRARY_PATH libkcrypt.so*" echo "Uninstall successfull" exit 0 else if [ "$DOWNLOAD_ONLY" = false ]; then read -p "Are you sure you want to install WorkspaceEx host application (yes/no)? " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]] then [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell fi fi fi #check_and_install "unzip" #check_and_install "binutils" #install and configure host application if [ "$DOWNLOAD_ONLY" = true ]; then echo "Downloading browsers host configs and browser extensions for install in offline mode" #wget only wget -O "$HOST_ARCHIVE" "$HOST_URL" wget -O "$EXT_CHROME_NAME" "$EXT_CHROME_URL" wget -O "$EXT_FIREFOX_NAME" "$EXT_FIREFOX_URL" wget -O "$EXT_OPERA_NAME" "$EXT_OPERA_URL" #wget -O "browser-extensions.zip" "$EXTENSIONS_URL" #wget -r -nH --cut-dirs=2 --no-parent -e robots=off --reject="index.html*" "$BASE_URL/" #cd "$VERSION" # Set permissions for install.sh that all users can execute it. #chmod a+x "install.sh" exit 0 else echo "Installing browsers host configs" fi # check and install required package if it not existing if [ "$USE_CURL" = true ]; then check_and_install "curl" fi # Create host app dir if not existing sudo -S mkdir -p "$HOST_FILE_PATH" if [ "$USE_LOCAL_FILES" = false ]; then # Download native host sudo -S bash -c "$(declare -f download); download \"$PWD/$HOST_ARCHIVE\" \"$HOST_URL\"" # sudo -S curl -o "$HOST_FILE_PATH/$HOST_ARCHIVE" "$HOST_URL" fi #unpack binary data sudo -S unzip -o "$PWD/$HOST_ARCHIVE" -d "$PWD/host-app" sudo -S cp "$PWD/host-app/workspace-host-app" "$HOST_FILE_PATH" #move library to sudo -S mkdir -p "$KCRYPT_LIBRARY_PATH" sudo -S find "$PWD/host-app" -name '*.so*' -exec mv {} "$KCRYPT_LIBRARY_PATH/" \; export -f make_lib_link find "$KCRYPT_LIBRARY_PATH" -name '*.so*' -exec bash -c 'make_lib_link "$0" "$1"' {} "$LIBRARY_PATH/" \; sudo -S find "$LIBRARY_PATH" -name 'libkcrypt.so*' -exec sudo -S chmod o+r {} \; # Set permissions for host app so that all users can execute it. sudo -S chmod a+x "$EXECUTABLE_HOST" # Check OS versions tput setaf 5; echo "Show os parameters:" uname -a #check GLIBCXX avalible versions #strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX # Check what host APP is normaly run and retrive { #export LD_KCRYPT_LIBRARY_PATH="$HOST_FILE_PATH" tput setaf 3; echo "Workspace host app VERSION:" "$EXECUTABLE_HOST" -version } tput sgr0; # Create config dir if not existing mkdir -p "$MANIFEST_PATH_CHROMIUM" mkdir -p "$MANIFEST_PATH_CHROME" if [ -n "$CHROME_BETA_MANIFEST" ]; then mkdir -p "$MANIFEST_PATH_CHROME_BETA" fi mkdir -p "$MANIFEST_PATH_FIREFOX" # mkdir -p "$MANIFEST_PATH_YANDEX" #HOST_FILE_PATH_ESC="$(echo "$HOST_FILE_PATH" | sed -e 's/@/\\@/g')" EXECUTABLE_HOST_ESC="$(echo "$EXECUTABLE_HOST" | sed -e 's/@/\\@/g')" # Replace path to host \ MANIFEST_SED=" \ s@PLACEHOLDER@$EXECUTABLE_HOST_ESC@; \ " sed -e "${MANIFEST_SED}" "$PWD/host-app/chrome.json" > "$CHROMIUM_MANIFEST" chmod o+r "$CHROMIUM_MANIFEST" echo "$CHROMIUM_MANIFEST created" sed -e "${MANIFEST_SED}" "$PWD/host-app/chrome.json" > "$CHROME_MANIFEST" chmod o+r "$CHROME_MANIFEST" echo "$CHROME_MANIFEST created" if [ -n "$CHROME_BETA_MANIFEST" ]; then sed -e "${MANIFEST_SED}" "$PWD/host-app/chrome.json" > "$CHROME_BETA_MANIFEST" chmod o+r "$CHROME_BETA_MANIFEST" echo "$CHROME_BETA_MANIFEST created" fi sed -e "${MANIFEST_SED}" "$PWD/host-app/firefox.json" > "$FIREFOX_MANIFEST" chmod o+r "$FIREFOX_MANIFEST" echo "$FIREFOX_MANIFEST created" # sed -e "${MANIFEST_SED}" "$PWD/host-app/chrome.json" > "$YANDEX_MANIFEST" # chmod o+r "$YANDEX_MANIFEST" # echo "$YANDEX_MANIFEST created" sudo -S rm -f -R "$PWD/host-app" if [ "$USE_LOCAL_FILES" = true ]; then #sudo -S unzip -o "$PWD/browser-extensions.zip" -d "$PWD/browser-extensions" #cd "browser-extensions" OFFSET=" " if [ "$BROWSER_NAME" = "Firefox" ]; then tput setaf 2; echo "Native messaging host for $BROWSER_NAME has been installed. Install plugin in browser from $EXT_FIREFOX_NAME" tput setaf 1; echo "When you press key to continue, all instances of Firefox browser will be closed. Please save all you changes!!!" tput setaf 2; echo "" echo "Алгоритм установки плагина \"WorkspaceEx\" в браузер $BROWSER_NAME:" echo "$OFFSET 1. В окне \"Управление дополнениями\" из кнопки-меню \"Инструменты для всех дополнений\" выберите \"Установить дополнение из файла...\"" echo "$OFFSET 2. Выберите файл $EXT_FIREFOX_NAME" echo "$OFFSET 3. В ответ за запрос браузера \"Добавить WorkspaceEx?\" выбрать \"Добавить\"." tput setaf 1; echo "После нажатия любой клавиши закроются все экземпляры браузера $BROWSER_NAME. Пожалуйста, сохраните все изменения." tput sgr0; read -n 1 -s -r -p "Press any key to continue..." if pgrep firefox; then killall -SIGTERM firefox tput setaf 2; echo "Please wait..." tput sgr0; sleep 4 fi firefox "about:addons" fi if [ "$BROWSER_NAME" = "Chromium" ]; then tput setaf 2; echo "Native messaging host for $BROWSER_NAME has been installed." echo "Install plugin in browser: drag and drop file $EXT_CHROME_NAME into extensions page on text \"Drop to install\"." echo "" echo "Алгоритм установки плагина \"WorkspaceEx\" в браузер $BROWSER_NAME:" echo "$OFFSET 1. В меню браузера выбрать \"Дополнительные инструменты\"->\"Расширения\"." echo "$OFFSET 2. Включить \"Режим разработчика\"." echo "$OFFSET 3. Из каталога \"browser-extensions\" перетащить файл плагина $EXT_CHROME_NAME в окно браузера." echo "$OFFSET 4. В ответ за запрос браузера \"Установить WorkspaceEx?\" выбрать \"Установить расширение\"." tput sgr0; read -n 1 -s -r -p "Press any key to continue..." xdg-open . chromium-browser fi if [ "$BROWSER_NAME" = "Chrome" ]; then tput setaf 2; echo "Native messaging host for $BROWSER_NAME has been installed." echo "Install plugin in browser: drag and drop file $EXT_CHROME_NAME into extensions page on text \"Drop to install\"." echo "" echo "Алгоритм установки плагина \"WorkspaceEx\" в браузер $BROWSER_NAME:" echo "$OFFSET 1. В меню браузера выбрать \"Дополнительные инструменты\"->\"Расширения\"." echo "$OFFSET 2. Включить \"Режим разработчика\"." echo "$OFFSET 3. Из каталога \"browser-extensions\" перетащить файл плагина $EXT_CHROME_NAME в окно браузера." echo "$OFFSET 4. В ответ за запрос браузера \"Установить WorkspaceEx?\" выбрать \"Установить расширение\"." tput sgr0; read -n 1 -s -r -p "Press any key to continue..." xdg-open . google-chrome fi if [ "$BROWSER_NAME" = "Opera" ]; then tput setaf 2; echo "Native messaging host for $BROWSER_NAME has been installed." echo "Install plugin in browser: drag and drop file $EXT_OPERA_NAME into extensions page on text \"Drop to install\"." echo "" echo "Алгоритм установки плагина \"WorkspaceEx\" в браузер $BROWSER_NAME:" echo "$OFFSET 1. В меню браузера выбрать \"Расширения\"->\"Расширения\"." echo "$OFFSET 2. Включить \"Режим разработчика\"." echo "$OFFSET 3. Из каталога \"browser-extensions\" перетащить файл плагина $EXT_OPERA_NAME в окно браузера." echo "$OFFSET 4. В ответ за запрос браузера \"Установить WorkspaceEx?\" выбрать \"Установить расширение\"." tput sgr0; read -n 1 -s -r -p "Press any key to continue..." xdg-open . opera fi fi exit 0