Example scripts for a High availability install of Noodle 7.08.05+.

1) Install 3+ Ubuntu instances with password-less key authentication, run the following on each (using real IPs and domains);

IP1=192.168.0.141 #dn1
IP2=192.168.0.142 #dn2
IP3=192.168.0.143 #dn3
IP="$(ip addr show | grep "inet " | grep -v 127.0.0.1 | perl -pe 's/\/.*//g;s/.* //g')"

apt update
apt -y dist-upgrade
apt -y install chrony openjdk-11-jdk ceph-fuse p7zip-full sysstat catdoc antiword html2text unrtf libid3-tools ffmpeg
apt -y purge snapd
apt -y autoremove

#if public domains are not in use;
echo "
$IP1 dn1
$IP2 dn2
$IP3 dn3
" >> /etc/hosts

2) Install Ceph from the admin node (all nodes will wipe /dev/xvdb);

POOL=noodle

ceph-deploy new dn1 dn2 dn3
ceph-deploy install dn1 dn2 dn3
ceph-deploy mon create-initial
ceph-deploy admin dn1 dn2 dn3
ceph-deploy mgr create dn1 dn2 dn3
ceph-deploy osd create dn1:xvdb dn2:xvdb dn3:xvdb
ceph-deploy mds create dn1 dn2 dn3
for N in dn1 dn2 dn3 ; do
        ceph-deploy mon add $N
done
ceph osd pool create ${POOL}_data 16
ceph osd pool create ${POOL}_meta 16
ceph fs new ${POOL}_fs ${POOL}_meta ${POOL}_data
for N in $IP1 $IP2 $IP3 ; do
	ssh $N "ceph-fuse -m $N:6789 /opt/Noodle/FSDB"
done

3) Install CockroachDB on all nodes;

cd /opt
wget -qO- https://binaries.cockroachdb.com/cockroach-v19.2.2.linux-amd64.tgz | tar  xvz
./cockroach-v19.2.2.linux-amd64/cockroach start --insecure --advertise-addr=${IP} --join=${IP1},${IP2},${IP3} --background

4) initialize CockroachDB from the admin node;

./cockroach-v19.2.2.linux-amd64/cockroach init --insecure --host=${IP}
echo "CREATE USER noodleuser; CREATE DATABASE noodledb WITH ENCODING = 'UNICODE'; GRANT ALL ON DATABASE noodledb to noodleuser;" | ./cockroach-v19.2.2.linux-amd64/cockroach sql --insecure --host=${IP}:26257

5) Install Noodle on all nodes;

cd /opt
tar -xf Noodle.tar.gz
cd ./Noodle
./configure
echo "NoodleNodes[] = ${IP1}, ${IP2}, ${IP3}
FSDB = /opt/Noodle/FSDB" >> cfg/intranet.conf
perl -pi -e 's/^(DatabaseManager.DB.intranet.Connection.Url = ).*/$1"jdbc:postgresql:\/\/'"$IP"':26257\/noodledb"/g' cfg/intranet.conf
mv noodle.daemon /etc/init.d/noodle
update-rc.d noodle defaults
systemctl start noodle.service

letsencrypt offers free HTTPS certificates with the limitation that you need to set them up to auto renew every ~3 months. Below are some example scripts that last of which should be called from cron.

Settings

DOMAIN=noodle.example.com
EMAIL=me@example.com
PASS=example
DIR=/opt/Noodle/ACME
JKS=/opt/Noodle/noodle.jks

Initialize

. /opt/Noodle/settings.sh
apt install -y certbot
systemctl disable certbot
mkdir $DIR
certbot register --agree-tos --no-eff-email -m "$EMAIL"
certbot certonly --webroot \
	--webroot-path $DIR \
	--cert-name "$DOMAIN" \
	-d "$DOMAIN"
/opt/Noodle/convert.sh

Convert

. /opt/Noodle/settings.sh
P12=$(mktemp)
rm -f "$JKS"
openssl pkcs12 -export \
	-in /etc/letsencrypt/live/"$DOMAIN"/cert.pem \
	-inkey /etc/letsencrypt/live/"$DOMAIN"/privkey.pem \
	-certfile /etc/letsencrypt/live/"$DOMAIN"/fullchain.pem \
	-name "$DOMAIN" \
	-out "$P12" \
	-password "pass:$PASS"
keytool -genkeypair \
	-alias temp \
	-storetype JKS \
	-keystore $JKS \
	-storepass "$PASS" \
	-keypass "$PASS" \
	-dname "CN=temp, OU=temp, O=temp, L=temp, S=temp, C=CA"
keytool -delete \
	-alias temp \
	-keystore $JKS \
	-storepass "$PASS"
keytool -importkeystore \
	-srckeystore "$P12" \
	-srcstoretype pkcs12 \
	-destkeystore $JKS \
	-deststoretype JKS \
	-srcstorepass "$PASS" \
	-deststorepass "$PASS"
rm "$P12"

Renew

. /opt/Noodle/settings.sh
certbot renew --webroot \
	--webroot-path $DIR \
	--cert-name "$DOMAIN" \
	--deploy-hook /opt/Noodle/convert.sh

