diff --git a/Dockerfile b/Dockerfile index 8bee140..8f6f43d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,54 +1,42 @@ -FROM alpine:3.3 -MAINTAINER Steve Hibit +FROM alpine:latest as builder + +ARG APP_VERSION=6.2 +ARG APP_REVISION=9080 +ARG APP_DATE=20161222 + +ARG APP_NAME=madsonic +ARG APP_BASEURL="http://www.madsonic.org/download" +ARG APP_PKGNAME="${APP_DATE}_${APP_NAME}-${APP_VERSION}.${APP_REVISION}-standalone.tar.gz" +ARG APP_URL="${APP_BASEURL}/${APP_VERSION}/${APP_PKGNAME}" + +RUN apk --update upgrade \ + && apk --no-cache add \ + curl + +RUN mkdir -p /app \ + && curl -sSL ${APP_URL} | tar xfz - -C /app + +#-------------------------------------------- + +FROM sdhibit/alpine-s6:3.7 +LABEL maintainer="Steve Hibit " + +COPY --from=builder /app ${APP_PATH} -# Install apk packages RUN apk --update upgrade \ - && apk add \ - openjdk8-jre-base \ - unzip \ - wget \ - && rm /var/cache/apk/* - -# Set Madsonic Package Information -ENV PKG_NAME madsonic -ENV PKG_VER 6.1.8120 -ENV PKG_VERA 6.1 -ENV PKG_DATE 20160304 -ENV APP_BASEURL http://www.madsonic.org/download -ENV APP_PKGNAME ${PKG_DATE}_${PKG_NAME}-${PKG_VER}-standalone.zip -ENV TRAN_PKGNAME ${PKG_DATE}_${PKG_NAME}-transcode-linux-x64.zip -ENV APP_URL ${APP_BASEURL}/${PKG_VERA}/${APP_PKGNAME} -ENV TRAN_URL ${APP_BASEURL}/transcode/${TRAN_PKGNAME} -ENV APP_PATH /var/madsonic - -# Download & Install Madsonic -RUN mkdir -p "${APP_PATH}/transcode" \ - && wget -O "${APP_PATH}/madsonic.zip" ${APP_URL} \ - && wget -O "${APP_PATH}/transcode/transcode.zip" ${TRAN_URL} \ - && unzip "${APP_PATH}/madsonic.zip" -d ${APP_PATH} \ - && unzip "${APP_PATH}/transcode/transcode.zip" -d "${APP_PATH}/transcode" \ - && rm "${APP_PATH}/madsonic.zip" \ - && rm "${APP_PATH}/transcode/transcode.zip" - -# Create user and change ownership -RUN mkdir /config \ - && addgroup -g 666 -S madsonic \ - && adduser -u 666 -SHG madsonic madsonic \ - && chown -R madsonic:madsonic \ - ${APP_PATH} \ - "/config" + && apk --no-cache add \ + --repository http://dl-cdn.alpinelinux.org/alpine/edge/community \ + ffmpeg \ + lame \ + libressl \ + openjdk8-jre-base + +COPY root / + +RUN chmod -R +x /etc/services.d/*/run VOLUME ["/config"] # HTTP ports EXPOSE 4040 EXPOSE 4050 - -# Add run script -ADD madsonic.sh /madsonic.sh -RUN chmod +x /madsonic.sh - -USER madsonic -WORKDIR /var/madsonic - -CMD ["/madsonic.sh"] diff --git a/madsonic.sh b/madsonic.sh deleted file mode 100644 index d75c24e..0000000 --- a/madsonic.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -#create folders on config -mkdir -p /config/media/incoming -mkdir -p /config/media/podcast -mkdir -p /config/playlists/import -mkdir -p /config/playlists/export -mkdir -p /config/playlists/backup -mkdir -p /config/transcode - -#copy transcode to config directory - transcode directory is subdir of path set from --home flag, do not alter -cp /var/madsonic/transcode/transcode/* /config/transcode/ - -# Force Madsonic to run in foreground -sed -i 's/-jar madsonic-booter.jar > \${LOG} 2>\&1 \&/-jar madsonic-booter.jar > \${LOG} 2>\&1/g' /var/madsonic/madsonic.sh - -if [ -z "$CONTEXT" ]; then - CONTEXT=/ -fi - -if [ "$SSL" = "yes" ]; then - PORTS="--https-port=4050" -else - PORTS="--port=4040" -fi - -/var/madsonic/madsonic.sh \ - --home=/config \ - --context-path=$CONTEXT \ - --default-music-folder=/media \ - --default-podcast-folder=/config/media/podcast \ - --default-playlist-import-folder=/config/playlists/import \ - --default-playlist-export-folder=/config/playlists/export \ - --default-playlist-backup-folder=/config/playlists/backup \ - ${PORTS} diff --git a/root/etc/services.d/madsonic/run b/root/etc/services.d/madsonic/run new file mode 100755 index 0000000..9cc9a48 --- /dev/null +++ b/root/etc/services.d/madsonic/run @@ -0,0 +1,87 @@ +#!/usr/bin/with-contenv sh + +APP_UID=${APP_UID:-666} +APP_GID=${APP_GID:-666} +APP_USER=${APP_USER:-appuser} + +KEEP_TRANSCODE=${KEEP_TRANSCODE:-"false"} + +CONFIG_PATH=${HOME_PATH:-"/config"} +CONTEXT=${CONTEXT:-"/"} +MEDIA_PATH=${MEDIA_PATH:-"/media"} +PODCAST_PATH=${PODCAST_PATH:-"/podcast"} +PLAYLIST_PATH=${PLAYLIST_PATH:-"/playlist"} +TRANSCODE_PATH=${TRANSCODE_PATH:-"/app/transcode"} + +MADSONIC_HOME=$CONFIG_PATH +MADSONIC_HOST=0.0.0.0 +MADSONIC_PORT=4040 +MADSONIC_HTTPS_PORT=0 +MADSONIC_CONTEXT_PATH=$CONTEXT +MADSONIC_INIT_MEMORY=256 +MADSONIC_MAX_MEMORY=512 +MADSONIC_DEFAULT_MUSIC_FOLDER=$MEDIA_PATH +MADSONIC_DEFAULT_UPLOAD_FOLDER=/config/media/incoming +MADSONIC_DEFAULT_PODCAST_FOLDER=$PODCAST_PATH +MADSONIC_DEFAULT_PLAYLIST_IMPORT_FOLDER="$PLAYLIST_PATH/import" +MADSONIC_DEFAULT_PLAYLIST_EXPORT_FOLDER="$PLAYLIST_PATH/export" +MADSONIC_DEFAULT_PLAYLIST_BACKUP_FOLDER="$PLAYLIST_PATH/backup" +MADSONIC_DEFAULT_TRANSCODE_FOLDER=$TRANSCODE_PATH +MADSONIC_DEFAULT_TIMEZONE= +MADSONIC_PIDFILE= +MADSONIC_UPDATE=true +MADSONIC_GZIP= +MADSONIC_DB= +quiet=0 + +mkdir -p $MADSONIC_DEFAULT_UPLOAD_FOLDER +mkdir -p $MADSONIC_DEFAULT_PODCAST_FOLDER +mkdir -p $MADSONIC_DEFAULT_PLAYLIST_IMPORT_FOLDER +mkdir -p $MADSONIC_DEFAULT_PLAYLIST_EXPORT_FOLDER +mkdir -p $MADSONIC_DEFAULT_PLAYLIST_BACKUP_FOLDER +mkdir -p $MADSONIC_DEFAULT_TRANSCODE_FOLDER + +# Use JAVA_HOME if set, otherwise assume java is in the path. +JAVA=java +if [ -e "${JAVA_HOME}" ] + then + JAVA=${JAVA_HOME}/bin/java +fi + +# Use system install of ffmpeg for transcoding +if [ "$KEEP_TRANSCODE" == "false" ]; then + [ ! -d $MADSONIC_DEFAULT_TRANSCODE_FOLDER ] || rm -r $MADSONIC_DEFAULT_TRANSCODE_FOLDER + mkdir -p $MADSONIC_DEFAULT_TRANSCODE_FOLDER + ln -s "$(command -v ffmpeg)" $MADSONIC_DEFAULT_TRANSCODE_FOLDER/ffmpeg + ln -s "$(command -v lame)" $MADSONIC_DEFAULT_TRANSCODE_FOLDER/lame +fi + +# Create Madsonic home directory. +mkdir -p ${MADSONIC_HOME} +LOG=${MADSONIC_HOME}/madsonic_sh.log +rm -f ${LOG} + +if [ -e "${APP_PATH}" ] + then + cd ${APP_PATH} +fi + +s6-setuidgid ${APP_USER} ${JAVA} -Xms${MADSONIC_INIT_MEMORY}m -Xmx${MADSONIC_MAX_MEMORY}m \ + -Dmadsonic.home=${MADSONIC_HOME} \ + -Dmadsonic.host=${MADSONIC_HOST} \ + -Dmadsonic.port=${MADSONIC_PORT} \ + -Dmadsonic.httpsPort=${MADSONIC_HTTPS_PORT} \ + -Dmadsonic.contextPath=${MADSONIC_CONTEXT_PATH} \ + -Dmadsonic.defaultMusicFolder=${MADSONIC_DEFAULT_MUSIC_FOLDER} \ + -Dmadsonic.defaultUploadFolder=${MADSONIC_DEFAULT_UPLOAD_FOLDER} \ + -Dmadsonic.defaultPodcastFolder=${MADSONIC_DEFAULT_PODCAST_FOLDER} \ + -Dmadsonic.defaultPlaylistImportFolder=${MADSONIC_DEFAULT_PLAYLIST_IMPORT_FOLDER} \ + -Dmadsonic.defaultPlaylistExportFolder=${MADSONIC_DEFAULT_PLAYLIST_EXPORT_FOLDER} \ + -Dmadsonic.defaultPlaylistBackupFolder=${MADSONIC_DEFAULT_PLAYLIST_BACKUP_FOLDER} \ + -Dmadsonic.defaultTranscodeFolder=${MADSONIC_DEFAULT_TRANSCODE_FOLDER} \ + -Duser.timezone=${MADSONIC_DEFAULT_TIMEZONE} \ + -Dmadsonic.update=${MADSONIC_UPDATE} \ + -Dmadsonic.gzip=${MADSONIC_GZIP} \ + -Dmadsonic.db="${MADSONIC_DB}" \ + -Djava.awt.headless=true \ + -jar madsonic-booter.jar >> ${LOG} 2>&1