Skip to content

Commit

Permalink
rebase to alpine linux
Browse files Browse the repository at this point in the history
  • Loading branch information
sparklyballs committed Jul 10, 2016
1 parent 9d2d616 commit 6afec6a
Show file tree
Hide file tree
Showing 13 changed files with 184 additions and 162 deletions.
239 changes: 122 additions & 117 deletions Dockerfile
@@ -1,120 +1,125 @@
FROM linuxserver/baseimage
MAINTAINER sparklyballs <sparklyballs@linuxserver.io>

ENV APTLIST="avahi-daemon libavahi-client3 libav-tools libantlr3c-3.2-0 \
libconfuse0 libgcrypt20 libgnutls28 libjson0 libmp3lame0 libprotobuf-c0 \
libmxml1 libplist1 libunistring0"

ENV BUILD_APTLIST="antlr3 autoconf autotools-dev automake build-essential cmake gawk gettext git-core gperf \
libasound2-dev libantlr3c-dev libavahi-client-dev libavcodec-dev libavfilter-dev libavformat-dev \
libavutil-dev libconfuse-dev libgcrypt11-dev libgnutls28-dev libjson0-dev libplist-dev libprotobuf-c0-dev \
libreadline-dev libtool libunistring-dev libswscale-dev libmxml-dev zlib1g-dev"

# set source versions
ENV CURL_VER="7.47.1" LIBEVENT_VER="2.1.5-beta" TAGLIB_VER="1.9.1" SQLITE_VER="autoconf-3110000"

# add excludes file
ADD defaults/excludes /etc/dpkg/dpkg.cfg.d/excludes

# install build dependencies
RUN apt-get update && \
apt-get install $APTLIST \
$BUILD_APTLIST -qy && \

# fetch source code
mkdir -p /tmp/curl /tmp/taglib /tmp/libevent /tmp/sqlite /tmp/spotify && \
curl -o /tmp/curl.tar.gz -L http://curl.haxx.se/download/curl-$CURL_VER.tar.gz && \
curl -o /tmp/taglib.tar.gz -L http://taglib.github.io/releases/taglib-$TAGLIB_VER.tar.gz && \
curl -o /tmp/libevent.tar.gz -L https://qa.debian.org/watch/sf.php/levent/libevent-$LIBEVENT_VER.tar.gz && \
curl -o /tmp/sqlite.tar.gz -L https://www.sqlite.org/2016/sqlite-$SQLITE_VER.tar.gz && \
curl -o /tmp/spotify_tar.gz -L https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz && \
tar xvf /tmp/curl.tar.gz -C /tmp/curl --strip-components=1 && \
tar xvf /tmp/taglib.tar.gz -C /tmp/taglib --strip-components=1 && \
tar xvf /tmp/libevent.tar.gz -C /tmp/libevent --strip-components=1 && \
tar xvf /tmp/sqlite.tar.gz -C /tmp/sqlite --strip-components=1 && \
tar xvf /tmp/spotify_tar.gz -C /tmp/spotify --strip-components=1 && \
git clone https://github.com/ejurgensen/forked-daapd.git /tmp/forked-daapd && \

# build curl package
cd /tmp/curl && \
./configure \
--prefix=/usr \
--with-ssl \
--with-zlib && \
make && \
make install && \

# build taglib package
cd /tmp/taglib && \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_RELEASE_TYPE=Release . && \
make && \
make install && \
ldconfig && \

# build libevent package
cd /tmp/libevent && \
./configure && \
make && \
make install && \

# build sqlite package
cd /tmp/sqlite && \
sed -i '/^AM_CFLAGS =/ s/$/ -DSQLITE_ENABLE_UNLOCK_NOTIFY/' /tmp/sqlite/Makefile.in && \
sed -i '/^AM_CFLAGS =/ s/$/ -DSQLITE_ENABLE_UNLOCK_NOTIFY/' /tmp/sqlite/Makefile.am && \
./configure && \
make && \
make install && \

# build spotify
cd /tmp/spotify && \
make install prefix=/usr && \

# configure and build forked-daapd
cd /tmp/forked-daapd && \
autoreconf -i && \
./configure \
--enable-itunes \
--enable-mpd \
--enable-lastfm \
--enable-spotify \
--enable-chromecast \
--prefix=/app \
--sysconfdir=/etc \
--localstatedir=/var && \
make && \
make install && \
cd / && \

# clean build dependencies
apt-get purge --remove \
$BUILD_APTLIST -y && \
apt-get -y autoremove && \

# install runtime dependencies
apt-get update -q && \
apt-get install \
$APTLIST -qy && \
FROM lsiobase/alpine
MAINTAINER sparklyballs

# package version
ARG FORKED_DAAPD_NAME="forked-daapd"
ARG FORKED_DAAPD_VER="24.1"

# environment settings
ARG ALL_SRC="/tmp/source"
ARG ANTLR_WWW="http://www.antlr3.org/download/antlr-3.4-complete.jar"
ARG FORKED_DAAPD_SRC="${ALL_SRC}/${FORKED_DAAPD_NAME}-${FORKED_DAAPD_VER}"
ARG FORKED_DAAPD_WWW="https://github.com/ejurgensen/forked-daapd/archive/${FORKED_DAAPD_VER}.tar.gz"

