Reply To: Requesting a rescan crashes svn-1696

#18166
Anonymous
Inactive

@fizze wrote:

Well it’s an OOM. Are you using sqlite2 or sqlite3 as database?
What binary do you use, or did you compile yourself?

It’s indeed weird that that initial scan works, so I suspect database trouble.

Aye – that’s what bothered me too… What would be different in scanning at start up but not via the web interface?

Anyways, to answer your questions, I am using sqlite3, and I compiled myself.

My steps for compiling were as follows:

./configure --enable-sqlite3 --with-sqlite3-includes=/usr/include --with-sqlite3-libs=/usr/lib64
make
make install

My configuration file resides at /usr/local/etc/mt-daapd.conf and is as follows:

# $Id: mt-daapd.conf.templ 1660 2007-09-12 13:08:04Z rpedde $
#
# This is the mt-daapd config file.
#
# If you have problems or questions with the format of this file,
# direct your questions to [email protected].
#
# Questions and discussions about the format and content of this
# config file can probably be obtained by consulting the wiki:
#
# http://wiki.fireflymediaserver.org/Config_File
#
# Or by asking questions on the forums at
#
# http://forums.fireflymediaserver.org
#
#

[general]

#
# web_root (required)
#
# Location of the admin web pages.
#
# If you installed from .RPM, .deb, or tarball with --prefix=/usr, then
# this is correct.
#
# If you installed from tarball without --prefix=/usr, then the correct
# path is probably /usr/local/share/mt-daapd/admin-root.
#

web_root = /usr/local/share/mt-daapd/admin-root

#
# port (required)
#
# What port to listen on. It is possible to use a different
# port, but this is the default iTunes port
#

port = 3689

#
# admin_pw (required)
#
# This is the password to the administrative pages
#

admin_pw = mt-daapd


#
# db_type (required)
#
# This is what kind of backend database to store the song
# info in. Valid choices are "sqlite" and "sqlite3".
#

db_type = sqlite3

#
# db_parms
#
# This is any extra information the db needs to connect.
# in the case of sqlite and sqlite3, this is the name
# of the directory to store the database in
#
# If you installed from RPM or .deb, this path likely already
# exists. If not, then you must create it. The directory itself
# must be writable by the "runas" user.
#

db_parms = /usr/local/var/cache/mt-daapd

#
# mp3_dir (required)
#
# Location of the mp3 files to share. Note that because the
# files are stored in the database by inode, these must be
# in the same physical filesystem.
#

mp3_dir = /media/music

#
# servername (required)
#
# This is both the name of the server as advertised
# via rendezvous, and the name of the database
# exported via DAAP. Also know as "What shows up in iTunes".
#

servername = Firefly %v on %h

#
# runas (required)
#
# This is the user to drop privs to if running as
# root. If mt-daapd is not started as root, this
# configuration option is ignored. Notice that this
# must be specified whether the server is running
# as root or not.
#
# This is also ignored on Windows.
#

runas = nobody

#
# password (optional)
#
# This is the password required to listen to MP3 files
# i.e. the password that iTunes prompts for
#

#password = mp3

#
# extensions (optional)
#
# These are the file extensions that the daap server will
# try to index and serve. By default, it only indexes and
# serves .mp3 files. It can also server .m4a and .m4p files,
# and just about any other files, really. Unfortunately, while
# it can *attempt* to serve other files (.ogg?), iTunes won't
# play them. Perhaps this would be useful on Linux with
# Rhythmbox, once it understands daap. (hurry up!)
#
# Failing that, one can use server-side conversion to transcode
# non-standard (.ogg, .flac) music to wav on the server side.
# See the ssc_* options below.
#
# To be able to index .ogg files, you'll need to have configured
# with --enable-oggvorbis. For .flac, --enable-flac, for .mpc,
# --enable-musepack.
#

extensions = .mp3,.m4a,.m4p

#
# ssc_codectypes (optional)
#
# List of codectypes for files that the daap server should
# perform internal format conversion and present to clients
# as WAV files. The file extensions that these codectypes correspond
# to must also be present in 'extensions'
# configuration value, or files are not probed in the first
# place.
#
# Valid codectypes:
#
# mp4a - for AAC (.aac, .mp4, .m4a, .m4p)
# mpeg - for mp3
# wav - for wav
# wma - for wma
# ogg - for ogg
# flac - for flac (.flac, .fla)
# mpc for musepack (.mpc, .mpp, .mp+)
# alac for alac (.m4a)
#

