Can I use PrizmDoc with Docker?

Modified on Sat, Jun 29, 2024 at 12:17 PM

Can I use PrizmDoc with Docker?


Right so basically that repository contained two things. This shell script:

#!/bin/bash

# ./pdutil.sh install
function install() {
    # Enter temporary directory
    cd "$(mktemp -d)" || (echo "Directory change failed. Terminating." && exit 1)

    # Download
    download

    echo "Extracting archives..."
    if [[ ! "$(find . -name "*.tar.gz" -exec tar -xzvf {} \;)" ]]; then
        echo "Extraction failed. Terminating." && exit 1
    fi

    # Install
    if [[ $DEB_BASED == true ]]; then
        install_deb
    elif [[ $RPM_BASED == true ]]; then
        install_rpm
    fi

    echo "Successfully installed."
    if [[ ! "$EXCLUDE_PAS" == true ]]; then
        # License
        #license

        # WORKAROUND: Installation-critical logic is invoked by explicitly calling `pccis.sh start`
        /usr/share/prizm/scripts/pccis.sh start

        # Restart
        restart
    fi
}

function install_deb() {
    # Update apt for fresh DEB installations
    apt-get update &> /dev/null

    echo "Resolving dependencies..."
    if [[ ! "$EXCLUDE_SERVER" == true ]]; then
        dpkg --recursive --install ./*server*/
    fi

    if [[ ! "$EXCLUDE_PAS" == true ]]; then
        dpkg --recursive --install ./*client*/
    fi

    echo "Installing PrizmDoc..."
    if [[ ! "$(apt-get install -fy)" ]]; then
        echo "Installation failed. Terminating." && exit 1
    fi

    if [[ ! "$EXCLUDE_SERVER" == true ]]; then
        if [[ "$MULTILINGUAL" == true ]]; then
            echo "Installing Asian font support..."
            apt-get install -y language-pack-ja japan* language-pack-zh* chinese* language-pack-ko korean* fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core
        fi

        echo "Registering PCCIS with init.d..."
        ln -s /usr/share/prizm/scripts/pccis.sh /etc/init.d/pccis
        update-rc.d pccis defaults
    fi

    echo "Successfully installed."
    if [[ ! "$EXCLUDE_PAS" == true ]]; then

        echo "Registering PAS with init.d..."
        ln -s /usr/share/prizm/pas/pm2/pas.sh /etc/init.d/pas
        update-rc.d pas defaults

        chmod 755 /usr/share/prizm/Samples/Documents/
    fi
}

function install_rpm() {
    # Update yum for fresh RPM installations
    yum update -y &> /dev/null

    echo "Installing PrizmDoc..."
    if [[ ! "$EXCLUDE_SERVER" == true ]]; then
        yum install -y --nogpgcheck ./*server*/*.rpm
    fi

    if [[ ! "$EXCLUDE_PAS" == true ]]; then
        yum install -y --nogpgcheck ./*client*/*.rpm
    fi

    if [[ ! "$EXCLUDE_SERVER" == true ]]; then
        if [[ "$MULTILINGUAL" == true ]]; then
            echo "Installing Asian font support..."
            yum groupinstall Fonts
        fi

        echo "Registering PCCIS with init.d..."
        ln -s /usr/share/prizm/scripts/pccis.sh /etc/init.d/pccis
        chkconfig --add pccis
    fi

    echo "Successfully installed."
    if [[ ! "$EXCLUDE_PAS" == true ]]; then

        echo "Registering PAS with init.d..."
        ln -s /usr/share/prizm/pas/pm2/pas.sh /etc/init.d/pas
        chkconfig --add pas

        chmod 755 /usr/share/prizm/Samples/Documents/
    fi
}

# ./pdutil.sh remove
function remove() {
    if [[ -d "/usr/share/prizm" ]]; then
        # Prompt for confirmation
        read -rp "Prior installation detected. Remove? [y/N] " RESPONSE < /dev/tty
        if [[ ! "$RESPONSE"  =~ ^([yY][eE][sS]|[yY])$ ]]; then
            echo "Terminating." && exit 1
        fi

        echo "Stopping services..."
        /usr/share/prizm/scripts/pccis.sh stop &> /dev/null

        echo "Stopping PAS..."
        /usr/share/prizm/pas/pm2/pas.sh stop &> /dev/null

        echo "Stopping samples..."
        /usr/share/prizm/scripts/demos.sh stop &> /dev/null

        echo "Removing dependencies..."
        if [[ $DEB_BASED == true ]]; then
            apt-get purge -fy prizm-* &> /dev/null
        elif [[ $RPM_BASED == true ]]; then
            yum remove -y prizm-* &> /dev/null
        fi

        echo "Removing remaining files..."
        rm -rf /usr/share/prizm

        echo "Successfully removed."
    else
        echo "No prior installation detected. Terminating."
    fi
}

