X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=appimage%2Fcitadel.AppDir%2FAppRun;h=70f00b9202c73325faeec58aa2413f57bc0c1ed2;hb=4397e5ac9918708106a00cd2bde21c46ece9e191;hp=0c0ececeb600132e08d6ba843ff0abe8926908b3;hpb=9911be8b93584d582dc3aaeb3e24a9b0cbb544c0;p=citadel.git diff --git a/appimage/citadel.AppDir/AppRun b/appimage/citadel.AppDir/AppRun index 0c0ececeb..70f00b920 100755 --- a/appimage/citadel.AppDir/AppRun +++ b/appimage/citadel.AppDir/AppRun @@ -1,5 +1,233 @@ #!/bin/bash -export LD_LIBRARY_PATH=$APPDIR/usr/lib -export PATH=$APPDIR/usr/bin -exec ctdlvisor $* +# This is an AppImage control script for the Citadel system. +# +# Copyright (c) 2021 by the citadel.org team +# +# This program is open source software. It runs great on the +# Linux operating system (and probably elsewhere). You can use, +# copy, and run it under the terms of the GNU General Public +# License version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# Default values +HTTP_PORT=80 +HTTPS_PORT=443 +CTDL_DIR=/usr/local/citadel +export APPDIR +ulimit -c unlimited + +usage() { + echo ${APPIMAGE}: usage: ${APPIMAGE} '[-h data_directory] [-p http_port] [-s https_port] command' + echo 'command must be one of: run, test, install, database_cleanup, migrate' + exit 2 +} + + +# Permanently install the Citadel AppImage to this system +installation() { + + clear + echo + echo + + # First ... check to make sure Citadel isn't already running. + echo Checking to make sure Citadel is not already running... + if ps ax | grep citserver | grep -v grep ; then + echo Installation cannot proceed while Citadel is running. + echo Stop your services and try again. + exit 1 + fi + echo OK + echo + + # Check compatibility + echo Checking this AppImage compatibility with your host system... + ( + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin + $APPDIR/usr/local/citadel/citserver -c || { + echo Compatibility failed. + exit 2 + } + ) + echo OK + echo + + # Locate the Citadel run directory + confirmed=0 + while [ ${confirmed} == 0 ] + do + echo -n In what directory will you run Citadel\? \[${CTDL_DIR}\]\ + read dir + if [ "${dir}" == "" ] + then + dir=${CTDL_DIR} + fi + if [ ! -d ${dir} ] + then + echo -n ${dir} does not exist. Do you want to create it\?\ + read yesno + if [ `echo ${yesno} | cut -c1` == 'y' ] + then + mkdir ${dir} + fi + fi + if [ -d ${dir} ] + then + confirmed=1 + fi + done + CTDL_DIR=${dir} + + # Check systemd + echo Checking this operating system for systemd... + systemctl --version >/dev/null 2>&1 || { + echo Automatic installation is only supported with systemd. + echo You can still run Citadel but you will need to start it some other way. + exit 3 + } + echo OK + echo + + # Remove old unit files + echo Checking for old startup files. + ls /etc/systemd/system/citadel* 2>/dev/null && { + rm -i /etc/systemd/system/citadel* + } + ls /etc/systemd/system/webcit* 2>/dev/null && { + rm -i /etc/systemd/system/webcit* + } + echo OK + echo + + echo Ready to install ${APPIMAGE} in ${CTDL_DIR} + echo Copying the AppImage... + rm -f ${CTDL_DIR}/citadel.appimage 2>/dev/null + cp ${APPIMAGE} ${CTDL_DIR}/citadel.appimage || { + echo Installation has failed with error code $? . + exit 4 + } + + echo Creating the systemd unit file... + ( + echo '# This unit file starts all Citadel services via the AppImage distribution.' + echo '# Automatically installed on' `date` + echo '' + echo '[Unit]' + echo 'Description=Citadel' + echo 'After=network.target' + echo '' + echo '[Service]' + echo 'ExecStart='${CTDL_DIR}'/citadel.appimage run -h '${CTDL_DIR}' -p '${HTTP_PORT}' -s '${HTTPS_PORT} + echo 'ExecStop=/bin/kill $MAINPID' + echo 'KillMode=process' + echo 'Restart=on-failure' + echo 'LimitCORE=infinity' + echo '' + echo '[Install]' + echo 'WantedBy=multi-user.target' + ) >/etc/systemd/system/citadel.service || { + echo Installation has failed with error code $? . + exit 5 + } + echo OK + echo + + echo Enabling the service... + systemctl enable citadel || { + echo Installation has failed with error code $? . + exit 6 + } + echo OK + echo + + echo Starting the service... + systemctl start citadel || { + echo Installation has failed with error code $? . + exit 6 + } + echo OK + echo + + echo Installation has completed. + echo Please continue by browsing to http://`hostname`:${HTTP_PORT} + exit +} + + +PARSED_ARGUMENTS=$(getopt -o h:p:s: -- "$@") +VALID_ARGUMENTS=$? +if [ "$VALID_ARGUMENTS" != "0" ]; then + usage +fi + +eval set -- ${PARSED_ARGUMENTS} +while : +do + case ${1} in + -h) CTDL_DIR=${2} ; shift 2 ;; + -p) HTTP_PORT=${2} ; shift 2 ;; + -s) HTTPS_PORT=${2} ; shift 2 ;; + --) shift; break;; + *) echo Unexpected option: ${1} + usage; + esac +done + +case ${1} in + run) + export APPDIR CTDL_DIR HTTP_PORT HTTPS_PORT + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin + exec ctdlvisor $* + ;; + test) + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin + exec $APPDIR/usr/local/citadel/citserver -c + ;; + install) + installation + ;; + database_cleanup) + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin:$PATH + exec $APPDIR/usr/local/citadel/database_cleanup.sh -h $CTDL_DIR + ;; + migrate) + export APPDIR CTDL_DIR HTTP_PORT HTTPS_PORT + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin + exec ctdlvisor -m + ;; + mount) + echo This mode of operation mounts the AppImage but does not run anything. + echo -n Kill it when you are finished... + while true + do + sleep 1 + done + ;; + debug) + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin:$PATH + exec $APPDIR/usr/local/citadel/citserver -x9 -h $CTDL_DIR + ;; + connect) + export LD_LIBRARY_PATH=$APPDIR/usr/lib + export PATH=$APPDIR/usr/bin:$PATH + cd $APPDIR + exec citadel $* + ;; + *) + echo Unexpected command: ${1} + usage + exit 1 + ;; +esac +exit 0