second commit
This commit is contained in:
Executable
+218
@@ -0,0 +1,218 @@
|
||||
#!/bin/bash
|
||||
|
||||
function check_database_exists() {
|
||||
db-maria list | grep -q "$longname"
|
||||
}
|
||||
|
||||
function check_port_used() {
|
||||
# shellcheck disable=SC2034
|
||||
usedport=$(lxc exec "$container" -- bash -c "grep Listen /etc/apache2/sites-enabled/$longname.conf | cut -d' ' -f2")
|
||||
|
||||
[[ "$usedport" == "$port" ]]
|
||||
}
|
||||
|
||||
function check_service_running() {
|
||||
lxc exec "$container" -- bash -c "systemctl is-active --quiet apache2.service"
|
||||
}
|
||||
|
||||
function check_config_defined() {
|
||||
lxc exec "$container" -- bash -c "test -f /var/www/cagettepei/$shortname/config.xml"
|
||||
}
|
||||
|
||||
function _read() {
|
||||
disable_trace
|
||||
check_database_exists
|
||||
check_container "$container"
|
||||
check_port_used
|
||||
check_config_defined
|
||||
check_service_running
|
||||
enable_trace
|
||||
return 0
|
||||
}
|
||||
|
||||
function _create() {
|
||||
echo "creating CagettePéi instance for <$shortname> ... "
|
||||
|
||||
mkdir -p "$MIAOU_CONFIGDIR/apps/cagettepei"
|
||||
APP_PORT=$port APP_NAME=$shortname tera -e --env-key env -t "$MIAOU_DIR/templates/apps/cagettepei/cagettepei-host.j2" -o "$MIAOU_CONFIGDIR/apps/cagettepei/$longname.conf" "$MIAOU_CONFIGDIR/miaou.expanded.yaml"
|
||||
echo "creating templates ... OK"
|
||||
|
||||
echo "copying files over container <$container> ... "
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_CONFIGDIR/apps/cagettepei/$longname.conf" "$container/etc/apache2/sites-available/$longname.conf"
|
||||
echo "copying files over container <$container> ... OK"
|
||||
|
||||
if ! (db-maria list | grep -q "$longname"); then
|
||||
echo "create empty database <$longname> ... "
|
||||
db-maria create "$longname"
|
||||
echo "create empty database <$longname> ... OK"
|
||||
DB_INIT=true
|
||||
else
|
||||
echo "database already exists!"
|
||||
DB_INIT=false
|
||||
fi
|
||||
|
||||
credential_username=$(load_yaml_from_expanded credential.username)
|
||||
credential_email=$(load_yaml_from_expanded credential.email)
|
||||
|
||||
echo "initialize cagettepei $shortname $longname ..."
|
||||
lxc exec "$container" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
if [[ ! -d /var/www/cagettepei/$shortname ]]; then
|
||||
echo "installing new instance of cagettepei into /var/www/cagettepei/$shortname"
|
||||
cd /tmp
|
||||
if [[ -d cagettepei ]]; then
|
||||
echo "refreshing previous clone"
|
||||
cd cagettepei
|
||||
git pull
|
||||
cd ..
|
||||
else
|
||||
echo "cloning"
|
||||
git clone https://git.artcode.re/cagetters/cagettepei.git
|
||||
fi
|
||||
cp -r cagettepei /var/www/cagettepei/$shortname
|
||||
cd /var/www/cagettepei/$shortname
|
||||
echo COMPILING...
|
||||
export HAXE_STD_PATH=/opt/haxe_20180221160843_bb7b827/std
|
||||
haxelib setup .haxelib
|
||||
make install ENV=dev
|
||||
echo OK
|
||||
else
|
||||
echo "instance of cagettepei /var/www/cagettepei/$shortname already defined!"
|
||||
fi
|
||||
|
||||
if diff -q /var/www/cagettepei/$shortname/config.xml /var/www/cagettepei/$shortname/config.xml.dist; then
|
||||
echo "create config.xml"
|
||||
cat << 'EOT2' > /var/www/cagettepei/$shortname/config.xml
|
||||
<config
|
||||
database="mysql://cagettepei-$shortname:cagettepei-$shortname@ct1.lxd/cagettepei-$shortname"
|
||||
|
||||
host="$fqdn"
|
||||
name = "$shortname"
|
||||
default_email = "postmaster@artcode.re"
|
||||
webmaster_email = "postmaster@artcode.re"
|
||||
|
||||
key="carotteMagique"
|
||||
|
||||
lang="fr"
|
||||
langs="fr"
|
||||
langnames="Français"
|
||||
sqllog="0"
|
||||
debug="0"
|
||||
cache="0"
|
||||
maintain="0"
|
||||
cachetpl="0"
|
||||
/>
|
||||
EOT2
|
||||
else
|
||||
echo "config.xml already defined!"
|
||||
fi
|
||||
|
||||
a2ensite $longname.conf
|
||||
mkdir -p /var/log/apache2/cagettepei/$shortname
|
||||
systemctl restart apache2
|
||||
|
||||
if [[ $DB_INIT == true ]]; then
|
||||
echo "Force TABLES initialization"
|
||||
curl localhost:$port
|
||||
echo "Set administrator password..."
|
||||
echo "insert into User values (1,'fr','c3513c793b13471f3a49bdb22acb66de',1,'$credential_username','Admin', '$credential_email', null, null, null, null, null, null, null, null, null, now(), now(),6,null, null);" | mariadb cagettepei-$shortname -u cagettepei-$shortname -pcagettepei-$shortname -h ct1.lxd
|
||||
echo "TODO: password \`cagette\` should be changed soon!!!"
|
||||
fi
|
||||
EOF
|
||||
echo "initialize cagettepei $shortname $longname ... OK"
|
||||
}
|
||||
|
||||
function _update() {
|
||||
echo "update"
|
||||
}
|
||||
|
||||
function _delete() {
|
||||
echo "delete"
|
||||
}
|
||||
|
||||
function usage() {
|
||||
echo "Usage: $COMMAND_NAME -c|r|u|d --port PORT --container CONTAINER --name NAME"
|
||||
exit 2
|
||||
}
|
||||
|
||||
### MAIN
|
||||
|
||||
# init_strict
|
||||
|
||||
COMMAND_NAME=$(basename "$0")
|
||||
|
||||
# read the options
|
||||
|
||||
TEMP=$(getopt -n "$COMMAND_NAME" -o crud --long port:,container:,name:,fqdn: -- "$@")
|
||||
# shellcheck disable=SC2181
|
||||
[[ "$?" -eq 0 ]] || usage
|
||||
eval set -- "$TEMP"
|
||||
|
||||
action="unset"
|
||||
port="unset"
|
||||
container="unset"
|
||||
shortname="unset"
|
||||
longname="unset"
|
||||
fqdn="unset"
|
||||
|
||||
# extract options and their arguments into variables.
|
||||
while true; do
|
||||
case "$1" in
|
||||
--port)
|
||||
port=$2
|
||||
shift 2
|
||||
;;
|
||||
--fqdn)
|
||||
fqdn=$2
|
||||
shift 2
|
||||
;;
|
||||
--container)
|
||||
container=$2
|
||||
shift 2
|
||||
;;
|
||||
--name)
|
||||
shortname=$2
|
||||
longname="cagettepei-$shortname"
|
||||
shift 2
|
||||
;;
|
||||
-c)
|
||||
[[ "$action" == "unset" ]] || usage
|
||||
action="_create"
|
||||
shift 1
|
||||
;;
|
||||
-r)
|
||||
[[ "$action" == "unset" ]] || usage
|
||||
action="_read"
|
||||
shift 1
|
||||
;;
|
||||
-u)
|
||||
[[ "$action" == "unset" ]] || usage
|
||||
action="_update"
|
||||
shift 1
|
||||
;;
|
||||
-d)
|
||||
[[ "$action" == "unset" ]] || usage
|
||||
action="_delete"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo "Internal error!"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[
|
||||
"$action" != unset &&
|
||||
"$port" != unset &&
|
||||
"$container" != unset &&
|
||||
"$fqdn" != unset &&
|
||||
"$shortname" != unset ]] || usage
|
||||
|
||||
. "$MIAOU_BASEDIR/lib/init.sh"
|
||||
|
||||
$action
|
||||
Executable
+187
@@ -0,0 +1,187 @@
|
||||
#!/bin/bash
|
||||
|
||||
readonly UNWANTED_PACKAGES_STRING="nginx node python haxe"
|
||||
readonly MANDATORY_PACKAGES_STRING="wget apache2 make git imagemagick gettext libapache2-mod-neko mariadb-client sendemail libio-socket-ssl-perl libnet-ssleay-perl"
|
||||
|
||||
### CHECK
|
||||
|
||||
function check() {
|
||||
PREFIX="recipe:cagettepei:check"
|
||||
check_unwanted_packages || return 21
|
||||
check_mandatory_packages || return 22
|
||||
check_apache_modules || return 23
|
||||
check_node8 || return 24
|
||||
check_python2 || return 25
|
||||
check_haxe3 || return 26
|
||||
check_cagettepei_batch || return 35
|
||||
check_cagettepei_timers || return 36
|
||||
echo "container <$CONTAINER> approved successfully!"
|
||||
}
|
||||
|
||||
function check_apache_modules() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
test -L /etc/apache2/mods-enabled/neko.load
|
||||
test -L /etc/apache2/mods-enabled/rewrite.load
|
||||
true
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_cagettepei_batch() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
test -f /var/www/cagettepei/cagettepei-batch
|
||||
true
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_cagettepei_timers() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
test -f /etc/systemd/system/cagettepei-batch-minute.service
|
||||
test -f /etc/systemd/system/cagettepei-batch-minute.timer
|
||||
test -f /etc/systemd/system/cagettepei-batch-day.service
|
||||
test -f /etc/systemd/system/cagettepei-batch-day.timer
|
||||
true
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_node8() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
node --version | grep -q 'v8.17.0'
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_python2() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
python --version 2>&1 | grep -q 'Python 2.7.18'
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_haxe3() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
haxe -version 2>&1 | grep -q '3.4.7'
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_unwanted_packages() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
mapfile -t PACKAGES <<< "$UNWANTED_PACKAGES_STRING"
|
||||
for package in \${PACKAGES[@]}; do
|
||||
! (dpkg -l "\$package" 2>/dev/null | grep -q ^ii)
|
||||
done
|
||||
true # useful because for might return last inexistant package
|
||||
EOF
|
||||
}
|
||||
|
||||
function check_mandatory_packages() {
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
mapfile -t PACKAGES <<< "$MANDATORY_PACKAGES_STRING"
|
||||
for package in \${PACKAGES[@]}; do
|
||||
dpkg-query -l "\$package" 2>/dev/null | grep -q ^ii
|
||||
done
|
||||
EOF
|
||||
}
|
||||
|
||||
### INSTALL
|
||||
|
||||
function install() {
|
||||
PREFIX="recipe:cagettepei:install"
|
||||
: $PREFIX
|
||||
|
||||
launch_container "$CONTAINER"
|
||||
echo "initializing CagettePéi ... "
|
||||
|
||||
echo -n "check unwanted packages..."
|
||||
check_unwanted_packages
|
||||
PREFIX="" echo "OK"
|
||||
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
set -Eeuo pipefail
|
||||
|
||||
echo installing CagettePéi...
|
||||
apt-get update
|
||||
apt-get install -y $MANDATORY_PACKAGES_STRING
|
||||
|
||||
echo installing custom Node8...
|
||||
wget https://nodejs.org/download/release/v8.17.0/node-v8.17.0-linux-x64.tar.gz -O /tmp/node-v8.17.0-linux-x64.tar.gz
|
||||
tar -xzvf /tmp/node-v8.17.0-linux-x64.tar.gz -C /opt
|
||||
chown root:root -R /opt/node-v8.17.0-linux-x64
|
||||
ln -sf /opt/node-v8.17.0-linux-x64/bin/node /usr/local/bin/
|
||||
ln -sf /opt/node-v8.17.0-linux-x64/bin/npm /usr/local/bin/
|
||||
echo -n DONE
|
||||
|
||||
echo installing custom Python2 with pypy...
|
||||
wget https://downloads.python.org/pypy/pypy2.7-v7.3.13-linux64.tar.bz2 -O /tmp/pypy2.7-v7.3.13-linux64.tar.bz2
|
||||
apt install -y bzip2
|
||||
bunzip2 -f /tmp/pypy2.7-v7.3.13-linux64.tar.bz2
|
||||
tar -xvf /tmp/pypy2.7-v7.3.13-linux64.tar -C /opt
|
||||
ln -sf /opt/pypy2.7-v7.3.13-linux64/bin/python /usr/local/bin/
|
||||
ln -sf /opt/pypy2.7-v7.3.13-linux64/bin/python2 /usr/local/bin/
|
||||
echo -n DONE
|
||||
|
||||
echo installing custom Haxe3...
|
||||
wget https://github.com/HaxeFoundation/haxe/releases/download/3.4.7/haxe-3.4.7-linux64.tar.gz -O /tmp/haxe-3.4.7-linux64.tar.gz
|
||||
tar -xzvf /tmp/haxe-3.4.7-linux64.tar.gz -C /opt
|
||||
ln -sf /opt/haxe_20180221160843_bb7b827/haxe /usr/local/bin/
|
||||
ln -sf /opt/haxe_20180221160843_bb7b827/haxelib /usr/local/bin/
|
||||
echo -n DONE
|
||||
|
||||
systemctl stop apache2
|
||||
rm -f /etc/apache2/sites-available/{000-default,default-ssl}.conf
|
||||
rm -f /etc/apache2/sites-enabled/000-default.conf
|
||||
rm -rf /var/www/html
|
||||
sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
|
||||
sed -i 's/^Listen 80$//' /etc/apache2/ports.conf
|
||||
|
||||
echo "prepare folder for cagettepei instances"
|
||||
mkdir -p /var/www/cagettepei
|
||||
|
||||
echo "enable neko and rewrite apache2 modules"
|
||||
a2enmod neko
|
||||
a2enmod rewrite
|
||||
EOF
|
||||
|
||||
echo -n "copy cagettepei-batch..."
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_BASEDIR/templates/apps/cagettepei/cagettepei-batch" "$CONTAINER/var/www/cagettepei/cagettepei-batch"
|
||||
lxc exec "$CONTAINER" -- chmod +x /var/www/cagettepei/cagettepei-batch
|
||||
PREFIX="" echo "OK"
|
||||
|
||||
echo -n "copy cagettepei timers in systemd..."
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_BASEDIR/templates/apps/cagettepei/systemd/cagettepei-batch-minute.service" "$CONTAINER/etc/systemd/system/cagettepei-batch-minute.service"
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_BASEDIR/templates/apps/cagettepei/systemd/cagettepei-batch-minute.timer" "$CONTAINER/etc/systemd/system/cagettepei-batch-minute.timer"
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_BASEDIR/templates/apps/cagettepei/systemd/cagettepei-batch-day.service" "$CONTAINER/etc/systemd/system/cagettepei-batch-day.service"
|
||||
lxc file push --uid 0 --gid 0 "$MIAOU_BASEDIR/templates/apps/cagettepei/systemd/cagettepei-batch-day.timer" "$CONTAINER/etc/systemd/system/cagettepei-batch-day.timer"
|
||||
PREFIX="" echo "OK"
|
||||
|
||||
echo -n "override apache2 service to launch cagettepei timers..."
|
||||
lxc exec "$CONTAINER" -- bash -c "SYSTEMD_EDITOR=tee systemctl edit apache2 <<EOT
|
||||
[Unit]
|
||||
BindsTo = cagettepei-batch-minute.timer cagettepei-batch-day.timer
|
||||
EOT"
|
||||
PREFIX="" echo "OK"
|
||||
|
||||
echo "enable and start cagettepei timers in systemd..."
|
||||
lxc exec "$CONTAINER" -- bash <<EOF
|
||||
systemctl enable cagettepei-batch-minute.timer cagettepei-batch-day.timer
|
||||
systemctl start cagettepei-batch-minute.timer cagettepei-batch-day.timer
|
||||
EOF
|
||||
PREFIX="" echo "OK"
|
||||
}
|
||||
|
||||
### MAIN
|
||||
|
||||
. "$MIAOU_BASEDIR/lib/init.sh"
|
||||
|
||||
arg1_required "$@"
|
||||
readonly CONTAINER="$1"
|
||||
|
||||
check || (
|
||||
install
|
||||
check
|
||||
)
|
||||
Reference in New Issue
Block a user