mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
set -e
 | 
						|
 | 
						|
usage() {
 | 
						|
    echo "usage: lxc-wait -n CONTAINER" >&2
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
args="$(getopt -o +n: --long help,name: -- "$@")"
 | 
						|
eval "set -- $args"
 | 
						|
while true; do
 | 
						|
    case "$1" in
 | 
						|
        --help) usage ;;
 | 
						|
        -n | --name)
 | 
						|
            CONTAINER_NAME="$2"
 | 
						|
            shift
 | 
						|
            shift
 | 
						|
            ;;
 | 
						|
        --)
 | 
						|
            shift
 | 
						|
            break
 | 
						|
            ;;
 | 
						|
        *) usage ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
if [ -z "$CONTAINER_NAME" ] || [ "$#" -gt 0 ]; then
 | 
						|
    usage
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$EUID" -ne 0 ]; then
 | 
						|
    echo "error: this script must be run as root" >&2
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
# We poll.
 | 
						|
poll_runlevel() {
 | 
						|
    for _ in {1..60}; do
 | 
						|
        echo "lxc-wait: $CONTAINER_NAME: polling for boot..." >&2
 | 
						|
        runlevel="$(lxc-attach --clear-env -n "$CONTAINER_NAME" -- runlevel 2>/dev/null)" \
 | 
						|
            || {
 | 
						|
                sleep 1
 | 
						|
                continue
 | 
						|
            }
 | 
						|
        if [ "$runlevel" != "${0%[0-9]}" ]; then
 | 
						|
            echo "lxc-wait: $CONTAINER_NAME: booted!" >&2
 | 
						|
            poll_network
 | 
						|
        fi
 | 
						|
        sleep 1
 | 
						|
    done
 | 
						|
    echo "error: timeout waiting for container to boot" >&2
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
poll_network() {
 | 
						|
    for _ in {1..60}; do
 | 
						|
        echo "lxc-wait: $CONTAINER_NAME: polling for network..." >&2
 | 
						|
        # New hosts don't have `host` or `nslookup`
 | 
						|
        lxc-attach --clear-env -n "$CONTAINER_NAME" -- \
 | 
						|
            ping -q -c 1 archive.ubuntu.com 2>/dev/null >/dev/null \
 | 
						|
            || {
 | 
						|
                sleep 1
 | 
						|
                continue
 | 
						|
            }
 | 
						|
        echo "lxc-wait: $CONTAINER_NAME: network is up!" >&2
 | 
						|
        exit 0
 | 
						|
    done
 | 
						|
    echo "error: timeout waiting for container to get network" >&2
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
poll_runlevel
 |