+++ /dev/null
-#!/bin/bash
-
-# 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