# ./pdutil.sh download
function download() {
    # Install curl for fresh Debian installations
    if [[ $DEB_BASED == true ]]; then
        apt-get install -y curl &> /dev/null
    fi

    if [[ $VERSION ]]; then
        if [[ $DEB_BASED == true ]]; then
            SERVER_LATEST="http://products.accusoft.com/PrizmDoc/$VERSION/prizmdoc_server_$VERSION.amd64.deb.tar.gz"
            CLIENT_LATEST="http://products.accusoft.com/PrizmDoc/$VERSION/prizmdoc_client_$VERSION.amd64.deb.tar.gz"
        elif [[ $RPM_BASED == true ]]; then
            SERVER_LATEST="http://products.accusoft.com/PrizmDoc/$VERSION/prizmdoc_server_$VERSION.RHEL7.tar.gz"
            CLIENT_LATEST="http://products.accusoft.com/PrizmDoc/$VERSION/prizmdoc_client_$VERSION.x86_64.rpm.tar.gz"
        fi
    else
        if [[ $DEB_BASED == true ]]; then
            SERVER_LATEST="http://products.accusoft.com/PrizmDoc/latest/prizmdoc_server_amd64.deb.tar.gz"
            CLIENT_LATEST="http://products.accusoft.com/PrizmDoc/latest/prizmdoc_client_amd64.deb.tar.gz"
        elif [[ $RPM_BASED == true ]]; then
            SERVER_LATEST="http://products.accusoft.com/PrizmDoc/latest/prizmdoc_server_RHEL7.tar.gz"
            CLIENT_LATEST="http://products.accusoft.com/PrizmDoc/latest/prizmdoc_client_x86_64.rpm.tar.gz"
        fi
    fi

    if [[ ! "$EXCLUDE_SERVER" == true ]]; then
        echo "Downloading Server..."
        curl --location --remote-name "$SERVER_LATEST"
    fi

    if [[ ! "$EXCLUDE_PAS" == true ]]; then
        echo "Downloading Client..."
        curl --location --remote-name "$CLIENT_LATEST"
    fi
}