Currently Noodle must be restarted to reload the keystore.

BranchVersionFirst buildLatest build
Long Term Support (LTS)7.08.022019-10-022020-03-23
Release7.08.062020-03-032020-03-30
Next7.08.072020-03-30Today

Long Term Support Versions

VersionReleaseRetirement
7.05.122019-02-192020-01-02
7.08.022019-10-022021-01-02

Release Versions

VersionReleaseRetirement
7.08.062020-04-022020-05-02
7.08.052020-03-022020-04-02
7.08.042020-02-022020-03-02
7.08.032019-12-022020-01-02
7.08.012019-09-022019-10-02
7.06.052019-08-022019-09-02
7.06.042019-07-022019-08-02
7.06.032019-06-022019-07-02
7.06.022019-05-022019-06-02
7.06.012019-04-022019-05-02
7.05.132019-03-022019-04-02
...
4.01.012001-06-082001-06-08

In 1995 Sun Microsystems created Java. Sun released Java under the GPL in 2006. Oracle Corporation acquired Java with the purchase of Sun in 2010. In 2019 Oracle stopped releasing security updates for LTS releases under a permissive license. OpenJDK is the upstream for all Java builds but does not release builds itself, so there are now many java distributions, some with additional patches. In addition to the Linux distributions (Debian/Ubuntu, Fedora/RedHat/CentOS, Arch/Manjaro, etc) building off OpenJDK for their package managers the following are available;

BuildPermissivePureCommercial Support
AdoptOpenJDK / JClarity / IBMYesOptionalYes
Azul ZuluYesNoYes
Amazon CorrettoYesNoYes
SAPYesNoYes
LibericaYesNoYes
RedHat for Windows YesNoYes
ojdkbuildYesYes´╗┐No
OracleNoNoYes

Windows users can subscribe to releases on github until the windows store catches up with Linux repositories since the year 1998

sudo -i
apt update
apt -y upgrade
apt -y dist-upgrade
apt install -y postgresql-contrib tree p7zip-full sysstat catdoc antiword html2text unrtf libid3-tools ffmpeg openjdk-11-jre
cd /opt
tar -xf ./Noodle.tar.gz
cd ./Noodle
su postgres -c 'cd ~/;psql --file /opt/Noodle/init.sql'
./configure
mv noodle.daemon /etc/init.d/noodle
update-rc.d noodle defaults
service noodle start

  • Drive Space low
    • Add more storage space (a SSD preferably) (can be done without service interruption if you are using a Logical Volume Manager)
  • Out of RAM
    • Add more Memory
    • This warning is not yet supported for MSSQL or remote databases.
  • Index Queue not empty
    • Can be ignored if intermittent small numbers
    • Contact support if large numbers persist
  • HTTP pool too full
    • in multiserver.conf increase HTTP pools like Connection.CM_0.NumThreads to at least double the number of active users. (you may also have a CM_1 if you are using HTTP and HTTPS)
  • DB pool full
    • The default setting of 30 in intranet.conf for DatabaseManager.DB.intranet.Connection.MaxPoolSize is already fairly high so normally this is an indication that the SQL server getting bogged down by slow spinning storage (LVMCache is recommended).
    • Increasing the number without ensuring the DB pool was filled because of volume (not latency) will likely cause out of memory or deadlock errors on the database instead of just slowness.

#!/bin/bash
 
#
# noodle_datamanager_add.sh
#
 
set -e
 
U=$1
P=$2
F=$3
D=$4
 
SERVER="https://domain.tld"
COOKIE=noodle_cookie.tmp
 
if [ "$D" == "" ] ; then
	echo NO >&2
	exit 1
fi
if [ -f $COOKIE ] ; then
	echo "already running"
	exit 2;
fi
TMP=$(mktemp)
wget -q "$SERVER/HandleLogin.po" --post-data="user_name=$U&user_password=$P" --keep-session-cookies --save-cookies $COOKIE -O /dev/null
wget -q "$SERVER/datamanager/MainWindow.po"  --load-cookies $COOKIE -O "$TMP"
CSRF=$(< "$TMP" perl -pe 's/(<)/\n$1/g' | grep CSRF | perl -pe 's/^.*value="//g;s/".*$//g')
rm "$TMP"
wget -q "$SERVER/datamanager/HandleMainWindow.po" --post-data="CSRF=$CSRF&folder=$F&val5440=$D" --load-cookies $COOKIE -O /dev/null

#!/bin/bash
 
#
# noodle_datamanager_report_get.sh
#
 
set -e
 
U=$1
P=$2
F=$3
R=$4
 
SITE="https://domain.tld"
COOKIE=noodle_cookie.tmp
 
if [ "$R" == "" ] ; then
    echo NO >&2
    exit 1
fi
if [ -f $COOKIE ] ; then
    echo "already running"
    exit 2;
fi
wget -q "$SITE/HandleLogin.po" --post-data="user_name=$U&user_password=$P" --keep-session-cookies --save-cookies $COOKIE -O /dev/null
wget -q "$SITE/datamanager/ReportView.po?folder=$F&reportHandle=$R&itemsPerPage=99" --load-cookies $COOKIE -O -
rm $COOKIE