#!/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"