mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env 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 || usage
 | 
						|
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 --clear-env -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:/mnt/src/,bind=/srv/zulip/test-install/pip-cache:/root/.cache/pip
 | 
						|
 | 
						|
"$THIS_DIR"/lxc-wait -n "$CONTAINER_NAME"
 | 
						|
 | 
						|
run() {
 | 
						|
    lxc-attach --clear-env -n "$CONTAINER_NAME" -- "$@"
 | 
						|
}
 | 
						|
 | 
						|
run eatmydata -- /mnt/src/zulip-server/scripts/setup/install --self-signed-cert "${INSTALLER_ARGS[@]}"
 | 
						|
 | 
						|
# TODO settings.py, initialize-database, create realm
 |