diff options
| -rw-r--r-- | recipes-extended/images/container-systemd-base.bb | 17 | ||||
| -rw-r--r-- | recipes-extended/images/container-systemd-base.inc | 72 |
2 files changed, 89 insertions, 0 deletions
diff --git a/recipes-extended/images/container-systemd-base.bb b/recipes-extended/images/container-systemd-base.bb new file mode 100644 index 00000000..96ef4667 --- /dev/null +++ b/recipes-extended/images/container-systemd-base.bb | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | SUMMARY = "Systemd system container for ${SYSTEMD_CONTAINER_APP}" | ||
| 2 | DESCRIPTION = "A small systemd system container which will run \ | ||
| 3 | ${SYSTEMD_CONTAINER_APP}." | ||
| 4 | |||
| 5 | SYSTEMD_CONTAINER_APP ?= "" | ||
| 6 | |||
| 7 | # Use local.conf to specify the application(s) to install | ||
| 8 | IMAGE_INSTALL += "${SYSTEMD_CONTAINER_APP}" | ||
| 9 | |||
| 10 | # Use local.conf to specify additional systemd services to disable. To overwrite | ||
| 11 | # the default list use SERVICES_TO_DISABLE:pn-systemd-container in local.conf | ||
| 12 | SERVICES_TO_DISABLE:append = " ${SYSTEMD_CONTAINER_DISABLE_SERVICES}" | ||
| 13 | |||
| 14 | # Use local.conf to enable systemd services | ||
| 15 | SERVICES_TO_ENABLE += "${SYSTEMD_CONTAINER_ENABLE_SERVICES}" | ||
| 16 | |||
| 17 | require container-systemd-base.inc | ||
diff --git a/recipes-extended/images/container-systemd-base.inc b/recipes-extended/images/container-systemd-base.inc new file mode 100644 index 00000000..0b856e83 --- /dev/null +++ b/recipes-extended/images/container-systemd-base.inc | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | SUMMARY ?= "Sample systemd system container" | ||
| 2 | DESCRIPTION ?= "A small systemd system container which will run \ | ||
| 3 | the application defined in IMAGE_INSTALL." | ||
| 4 | |||
| 5 | LICENSE ?= "MIT" | ||
| 6 | LIC_FILES_CHKSUM ?= "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" | ||
| 7 | |||
| 8 | # Some commands of interest: | ||
| 9 | # % docker run -d --rm --name systemd_test --privileged \ | ||
| 10 | # --cap-add SYS_ADMIN --security-opt seccomp=unconfined --cgroup-parent=docker.slice \ | ||
| 11 | # --cgroupns private --tmpfs /tmp --tmpfs /run --tmpfs /run/lock zeddii/systemd-container-base | ||
| 12 | # | ||
| 13 | # % docker run -d --rm --name systemd_test --privileged \ | ||
| 14 | # --cgroup-parent=docker.slice --cgroupns private zeddii/c3-systemd-container | ||
| 15 | # | ||
| 16 | # % docker inspect systemd_test | ||
| 17 | # % docker inspect systemd_test | grep \"IPAddress\": | ||
| 18 | # % docker exec systemd_test bash -c "echo 'testuser:password' | chpasswd" | ||
| 19 | # % ssh testuser@172.17.0.2 | ||
| 20 | |||
| 21 | require container-base.bb | ||
| 22 | |||
| 23 | OCI_IMAGE_ENTRYPOINT = "/sbin/init" | ||
| 24 | |||
| 25 | IMAGE_INSTALL:append = " systemd" | ||
| 26 | IMAGE_INSTALL:append = " packagegroup-core-base-utils" | ||
| 27 | IMAGE_INSTALL:append = " packagegroup-core-ssh-openssh" | ||
| 28 | IMAGE_INSTALL:append = " busybox" | ||
| 29 | |||
| 30 | IMAGE_FEATURES ?= "" | ||
| 31 | |||
| 32 | NO_RECOMMENDATIONS = "1" | ||
| 33 | |||
| 34 | SERVICES_TO_DISABLE ?= " \ | ||
| 35 | systemd-udevd.service \ | ||
| 36 | systemd-udevd-control.socket \ | ||
| 37 | systemd-udevd-kernel.socket \ | ||
| 38 | proc-sys-fs-binfmt_misc.automount \ | ||
| 39 | sys-fs-fuse-connections.mount \ | ||
| 40 | sys-kernel-debug.mount \ | ||
| 41 | systemd-hwdb-update.service \ | ||
| 42 | serial-getty@ttyS0.service \ | ||
| 43 | dev-ttyS0.device \ | ||
| 44 | console-getty.service \ | ||
| 45 | serial-getty@.service \ | ||
| 46 | " | ||
| 47 | |||
| 48 | SERVICES_TO_ENABLE ?= "" | ||
| 49 | |||
| 50 | disable_systemd_services () { | ||
| 51 | SERVICES_TO_DISABLE="${SERVICES_TO_DISABLE}" | ||
| 52 | if [ -n "$SERVICES_TO_DISABLE" ]; then | ||
| 53 | echo "Disabling systemd services:" | ||
| 54 | for service in $SERVICES_TO_DISABLE; do | ||
| 55 | echo " $service" | ||
| 56 | systemctl --root="${IMAGE_ROOTFS}" mask $service > /dev/null >1 | ||
| 57 | done | ||
| 58 | fi | ||
| 59 | } | ||
| 60 | |||
| 61 | enable_systemd_services () { | ||
| 62 | SERVICES_TO_ENABLE="${SERVICES_TO_ENABLE}" | ||
| 63 | if [ -n "$SERVICES_TO_ENABLE" ]; then | ||
| 64 | echo "Enabling additional systemd services:" | ||
| 65 | for service in $SERVICES_TO_ENABLE; do | ||
| 66 | echo " $service" | ||
| 67 | systemctl --root="${IMAGE_ROOTFS}" enable $service > /dev/null >1 | ||
| 68 | done | ||
| 69 | fi | ||
| 70 | } | ||
| 71 | |||
| 72 | ROOTFS_POSTPROCESS_COMMAND += "disable_systemd_services; enable_systemd_services;" | ||
