HOME


Mini Shell 1.0
DIR: /snap/core24/888/usr/share/subiquity/
Upload File :
Current File : //snap/core24/888/usr/share/subiquity/console-conf-wrapper
#!/bin/bash
set -e

trap true HUP INT QUIT TSTP
echo_on () { stty echo; }
trap echo_on EXIT

# agetty only sets ICRNL if it has read the username and seen whether
# it was terminated by CR or NL. We pass -n to agetty so that hasn't
# happened and need to force it on. Yay UNIX!
stty icrnl -echo

redisplay_and_exit() { exit 42; }

if [ -e /run/snapd-recovery-chooser-triggered ]; then
    # make sure the chooser binary is there to avoid getting into an awkward
    # state and locking out the user
    if [ -x /usr/lib/snapd/snap-recovery-chooser ]; then
        # when recovery chooser is invoked it takes over the terminal
        /usr/lib/snapd/snap-recovery-chooser
        rval=$?
        if [ "$rval" -eq 0 ]; then
            redisplay_and_exit
        else
            exit $rval
        fi
    fi
    if [ -e /var/lib/console-conf/complete ]; then
        exit 0
    fi
fi

# always prefer to use modeevn if it is available
if [ -e "/var/lib/snapd/modeenv" ]; then
    mode="$(/usr/libexec/core/get-mode mode)"
else
    mode="$(/usr/libexec/core/get-arg snapd_recovery_mode)"
fi

if [ "${mode}" = "install" ]; then
    echo "Installing the system, please wait for reboot"
    # XXX: replace with something more user friendly after the beta?
    journalctl -u snapd.service -f
    sleep infinity
fi

if [ "$(snap managed)" = "true" ]; then
    # check if we have extrausers that have no password set
    if grep -qE '^[-a-z0-9+.-_]+:x:' /var/lib/extrausers/passwd && ! grep -qE '^[-a-z0-9+.-_]+:\$[0-9]+\$.*:' /var/lib/extrausers/shadow; then
        tty=$(tty)
        tty="$(echo "${tty#/dev/}" | tr '/' '-')"
        readargs=()
        filepath="/run/console-conf/login-details-${tty}.txt"
        if [ ! -f "${filepath}" ]; then
            mkdir -p /run/console-conf
            set +e
            /usr/share/subiquity/console-conf-write-login-details > "${filepath}.tmp"
            rval=$?
            set -e
            # A exit code of 2 from console-conf-write-login-details
            # means there are no scope global IP addresses. It will
            # have printed a message saying that you can't log in
            # until the device gets an IP address so we display that
            # but check every 5 seconds if an ip address has appeared.
            if [ $rval -eq 0 ]; then
                mv "${filepath}.tmp" "${filepath}"
            elif [ $rval -eq 2 ]; then
                mv "${filepath}.tmp" "${filepath}.noip"
                filepath=${filepath}.noip
                readargs=(-t 5)
            else
                exit $rval
            fi
        fi
        cat "$filepath"
        set +e
        while :; do
            read -r "${readargs[@]}" REPLY
            if [ $? -le 128 ]; then
                # If we didn't time out, re-display everything.
                redisplay_and_exit
            fi
            if ip addr show | grep -qE "scope global"; then
                # If we timed out, but it appears that we may now have
                # an IP address, re-display everything.
                redisplay_and_exit
            fi
        done
    else
        touch /var/lib/console-conf/complete
    fi
    exit 0
fi

if [ -e /var/lib/console-conf/complete ]; then
    # we're done already
    exit 0
fi

# if there is NOT console-conf snap, exit gracefully
if [ ! -e "/snap/console-conf" ]; then
  touch /var/lib/console-conf/complete
  exit 0
fi

snap run console-conf.wait
read -r REPLY
# start the console-conf routine in snapd to delay any new refreshes, and wait
# for current refreshes to complete, this will print off messages if there are
# on-going refreshes
if snap routine console-conf-start --help >/dev/null 2>/dev/null; then
    snap routine console-conf-start
fi
# prepare host finger prints for console-conf as it cannot access sshd or host keys
mkdir -p /run/console-conf
/usr/share/subiquity/console-conf-write-login-details --host-fingerprints > /run/console-conf/host-fingerprints.txt
snap run console-conf "$@"
rval=$?
if [ ${rval} -eq 0 ]; then
  # explicitly redisplay login information from the wrapper
  redisplay_and_exit
else
  exit "$rval"
fi