# install build packages
RUN \
apk add --no-cache --virtual=build-dependencies \
alsa-lib-dev \
autoconf \
automake \
avahi-dev \
bash \
bsd-compat-headers \
confuse-dev \
curl \
curl-dev \
ffmpeg-dev \
file \
flac-dev \
g++ \
gcc \
gettext-dev \
gnutls-dev \
gperf \
json-c-dev \
libcurl \
libevent-dev \
libgcrypt-dev \
libogg-dev \
libplist-dev \
libtool \
libunistring-dev \
make \
openjdk8-jre-base \
protobuf-c-dev \
sqlite-dev \
taglib-dev \
tar && \
apk add --no-cache --virtual=build-dependencies2 \
--repository http://nl.alpinelinux.org/alpine/edge/testing \
libantlr3c-dev \
libavl-dev \
mxml-dev && \

# make folders and antlr wrapper
mkdir -p \
"${FORKED_DAAPD_SRC}" && \
echo \
"#!/bin/bash" > "${ALL_SRC}/antlr3" && \
echo \
"exec java -cp $ALL_SRC/antlr-3.4-complete.jar org.antlr.Tool \"\$@\"" >> "${ALL_SRC}/antlr3" && \
chmod a+x "${ALL_SRC}/antlr3" && \

# fetch source
curl -o \
"${ALL_SRC}/antlr-3.4-complete.jar" -L \
"${ANTLR_WWW}" && \
curl -o \
"${ALL_SRC}/${FORKED_DAAPD_NAME}-${FORKED_DAAPD_VER}.tar.gz" -L \
"${FORKED_DAAPD_WWW}" && \
tar xf "${ALL_SRC}/${FORKED_DAAPD_NAME}-${FORKED_DAAPD_VER}.tar.gz" -C \
"${FORKED_DAAPD_SRC}" --strip-components=1 && \

# configure and compile source
export PATH="$ALL_SRC:$PATH" && \
cd "${FORKED_DAAPD_SRC}" && \
autoreconf -i -v && \
./configure \
--build=$CBUILD \
--enable-chromecast \
--enable-itunes \
--enable-lastfm \
--enable-mpd \
--host=$CHOST \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/app \
--sysconfdir=/etc && \
make && \
make install && \
cp /etc/forked-daapd.conf /etc/forked-daapd.conf.orig && \

# cleanup
apt-get clean && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*

# Adding Custom files
ADD init/ /etc/my_init.d/
ADD services/ /etc/service/
RUN chmod -v +x /etc/service/*/run /etc/my_init.d/*.sh && \

# tweak config for forked-daapd
mv /etc/forked-daapd.conf /defaults/forked-daapd.conf && \
sed -i -e 's/\(uid.*=\).*/\1 \"abc\"/g' /defaults/forked-daapd.conf && \
sed -i s#"My Music on %h"#"LS.IO Music"#g /defaults/forked-daapd.conf && \
sed -i s#"ipv6 = yes"#"ipv6 = no"#g /defaults/forked-daapd.conf && \
sed -i s#/srv/music#/music#g /defaults/forked-daapd.conf && \
sed -i s#/var/cache/forked-daapd/songs3.db#/config/dbase_and_logs/songs3.db#g /defaults/forked-daapd.conf && \
sed -i s#/var/cache/forked-daapd/cache.db#/config/dbase_and_logs/cache.db#g /defaults/forked-daapd.conf && \
sed -i s#/var/log/forked-daapd.log#/config/dbase_and_logs/forked-daapd.log#g /defaults/forked-daapd.conf && \
sed -i "/db_path\ =/ s/# *//" /defaults/forked-daapd.conf && \
sed -i "/cache_path\ =/ s/# *//" /defaults/forked-daapd.conf

