From 4d40432af645a4b8430a6ea305e1279a0812ac84 Mon Sep 17 00:00:00 2001 From: victor Date: Sun, 3 Jan 2021 00:23:04 +0330 Subject: [PATCH] base installer created first commit --- IllustratorSetup.sh | 326 ++++++++++++++++++++++++++++++++++++++++++ illustratorCC.desktop | 10 ++ images/AiIcon.png | Bin 0 -> 12706 bytes launcher.sh | 18 +++ 4 files changed, 354 insertions(+) create mode 100755 IllustratorSetup.sh create mode 100644 illustratorCC.desktop create mode 100644 images/AiIcon.png create mode 100644 launcher.sh diff --git a/IllustratorSetup.sh b/IllustratorSetup.sh new file mode 100755 index 0000000..25be527 --- /dev/null +++ b/IllustratorSetup.sh @@ -0,0 +1,326 @@ +#! /usr/bin/env bash + +function main() { + mkdir -p $SCR_PATH + mkdir -p $CACHE_PATH + + setup_log "================| script executed |================" + + #make sure aria2c and wine package is already installed + package_installed aria2c + package_installed wine + package_installed md5sum + + RESOURCES_PATH="$SCR_PATH/resources" + WINE_PREFIX="$SCR_PATH/prefix" + + #create new wine prefix for illustrator + rmdir_if_exist $WINE_PREFIX + + #export necessary variable for wine + export_var + + #config wine prefix and install mono and gecko automatic + echo -e "\033[1;93mplease install mono and gecko packages then click on OK button\e[0m" + winecfg 2> "$SCR_PATH/wine-error.log" + if [ $? -eq 0 ];then + show_message "prefix configured..." + sleep 5 + else + error "prefix config failed :(" + fi + + if [ -f "$WINE_PREFIX/user.reg" ];then + #add dark mod + set_dark_mod + else + error "user.reg Not Found :(" + fi + + #create resources directory we extract downloaded file into this and will be deleted after installation more like /tmp + rmdir_if_exist $RESOURCES_PATH + + #install photoshop + sleep 3 + install_illustratorCC + sleep 5 + + if [ -d $RESOURCES_PATH ];then + show_message "deleting resources folder" + rm -rf $RESOURCES_PATH + else + error "resources folder Not Found" + fi + + launcher + show_message "Almost finished..." + sleep 15 + + +} + +function launcher() { + #create launcher script + local launcher_path="$PWD/launcher.sh" + local launcher_dest="$SCR_PATH/launcher" + + #mkdir launcher dest and remove it if exist + rmdir_if_exist "$launcher_dest" + + if [ -f "$launcher_path" ];then + show_message "launcher.sh detected..." + + cp "$launcher_path" "$launcher_dest" || error "can't copy launcher" + + sed -i "s|aipath|$SCR_PATH|g" "$launcher_dest/launcher.sh" && sed -i "s|aicache|$CACHE_PATH|g" "$launcher_dest/launcher.sh" || error "can't edit launcher script" + + chmod +x "$SCR_PATH/launcher/launcher.sh" || error "can't chmod launcher script" + else + error "launcher.sh Note Found" + fi + + #create desktop entry + local desktop_entry="$PWD/illustratorCC.desktop" + local desktop_entry_dest="/home/$USER/.local/share/applications/illustratorCC.desktop" + + if [ -f "$desktop_entry" ];then + show_message "desktop entry detected..." + + #delete desktop entry if exists + if [ -f "$desktop_entry_dest" ];then + show_message "desktop entry exist deleted..." + rm "$desktop_entry_dest" + fi + cp "$desktop_entry" "$desktop_entry_dest" || error "can't copy desktop entry" + sed -i "s|aipath|$SCR_PATH|g" "$desktop_entry_dest" || error "can't edit desktop entry" + else + error "desktop entry Not Found" + fi + + #change photoshop icon of desktop entry + local entry_icon="$PWD/images/AiIcon.png" + local launch_icon="$launcher_dest/AiIcon.png" + + cp "$entry_icon" "$launcher_dest" || error "can't copy icon image" + sed -i "s|illustratoricon|$launch_icon|g" "$desktop_entry_dest" || error "can't edit desktop entry" + sed -i "s|illustratoricon|$launch_icon|g" "$launcher_dest/launcher.sh" || error "can't edit launcher script" + + #create photoshop command + show_message "create illustrator command..." + if [ -f "/usr/local/bin/illustrator" ];then + show_message "illustrator command exist deleted..." + sudo rm "/usr/local/bin/illustrator" + fi + sudo ln -s "$SCR_PATH/launcher/launcher.sh" "/usr/local/bin/illustrator" || error "can't create illustrator command" + + unset desktop_entry desktop_entry_dest launcher_path launcher_dest +} + +function install_illustratorCC() { + local filename="illustratorCC17.tgz" + local filemd5="d470b541cef1339a66ea33a998801f83" + local filelink="http://127.0.0.1:4050/illustratorCC17.tgz" + local filepath="$CACHE_PATH/$filename" + + download_component $filepath $filemd5 $filelink $filename + + echo "===============| IllustratorCC17 |===============" >> "$SCR_PATH/wine-error.log" + + show_message "extract IllustratorCC..." + tar -xzf "$filepath" -C "$SCR_PATH" || error "sorry something went wrong during illustrator installation" + + show_message "install Illustrator..." + + show_message "IllustratorCC v17 x64 installed..." + unset filename filemd5 filelink filepath +} + +#parameters is [PATH] [CheckSum] [URL] [FILE NAME] +function download_component() { + local tout=0 + while true;do + if [ $tout -ge 2 ];then + error "sorry something went wrong during download $4" + fi + if [ -f $1 ];then + local FILE_ID=$(md5sum $1 | cut -d" " -f1) + if [ "$FILE_ID" == $2 ];then + show_message "\033[1;36m$4\e[0m detected" + return 0 + else + show_message "md5 is not match" + rm $1 + fi + else + show_message "downloading $4 ..." + aria2c -c -x 8 -d $CACHE_PATH -o $4 $3 + if [ $? -eq 0 ];then + notify-send "$4 download completed" -i "download" + fi + ((tout++)) + fi + done +} + +function set_dark_mod() { + echo " " >> "$WINE_PREFIX/user.reg" + local colorarray=( + '[Control Panel\\Colors] 1491939580' + '#time=1d2b2fb5c69191c' + '"ActiveBorder"="49 54 58"' + '"ActiveTitle"="49 54 58"' + '"AppWorkSpace"="60 64 72"' + '"Background"="49 54 58"' + '"ButtonAlternativeFace"="200 0 0"' + '"ButtonDkShadow"="154 154 154"' + '"ButtonFace"="49 54 58"' + '"ButtonHilight"="119 126 140"' + '"ButtonLight"="60 64 72"' + '"ButtonShadow"="60 64 72"' + '"ButtonText"="219 220 222"' + '"GradientActiveTitle"="49 54 58"' + '"GradientInactiveTitle"="49 54 58"' + '"GrayText"="155 155 155"' + '"Hilight"="119 126 140"' + '"HilightText"="255 255 255"' + '"InactiveBorder"="49 54 58"' + '"InactiveTitle"="49 54 58"' + '"InactiveTitleText"="219 220 222"' + '"InfoText"="159 167 180"' + '"InfoWindow"="49 54 58"' + '"Menu"="49 54 58"' + '"MenuBar"="49 54 58"' + '"MenuHilight"="119 126 140"' + '"MenuText"="219 220 222"' + '"Scrollbar"="73 78 88"' + '"TitleText"="219 220 222"' + '"Window"="35 38 41"' + '"WindowFrame"="49 54 58"' + '"WindowText"="219 220 222"' + ) + for i in "${colorarray[@]}";do + echo "$i" >> "$WINE_PREFIX/user.reg" + done + show_message "set dark mode for wine..." + unset colorarray +} + +function export_var() { + export WINEPREFIX="$WINE_PREFIX" + show_message "wine variables exported..." +} + +function package_installed() { + which $1 &> /dev/null + local pkginstalled="$?" + if [ "$pkginstalled" -eq 0 ];then + show_message "package\033[1;36m $1\e[0m is installed..." + else + warning "package\033[1;33m $1\e[0m is not installed.\nplease make sure it's already installed" + ask_question "would you continue?" "N" + if [ "$question_result" == "no" ];then + echo "exit..." + exit 5 + fi + fi +} + +function check_arg() { + while getopts "hd:c:" OPTION; do + case $OPTION in + d) + PARAMd="$OPTARG" + SCR_PATH=$(readlink -f "$PARAMd") + + dashd=1 + echo "install path is $SCR_PATH" + ;; + c) + PARAMc="$OPTARG" + CACHE_PATH=$(readlink -f "$PARAMc") + dashc=1 + echo "cahce is $CACHE_PATH" + ;; + h) + usage + ;; + *) + echo "wrong argument" + exit 1 + ;; + esac + done + shift $(($OPTIND - 1)) + + if [[ $# != 0 ]];then + usage + error2 "unknown argument" + fi + + if [[ $dashd != 1 ]] ;then + echo "-d not define default directory used..." + SCR_PATH="$HOME/.illustratorCC17" + fi + + if [[ $dashc != 1 ]];then + echo "-c not define default directory used..." + CACHE_PATH="$HOME/.cache/illustratorCC17" + fi +} + +function rmdir_if_exist() { + if [ -d "$1" ];then + rm -rf "$1" + show_message "\033[0;36m$1\e[0m directory exists deleting it..." + fi + mkdir "$1" + show_message "create\033[0;36m $1\e[0m directory..." +} + +function setup_log() { + echo -e "$(date) : $@" >> $SCR_PATH/setuplog.log +} + +function show_message() { + echo -e "$@" + setup_log "$@" +} + +function error() { + echo -e "\033[1;31merror:\e[0m $@" + setup_log "$@" + exit 1 +} + +function error2() { + echo -e "\033[1;31merror:\e[0m $@" + exit 1 +} + +function warning() { + echo -e "\033[1;33mWarning:\e[0m $@" + setup_log "$@" +} + +function warning2() { + echo -e "\033[1;33mWarning:\e[0m $@" +} + +function show_message2() { + echo -e "$@" +} + +function usage() { + echo "USAGE: [-c cache directory] [-d installation directory]" +} + +function save_paths() { + local datafile="$HOME/.aidata.txt" + echo "$SCR_PATH" > "$datafile" + echo "$CACHE_PATH" >> "$datafile" + unset datafile +} + +check_arg $@ +save_paths +main \ No newline at end of file diff --git a/illustratorCC.desktop b/illustratorCC.desktop new file mode 100644 index 0000000..bad5f08 --- /dev/null +++ b/illustratorCC.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Illustrator CC +Exec=bash aipath/launcher/launcher.sh +Type=Application +StartupNotify=true +Comment=Illustrator CC for Linux +Icon=illustratoricon +StartupWMClass=illustrator.exe +Name[fr_FR]=Illustrator CC diff --git a/images/AiIcon.png b/images/AiIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a06ba209b39982bb20029db569656e1e106a60ef GIT binary patch literal 12706 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