diff --git a/scripts/container-manager.sh b/scripts/container-manager.sh index 8ff72ee..8dd9fe8 100755 --- a/scripts/container-manager.sh +++ b/scripts/container-manager.sh @@ -21,41 +21,59 @@ if [ ! -e $SYSTEM_IMG ]; then exit 1 fi -# Extract ramdisk content instead of trying to bind mount the -# cpio image file to allow modifications. -rm -Rf $RAMDISK_PATH -mkdir -p $RAMDISK_PATH -cd $RAMDISK_PATH -cat $INITRD | gzip -d | cpio -i +start() { + # Extract ramdisk content instead of trying to bind mount the + # cpio image file to allow modifications. + rm -Rf $RAMDISK_PATH + mkdir -p $RAMDISK_PATH + cd $RAMDISK_PATH + cat $INITRD | gzip -d | cpio -i -# FIXME those things should be fixed in the build process -chmod +x $RAMDISK_PATH/anbox-init.sh + # FIXME those things should be fixed in the build process + chmod +x $RAMDISK_PATH/anbox-init.sh -# Setup the read-only rootfs -mkdir -p $ROOTFS_PATH -mount -o bind,ro $RAMDISK_PATH $ROOTFS_PATH -mount -o loop,ro $SYSTEM_IMG $ROOTFS_PATH/system + # Setup the read-only rootfs + mkdir -p $ROOTFS_PATH + mount -o bind,ro $RAMDISK_PATH $ROOTFS_PATH + mount -o loop,ro $SYSTEM_IMG $ROOTFS_PATH/system -# but certain top-level directories need to be in a writable space -for dir in cache data; do - mkdir -p $DATA_PATH/android-$dir - mount -o bind $DATA_PATH/android-$dir $ROOTFS_PATH/$dir -done + # but certain top-level directories need to be in a writable space + for dir in cache data; do + mkdir -p $DATA_PATH/android-$dir + mount -o bind $DATA_PATH/android-$dir $ROOTFS_PATH/$dir + done -# Make sure our setup path for the container rootfs -# is present as lxc is statically configured for -# this path. -mkdir -p $SNAP_COMMON/lxc + # Make sure our setup path for the container rootfs + # is present as lxc is statically configured for + # this path. + mkdir -p $SNAP_COMMON/lxc -# We start the bridge here as long as a oneshot service unit is not -# possible. See snapcraft.yaml for further details. -$SNAP/bin/anbox-bridge.sh start + # We start the bridge here as long as a oneshot service unit is not + # possible. See snapcraft.yaml for further details. + $SNAP/bin/anbox-bridge.sh start -$SNAP/usr/sbin/aa-exec -p unconfined -- $SNAP/bin/anbox-wrapper.sh container-manager -pid=$! -waitpid $pid + exec $SNAP/usr/sbin/aa-exec -p unconfined -- $SNAP/bin/anbox-wrapper.sh container-manager +} -$SNAP/bin/anbox-bridge.sh stop +stop() { + for dir in cache data; do + umount $ROOTFS_PATH/$dir + done + umount $ROOTFS_PATH/system + umount $ROOTFS_PATH -umount $ROOTFS_PATH/system -umount $ROOTFS_PATH/data + $SNAP/bin/anbox-bridge.sh stop +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + *) + echo "ERROR: Unknown command '$1'" + exit 1 + ;; +esac diff --git a/snapcraft.yaml b/snapcraft.yaml index 95abac0..376defc 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -12,7 +12,8 @@ apps: anbox: command: bin/anbox-wrapper.sh container-manager: - command: bin/container-manager.sh + command: bin/container-manager.sh start + stop-command: bin/container-manager.sh stop daemon: simple # FIXME: a oneshot unit with start/stop commands needs also RemainAfterExit=yes # but this isn't supported by snapd yet. See LP #1647169 for details.