AlaK4X
Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64



Your IP : 18.218.94.236


Current Path : /snap/core20/2379/lib/core/
Upload File :
Current File : //snap/core20/2379/lib/core/run-snapd-from-snap

#!/bin/sh
#
# This script will try to find a suiteable snapd snap and start
# snapd and its associated services from it.

set -eux

# run_on_unseeded will mount/run snapd on an unseeded system
run_on_unseeded() {
    SNAPD_BASE_DIR="/run/mnt/snapd"

    # We need to initialize /snap/snapd/current symlink so that the
    # dynanic linker
    # /snap/snapd/current/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    # is available to run snapd.
    [ -d /snap/snapd ] || mkdir -p /snap/snapd
    ln -sf "${SNAPD_BASE_DIR}" /snap/snapd/current

    # snapd will write all its needed snapd.{service,socket}
    # units and restart once it seeded the snapd snap. We create
    # a systemd socket unit so that systemd own the socket, otherwise
    # the socket file would be removed by snapd on exit and the snapd.seeded
    # service will fail because it has nothing to talk to anymore.
    systemd-run --unit=snapd-seeding --service-type=notify --socket-property ListenStream=/run/snapd.socket --socket-property ListenStream=/run/snapd-snap.socket "$SNAPD_BASE_DIR"/usr/lib/snapd/snapd
    # we need to start the snapd service from above explicitly, systemd-run
    # only enables the socket but does not start the service.
    systemctl start --wait snapd-seeding.service
    # at this point the snapd.socket is available
    systemctl stop snapd-seeding.socket

    # At this point snap is available and seeding is at the point where
    # were snapd to installed and restarted successfully. Show progress
    # now. Even without showing progress we *must* wait here until
    # seeding is done to ensure that console-conf is only started
    # after this script has finished.
    # (redirect stdin because that is what snap checks for pty)
    /usr/bin/snap watch --last=seed < /dev/console | tee -a /dev/console
}

# Unseeded systems need to be seeded first, this will start snapd
# and snapd will restart itself after the seeding.
set +e
# systemctl status returns exit code 4 for missing services, and 3 for disabled
# services
systemctl status snapd.service
snapdExists=$?
if [ ! -e /var/lib/snapd/state.json ] || [ $snapdExists = 4 ] ; then
    set -e
    if ! run_on_unseeded; then
        echo "cannot run snapd from the seed"
        exit 1
    fi
    exit 0
fi
set -e