Skip to content

Instantly share code, notes, and snippets.

@thorsteneckel
Last active March 8, 2019 13:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thorsteneckel/c0610fb415c8d0486bce to your computer and use it in GitHub Desktop.
Save thorsteneckel/c0610fb415c8d0486bce to your computer and use it in GitHub Desktop.
ejurgensen/forked-daapd on FreeBSD 10.1
#!/bin/sh
# PROVIDE: forked-daapd
# REQUIRE: avahi_daemon dbus
# Add the following lines to /etc/rc.conf to enable `forked-daapd':
#
# forked_daapd_enable="YES"
# forked_daapd_flags="<set as needed>"
. /etc/rc.subr
name="forked_daapd"
rcvar=`set_rcvar`
command="/usr/local/sbin/forked-daapd"
command_args=""
pidfile="/var/run/forked-daapd.pid"
required_files="/usr/local/etc/forked-daapd.conf"
# read configuration and set defaults
load_rc_config "$name"
: ${forked_daapd_enable="NO"}
run_rc_command "$1"

forked-daapd on FreeBSD 10.1

These are my steps installing 'ejurgensen/forked-daapd' on my FreeBSD 10.1 amd64 using user root and editor joe. Feedback would be great!

create working folder

export WORKDIR=/usr/local/src/forked-daapd
mkdir -p $WORKDIR
cd $WORKDIR

install dependencies

from pkg repository

# maybe 'pkg install automake' ?
pkg install gmake libantlr3c autoconf libtool gettext gperf glib libconfuse libevent2 mxml libgcrypt taglib libunistring libplist openjdk8-jre libiconv avahi-app avahi sqlite3 yasm pkgconf

OpenJDK fdescfs and procfs

This OpenJDK implementation requires fdescfs(5) mounted on /dev/fd and procfs(5) mounted on /proc.

If you have not done it yet, please do the following:

mount -t fdescfs fdesc /dev/fd
mount -t procfs proc /proc

To make it permanent, you need the following lines in /etc/fstab:

fdesc   /dev/fd         fdescfs         rw      0       0
proc    /proc           procfs          rw      0       0

create soundcard link ( you might want to install 'oss'? )

mkdir -p /usr/local/lib/oss/include/sys/
ln -sf /usr/include/sys/soundcard.h /usr/local/lib/oss/include/sys/

libavl_0.3.5

download and extract

cd $WORKDIR
curl -O http://www.debian.co.il/debian/pool/main/liba/libavl/libavl_0.3.5.orig.tar.gz
tar xzvf libavl_0.3.5.orig.tar.gz
cd avl-0.3.5

maybe fix GNUmakefile?

There might be an error in the 'GNUmakefile' of AVL while installing with make. Here is the fix: Change all $(LIBRARIES) variables to $(LIBRARY) in 'GNUmakefile'.

joe GNUmakefile

compile and install

gmake CC=clang CFLAGS=-fPIC
gmake install


antlr3

cd $WORKDIR
mkdir antlr3
cd antlr3
curl -O https://raw.githubusercontent.com/antlr/website-antlr3/gh-pages/download/antlr-3.4-complete.jar
mv antlr-3.4-complete.jar /usr/local/share/java/antlr-3.4-complete.jar
cd $WORKDIR
cd antlr3
echo '#!/bin/sh' > antlr3
echo 'export CLASSPATH' >> antlr3
echo 'CLASSPATH=$CLASSPATH:/usr/local/share/java/antlr-3.4-complete.jar:/usr/share/java /usr/local/openjdk8/bin/java org.antlr.Tool $*' >> antlr3
#echo exec /usr/local/bin/java -cp /usr/local/share/java/antlr-3.3-complete.jar org.antlr.Tool \"\$@\" >> antlr3
chmod u+x antlr3
mv antlr3 /usr/local/bin/antlr3

libantlr3c

cd $WORKDIR
#curl -O http://www.antlr3.org/download/C/libantlr3c-3.2.tar.gz
curl -O https://raw.githubusercontent.com/antlr/website-antlr3/gh-pages/download/C/libantlr3c-3.4.tar.gz
tar xzvf libantlr3c-3.4.tar.gz
cd libantlr3c-3.4
./configure --enable-64bit
gmake
gmake install

ffmpeg or libav

ffmpeg 2.3.3 from ports

If you might want aac support. Grab a cup of coffee - this might take a while.

# maybe 'pkg remove automake' ?
cd /usr/ports/multimedia/ffmpeg
make config
make install clean

libav 11.2 from ports

cd /usr/ports/multimedia/libav
make config
make install clean

ejurgensen/forked-daapd

compile and install

cd $WORKDIR
git clone https://github.com/ejurgensen/forked-daapd.git
cd forked-daapd
autoreconf -iv -Wno-portability
CFLAGS="-march=native -O2 -pipe" LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include ./configure --localstatedir=/var --with-oss4=/usr/local/lib/oss/include/sys --enable-itunes --enable-lastfm
gmake
gmake install

configure environment

backup and customize config

cp /usr/local/etc/forked-daapd.conf /usr/local/etc/forked-daapd.conf.sample
joe /usr/local/etc/forked-daapd.conf

add user and set permissions

useradd daapd
chown daapd:daapd /var/cache/forked-daapd

enable startup

