database cleanup mode
authorArt Cancro <ajc@citadel.org>
Sat, 7 Aug 2021 23:48:01 +0000 (19:48 -0400)
committerArt Cancro <ajc@citadel.org>
Sat, 7 Aug 2021 23:48:01 +0000 (19:48 -0400)
ctdlvisor.c
run-citadel.sh

index ece2e9dd34fa83495250e84d453a2589cbdadbf7..64e6c04c441b63e0e4ce4c1b8670e2ccdc94cbf1 100644 (file)
@@ -182,6 +182,7 @@ void main_loop(void) {
 int main(int argc, char **argv) {
        int a;
        int migrate_mode = 0;
+       int database_cleanup_mode = 0;
 
        fprintf(stderr, "ctdlvisor: Welcome to the Citadel System running in a container.\n");
        fprintf(stderr, "ctdlvisor: command line arguments: ");
@@ -211,7 +212,7 @@ int main(int argc, char **argv) {
        symlink(CTDL_DIR "/keys", "/usr/local/webcit/keys");
 
        /* parse command-line arguments */
-       while ((a=getopt(argc, argv, "cm")) != EOF) switch(a) {
+       while ((a=getopt(argc, argv, "cmd")) != EOF) switch(a) {
 
                // test this binary for compatibility and exit
                case 'c':
@@ -224,6 +225,11 @@ int main(int argc, char **argv) {
                        migrate_mode = 1;
                        break;
 
+               // run database_cleanup.sh only
+               case 'd':
+                       database_cleanup_mode = 1;
+                       break;
+
                // any other parameter makes it crash and burn
                default:
                        fprintf(stderr, "usage\n");
@@ -244,6 +250,17 @@ int main(int argc, char **argv) {
                kill(citserver_pid, SIGTERM);
        }
 
+       // "database cleanup mode" means we just start the server and then run database_cleanup.sh interactively
+       else if (database_cleanup_mode) {
+               citserver_pid = start_citadel();
+               fprintf(stderr, "ctdlvisor: waiting a moment for citserver to initialize...\n");
+               sleep(5);
+               char bin[1024];
+               sprintf(bin, "/usr/local/citadel/database_cleanup.sh -h %s", CTDL_DIR);
+               system(bin);
+               kill(citserver_pid, SIGTERM);
+       }
+
        // Otherwise, it's just a normal happy day in Citadel land.
        else {
                signal(SIGTERM, signal_handler);
index a763998e9862f83a88494d17e862f17e966cfcb5..398c779bd002777e2eaeab36fdc948c3811df6d4 100755 (executable)
@@ -33,7 +33,12 @@ do
                        CTDL_DIR=${OPTARG}
                        ;;
                *)
-                       echo "$0: usage: $0 [-v volume_name] [-h home_directory] [-m] [-v] container_image_name [other parameters]"
+                       echo
+                       echo "$0: usage: $0 [-v volume_name] [-h home_directory] [-m] [-d] container_image_name"
+                       echo "  -v volume_name          Use or create a Citadel database stored in a Docker volume called 'volume_name'"
+                       echo "  -h home_directory       Use or create a Citadel database stored in 'home_directory' on the host system"
+                       echo "  -m                      Enter migrate mode, to copy a remote Citadel installation to this host"
+                       echo "  -d                      Attempt to recover a corrupt database"
                        exit 1
                        ;;
        esac
@@ -60,18 +65,26 @@ if ( ${migrate_mode} && ${database_cleanup_mode} ) ; then
        exit 3
 fi
 
-docker version >/dev/null 2>&1 || {
-       echo Docker engine is not installed on this host.
-       exit 1
-}
+docker run -it --rm $1 -c || exit 1
+
+n_args=""
+c_args=""
+
+if ${migrate_mode} ; then
+       c_args="-m"                             # Tell ctdlvisor to run ctdlmigrate
+elif ${database_cleanup_mode} ; then
+       c_args="-d"                             # Tell ctdlvisor to run database_cleanup.sh
+else
+       n_args="--network host"                 # Only open ports if we're running in normal mode
+fi
 
 exec docker run \
        --name citadel \
        -it \
        --rm \
-       --network host \
+       ${n_args} \
        --mount type=${CTDL_VOL},source=${CTDL_DIR},target=/citadel-data \
-       $*
+       $1 ${c_args}
 
 #      Explanation of the above options:
 #