This is an old revision of the document!
Table of Contents
Alpine Linux latest-stable (written when latest-stable == 3.16.0)
Note about missing packages
Some Asterisk modules are unavailable due to the lack of available packages on Alpine Linux. These currently are:
beanstalk
- Available as a package, but I'm not installing it :)codec2
- Unavailable as a package, but the most recent commit does compile and installiksemel
(Jabber-specialised XML parser) - Unavailable as a package, most recent source simply doesn't compile, but version 1.4 does compile and install.nbs
(Network Broadcast Sound) - Unavailable as a package, compiling from source doesn't work without patching formusl
.osptk
(Open Settlement Protocol) - Unavailable as a package (unsure why), couldn't be bothered finding source and seeing if it compiles.radius
- Installingfreeradius-dev
is not sufficient, and I'm not interested in figuring out what package is required for this one.resample
- Installinglibresample-dev
is apparently not sufficient, even though the install-prereqs script checks for the header file installed by that package before attempting to build from source.. I do not care enough.vpb
(Voicetronix) - Unavailable as a package, website is confusing, don't care enough.
Applications
app_jack
is unavailable due to resampleapp_osplookup
is unavailable due to osptk
Call Detail Recording
cdr_beanstalkd
is unavailable due to beanstalkcdr_radius
is unavailable due to radius
Channel Event Logging
cel_beanstalkd
is unavailable due to beanstalkcel_radius
is unavailable due to radius
Channel Drivers
chan_misdn
(ISDN BRI/PRI) is unavailable due to isdnnet, misdn and suppservchan_nbs
(network broadcast sound) is unavailable due to nbschan_phone
(linux telephony api) is unavailable due to ixjuserchan_vpb
(Voicetronix) is unavailable due to vpb
Resource Modules
res_corosync
is unavailable due to corosyncres_timing_kqueue
is unavailable due to kqueue
Install commands
Not exactly a ready-to-run script, more a log of all the commands I ran in the pursuit of sippies. During the menuconfig step, I enabled everything possible except for any deprecated modules that aren't enabled by default anyway.
- install.sh
apk add -t pbx-build-deps alpine-sdk alsa-lib-dev asterisk-openrc \ binutils-dev bison bluez-dev bsd-compat-headers \ cmake curl-dev \ dahdi-linux dahdi-linux-dev dahdi-tools dahdi-tools-dev doxygen \ fftw-dev findutils flex freeradius-utils freetds-dev \ gmime-dev graphviz-dev gsm-dev \ ilbc-dev imap-dev \ jansson-dev \ libedit-dev libical-dev libpri-dev libresample libsamplerate-dev libsndfile-dev libsrtp-dev libtool libxml2-dev libxslt-dev libzip-dev \ lua-dev lua5.2-dev lua5.3-dev lua5.4-dev \ mariadb-connector-c-dev mariadb-dev mysql-client \ neon-dev net-snmp net-snmp-dev newt-dev \ openldap-clients openldap-dev openssl-dev opus-dev opusfile-dev \ pjproject-dev popt-dev portaudio-dev postgresql14-client postgresql14-dev \ spandsp spandsp-dev speex-dev speexdsp-dev sqlite sqlite-dev \ tar tiff-dev \ unbound-dev unixodbc-dev uriparser uriparser-dev util-linux-dev \ xmlstarlet mkdir -p /usr/local/src/patches/asterisk /usr/local/src/dist/asterisk /usr/local/src/build/codec2 cd /usr/local/src/dist git clone https://github.com/drowe67/codec2 git clone https://github.com/timothytylee/iksemel-1.4 iksemel cd /usr/local/src/build/codec2 cmake /usr/local/src/dist/codec2 make -j5 make install cd /usr/local/src/dist/iksemel # not sure what the order of operations is supposed to be here because I ran autoupdate # but then got messages from autogen.sh about obsolete things I should fix with autoupdate.. autoupdate ./autogen.sh ./configure # edit makefile here to remove all variables referencing the doc folder, # followed by removing the doc folder from SUBDIRS # otherwise make will error out because it wants to build the documentation # TODO: make a patch for that vi Makefile make -j5 make install cd /usr/local/src/patches/asterisk wget https://git.alpinelinux.org/aports/plain/main/asterisk/10-musl-mutex-init.patch wget https://git.alpinelinux.org/aports/plain/main/asterisk/20-musl-astmm-fix.patch wget https://git.alpinelinux.org/aports/plain/main/asterisk/30-asterisk-mariadb.patch wget https://git.alpinelinux.org/aports/plain/main/asterisk/40-asterisk-cdefs.patch wget -O 50-usecallmanager-18.11.3.patch https://raw.githubusercontent.com/usecallmanagernz/patches/master/asterisk/cisco-usecallmanager-18.11.3.patch cd /usr/local/src/dist/asterisk wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-18.11.3.tar.gz cd /usr/local/src/build tar xzf /usr/local/src/asterisk/dist/asterisk-18.11.3.tar.gz mv asterisk-18.11.3 asterisk cd /usr/local/src/build/asterisk patch --strip=1 < /usr/local/src/patches/asterisk/10-musl-mutex-init.patch patch --strip=1 < /usr/local/src/patches/asterisk/20-musl-astmm-fix.patch patch --strip=1 < /usr/local/src/patches/asterisk/30-asterisk-mariadb.patch patch --strip=1 < /usr/local/src/patches/asterisk/40-asterisk-cdefs.patch patch --strip=1 < /usr/local/src/patches/asterisk/50-usecallmanager-18.11.3.patch # Asterisk official documentation makes a big stink about how you should only use their bundled pjproject # otherwise you'll have instabilities and whatever, but their bundled pjproject doesn't build cleanly on Alpine # so they can stink up somewhere else. CFLAGS="-DENABLE_SRTP_AES_GCM -DENABLE_SRTP_AES_256" ./configure --without-pjproject-bundled make menuconfig ./contrib/scripts/get_mp3_source.sh make -j9 make install samples addgroup -S asterisk adduser -S -D -h /var/lib/asterisk -s /sbin/nologin -G asterisk -g asterisk asterisk addgroup -S dialout addgroup asterisk dialout chown -R asterisk:asterisk /run/asterisk chown -R asterisk:asterisk /var/lib/asterisk chown -R asterisk:asterisk /var/log/asterisk chown -R asterisk:asterisk /var/spool/asterisk
Configuration
This part was initially extremely daunting. Not helping matters is that the fact that there are no pages online (that I could find) that discuss a viable minimal configuration for a recent Asterisk version. Apparently either nobody is starting fresh with Asterisk in 2022 or nobody is interested in writing about it. Further frustrating matters is that Asterisk's official wiki, a Confluence site, went down shortly after I began the process of setting Asterisk up.
Files removed
I deleted the config files installed by make samples
that were installed for all modules I explicitly removed:
- app_skel.conf
- cdr_adaptive_odbc.conf
- cdr_beanstalkd.conf
- cdr_odbc.conf
- cdr_pgsql.conf
- cdr_syslog.conf
- cel_beanstalkd.conf
- cel_odbc.conf
- cel_pgsql.conf
- func_odbc.conf
- misdn.conf
- osp.conf
- oss.conf
- res_odbc.conf
- res_pgsql.conf
- res_snmp.conf
- sip.conf
- sip_notify.conf
- vpb.conf
Files edited
- cli.conf
[startup_commands] ;sip set debug on = yes ;core set verbose 3 = yes ;core set debug 1 = yes
- codecs.conf
; custom CELT codec defs. one custom definition per sample rate. ;[celt44] ;type=celt ;samprate=44100 ;framesize=480 ;[opus] ;type=opus ;max_playback_rate=8000 ;fec=no ;packet_loss=10 ;complexity=10 ;max_bandwidth=48000 ;bitrate=auto ;application=voip ;cbr=no ;dtx=no [plc] genericplc => true genericplc_on_equal_codecs => false [silk8] type = silk samprate = 8000 maxbitrate = 10000 fec = true packetloss_percentage = 10 dtx = false [silk12] type = silk samprate = 12000 maxbitrate = 12000 fec = true packetloss_percentage = 10 dtx = false [silk16] type = silk samprate = 16000 maxbitrate = 20000 fec = true packetloss_percentage = 10 dtx = false [silk24] type = silk samprate = 24000 maxbitrate = 30000 fec = true packetloss_percentage = 10 dtx = false [speex] vbr => true quality => 3 complexity => 2 enhancement => true vad => true abr => 0 vbr_quality => 4 dtx => false experimental_rtcp_feedback => false preprocess => false pp_vad => false pp_agc => false pp_agc_level => 8000 pp_denoise => false pp_dereverb => false pp_dereverb_decay => 0.4 pp_dereverb_level => 0.3
- console.conf
[general] [default] active = no
- extconfig.conf
[settings]
- features.conf
[general] transferdigittimeout => 3 xfersound = beep xferfailsound = beeperr ;pickupsound = beep ;pickupfailsound = beeperr featuredigittimeout = 1000 ;recordingfailsound = beeperr atxfernoanswertimeout = 15 atxferdropcall = no atxferloopdelay = 10 atxfercallbackretries = 2 transferdialattempts = 3 transferretrysound = beep transferinvalidsound = beeperr atxferabort = *1 atxfercomplete = *2 atxferthreeway = *3 atxferswap = *4 pickupexten = *8 [featuremap] ; requires two channels to be both answered and bridged, chan_local is needed w/ Answer in order to use them while RP is ringing or in progress disconnect => *0 ;requires H or h automon => *1 ;requires W or w atxfer => *2 ;requires T or t automixmon => *3 ;requires X or x blindxfer => #1 ;requires T or t parkcall => #72;requires X or x [applicationmap]
- hep.conf
[general] enabled = no ;capture_address = 1.2.3.4:1234 ;capture_password = password ;capture_id = 1234 ;uuid_type = call-id | channel
- http.conf
[general] servername = Puppybarks enabled = yes bindaddr = 0.0.0.0 bindport = 8088 tlsenable = no ;prefix=asterisk ;sessionlimit=100 ;session_inactivity=30000 ;session_keep_alive=15000 ;enable_static=yes ;enable_status=no ;redirect = / /static/config/index.html ;tlsenable=yes ;tlsbindaddr=0.0.0.0:8089 ; ;tlscertfile= ;tlsprivatekey= ; tlscipher= ; ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384: ; ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256: ; kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA: ; ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384: ; ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA: ; DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA: ; AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA: ; AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH: ; !EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ; tlsdisablev1=yes ; tlsdisablev11=yes ; tlsdisablev12=yes ; tlsservercipherorder=yes ;[post_mappings] ;uploads = /var/lib/asterisk/uploads/
- modules.conf
[modules] autoload=yes
- prometheus.conf
[general] enabled = yes core_metrics_enabled = yes uri = metrics