# ./pdutil.sh license
function license() {
    if [[ -d "/usr/share/prizm" ]]; then
        while true; do
            echo "  1.) I would like to license this system with an OEM LICENSE."
            echo "  2.) I would like to license this system with a NODE-LOCKED LICENSE."
            echo "  3.) I have a license but I do not know what type."
            echo "  4.) I do not have a license but I would like an EVALUATION."
            echo "  5.) I do not want to license my product at this time."
            echo ""

            read -rp "Select an option (1-5) [5]: " RESPONSE < /dev/tty
            case "$RESPONSE" in
            "1")
                read -rp "Solution name: " SOLUTION_NAME < /dev/tty
                read -rp "OEM key: " OEM_KEY < /dev/tty

                echo "Licensing..."

                # WORKAROUND: The licenser is falsely reporting errors.
                if [[ "$(/usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar deploy write "$SOLUTION_NAME" $OEM_KEY)" ]]; then
                    echo "/usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar deploy write \"$SOLUTION_NAME\" $OEM_KEY"
                    echo "Licensing failed."
                else
                    echo "Licensing successful."
                    restart
                    break
                fi
                ;;
            "2")
                read -rp "Solution name: " SOLUTION_NAME < /dev/tty
                read -rp "Configuration file path (relative to $PWD): " CONFIG_FILE < /dev/tty
                read -rp "Access key: " ACCESS_KEY < /dev/tty

                echo "Licensing..."

                # WORKAROUND: The licenser is falsely reporting errors.
                if [[ "$(/usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar deploy get "$CONFIG_FILE" "$SOLUTION_NAME" $ACCESS_KEY)" ]]; then
                    echo "/usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar deploy get \"$CONFIG_FILE\" \"$SOLUTION_NAME\" $ACCESS_KEY"
                    echo "Licensing failed."
                else
                    echo "Licensing successful."
                    restart
                    break
                fi
                ;;
            "3")
                clear
                echo ""
                echo "  You can find your license type by selecting the \"Licenses\" tab on the"
                echo "Accusoft Portal: https://my.accusoft.com/"
                echo ""
                echo "  For an OEM LICENSE, you will be provided with a SOLUTION NAME and an OEM KEY."
                echo ""
                echo "  For a NODE-LOCKED LICENSE, you will be provided with a SOLUTION NAME, a"
                echo "CONFIGUATION FILE, and an ACCESS KEY."
                echo ""
                echo "  If you have not spoken with a member of the Accusoft Sales department, it is"
                echo "likely that you are interested in an EVALUATION."
                echo ""
                echo "  If you require additional assistance, please contact sales@accusoft.com."
                echo ""
                read -rp "Press enter to continue..."
                echo ""
                ;;
            "4")
                read -rp "Email address: " EMAIL < /dev/tty

                if [[ ! "$(/usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar eval get "$EMAIL")" ]]; then
                    echo "Licensing failed."
                else
                    echo "Licensing successful."
                    restart
                    break
                fi
                ;;
            "5")
                echo "Terminating."
                break
                ;;
            *)
                read -rp "Token \`$RESPONSE\` unrecognized. Continue? [y/N] " RESPONSE < /dev/tty
                if [[ ! "$RESPONSE"  =~ ^([yY][eE][sS]|[yY])$ ]]; then
                    echo "Terminating."
                    break
                fi
                echo ""
            esac
        done

    else
        echo "PrizmDoc is not installed. Terminating." && exit 1
    fi
}

# ./pdutil.sh restart
function restart() {
    if [[ -f "/usr/share/prizm/scripts/pccis.sh" ]]; then
        echo "Restarting PCCIS..."
        /usr/share/prizm/scripts/pccis.sh restart
    fi

    if [[ -f "/usr/share/prizm/pas/pm2/pas.sh" ]]; then
        echo "Restarting PAS..."
        /usr/share/prizm/pas/pm2/pas.sh restart
    fi

    if [[ -f "/usr/share/prizm/scripts/demos.sh" ]]; then
        echo "Restarting samples..."
        /usr/share/prizm/scripts/demos.sh restart
    fi
}