# set volumes
apk del --purge \
build-dependencies \
build-dependencies2 && \
rm -rf \
/tmp/*

# install runtime packages
RUN \
apk add --no-cache \
avahi \
confuse \
dbus \
ffmpeg \
json-c \
libcurl \
libevent \
libgcrypt \
libplist \
libunistring \
protobuf-c \
sqlite \
sqlite-libs && \
apk add --no-cache \
--repository http://nl.alpinelinux.org/alpine/edge/testing \
libantlr3c \
mxml

# copy local files
COPY root/ /

# ports and volumes
VOLUME /config /music

21 changes: 13 additions & 8 deletions README.md
Expand Up @@ -14,9 +14,13 @@ DAAP (iTunes) media server with support for AirPlay devices, Apple Remote (and c
## Usage

```
docker create --name=daapd -v <path to data>:/config \
-v <path to music>:/music -e PGID=<gid> -e PUID=<uid> \
--net=host lsiodev/daapd
docker create \
--name=daapd \
-v <path to data>:/config \
-v <path to music>:/music \
-e PGID=<gid> -e PUID=<uid> \
--net=host \
lsiodev/daapd
```

**Parameters**
Expand All @@ -27,7 +31,7 @@ docker create --name=daapd -v <path to data>:/config \
* `-e PGID` for GroupID - see below for explanation
* `-e PUID` for UserID - see below for explanation

It is based on phusion-baseimage with ssh removed, for shell access whilst the container is running do `docker exec -it daapd /bin/bash`.
It is based on alpine linux with s6 overlay, for shell access whilst the container is running do `docker exec -it daapd /bin/bash`.

### User / Group Identifiers

Expand All @@ -51,8 +55,9 @@ For further setup options of remotes etc, check out the daapd website, [Forked-d


## Versions
+ **28.02.2016:** Add chromecast support, bump dependency versions.
+ **04.01.2016:** Disable ipv6 by default because in v23.4 it doesn't work in unraid with it set.
+ **17.12.2015:** Add in spotify support.
+ **25.11.2015:** Initial Release.
+ **10.07.16:** Rebase to alpine linux for smaller image.
+ **28.02.16:** Add chromecast support, bump dependency versions.
+ **04.01.16:** Disable ipv6 by default because in v23.4 it doesn't work in unraid with it set.
+ **17.12.15:** Add in spotify support.
+ **25.11.15:** Initial Release.

13 changes: 0 additions & 13 deletions defaults/excludes

This file was deleted.

8 changes: 0 additions & 8 deletions init/10_dbus.sh

This file was deleted.

8 changes: 0 additions & 8 deletions init/30_set_config.sh

This file was deleted.

6 changes: 6 additions & 0 deletions root/etc/cont-init.d/20-dbus
@@ -0,0 +1,6 @@
#!/usr/bin/with-contenv bash

[[ -e /var/run/dbus.pid ]] && rm -f /var/run/dbus.pid

dbus-uuidgen --ensure
sleep 1
25 changes: 25 additions & 0 deletions root/etc/cont-init.d/30-config
@@ -0,0 +1,25 @@
#!/usr/bin/with-contenv bash

# configure defaults copy of conf
if [ ! -e "/defaults/forked-daapd.conf" ]; then
cp /etc/forked-daapd.conf.orig /defaults/forked-daapd.conf
sed -i -e 's/\(uid.*=\).*/\1 \"abc\"/g' /defaults/forked-daapd.conf
sed -i s#"My Music on %h"#"LS.IO Music"#g /defaults/forked-daapd.conf
sed -i s#"ipv6 = yes"#"ipv6 = no"#g /defaults/forked-daapd.conf
sed -i s#/srv/music#/music#g /defaults/forked-daapd.conf
sed -i s#/var/cache/forked-daapd/songs3.db#/config/dbase_and_logs/songs3.db#g /defaults/forked-daapd.conf
sed -i s#/var/cache/forked-daapd/cache.db#/config/dbase_and_logs/cache.db#g /defaults/forked-daapd.conf
sed -i s#/var/log/forked-daapd.log#/config/dbase_and_logs/forked-daapd.log#g /defaults/forked-daapd.conf
sed -i "/db_path\ =/ s/# *//" /defaults/forked-daapd.conf
sed -i "/cache_path\ =/ s/# *//" /defaults/forked-daapd.conf
fi

# symlink conf to /conf
[[ ! -f /config/forked-daapd.conf ]] && cp /defaults/forked-daapd.conf /config/forked-daapd.conf
[[ ! -L /etc/forked-daapd.conf && -f /etc/forked-daapd.conf ]] && rm /etc/forked-daapd.conf
[[ ! -L /etc/forked-daapd.conf ]] && ln -s /config/forked-daapd.conf /etc/forked-daapd.conf

# make folders and set permissions
mkdir -p /config/dbase_and_logs /daapd-pidfolder
chown -R abc:abc /config /daapd-pidfolder /app

8 changes: 8 additions & 0 deletions root/etc/services.d/avahi/run
@@ -0,0 +1,8 @@
#!/usr/bin/with-contenv bash

until [[ -e /var/run/dbus/system_bus_socket ]]; do
sleep 1s
done

echo "Starting Avahi daemon"
exec avahi-daemon --no-chroot
6 changes: 6 additions & 0 deletions root/etc/services.d/dbus/run
@@ -0,0 +1,6 @@
#!/usr/bin/with-contenv bash

echo "Starting dbus-daemon"
exec dbus-daemon --system --nofork


4 changes: 4 additions & 0 deletions root/etc/services.d/forked/run
@@ -0,0 +1,4 @@
#!/usr/bin/with-contenv bash

exec s6-setuidgid abc /app/sbin/forked-daapd -f -P /daapd-pidfolder/forked-daapd.pid

3 changes: 0 additions & 3 deletions services/avahi/run

This file was deleted.

3 changes: 0 additions & 3 deletions services/dbus/run

This file was deleted.

2 changes: 0 additions & 2 deletions services/forked-daapd/run

This file was deleted.

0 comments on commit 6afec6a

Please sign in to comment.