From e98ee36c0f7c5026fa672ebd142387076f8636d8 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Wed, 22 Oct 2008 20:05:15 +0000 Subject: Add a contributed script for running Asterisk without installing it, first. (closes issue #11680) Reported by: tzafrir Patches: live_ast_6 uploaded by tzafrir (license 46) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@151601 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- contrib/scripts/live_ast | 261 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100755 contrib/scripts/live_ast (limited to 'contrib/scripts') diff --git a/contrib/scripts/live_ast b/contrib/scripts/live_ast new file mode 100755 index 000000000..355c6cc56 --- /dev/null +++ b/contrib/scripts/live_ast @@ -0,0 +1,261 @@ +#!/bin/sh + +# live_ast: run asterisk from a newly-built copy with minimal changes. + +# Copyright (C) 2007 Tzafrir Cohen +# +# 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 <"$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 <"$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 <"$GDB_INIT" +set args -C "$AST_CONF" -c +EOF +cat <"$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 -- cgit v1.2.3