![tilghman](/assets/img/avatar_default.png)
(closes issue #11680) Reported by: tzafrir Patches: live_ast_6 uploaded by tzafrir (license 46) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@151601 f38db490-d61c-443f-a65b-d21fe96a405b
262 lines
9.2 KiB
Bash
Executable file
262 lines
9.2 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# live_ast: run asterisk from a newly-built copy with minimal changes.
|
|
|
|
# Copyright (C) 2007 Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
|
#
|
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
# USA
|
|
|
|
# This script allows you to install Asterisk into a subdirectory of
|
|
# your source distribution and run it from there.
|
|
#
|
|
# Example usage:
|
|
#
|
|
# contrib/scripts/live_ast conf-file # optionally. and now edit live/live.conf
|
|
# # edit live/live.conf
|
|
# contrib/scripts/live_ast configure
|
|
# make
|
|
# contrib/scripts/live_ast install
|
|
# contrib/scripts/live_ast samples
|
|
# contrib/scripts/live_ast run
|
|
# contrib/scripts/live_ast run -r
|
|
# ./live/asterisk -r # Same as run -r
|
|
#
|
|
# A standard debugging cycle of a code in a module:
|
|
#
|
|
# # edit apps/app_skel.c
|
|
# contrib/scripts/live_ast install
|
|
# contrib/scripts/live_ast run -r
|
|
# # and in the CLI:
|
|
# module unload app_skel.so
|
|
# module load app_skel.so
|
|
#
|
|
# If you have external scripts that run asterisk, use the script
|
|
# live/asterisk that is generated by the 'samples' command. In this case you
|
|
# should probably also rem-out the line 'astvarrundir' and maybe also
|
|
# 'astetcdir' in live/etc/asterisk.conf .
|
|
#
|
|
####################### Begin Samples
|
|
# optional environment variables. Set those in live/live.conf or in
|
|
# your envirnment.
|
|
#
|
|
# LIVE_AST_LIBPRI_PATH:
|
|
# To use a libpri SVN directory (without running 'make install': make include
|
|
# a symlink to the current directory:
|
|
# ln -s . /path/to/checkout/of/libpri/include
|
|
# Be sure to run there 'make'. Then set in live.conf:
|
|
#LIVE_AST_LIBPRI_PATH="/path/to/checkout/of/libpri"
|
|
#
|
|
# LIVE_AST_ZAPTEL_PATH:
|
|
# Likewise, the same trick can be used to build vs. a local copy of zaptel:
|
|
# ln -s /path/to/checkout/of/zaptel/include .
|
|
# ln -s /path/to/checkout/of/zaptel/zaptel .
|
|
#LIVE_AST_ZPATEL_PATH="/path/to/checkout/of/zaptel"
|
|
#
|
|
#LIVE_AST_DAHDI_PATH="/path/to/dahdi-linux/dir"
|
|
#LIVE_AST_DAHDITOOLS_PATH="/path/to/dahdi-tools/dir"
|
|
#
|
|
# Another alternative for Zaptel is to use the live_zap script included
|
|
# with the Zaptel distribution. The following should work after you used
|
|
# './live_zap install' or even with a copy generated with
|
|
# './live_zap rsync' . '/apth/to/zaptel' is the directory containing the
|
|
# live/ subdirectory:
|
|
#
|
|
#LIVE_AST_ZAPLIVE_PATH="/path/to/zaptel"
|
|
#
|
|
# LIVE_AST_LD_PATH_EXTRA:
|
|
# space-separated or colon-separated directories to add to
|
|
# LD_LIBRARY_PATH. It is added before any existing components of
|
|
# LD_LIBRARY_PATH.
|
|
#LIVE_AST_LD_PATH_EXTRA="$HOME/lib:$HOME/libtest /opt/testapp"
|
|
#
|
|
# LIVE_AST_CONFIGURE_PARAMS:
|
|
# Extra parameters to pass to ./configure.
|
|
#LIVE_AST_CONFIGURE_PARAMS="--enable-dev-mode"
|
|
#
|
|
# LIVE_AST_FORCE_DEF_CONF:
|
|
# If set to a non-empty value, always regenerate menuselect config.
|
|
# This avoids emenselect's nag about "configuration has changed" that
|
|
# happens occasionally after an svn update.
|
|
#LIVE_AST_FORCE_DEF_CONF=yes
|
|
#
|
|
# LIVE_AST_BRISTUFFED_LIBPRI
|
|
# A hack to use the second, "bristuffed" copy of libpri that exists
|
|
# e.g. in the Debian libpri-dev package. If set to a non-empty value,
|
|
# live_ast will edit makeopts to use that second copy after ./configure
|
|
# is run.
|
|
#LIVE_AST_BRISTUFFED_LIBPRI=yes
|
|
#
|
|
# LIVE_AST_FOR_SYSTEM
|
|
# When generating asterisk.conf, use most components from the installed
|
|
# system. Also provide a sane var-run directory for those of us who want
|
|
# to do the right thing and run asterisk as non-root.
|
|
#LIVE_AST_FOR_SYSTEM=yes
|
|
####################### End Samples
|
|
|
|
BASE_DIR="$PWD/live"
|
|
AST_CONF_DIR="$BASE_DIR/etc/asterisk"
|
|
AST_CONF="$AST_CONF_DIR/asterisk.conf"
|
|
AST_BIN="$BASE_DIR/usr/sbin/asterisk"
|
|
GDB_INIT="$BASE_DIR/gdbinit"
|
|
LIVE_CONF="$BASE_DIR/live.conf"
|
|
DISABLED_MODS="chan_h323 pbx_dundi"
|
|
DISABLED_MODS_FILE="modules-disabled.conf"
|
|
|
|
if [ -r "$LIVE_CONF" ]; then . "$LIVE_CONF"; fi
|
|
|
|
if [ "$LIVE_AST_LIBPRI_PATH" != '' ]; then
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-pri=$LIVE_AST_LIBPRI_PATH"
|
|
LIVE_AST_LD_PATH_EXTRA="$LIVE_AST_LD_PATH_EXTRA $LIVE_AST_LIBPRI_PATH"
|
|
fi
|
|
|
|
if [ "$LIVE_AST_ZAPTEL_PATH" != '' ]; then
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-tonezone=$LIVE_AST_ZAPTEL_PATH"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel=$LIVE_AST_ZAPTEL_PATH"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel_transcode=$LIVE_AST_ZAPTEL_PATH"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel_vldtmf=$LIVE_AST_ZAPTEL_PATH"
|
|
LIVE_AST_LD_PATH_EXTRA="$LIVE_AST_LD_PATH_EXTRA $LIVE_AST_ZAPTEL_PATH"
|
|
fi
|
|
|
|
if [ "$LIVE_AST_DAHDI_PATH" != '' ]; then
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-dahdi=$LIVE_AST_DAHDI_PATH"
|
|
fi
|
|
|
|
if [ "$LIVE_AST_DAHDITOOLS_PATH" != '' ]; then
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-tonezone=$LIVE_AST_DAHDITOOLS_PATH"
|
|
LIVE_AST_LD_PATH_EXTRA="$LIVE_AST_LD_PATH_EXTRA $LIVE_AST_DAHDITOOLS_PATH"
|
|
fi
|
|
|
|
if [ "$LIVE_AST_ZPALIVE_PATH" != '' ]; then
|
|
ZAPLIVE_USR_DIR="$LIVE_AST_ZPALIVE_PATH/live/usr"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-tonezone=$ZAPLIVE_USR_DIR"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel=$ZAPALIVE_USR_DIR"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel_transcode=$ZAPALIVE_USR_DIR"
|
|
LIVE_AST_CONFIGURE_PARAMS="$LIVE_AST_CONFIGURE_PARAMS --with-zaptel_vldtmf=$ZAPALIVE_USR_DIR"
|
|
LIVE_AST_LD_PATH_EXTRA="$LIVE_AST_LD_PATH_EXTRA $ZAPLIVE_USR_DIR/lib"
|
|
fi
|
|
|
|
# gets rid of excessive spaces. Leves nothing if there were only white spaces:
|
|
LIVE_AST_LD_PATH_EXTRA=`echo $LIVE_AST_LD_PATH_EXTRA | tr ' ' :`
|
|
|
|
set_ld_env() {
|
|
if [ "$LIVE_AST_LD_PATH_EXTRA$LD_LIBRARY_PATH" = '' ]; then return; fi
|
|
|
|
LD_LIBRARY_PATH=`echo $LIVE_AST_LD_PATH_EXTRA $LD_LIBRARY_PATH | tr ' ' :`
|
|
export LD_LIBRARY_PATH
|
|
}
|
|
|
|
# if live.conf does not exist, generate it from the sample
|
|
gen_live_conf() {
|
|
if [ -r $LIVE_CONF ]; then return; fi
|
|
# TODO: `dirname $LIVE_CONF` in case someone redefines it?
|
|
mkdir -p $BASE_DIR
|
|
sed -n -e '/^#* Begin Samples/,/^#* End Samples/p' "$0" \
|
|
| sed -e '/^#* \(Begin\|End\) Samples/d' >"$LIVE_CONF"
|
|
}
|
|
|
|
case "$1" in
|
|
configure)
|
|
shift
|
|
./configure $LIVE_AST_CONFIGURE_PARAMS "$@"
|
|
if [ "$LIVE_AST_FORCE_DEF_CONF" != '' ]; then
|
|
rm -f menuselect.makeopts
|
|
fi
|
|
if [ "$LIVE_AST_BRISTUFFED_LIBPRI" != '' ]; then
|
|
sed -i \
|
|
-e 's|^\(PRI_INCLUDE=\).*|\1-I/usr/include/bristuffed|' \
|
|
-e 's|^\(PRI_LIB=\).*|\1-lpri-bristuffed|' \
|
|
makeopts
|
|
fi
|
|
;;
|
|
install)
|
|
make install DESTDIR="$BASE_DIR"
|
|
;;
|
|
samples)
|
|
make samples DESTDIR="$BASE_DIR"
|
|
if [ "$LIVE_AST_FOR_SYSTEM" != '' ]; then
|
|
cat <<EOF >"$AST_CONF"
|
|
[directories]
|
|
; rem-out any of the following to use Asterisk's defaults:
|
|
;astetcdir => $BASE_DIR/etc/asterisk
|
|
astmoddir => $BASE_DIR/usr/lib/asterisk/modules
|
|
;astvarlibdir => $BASE_DIR/var/lib/asterisk
|
|
;astdatadir => $BASE_DIR/var/lib/asterisk
|
|
;astagidir => $BASE_DIR/var/lib/asterisk/agi
|
|
;astrundir => $BASE_DIR/var/run
|
|
astrundir => /var/run/asterisk
|
|
;astspooldir => $BASE_DIR/var/spool/asterisk
|
|
;astlogdir => $BASE_DIR/var/log/asterisk
|
|
EOF
|
|
else
|
|
cat <<EOF >"$AST_CONF"
|
|
[directories]
|
|
; rem-out any of the following to use Asterisk's defaults:
|
|
astetcdir => $BASE_DIR/etc/asterisk
|
|
astmoddir => $BASE_DIR/usr/lib/asterisk/modules
|
|
astvarlibdir => $BASE_DIR/var/lib/asterisk
|
|
astdatadir => $BASE_DIR/var/lib/asterisk
|
|
astagidir => $BASE_DIR/var/lib/asterisk/agi
|
|
astrundir => $BASE_DIR/var/run
|
|
astspooldir => $BASE_DIR/var/spool/asterisk
|
|
astlogdir => $BASE_DIR/var/log/asterisk
|
|
EOF
|
|
fi
|
|
# disable some modules that bind on a port that is already in use by a
|
|
# main Asterisk copy, and would crash asterisk in failing:
|
|
rm -f "$AST_CONF_DIR/$DISABLED_MODS_FILE"
|
|
for mod in $DISABLED_MODS; do
|
|
echo "noload => $mod.so" >> "$AST_CONF_DIR/$DISABLED_MODS_FILE"
|
|
done
|
|
echo "#include $DISABLED_MODS_FILE" >> "$AST_CONF_DIR/modules.conf"
|
|
|
|
cat <<EOF >"$GDB_INIT"
|
|
set args -C "$AST_CONF" -c
|
|
EOF
|
|
cat <<EOF >"$BASE_DIR/asterisk"
|
|
#!/bin/sh
|
|
# a wrapper to run asterisk from the "live" copy:
|
|
cd "$PWD"
|
|
exec "$0" run "\$@"
|
|
EOF
|
|
chmod +x "$BASE_DIR/asterisk"
|
|
# Generate a sample config file for live_ast itself:
|
|
gen_live_conf
|
|
;;
|
|
conf-file)
|
|
# Just regenerate live.conf from the sample if it does not already exist:
|
|
gen_live_conf
|
|
;;
|
|
run)
|
|
shift
|
|
set_ld_env
|
|
$AST_BIN -C $AST_CONF "$@"
|
|
;;
|
|
gdb)
|
|
set_ld_env
|
|
gdb -x $GDB_INIT $AST_BIN
|
|
;;
|
|
*)
|
|
echo "$0: Usage: Equivalent of:"
|
|
echo "$0 configure [params] ./configure [params]"
|
|
echo "$0 install make install"
|
|
echo "$0 samples make samples"
|
|
echo "$0 run [params] asterisk [params]"
|
|
echo "$0 gdb gdb asterisk"
|
|
echo "$0 conf-file create live.conf if it does exist"
|
|
exit 1
|
|
;;
|
|
esac
|