mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
Otherwise prepare-base is likely to fail when first run (but then succeed when rerun, because the container is left running), because the container isn't up yet when we try to operate in it. Also clean up the placement of `set -e` vs `set -x`.
82 lines
2.0 KiB
Bash
Executable File
82 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
usage() {
|
|
echo "usage: install -r RELEASE {TARBALL|DIR} [...installer opts..]" >&2
|
|
exit 1
|
|
}
|
|
|
|
args="$(getopt -o +r: --long help,release: -- "$@")"
|
|
eval "set -- $args"
|
|
while true; do
|
|
case "$1" in
|
|
--help) usage;;
|
|
-r|--release) RELEASE="$2"; shift; shift;;
|
|
--) shift; break;;
|
|
*) usage;;
|
|
esac
|
|
done
|
|
INSTALLER="$1"; shift
|
|
INSTALLER_ARGS=("$@"); set --
|
|
|
|
if [ -z "$RELEASE" ] || [ -z "$INSTALLER" ]; then
|
|
usage
|
|
fi
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "error: this script must be run as root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -x
|
|
|
|
THIS_DIR="$(dirname "$(readlink -f "$0")")"
|
|
|
|
BASE_CONTAINER_NAME=zulip-install-"$RELEASE"-base
|
|
if ! lxc-info -n "$BASE_CONTAINER_NAME" >/dev/null 2>&1; then
|
|
"$THIS_DIR"/prepare-base "$RELEASE"
|
|
fi
|
|
|
|
while [ -z "$CONTAINER_NAME" ] || lxc-info -n "$CONTAINER_NAME" >/dev/null 2>&1; do
|
|
shared_dir="$(mktemp -d --tmpdir "$RELEASE"-XXXXX)"
|
|
CONTAINER_NAME=zulip-install-"$(basename "$shared_dir")"
|
|
done
|
|
|
|
message="$(cat <<EOF
|
|
|
|
Container:
|
|
sudo lxc-attach -n $CONTAINER_NAME
|
|
|
|
Unpacked tree:
|
|
sudo ls $shared_dir/mnt/zulip-server
|
|
EOF
|
|
)"
|
|
trap 'set +x; echo "$message"' EXIT
|
|
|
|
if [ -d "$INSTALLER" ]; then
|
|
installer_dir="$(readlink -f $INSTALLER)"
|
|
else
|
|
installer_dir="$(mktemp -d --tmpdir zulip-server-XXXXX)"
|
|
tar -xf "$INSTALLER" -C "$installer_dir" --transform='s,^[^/]*,zulip-server,'
|
|
fi
|
|
|
|
mkdir -p /srv/zulip/test-install/pip-cache
|
|
|
|
mkdir "$shared_dir"/upper "$shared_dir"/work "$shared_dir"/mnt
|
|
mount -t overlay overlay \
|
|
-o lowerdir="$installer_dir",upperdir="$shared_dir"/upper,workdir="$shared_dir"/work \
|
|
"$shared_dir"/mnt
|
|
|
|
lxc-copy --ephemeral --keepdata -n "$BASE_CONTAINER_NAME" -N "$CONTAINER_NAME" \
|
|
-m bind="$shared_dir"/mnt:/tmp/src/,bind=/srv/zulip/test-install/pip-cache:/root/.cache/pip
|
|
|
|
"$THIS_DIR"/lxc-wait -n "$CONTAINER_NAME"
|
|
|
|
run() {
|
|
lxc-attach -n "$CONTAINER_NAME" -- "$@"
|
|
}
|
|
|
|
run eatmydata -- /tmp/src/zulip-server/scripts/setup/install --self-signed-cert "${INSTALLER_ARGS[@]}"
|
|
|
|
# TODO settings.py, initialize-database, create realm
|