joe /etc/rc.conf
dbus_enable="YES"
avahi_daemon_enable="YES"
forked_daapd_enable="YES"

rc.d script

open/create file
joe /usr/local/etc/rc.d/forked-daapd
insert attached file 'forked-daapd'
set permissions
chmod u+x /usr/local/etc/rc.d/forked-daapd
@sticilface
Copy link

is there any hope you can provide the changed make files... i can't make heads no tails of diff output!

@markbrookes
Copy link

Hi please see below the necessary changes, this is on the assumption that you followed the section above, please note that there are 1 "Makefile.am" the 1 that is located in the main build folder and the 1 that is located in the "src" folder off the main build folder.

Regards

Mark

Makefile.am

Find and edit the "Makefile.am" with the following changes :-

You will have the below in your current file (Starting at LINE 5) :-
EXTRA_DIST = configure
SUBDIRS = sqlext src

**Change the current entries to the below and add the extra lines :-**s :-
EXTRA_DIST = m4/gnulib-cache.m4 configure
SUBDIRS = lib sqlext src

AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib
AM_LDFLAGS = -Ilib

LDADD = $(top_srcdir)/lib/libgnu.a

configure.ac

Find and edit the "configure.ac" with the following changes :-

You will have the below in your current file (Starting at LINE 3):-
AC_INIT([forked-daapd], [23.4])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign -Wno-portability subdir-objects])

Add the changes so that it matches below (1 extra line) :-
AC_INIT([forked-daapd], [23.4])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([lib/Makefile])
AM_INIT_AUTOMAKE([foreign -Wno-portability subdir-objects])

You will have the below in your current file (Starting at LINE 11):-
dnl Checks for programs.
AC_PROG_CC
AM_PROG_CC_C_O
LT_INIT([disable-static])

Add the changes so that it matches below (1 extra line) :-
dnl Checks for programs.
AC_PROG_CC
gl_EARLY
AM_PROG_CC_C_O
LT_INIT([disable-static])

You will have the below in your current file (Starting at LINE 37):-
CFLAGS="$CFLAGS -Wall -D_LARGEFILE_SOURCE"

AC_CHECK_HEADERS([sys/wait.h])
AC_CHECK_HEADERS([sys/param.h])
AC_CHECK_HEADERS([sys/select.h])
AC_CHECK_HEADERS([dirent.h])
AC_CHECK_HEADERS([regex.h])

Add the changes so that it matches below (3 extra lines, including the blank line) :-
CFLAGS="$CFLAGS -Wall -D_LARGEFILE_SOURCE"

dnl # For gnulib
gl_INIT

AC_CHECK_HEADERS([sys/wait.h])
AC_CHECK_HEADERS([sys/param.h])
AC_CHECK_HEADERS([sys/select.h])
AC_CHECK_HEADERS([dirent.h])
AC_CHECK_HEADERS([regex.h])

src/Makefile.am

You will have the below in your current file (Starting at LINE 66):-
@ZLIB_LIBS@ @AVAHI_LIBS@ @SQLITE3_LIBS@ @LIBAV_LIBS@
@CONFUSE_LIBS@ @LIBEVENT_LIBS@
@MINIXML_LIBS@ @ANTLR3C_LIBS@ @LIBPLIST_LIBS@
@LIBGCRYPT_LIBS@ @GPG_ERROR_LIBS@ @ALSA_LIBS@ @LIBUNISTRING@ @SPOTIFY_LIBS@
@LIBCURL_LIBS@

Add the changes so that it matches below (1 extra line) :-
*$(top_srcdir)/lib/libgnu.a *
@ZLIB_LIBS@ @AVAHI_LIBS@ @SQLITE3_LIBS@ @LIBAV_LIBS@
@CONFUSE_LIBS@ @LIBEVENT_LIBS@
@MINIXML_LIBS@ @ANTLR3C_LIBS@ @LIBPLIST_LIBS@
@LIBGCRYPT_LIBS@ @GPG_ERROR_LIBS@ @ALSA_LIBS@ @LIBUNISTRING@ @SPOTIFY_LIBS@
@LIBCURL_LIBS@

@sticilface
Copy link

ur a genis. That looks like it has worked. thank you.
How easy would it be to turn all this into a package for freenas or pkg?

@markbrookes
Copy link

Glad it worked for you. With regards to turning this into a package, it is something I may look at when I have some spare time.

Regards

Mark

@sticilface
Copy link

That would be ace:)

Seems to all work. The only issue I have is when streaming music via airplay, if i got back to the album view and scroll the music just stops streaming. It is still playing in the remote, i have to pause and then play again and it is fine. And there is nothing in the log, even set to [DEBUG]. does this happen to you?

@sticilface
Copy link

OK, so chickens counted before eggs.

I can't get the remote to pair. This worked fine for version 23.3 which still supported freebsd 9 see owntone/owntone-server#239. but the airplay drops out whenever i browse the lib.

Forked-daapd compile, builds, and seems to run just fine.
I can only pair my iOS remote if i restart forked-daapd, and then i get remote cannot connect to iTunes. check your network settings.
so forked-daapd seems to 1) not pick up the .remote file, unless i restart. 2) then the pairing works. but it doesn't load.

have you had any of these troubles?

@ejurgensen
Copy link

I've added back pipe support and fixed a FreeBSD issue, so some of the above is no longer relevant.

See owntone/owntone-server#239

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment