#!/bin/sh FIRST_LABEL=30002 LABEL_DEVICE="D" LABEL_ENV="E_" LABEL_PORT="P_" LABEL_VOLUME="V" STRING_DEVICE="-d " STRING_ENV="-e " STRING_PORT="-p " STRING_VOLUME="-v " add_default() { defaults="${defaults} \n" } add_device() { add_label default="${1%:*}" docker="${1#*:}" id="${LABEL_DEVICE}${docker//\//_}" add_default "${id}" "${default}" add_option "--device=\"\$${id}\"" add_setting "" add_string "${STRING_DEVICE}${docker}" } add_env() { add_label default="${1#*=}" docker="${1%%=*}" id="${LABEL_ENV}${docker}" add_default "${id}" "${default}" add_option "-e ${docker}=\"${id}\"" add_setting "" add_string "${STRING_ENV}${docker}" } add_label() { if [ -z ${label} ]; then label=${FIRST_LABEL} else label=$((label+1)) fi } add_option() { if [ ! -z "${options}" ]; then options="${options} "'\\\n' fi options="${options} ${1}" } add_port() { add_label default="${1%:*}" docker="${1#*:}" port="${docker%/*}" id="${LABEL_PORT}${port}" add_default "${id}" "${default}" add_option "-p \"\$${id}\":${docker}" add_setting "" add_string "${STRING_PORT}${port}" } add_setting() { settings="${settings} ${1}\n" } add_string() { strings="${strings}\nmsgctxt \"${label}\"\nmsgid \"${1}\"\nmsgstr \"\"\n" } add_volume() { add_label default="${1%:*}" docker="${1#*:}" id="${LABEL_VOLUME}${docker//\//_}" add_default "${id}" "${default}" add_option "-v \"\$${id}\":${docker}" add_setting "" add_string "${STRING_VOLUME}${docker}" } case "${ARCH}" in arm) projects="imx6 RPi RPi2" ;; x86_64) projects="Generic" ;; *) echo "Unkown project" exit 1 ;; esac while [[ $# -gt 0 ]]; do option="${1}" shift case "${option}" in --device=*) add_device "${option#--device=}" ;; --name=*) ;; --port=*) add_port "${option#--port=}" ;; --volume=*) add_volume "${option#--volume=}" ;; -e) add_env "${1}" shift ;; -p) add_port "${1}" shift ;; -v) add_volume "${1}" shift ;; -*) add_option "${option}" ;; */*) add_option "${option}" image="${option%:*}" version="${option#*:}" if [ "${version}" = "${option}" ]; then version="latest" fi if [ ! -z "$*" ]; then add_option "$*" fi break ;; *) add_option "${option}" ;; esac done if [ -z "${image}" ]; then echo "Failed to parse image" exit 1 fi name="${image//\//.}" dir="packages/addons/docker/${name}" if [ -d "${dir}" ]; then echo "Package already exists" exit 1 fi cp -R config/docker "${dir}" sed -e "s|@NAME@|${name}|g" \ -e "s|@VERSION@|${version}|g" \ -e "s|@ARCH@|${arch}|g" \ -e "s|@IMAGE@|${image}|g" \ -e "s|@PROJECTS@|${projects}|g" \ -i "${dir}/package.mk" defaults="$(echo -en "${defaults}" | sort)" echo -en "\n${defaults}\n" > "${dir}/source/settings-default.xml" echo -en "${options}" >> "${dir}/source/bin/docker" sed -e "s|@SETTINGS@|${settings}|g" \ -i "${dir}/source/resources/settings.xml" echo -en "${strings}" >> "${dir}/source/resources/language/English/strings.po" mv "${dir}/source/bin/docker" "${dir}/source/bin/docker.${name}" mv "${dir}/source/system.d/docker.service" "${dir}/source/system.d/docker.${name}.service"