Initial commit

This commit is contained in:
Michael Becker 2024-12-01 21:36:42 -05:00
parent 50bec6cf70
commit 0b81cb4dd0
20 changed files with 562 additions and 0 deletions

4
.gitignore vendored
View File

@ -412,3 +412,7 @@ FodyWeavers.xsd
# Built Visual Studio Code Extensions
*.vsix
# do not include built images in git
images

6
.gitmodules vendored Normal file
View File

@ -0,0 +1,6 @@
[submodule "mocha-php"]
path = mocha-php
url = git@gitea.azcona-becker.net:mochapowered/mocha-php
[submodule "mocha-common"]
path = mocha-common
url = git@gitea.azcona-becker.net:mochapowered/mocha-common

184
carafe Executable file
View File

@ -0,0 +1,184 @@
#!/bin/bash
# usage: ./mocha-carafe new BASE
if [ "$1" == "new" ]; then
if [ "$USER" != "root" ]; then
echo "must be run as root"
exit 2
fi
BASE=$2
BASEPATH=images/$BASE/$BASE
FLAVOR=noble
if [ ! -d "images" ]; then
mkdir "images"
fi
if [ ! -d "images/$BASE" ]; then
mkdir "images/$BASE"
fi
if [ ! -d "$BASEPATH" ]; then
debootstrap $FLAVOR "$BASEPATH"
fi
if [ ! -d "$BASEPATH" ]; then
echo "base path not found: $BASEPATH"
exit 2
fi
echo "deb http://archive.ubuntu.com/ubuntu noble main universe
deb http://archive.ubuntu.com/ubuntu noble-updates main universe
deb http://archive.ubuntu.com/ubuntu noble-backports main universe
deb http://archive.ubuntu.com/ubuntu noble-security main universe" > $BASEPATH/etc/apt/sources.list
if [ ! -d "$BASEPATH/usr/lib/mocha/carafe" ]; then
mkdir -p "$BASEPATH/usr/lib/mocha/carafe"
fi
if [ ! -d "$BASEPATH/usr/share/mocha/system" ]; then
mkdir -p "$BASEPATH/usr/share/mocha/system"
fi
cp -r libexec/mocha/carafe $BASEPATH/usr/lib/mocha
cp -r fs/* $BASEPATH/
if [ ! -d "$BASEPATH/usr/lib/mocha/oms" ]; then
mkdir -p $BASEPATH/usr/lib/mocha/oms
fi
./copy-oms $BASEPATH/usr/lib/mocha/oms
cp ./mocha-common/mocha-common/output/*.mcl $BASEPATH/usr/share/mocha/system
if [ ! -d "$BASEPATH/var/mocha/uploads" ]; then
mkdir -p "$BASEPATH/var/mocha/uploads"
fi
cp ./mocha-php/mocha-php/src/mocha-php/images/logo.svg $BASEPATH/var/mocha/uploads/c4f31b1aaede4e919fa0511537f098a5.svg
chroot $BASEPATH /usr/lib/mocha/carafe/preinstall.sh
if [ $? -ne 0 ]; then
echo "preinstall failed, try running 'chroot \$BASEPATH /usr/lib/mocha/carafe/preinstall.sh' again"
exit 2
fi
echo "Listen 443" > $BASEPATH/etc/apache2/ports.conf
cp site.conf $BASEPATH/etc/apache2/sites-available/000-default.conf
cp certs/localhost.crt certs/localhost.key $BASEPATH/etc/ssl/certs
cp -r mocha-php/mocha-php/src/mocha-php/* $BASEPATH/var/www/html
cp mocha-php/mocha-php/src/mocha-php/.htaccess $BASEPATH/var/www/html
rm -rf $BASEPATH/var/www/html/lib/phast
cp -r mocha-php/phast/lib/phast/server $BASEPATH/var/www/html/lib/phast
# mocha etc
if [ ! -d $BASEPATH/etc/mocha/include ]; then
mkdir -p $BASEPATH/etc/mocha/include
fi
cp mocha-php/mocha-php/src/mocha-php/include/Configuration.inc.php.template $BASEPATH/etc/mocha/include/Configuration.inc.php.template
# mocha libexec
if [ ! -d $BASEPATH/usr/lib/mocha ]; then
mkdir -p $BASEPATH/usr/lib/mocha
fi
cp libexec/mocha/mocha-* $BASEPATH/usr/lib/mocha
cp libexec/mocha/mocha $BASEPATH/usr/bin
chmod a+x $BASEPATH/usr/lib/mocha/*
chmod a+x $BASEPATH/usr/bin/mocha
if [ -d $BASEPATH/var/www/html/index.html ]; then
rm $BASEPATH/var/www/html/index.html
fi
# ! FIXME: we don't want to run this in chroot, we need to run it in lxc!
chroot $BASEPATH /usr/lib/mocha/carafe/postinstall.sh
echo "architecture: \"x86_64\"
creation_date: $(date +%s) # To get current date in Unix time, use \`date +%s\` command
properties:
architecture: \"x86_64\"
description: \"Ubuntu Noble with Apache2 and PHP (20171227)\"
os: \"ubuntu\"
release: \"noble\"" > images/$BASE/metadata.yaml
tar -cvzf images/$BASE/metadata.tar.gz -C images/$BASE metadata.yaml
rm images/$BASE/metadata.yaml
if [ ! -f images/$BASE/$BASE.tar.gz ]; then
tar -cvzf images/$BASE/$BASE.tar.gz -C $BASEPATH .
# rm -rf $BASEPATH
else
echo "$BASE.tar.gz already exists; not overwriting"
fi
EXISTS=$(lxc image list | grep $BASE )
if [ "$EXISTS" == "" ]; then
lxc image import images/$BASE/metadata.tar.gz images/$BASE/$BASE.tar.gz --alias $BASE
else
echo "not importing image; already exists as $BASE"
fi
SUV_ID=$(hexdump -vn8 -e'2/4 "%08x" 1 "\n"' /dev/urandom)
CONTAINER_NAME=i-0$SUV_ID
lxc init $BASE $CONTAINER_NAME
echo "Instance name is: $CONTAINER_NAME"
lxc start $CONTAINER_NAME
lxc shell $CONTAINER_NAME -- bash -c "echo \"$CONTAINER_NAME\" > /etc/mocha/container"
sleep 5
CONTAINER_IP=$(lxc exec $CONTAINER_NAME ip addr | grep 'scope global' | sed -e 's/ inet6 //' -e 's/\/64 scope global dynamic mngtmpaddr//')
lxc shell $CONTAINER_NAME mocha up
SUV_DOMAINNAME=".privatesuv.com"
echo "enter sudo password to add entry to /etc/hosts if desired"
echo "$CONTAINER_IP $CONTAINER_NAME$SUV_DOMAINNAME" | sudo tee -a /etc/hosts
elif [ "$1" == "list" ]; then
lxc list
elif [ "$1" == "up" ]; then
lxc start "$2"
elif [ "$1" == "shell" ]; then
lxc shell "$2"
elif [ "$1" == "reset" ]; then
BASE="$2"
echo "deleting compiled files..."
rm images/$BASE/*.gz
echo "removing the image..."
lxc image delete $BASE
elif [ "$1" == "destroy" ]; then
./carafe reset $2
rm -rf images/$2
# elif [ "$1" == "build" ]; then
#
#
else
echo "usage: mocha carafe new BASE"
fi

29
certs/localhost.crt Normal file
View File

@ -0,0 +1,29 @@
-----BEGIN CERTIFICATE-----
MIIE7zCCA9egAwIBAgIURvpBSseeEDIKEO0c1VBMWkLexMQwDQYJKoZIhvcNAQEL
BQAwgZkxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJGTDEQMA4GA1UEBwwHT3JsYW5k
bzEfMB0GA1UECgwWTUJTIEJ1c2luZXNzIFNvbHV0aW9uczEkMCIGA1UEAwwbTUJT
IEludGVybmFsIERldmVsb3BtZW50IENBMSQwIgYJKoZIhvcNAQkBFhVzdXBwb3J0
QHRldHJvbmljYS5jb20wHhcNMjMxMTA3MTI0MjMyWhcNMjUxMTA2MTI0MjMyWjBo
MQswCQYDVQQGEwJVUzELMAkGA1UECAwCRkwxEDAOBgNVBAcMB09ybGFuZG8xHzAd
BgNVBAoMFk1CUyBCdXNpbmVzcyBTb2x1dGlvbnMxGTAXBgNVBAMMECoucHJpdmF0
ZXN1di5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCB79lGqz1t
wC5KDJ6TMsJk6/BK7vQiyT3umuut2RPhwkMHfihz+zfxaYo4C7KHkSoCPT4v3u1y
MONJfiev8E+/ZzHlPNYhxs/Su1iSavJQHPvKzKMSkvjbMQFX/Cqzp/A2NL5EkmYv
HrFd9WiV2azp5knQ8hLWdvWR8gUHJZK0FocKA6qbQNQ3G/McOsEsaUZtjCcb1oJw
fKt4G8i2Iv0aMMTOJfCQYhrpuGuX8qkcD1gR9imb8qhthiLw54LwcrtQcIVEwFAG
YyDPVRsw6xvLYHchRkx+DvRdgy/UKMha9tq/3lzF9Fm1/3cnelEsKe7W51ZGkU+3
apVqNovaYZ+ty1rRxMe/tj4XtHaOLTioG/UMT7AL0LK3darEAS29n8UdT+xORBsU
7iENL112ZcY4yrzCDzUz1Ys0NJAl9a4p6kW33lu0idRTq75xwOYoKhX69Kff0bF8
dAAebxZSYcIF9/uKHpKW31zK8ac9d1bHYnkL8Ej2yA6Ps98tYLDUecC3dbYk+k2I
igz2BN2UhyEonb5DUz6dSlR+RR3kB884ycMrBi9FNEhjBhm5+iOHs1nAh1Hzm/IJ
Koiw49XyWZIxNYWkcqq9h4wQEQIiZ/3S1FeJWxj+vt+tZKAhDc71V5kSHHJXCh3X
EIqXLZYKXPAG0uST+H8VY5bXahKW/A60UQIDAQABo18wXTAbBgNVHREEFDASghAq
LnByaXZhdGVzdXYuY29tMB0GA1UdDgQWBBSCn5UhCbR7QG5M5RgZXI4y4LoFSDAf
BgNVHSMEGDAWgBSkDws8lTr7dn6nUzawl/gS5J2i3DANBgkqhkiG9w0BAQsFAAOC
AQEAPozqKZadO7QR4HxdU2KNuBlfbvZ62KS2UoiISnUS/cHEejkSdU6RaWN1wVv4
rimBhhVX+vkIBcd4OiaRTxFBQpgkyTxI7L+B/fKTmwUP3KEl2GSiWFwmAcRQjn4u
tNuABnn7d7UTl9NCR/n3981A1gl6cIAjv6XBEuDWCCTSCVWgWDBlpG2OA0Fp5+GL
J4Jl7xfjpiFAdOllVi/Cd63DiQmv6Fxuc2wBeugatLYCM8Mu6WOJ8+SvbJ57zYec
1oWftLmRr5WxpgGrbDMcAwwD74OXlTOuNX/Jx7uX2Y4Qlqysl7gHJtztlTQCO+23
RRiyHDf6iKxeh2S16xnVi2vtWw==
-----END CERTIFICATE-----

52
certs/localhost.key Normal file
View File

@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
Hn/DMWon80lSV4Ds8yHgx6W7Y/c=
-----END PRIVATE KEY-----

2
copy-oms Executable file
View File

@ -0,0 +1,2 @@
cp -r ../mocha-dotnet/mocha-dotnet/src/app/Mocha.Oms.Server/bin/Debug/net8.0/* $1

View File

@ -0,0 +1,11 @@
[Unit]
Description=First Run
After=network.target remote-fs.target nss-lookup.target
Documentation=https://support.mochapowered.com/oms-dotnet/1.3/
[Service]
Type=simple
ExecStart=/usr/sbin/firstrun
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,18 @@
[Unit]
Description=The Mocha OMS Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://support.mochapowered.com/oms-dotnet/1.3/
[Service]
Type=forking
Environment=MOCHAOMS_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/mochactl start-oms
ExecStop=/usr/sbin/mochactl stop-oms
ExecReload=/usr/sbin/mochactl reload-oms
KillMode=mixed
PrivateTmp=true
Restart=on-abort
OOMPolicy=continue
[Install]
WantedBy=multi-user.target

6
fs/usr/sbin/firstrun Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
/usr/lib/mocha/carafe/firstrun.sh
systemctl disable firstrun

10
fs/usr/sbin/mochactl Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
EXECPATH="/usr/lib/mocha/oms"
EXECFILE="Mocha.Oms.Server"
case "$1" in
"start-oms")
exec $EXECPATH/$EXECFILE &
esac

View File

@ -0,0 +1,21 @@
#!/bin/bash
rm /var/www/html/index.html
# set up mocha user accounts
addgroup webmasters
PASS1=$(pwgen 16 1)
useradd -p $(openssl passwd -6 $PASS1) webmaster
PASS2=$(pwgen 16 1)
useradd -p $(openssl passwd -6 $PASS2) zqadmin
echo "webmaster: $PASS1
zqadmin: $PASS2" > /etc/mocha/passwd
chown --recursive zqadmin /etc/mocha /usr/lib/mocha /usr/share/mocha /var/mocha
chgrp --recursive zqadmin /etc/mocha /usr/lib/mocha /usr/share/mocha /var/mocha
chown --recursive webmaster /var/www /var/mocha/uploads
chgrp --recursive webmasters /var/www /var/mocha/uploads

View File

@ -0,0 +1,3 @@
#!/bin/bash
systemctl enable firstrun

View File

@ -0,0 +1,24 @@
#!/bin/bash
PACKAGE_LIST="apache2 php pwgen php-xml php-mbstring php-curl php-mysql mariadb-server dotnet-sdk-8.0"
ENABLE_NANO=1
if [ $ENABLE_NANO -eq 1 ]; then
PACKAGE_LIST+=" nano"
fi
ENABLE_SSH=1
if [ $ENABLE_SSH -eq 1 ]; then
PACKAGE_LIST+=" openssh-server"
fi
apt update
apt install -y $PACKAGE_LIST
# enable apache modules
a2enmod rewrite ssl
# link service
ln -s /usr/lib/systemd/system/mocha-oms.service /etc/systemd/system/multi-user.target.wants/mocha-oms.service
systemctl enable mocha-oms

21
libexec/mocha/mocha Normal file
View File

@ -0,0 +1,21 @@
#!/bin/bash
if [ $# -gt 0 ]; then
if [ -f "/usr/lib/mocha/mocha-$1" ]; then
MOCHA_COMMAND=$1
shift
exec "/usr/lib/mocha/mocha-$MOCHA_COMMAND" ${1+"$@"}
else
echo "mocha: '$1' is not a mocha command. See 'mocha --help'."
fi
else
echo "usage: mocha $(echo /usr/lib/mocha/mocha-* | sed -e 's/\/usr\/lib\/mocha\/mocha\-//g' -e 's/ /|/g')"
fi

19
libexec/mocha/mocha-clean Normal file
View File

@ -0,0 +1,19 @@
#!/bin/bash
if [ "$1" != "-y" ]; then
echo "ARE YOU SURE you wish to CLEAN this SUV?"
echo "This will DESTROY all data and rebuild from a clean master image."
echo ""
echo -n "Type YES to confirm: > "
read CONFIRMYES
if [ "$CONFIRMYES" != "YES" ]; then
echo ""
echo "OK, not doing anything"
exit 1
fi
fi
rm /etc/mocha/*
mocha up

110
libexec/mocha/mocha-up Executable file
View File

@ -0,0 +1,110 @@
#!/bin/bash
FIRSTRUN=0
if [ -f "/etc/mocha/container" ]; then
MOCHA_CONTAINER=$(cat /etc/mocha/container)
else
MOCHA_CONTAINER=""
fi
if [ -f "/etc/mocha/username" ]; then
MOCHA_USERNAME=$(cat /etc/mocha/username)
MOCHA_PASSWORD=$(cat /etc/mocha/userpass)
else
# we are running for the first time (or we are transient)
HTML_HOME=/var/www/html
# reset the configuration file
cp /etc/mocha/include/Configuration.inc.php.template $HTML_HOME/include/Configuration.inc.php
# generate a not-very-secure but easily-rememberable password for zq-developer
MOCHA_USERNAME="zq-developer"
MOCHA_PASSWORD=$(pwgen -N 1)
if [ ! $? -eq 0 ]; then
echo ""
echo "could not generate a secure password, you may need to (re-)install pwgen"
echo ""
exit 3
fi
echo $MOCHA_USERNAME > /etc/mocha/username
echo $MOCHA_PASSWORD > /etc/mocha/userpass
MOCHA_DB_DATABASENAME="mocha_suv"
MOCHA_DB_USERNAME="mocha_suv"
# also generate a slightly more secure machine password for the mariadb database...
MOCHA_DB_PASSWORD=$(pwgen -s 32 -N 1)
# ... and add it to the configuration file
sed -i -e "s/@@MOCHA_DB_DATABASENAME@@/$MOCHA_DB_DATABASENAME/" -e "s/@@MOCHA_DB_USERNAME@@/$MOCHA_DB_USERNAME/" -e "s/@@MOCHA_DB_PASSWORD@@/$MOCHA_DB_PASSWORD/" $HTML_HOME/include/Configuration.inc.php
# ... and also add it to our local configuration
echo $MOCHA_DB_DATABASENAME > /etc/mocha/dbname
echo $MOCHA_DB_USERNAME > /etc/mocha/dbuser
echo $MOCHA_DB_PASSWORD > /etc/mocha/dbpass
# don't forget to make a backup
cp $HTML_HOME/include/Configuration.inc.php $HTML_HOME/include/Configuration.inc.php.bak
# create the MySQL database and user with the previously generated password
mysql -e "DROP DATABASE IF EXISTS $MOCHA_DB_DATABASENAME; DROP USER IF EXISTS $MOCHA_DB_USERNAME;"
mysql -e "CREATE DATABASE $MOCHA_DB_DATABASENAME; CREATE USER $MOCHA_DB_USERNAME IDENTIFIED BY '$MOCHA_DB_PASSWORD'; GRANT ALL ON $MOCHA_DB_DATABASENAME.* TO '$MOCHA_DB_USERNAME'@'%';"
# install mocha using the `mocha oms` command
mocha oms install
mocha oms install library /usr/share/mocha/libraries
mocha oms tenant select super
# set the new user name and password for the initial mocha user
mocha oms user set-password "$MOCHA_USERNAME" "$MOCHA_PASSWORD"
mocha oms tenant release
# record the initial start time for the SUV
echo $(date "+%Y-%m-%dT%H:%M:%S") > /etc/mocha/suvstart
chmod a+r /etc/mocha/suvstart
FIRSTRUN=1
fi
echo ""
echo "******************************************"
echo ""
echo "Thank you for provisioning your Mocha SUV!"
echo "You can log in with the following details:"
echo ""
if [ "$MOCHA_CONTAINER" != "" ]; then
echo "Container: $MOCHA_CONTAINER"
fi
echo "User name: $MOCHA_USERNAME"
echo "Password: $MOCHA_PASSWORD"
echo ""
echo "Your domain and IP address information is:"
echo ""
echo " $MOCHA_CONTAINER.privatesuv.com"
# ip addr show dev enp0s8 | grep inet
ip addr | grep 'scope global'
echo ""
SHOW_ADDITIONAL_LOGINS=0
if [ $SHOW_ADDITIONAL_LOGINS -eq 1 ]; then
if [ -f /etc/mocha/passwd ]; then
echo "Additional login information is as follows:"
echo ""
cat /etc/mocha/passwd
echo ""
fi
fi
echo "******************************************"
echo ""
if [ $FIRSTRUN -eq 1 ]; then
# register the SUV for automatic shutdown in 10 hours
/usr/lib/mocha/spot_register_for_shutdown 600
fi

View File

@ -0,0 +1,3 @@
#!/bin/sh
echo "!!! This Spot Instance will automatically terminate in $1 minutes !!!"
shutdown -P +$1

1
mocha-common Submodule

@ -0,0 +1 @@
Subproject commit 65c6b698a3dd1215ccd51de45ea3349f231bbf70

1
mocha-php Submodule

@ -0,0 +1 @@
Subproject commit 368d3e576f6be77aa17571da90f056fa2f5e9354

37
site.conf Normal file
View File

@ -0,0 +1,37 @@
<VirtualHost *:443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/>
AllowOverride All
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/localhost.crt
SSLCertificateKeyFile /etc/ssl/certs/localhost.key
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>