ssc_codectypes = ogg,flac,alac

#
# ssc_prog (optional)
#
# Program that is used in server side format conversion.
# Program must accept following command line syntax:
# ssc_prog filename offset length ...
# Parameter filename is the real name of the file that is
# to be converted and streamed, offset is number of bytes
# that are skipped from the beginning of the _output_ file
# before streaming is started, length is length of the song
# in seconds (or zero). All other possible arguments must
# be ignored. The resulting wav file (or the rest of
# the file after initial seek) is written to the standard
# output by the ssc_prog program. This is typically
# a script that is a front end for different conversion tools
# handling different formats.
#

ssc_prog = /usr/local/bin/mt-daapd-ssc.sh

#
# logfile (optional)
#
# This is the file to log to. If this is not configured,
# then it will log to the syslog.
#
# Not that the -d switch will control the log verbosity.
# By default, it runs at log level 1. Log level 9 will churn
# out scads of useless debugging information. Values in between
# will vary the amount of logging you get.
#

logfile = /var/log/mt-daapd.log

#
# rescan_interval
#
# How often to check the file system to see if any mp3 files
# have been added or removed.
#
# if not specified, the default is 0, which disables background scanning.
#
# If background rescanning is disabled, a scan can still be forced from the
# "status" page of the administrative web interface
#
# Setting a rescan_interval lower than the time it takes to rescan
# won't hurt anything, it will just waste CPU, and make connect times
# to the daap server longer.
#
#

#rescan_interval = 300

# always_scan
#
# The default behavior is not not do background rescans of the
# filesystem unless there are clients connected. The thought is to
# allow the drives to spin down unless they are in use. This might be
# of more importance in IDE drives that aren't designed to be run
# 24x7. Forcing a scan through the web interface will always work
# though, even if no users are connected.

# always_scan = 0

#
# scan_type
#
#
# This sets how aggressively mp3 files should be scanned to determine
# file length. There are three values:
#
# 0 (Normal)
# Just scan the first mp3 frame to try and calculate size. This will
# be accurate for most files, but VBR files without an Xing tag will
# probably have wildly inaccurate file times. This is the default.
#
# 1 (Aggressive)
# This checks the bitrates of 10 frames in the middle of the song.
# This will still be inaccurate for VBR files without an Xing tag,
# but they probably won't be quite as inaccurate as 0. This takes
# more time, obviously, although the time hit will only happen the
# first time you scan a particular file.
#
# 2 (Painfully aggressive)
# This walks through the entire song, counting the number of frames.
# This should result in accurate song times, but will take the most
# time. Again, this will only have to be incurred the first time
# the file is indexed.
#

scan_type = 2

#
# compress
#
# Whether to use gzip content-encoding when transferring playlists etc.
# This was contributed as a patch by Ciamac Moallemi just prior to the 0.2.1
# release, and as such, hasn't gotten as much testing as other features.
#
# This feature should substantially speed up transfers of large databases
# and playlists.
#
# It will eventually default to 1, but currently it defaults to 0.
#

#compress = 0

[plugins]
plugin_dir = /usr/local/lib/mt-daapd/plugins


[scanning]

# should playlists be processed at all?
#
process_playlists = 1


# should itunes xml files be processed?
#
process_itunes = 1

# should m3u files be processed?
#
process_m3u = 1

My openSUSE start-up script resides at /etc/init.d/mt-daapd and is as follows:

# Copyright (c) 1995-2004 SUSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# Author: Dylan Muir
#
# /etc/init.d/mt-daapd
# and its symbolic link
# /usr/sbin/mt-daapd
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
#
# Note: This template uses functions rc_XXX defined in /etc/rc.status on
# UnitedLinux (UL) based Linux distributions. If you want to base your
# script on this template and ensure that it works on non UL based LSB
# compliant Linux distributions, you either have to provide the rc.status
# functions from UL or change the script to work without them.
#
### BEGIN INIT INFO
# Provides: daap
# Required-Start: $portmap $local_fs $remote_fs rendezvous
# Should-Start:
# Required-Stop: $portmap $local_fs $remote_fs rendezvous
# Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: mt-daapd daemon providing DAAP serving
# Description: mt-daapd allows iTunes-compatible clients
# to connect, serves streams and allows download of files.
# Also provides a web configuration interface on the DAAP port.
### END INIT INFO

