diff --git a/example/CHANGELOG.md b/example/CHANGELOG.md new file mode 100644 index 0000000..beaf414 --- /dev/null +++ b/example/CHANGELOG.md @@ -0,0 +1,15 @@ + + +## 1.2.0 + +- Add an apparmor profile +- Update to 3.15 base image with s6 v3 +- Add a sample script to run as service and constrain in aa profile + +## 1.1.0 + +- Updates + +## 1.0.0 + +- Initial release diff --git a/example/DOCS.md b/example/DOCS.md new file mode 100644 index 0000000..b8432c3 --- /dev/null +++ b/example/DOCS.md @@ -0,0 +1,10 @@ +# Home Assistant Add-on: Example add-on + +## How to use + +This add-on really does nothing. It is just an example. + +When started it will print the configured message or "Hello world" in the log. + +It will also print "All done!" in `/share/example_addon_output.txt` to show +simple example of the usage of `map` in addon config. diff --git a/example/Dockerfile b/example/Dockerfile new file mode 100644 index 0000000..9d1a983 --- /dev/null +++ b/example/Dockerfile @@ -0,0 +1,12 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile +ARG BUILD_FROM +FROM $BUILD_FROM + +# Execute during the build of the image +ARG TEMPIO_VERSION BUILD_ARCH +RUN \ + curl -sSLf -o /usr/bin/tempio \ + "https://github.com/home-assistant/tempio/releases/download/${TEMPIO_VERSION}/tempio_${BUILD_ARCH}" + +# Copy root filesystem +COPY rootfs / diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..a0de77f --- /dev/null +++ b/example/README.md @@ -0,0 +1,15 @@ +# Home Assistant Add-on: Example add-on + +_Example add-on to use as a blueprint for new add-ons._ + +![Supports aarch64 Architecture][aarch64-shield] +![Supports amd64 Architecture][amd64-shield] +![Supports armhf Architecture][armhf-shield] +![Supports armv7 Architecture][armv7-shield] +![Supports i386 Architecture][i386-shield] + +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg diff --git a/example/apparmor.txt b/example/apparmor.txt new file mode 100644 index 0000000..e788a6c --- /dev/null +++ b/example/apparmor.txt @@ -0,0 +1,57 @@ +#include + +profile example flags=(attach_disconnected,mediate_deleted) { + #include + + # Capabilities + file, + signal (send) set=(kill,term,int,hup,cont), + + # S6-Overlay + /init ix, + /bin/** ix, + /usr/bin/** ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /run/{,**} rwk, + /dev/tty rw, + + # Bashio + /usr/lib/bashio/** ix, + /tmp/** rwk, + + # Access to options.json and other files within your addon + /data/** rw, + + # Start new profile for service + /usr/bin/my_program cx -> my_program, + + profile my_program flags=(attach_disconnected,mediate_deleted) { + #include + + # Receive signals from S6-Overlay + signal (receive) peer=*_example, + + # Access to options.json and other files within your addon + /data/** rw, + + # Access to mapped volumes specified in config.json + /share/** rw, + + # Access required for service functionality + # Note: List was built by doing the following: + # 1. Add what is obviously needed based on what is in the script + # 2. Add `complain` as a flag to this profile temporarily and run the addon + # 3. Review the audit log with `journalctl _TRANSPORT="audit" -g 'apparmor="ALLOWED"'` and add other access as needed + # Remember to remove the `complain` flag when you are done + /usr/bin/my_program r, + /bin/bash rix, + /bin/echo ix, + /etc/passwd r, + /dev/tty rw, + } +} \ No newline at end of file diff --git a/example/build.yaml b/example/build.yaml new file mode 100644 index 0000000..cdca316 --- /dev/null +++ b/example/build.yaml @@ -0,0 +1,14 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile +build_from: + aarch64: "ghcr.io/home-assistant/aarch64-base:3.15" + amd64: "ghcr.io/home-assistant/amd64-base:3.15" + armhf: "ghcr.io/home-assistant/armhf-base:3.15" + armv7: "ghcr.io/home-assistant/armv7-base:3.15" + i386: "ghcr.io/home-assistant/i386-base:3.15" +labels: + org.opencontainers.image.title: "Home Assistant Add-on: Example add-on" + org.opencontainers.image.description: "Example add-on to use as a blueprint for new add-ons." + org.opencontainers.image.source: "https://github.com/home-assistant/addons-example" + org.opencontainers.image.licenses: "Apache License 2.0" +args: + TEMPIO_VERSION: "2021.09.0" diff --git a/example/config.yaml b/example/config.yaml new file mode 100644 index 0000000..b034b08 --- /dev/null +++ b/example/config.yaml @@ -0,0 +1,20 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config +name: Example add-on +version: "1.2.0" +slug: example +description: Example add-on +url: "https://github.com/home-assistant/addons-example/tree/main/example" +arch: + - armhf + - armv7 + - aarch64 + - amd64 + - i386 +init: false +map: + - share:rw +options: + message: "Hello world..." +schema: + message: "str?" +image: "ghcr.io/home-assistant/{arch}-addon-example" diff --git a/example/icon.png b/example/icon.png new file mode 100644 index 0000000..d4415c1 Binary files /dev/null and b/example/icon.png differ diff --git a/example/logo.png b/example/logo.png new file mode 100644 index 0000000..106e5c2 Binary files /dev/null and b/example/logo.png differ diff --git a/example/rootfs/etc/services.d/example/finish b/example/rootfs/etc/services.d/example/finish new file mode 100755 index 0000000..230d179 --- /dev/null +++ b/example/rootfs/etc/services.d/example/finish @@ -0,0 +1,15 @@ +#!/usr/bin/env bashio +# ============================================================================== +# Take down the S6 supervision tree when example fails +# s6-overlay docs: https://github.com/just-containers/s6-overlay +# ============================================================================== + +declare APP_EXIT_CODE=${1} + +if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then + bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}" + echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode + exec /run/s6/basedir/bin/halt +fi + +bashio::log.info "Service restart after closing" diff --git a/example/rootfs/etc/services.d/example/run b/example/rootfs/etc/services.d/example/run new file mode 100755 index 0000000..6c329bd --- /dev/null +++ b/example/rootfs/etc/services.d/example/run @@ -0,0 +1,19 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Start the example service +# s6-overlay docs: https://github.com/just-containers/s6-overlay +# ============================================================================== + +# Add your code here + +# Declare variables +declare message + +## Get the 'message' key from the user config options. +message=$(bashio::config 'message') + +## Print the message the user supplied, defaults to "Hello World..." +bashio::log.info "${message:="Hello World..."}" + +## Run your program +exec /usr/bin/my_program diff --git a/example/rootfs/usr/bin/my_program b/example/rootfs/usr/bin/my_program new file mode 100755 index 0000000..a287b13 --- /dev/null +++ b/example/rootfs/usr/bin/my_program @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "All done!" > /share/example_addon_output.txt diff --git a/example/translations/en.yaml b/example/translations/en.yaml new file mode 100644 index 0000000..70de024 --- /dev/null +++ b/example/translations/en.yaml @@ -0,0 +1,4 @@ +configuration: + message: + name: Message + description: The message that will be printed to the log when starting this example add-on.