PRG_NAME:=freeswitch
PKG_NAME:=$(PRG_NAME)-stable
PKG_VERSION:=1.8.1
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_SOURCE_PROTO:=git
define Package/$(PKG_NAME)/conffiles
$(FS_STABLE_SYSCONF_DIR)/$(PRG_NAME)
-$(FS_STABLE_SYSCONF_DIR)/default/$(PRG_NAME)
+$(FS_STABLE_SYSCONF_DIR)/config/$(PRG_NAME)
$(FS_STABLE_SYSCONF_DIR)/init.d/$(PRG_NAME)
endef
$(INSTALL_DIR) $(1)$(FS_STABLE_IMAGES_DIR)
$(INSTALL_DIR) $(1)$(FS_STABLE_SCRIPTS_DIR)
$(INSTALL_DIR) $(1)$(FS_STABLE_SOUNDS_DIR)
- $(INSTALL_DIR) $(1)$(FS_STABLE_SYSCONF_DIR)/default
+ $(INSTALL_DIR) $(1)$(FS_STABLE_SYSCONF_DIR)/config
$(INSTALL_DIR) $(1)$(FS_STABLE_SYSCONF_DIR)/init.d
$(INSTALL_DIR) $(1)$(FS_STABLE_TLS_DIR)
$(INSTALL_BIN) ./files/$(PRG_NAME).init \
$(1)$(FS_STABLE_SYSCONF_DIR)/init.d/$(PRG_NAME)
- $(INSTALL_CONF) ./files/$(PRG_NAME).default \
- $(1)$(FS_STABLE_SYSCONF_DIR)/default/$(PRG_NAME)
+ $(INSTALL_CONF) ./files/$(PRG_NAME).config \
+ $(1)$(FS_STABLE_SYSCONF_DIR)/config/$(PRG_NAME)
endef
define Package/$(PKG_NAME)/postinst
if [ -z "$${IPKG_INSTROOT}" ]; then
# Prevent $(PRG_NAME) from auto-starting after an upgrade. The modules may
# not be upgraded yet and the user configuration may need a revision.
- sed -i '/^ENABLE_FREESWITCH="yes"/s/^/#/' \
- $(FS_STABLE_SYSCONF_DIR)/default/$(PRG_NAME)
+ uci set freeswitch.general.enabled=0
+ uci commit freeswitch
echo
echo "o-------------------------------------------------------------------o"
echo "| FreeSWITCH note |"
echo "o-------------------------------------------------------------------o"
- echo "| Edit /etc/default/freeswitch to change basic init configuration. |"
+ echo "| Edit /etc/config/freeswitch to change basic init configuration. |"
echo "o-------------------------------------------------------------=^_^=-o"
echo
fi
echo "o-------------------------------------------------------------------o"
echo "| FreeSWITCH hotplug note |"
echo "o-------------------------------------------------------------------o"
- echo "| See /etc/default/freeswitch for hotplug hints. |"
+ echo "| See /etc/config/freeswitch for hotplug hints. |"
echo "o-------------------------------------------------------------=^_^=-o"
echo
fi
--- /dev/null
+
+config freeswitch 'general'
+ option enabled '0'
+ option user 'freeswitch'
+ option group 'freeswitch'
+ option options '-nonat -np'
+ option change_perm '0'
+
+config freeswitch 'directories'
+ option cache '/tmp/freeswitch/cache'
+ option db '/tmp/freeswitch/db'
+ option log '/tmp/freeswitch/log'
+ option recordings '/tmp/freeswitch/recordings'
+ option storage '/tmp/freeswitch/storage'
+ option temp '/tmp/freeswitch/temp'
+
+config freeswitch 'hotplug'
+ #option interface 'wan'
+ #option mount_point '/mnt/usb'
+ option ntpd '0'
+ option timeout '60'
+
+++ /dev/null
-### FreeSWITCH configuration ###
-
-# Uncomment once you verified your configuration, otherwise the init script will
-# not start FreeSWITCH.
-#ENABLE_FREESWITCH="yes"
-
-#FS_USER=freeswitch
-#FS_GROUP=freeswitch
-
-#FS_DIR_CACHE="/tmp/freeswitch/cache"
-
-# Don't point FS_DIR_DB toward a flash drive, e.g. the flash drive of your
-# router. FreeSWITCH will be writing constantly to its databases, which would
-# degrade the flash over time. Point it to a tmpfs destination like /dev/shm or
-# /tmp instead in order for the writes to go to RAM.
-#FS_DIR_DB="/tmp/freeswitch/db"
-
-#FS_DIR_LOG="/tmp/freeswitch/log"
-#FS_DIR_RECORDINGS="/tmp/freeswitch/recordings"
-#FS_DIR_STORAGE="/tmp/freeswitch/storage"
-#FS_DIR_TEMP="/tmp/freeswitch/temp"
-
-# The following is added to the command line when starting FreeSWITCH:
-OPTIONS="-nonat -np"
-
-### Hotplug configuration ###
-
-# Only used by the FreeSWITCH hotplug script (available in a seperate package).
-
-# Provide the interface that needs to change its state to "up" (if unset the
-# hotplug script does nothing):
-#FS_HOTPLUG_INTERFACE="wan"
-
-# You can add conditions which need to be met before FreeSWITCH is started.
-
-# Uncomment to check if something is mounted here:
-#FS_HOTPLUG_MOUNTPOINT="/mnt/usb"
-
-# Uncomment to check if ntpd is running and has set the system time:
-#FS_HOTPLUG_NTPD="check"
-
-# Uncomment to change the default timeout of 60 seconds that the hotplug script
-# waits for a condition to turn from false to true:
-#FS_HOTPLUG_TIMEOUT="20"
#!/bin/sh
FS=freeswitch
-DEFAULT=/etc/default/$FS
LOGGER="/usr/bin/logger -t ${FS}-hotplug"
LOG_ERR="$LOGGER -p user.err --"
LOG_NOTICE="$LOGGER -p user.notice --"
[ "$ACTION" = ifup ] || exit 0
-[ -f $DEFAULT ] && . $DEFAULT
+. /lib/functions.sh
+config_load $FS
+
+config_get FS_HOTPLUG_INTERFACE hotplug interface
[ -n "$FS_HOTPLUG_INTERFACE" ] || exit 0
pgrep $FS &> /dev/null
if [ $? -eq 0 ]; then
- $LOG_NOTICE Stopping $FS
+ $LOG_NOTICE stopping $FS
/etc/init.d/$FS stop &> /dev/null
pgrep $FS &> /dev/null
if [ $? -eq 0 ]; then
- $LOG_ERR Failed to stop $FS
+ $LOG_ERR failed to stop $FS
exit 1
else
$LOG_NOTICE $FS stopped
fi
fi
+config_get FS_HOTPLUG_TIMEOUT hotplug timeout
+
[ "$FS_HOTPLUG_TIMEOUT" -gt 0 ] 2> /dev/null || unset FS_HOTPLUG_TIMEOUT
TIMEOUT="${FS_HOTPLUG_TIMEOUT:-60}"
+config_get FS_HOTPLUG_MOUNTPOINT hotplug mount_point
+
# Mount condition, idea lifted from OpenWrt wiki
[ -n "$FS_HOTPLUG_MOUNTPOINT" ] && {
if [ -n "$notReady" ]; then
$LOG_ERR "$mnt" still not mounted
- $LOG_ERR Not starting $FS
+ $LOG_ERR not starting $FS
exit 1
else
$LOG_NOTICE "$mnt" mounted
}
+config_get_bool FS_HOTPLUG_NTPD hotplug ntpd 0
+
# ntpd condition
-[ -n "$FS_HOTPLUG_NTPD" ] && {
+[ $FS_HOTPLUG_NTPD -eq 1 ] && {
type ntpq &> /dev/null
[ $? -eq 0 ] || {
notReady=start
timeout=$TIMEOUT
- result=$(uci get 'system.ntp.enabled' 2> /dev/null)
- [ "$result" -eq 1 ] 2> /dev/null && {
- $LOG_WARN BusyBox NTP client _and_ ntpd running
- }
-
while [ -n "$notReady" -a $timeout -gt 0 ]; do
if [ "$notReady" != start ]; then
- $LOG_NOTICE System time not in sync yet, timeout in $timeout s
+ $LOG_NOTICE system time not in sync yet, timeout in $timeout s
sleep 5
timeout=$(($timeout-5))
fi
result=$(ntpq -c 'timeout 300' -c 'rv 0 stratum' 2> /dev/null | \
awk -F '=' '{print $2}' | grep -o -E '^[0-9]+')
if [ -z $result ]; then
- $LOG_WARN Failed to extract stratum from ntpd
+ $LOG_WARN failed to extract stratum from ntpd
notReady="unable to extract stratum"
else
$LOG_NOTICE ntpd stratum $result
result=$(ntpq -c 'timeout 300' -c 'rv 0 offset' 2> /dev/null \
| awk -F '=' '{print $2}' | grep -o -E '^-?[0-9]+')
if [ -z $result ]; then
- $LOG_WARN Failed to extract offset from ntpd
+ $LOG_WARN failed to extract offset from ntpd
notReady="unable to extract offset"
else
# "-0" looks stupid, so remove "-"
done
if [ -n "$notReady" ]; then
- $LOG_ERR System time still not in sync
- $LOG_ERR Not starting $FS
+ $LOG_ERR system time still not in sync
+ $LOG_ERR not starting $FS
exit 1
else
- $LOG_NOTICE System time in sync
+ $LOG_NOTICE system time in sync
fi
}
sleep 1
pgrep $FS &>/dev/null
if [ $? -eq 0 ]; then
- $LOG_NOTICE Started $FS due to \"ifup "$INTERFACE"\" event
+ $LOG_NOTICE started $FS due to \"ifup "$INTERFACE"\" event
else
- $LOG_ERR Start of $FS due to \"ifup "$INTERFACE"\" event failed
+ $LOG_ERR start of $FS due to \"ifup "$INTERFACE"\" event failed
exit 1
fi
#PROCD_DEBUG=1
FS=freeswitch
-DEFAULT=/etc/default/$FS
LOGGER="/usr/bin/logger -p user.err -s -t $FS"
-OPTIONS=
-PROG=/usr/bin/$FS
-TIMEOUT=30
-[ -f $DEFAULT ] && . $DEFAULT
+# used in both start_service() and stop_service()
+fs_dir_run=/var/run/$FS
-fs_user="${FS_USER:-$FS}"
-fs_group="${FS_GROUP:-$FS}"
+start_service() {
+ local change_perm
+ local dir
+ local enabled
-fs_dir_etc="/etc/$FS"
-fs_dir_localstate="/var/lib/$FS"
-fs_dir_run="/var/run/$FS"
+ local fs_user
+ local fs_group
-fs_dir_cache="${FS_DIR_CACHE:-/tmp/$FS/cache}"
-fs_dir_db="${FS_DIR_DB:-/tmp/$FS/db}"
-fs_dir_log="${FS_DIR_LOG:-/tmp/$FS/log}"
-fs_dir_recordings="${FS_DIR_RECORDINGS:-/tmp/$FS/recordings}"
-fs_dir_storage="${FS_DIR_STORAGE:-/tmp/$FS/storage}"
-fs_dir_temp="${FS_DIR_TEMP:-/tmp/$FS/temp}"
+ local fs_dir_cache
+ local fs_dir_db
+ local fs_dir_etc=/etc/$FS
+ local fs_dir_localstate=/var/lib/$FS
+ local fs_dir_log
+ local fs_dir_recordings
+ local fs_dir_storage
+ local fs_dir_temp
-start_service() {
- local dir=
+ local OPTIONS
+
+ local PROG=/usr/bin/$FS
+
+ config_load $FS
- if [ "$ENABLE_FREESWITCH" != yes ]; then
- $LOGGER User configuration incomplete - not starting $FS
- $LOGGER Check ENABLE_FREESWITCH in $DEFAULT
+ config_get_bool enabled general enabled 0
+ if [ $enabled -eq 0 ]; then
+ $LOGGER service not enabled in /etc/config/$FS
exit 1
fi
+ config_get fs_user general user $FS
+ config_get fs_group general group $FS
+
+ config_get fs_dir_cache directories cache /tmp/$FS/cache
+ config_get fs_dir_db directories db /tmp/$FS/db
+ config_get fs_dir_log directories log /tmp/$FS/log
+ config_get fs_dir_recordings directories recordings /tmp/$FS/recordings
+ config_get fs_dir_storage directories storage /tmp/$FS/storage
+ config_get fs_dir_temp directories temp /tmp/$FS/temp
+
for dir in "$fs_dir_cache" "$fs_dir_db" "$fs_dir_localstate" \
"$fs_dir_log" "$fs_dir_recordings" "$fs_dir_run" "$fs_dir_storage" \
"$fs_dir_temp"
}
done
- #[ -d "$fs_dir_etc" ] && {
- # find "$fs_dir_etc" -type f -exec chown root:"$fs_group" {} \;
- # find "$fs_dir_etc" -type f -exec chmod 640 {} \;
- #}
+ config_get_bool change_perm general change_perm 0
+ [ $change_perm -eq 1 ] && [ -d "$fs_dir_etc" ] && {
+ find "$fs_dir_etc" -type f -exec chown root:"$fs_group" {} \;
+ find "$fs_dir_etc" -type f -exec chmod 640 {} \;
+ }
+
+ config_get OPTIONS general options
procd_open_instance
# starting with full path seems cleaner judging by 'ps' output
}
stop_service() {
- local retval=
- local mypid=
+ local retval
+ local mypid
+ local TIMEOUT=30
local timeout=$TIMEOUT
pgrep $FS &> /dev/null
done
[ $retval -ne 1 ] && {
- $LOGGER Application seems to hang
- $LOGGER Sending SIGKILL
+ $LOGGER application seems to hang
+ $LOGGER sending SIGKILL
kill -SIGKILL $mypid 2>/dev/null
sleep 3
pgrep $FS | grep -w $mypid &>/dev/null
}
[ $retval -ne 1 ] && {
- $LOGGER Failed to stop $FS
+ $LOGGER failed to stop $FS
exit 1
}
}