# Check for missing binaries (stale symlinks should not happen)
# Note: Special treatment of stop for LSB conformance
MT_DAAPD_BIN=/usr/local/sbin/mt-daapd
test -x $MT_DAAPD_BIN || { echo "$MT_DAAPD_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }

# Check for existence of needed config file and read it
MT_DAAPD_CONFIG=/usr/local/etc/mt-daapd.conf
test -r $MT_DAAPD_CONFIG || { echo "$MT_DAAPD_CONFIG does not exist";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }

# Directory to wait for
MUSIC_WATCH_DIR=/media/music

# Debug level
MT_DAAPD_DEBUG_LEVEL=9

# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v be verbose in local rc status and clear it afterwards
# rc_status -v -r ditto and clear both the local and overall rc status
# rc_status -s display "skipped" and exit with status 3
# rc_status -u display "unused" and exit with status 3
# rc_failed set local and overall rc status to failed
# rc_failed set local and overall rc status to
# rc_reset clear both the local and overall rc status
# rc_exit exit appropriate to overall rc status
# rc_active checks whether a service is activated by symlinks
. /etc/rc.status

# Reset status of this service
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - user had insufficient privileges
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signaling is not supported) are
# considered a success.

case "$1" in
start)
echo -n "Starting mt-daapd "
## Recycle log file
cp /var/log/mt-daapd.log /var/log/mt-daapd.0.log

## Wait for the music cache to appear
while [ ! -e $MUSIC_WATCH_DIR ]
do
echo "mt-daapd: Waiting for music directory to appear..."
sleep 1
done

## Start daemon with startproc(8). If this fails
## the return value is set appropriately by startproc.
/sbin/startproc $MT_DAAPD_BIN -c $MT_DAAPD_CONFIG -d $MT_DAAPD_DEBUG_LEVEL

# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down mt-daapd "
## Stop daemon with killproc(8) and if this fails
## killproc sets the return value according to LSB.

killall -INT $MT_DAAPD_BIN

# Remember status and be verbose
rc_status -v
;;
try-restart|condrestart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
if test "$1" = "condrestart"; then
echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
fi
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
sleep 3
$0 start

# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart the service if it
## is running.

echo -n "Reload service mt-daapd "
## if it supports it:
#/sbin/killproc -HUP $MT_DAAPD_BIN
#touch /var/run/mt-daapd.pid
#rc_status -v

## Otherwise:
$0 try-restart
rc_status
;;
reload)
## Like force-reload, but if daemon does not support
## signaling, do nothing (!)

# If it supports signaling:
echo -n "Reload service mt-daapd "
#/sbin/killproc -HUP $MT_DAAPD_BIN
#touch /var/run/mt_daapd.pid
#rc_status -v

## Otherwise if it does not support reload:
rc_failed 3
rc_status -v
;;
status)
echo -n "Checking for service mt-daapd "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.

# Return value is slightly different for the status command:
# 0 - service up and running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running (unused)
# 4 - service status unknown :-(
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

# NOTE: checkproc returns LSB compliant status values.
/sbin/checkproc $MT_DAAPD_BIN
# NOTE: rc_status knows that we called this init script with
# "status" option and adapts its messages accordingly.
rc_status -v
;;
probe)
## Optional: Probe for the necessity of a reload, print out the
## argument to this init script which is required for a reload.
## Note: probe is not (yet) part of LSB (as of 1.9)

test /etc/mt-daapd.conf -nt /var/run/mt-daapd.pid && echo reload
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
exit 1
;;
esac
rc_exit

Out of curiosity, when you say “its an OOM” what are you referring to?

Are there any commands you can think of that might help troubleshoot the database? Perhaps some sort of log I can take a look at that specifically deals with the database?