# ./pdutil.sh *
function main() {
    echo ""
    echo "               \\\\\\\\\\\\\\\\\\"
    echo "                \\\\\\\\\\\\\\\\\\\\"
    echo "                 \\\\\\\\\\\\\\\\\\\\\\"
    echo "                   \\\\\\\\\\\\\\\\\\\\"
    echo "               //    \\\\\\\\\\\\\\\\\\\\"
    echo "             //////   \\\\\\\\\\\\\\\\\\\\\\      PrizmDoc Utility v1.0"
    echo "          ////////      \\\\\\\\\\\\\\\\\\\\\\"
    echo "        ///////           \\\\\\\\\\\\\\\\\\\\"
    echo "      //////\\\\\\\\\\\\\\\\\\\\\\\\   \\\\\\\\\\\\\\\\"
    echo "    ////  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\      \\\\\\\\\\"
    echo "  ///              \\\\\\\\\\\\\\\\\\\\\\\\\\\\"
    echo ""

    DEB_BASED=false
    RPM_BASED=false
    NIX_BASED=false

    MULTILINGUAL=false

    EXCLUDE_PAS=false
    EXCLUDE_SERVER=false

    # Check privileges
    if [[ "$(/usr/bin/id -u)" != 0 ]]; then
        echo "Insufficient privileges. Terminating." && exit 1
    fi

    # Check architecture
    if [[ "$(uname -m)" != "x86_64" ]]; then
        echo "Incompatible architecture. Terminating." && exit 1
    fi

    # Save current working directory
    CWD=$(pwd)

    # Detect operating system
    if [[ -f "/usr/bin/apt-get" ]]; then
        DEB_BASED=true
        # echo "Debian-based operating system detected."
    elif [[ -f "/usr/bin/yum" ]]; then
        RPM_BASED=true
        # echo "RPM-based operating system detected."
    else
        NIX_BASED=true
        echo "Generic *nix-based operating system detected."
        echo "Not yet implemented. Terminating." && exit 1
    fi

    case $1 in
    "install")
        for TOKEN in "${@:2}"; do
            case "$TOKEN" in
            "--multilingual")
                MULTILINGUAL=true
                ;;
            "--exclude-pas")
                EXCLUDE_PAS=true
                ;;
            "--exclude-server")
                EXCLUDE_SERVER=true
                ;;
            "--version="*)
                VERSION=${TOKEN#*=}
                ;;
            *)
                read -rp "Token \`$TOKEN\` unrecognized. Continue? [y/N] " RESPONSE < /dev/tty
                if [[ ! "$RESPONSE"  =~ ^([yY][eE][sS]|[yY])$ ]]; then
                    echo "Terminating." && exit 1
                fi
            esac
        done

        install
        ;;
    "remove")
        remove
        ;;
    "download")
        for TOKEN in "${@:2}"; do
            case "$TOKEN" in
            "--exclude-pas")
                EXCLUDE_PAS=true
                ;;
            "--exclude-server")
                EXCLUDE_SERVER=true
                ;;
            *)
                read -rp "Token \`$TOKEN\` unrecognized. Continue? [y/N] " RESPONSE < /dev/tty
                if [[ ! "$RESPONSE"  =~ ^([yY][eE][sS]|[yY])$ ]]; then
                    echo "Terminating." && exit 1
                fi
            esac
        done

        download
        ;;
    "license")
        license
        ;;
    "restart")
        restart
        ;;
    *)
        echo "Usage:"
        echo "  ./pdutil.sh (install|remove|download|license|restart) [options]"
        echo ""
        echo "Reduces common PrizmDoc maintenance tasks down to proper Linux one-liners."
        echo ""
        echo "Commands:"
        echo "  install - Installs PrizmDoc"
        echo "  remove - Removes prior PrizmDoc installation"
        echo "  download - Downloads PrizmDoc"
        echo "  license - Licenses PrizmDoc"
        echo "  restart - Restarts PrizmDoc services"
        echo ""
        echo "Options:"
        echo "  --multilingual    Install Asian fonts"
        echo "  --exclude-pas     Exclude PAS"
        echo "  --exclude-server  Exclude PrizmDoc Server"
        ;;
    esac

    # Restore current working directory
    cd "$CWD" || (echo "Directory change failed. Terminating." && exit 1)

    exit 0
}

main "$@"

And this Dockerfile:

# PrizmDocker
#
# VERSION               1.0

FROM ubuntu:16.04

RUN apt-get update \
    && apt-get install -y curl \
    && curl -s https://some/docker/accessible/link/pdutil.sh | bash -s install

ENTRYPOINT curl -s https://some/docker/accessible/link/pdutil.sh | bash -s license \
    && bash

Built with:

docker image build . --tag "prizmdocker-ubuntu16.04" --no-cache

And run with:

docker run -p 3000:3000 -p 18681:18681 --rm -it --name prizmdocker-ubuntu16.04 prizmdocker-ubuntu16.04:latest

With the following caveats:

  1. PrizmDocker is configured to be ephemeral by default -- that is, the run script will destroy the container on bash exit. To disable this feature remove --rm from the run command.

  2. PrizmDocker licenses each instance at runtime. This can be annoying. To auto-license replace:

    curl -s https://some/docker/accessible/link/pdutil.sh | bash -s license
    

    in the run command with:

    /usr/share/prizm/java/jre8/bin/java -jar /usr/share/prizm/plu/plu.jar deploy write "PrizmDoc" <YOUR_OEM_LICENSE_KEY>
    

    Note: This will only work for OEM licenses.

For usage information on pdutil.sh itself, you can run it without any command line arguments:

PrizmDoc Utility v1.0

Usage:
    ./pdutil.sh (install|remove|download|license|restart) [options]

Reduces common PrizmDoc maintenance tasks down to proper Linux one-liners.

Commands:
    install - Installs PrizmDoc
    remove - Removes prior PrizmDoc installation
    download - Downloads PrizmDoc
    license - Licenses PrizmDoc
    restart - Restarts PrizmDoc services

Options:
    --multilingual    Install Asian fonts
    --exclude-pas     Exclude PAS
    --exclude-server  Exclude PrizmDoc Server

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article