commit 8c8352fb572ec3eda88090e7cc2182eaa2cacf89 Author: Florian Overkamp Date: Fri Feb 28 22:38:20 2025 +0100 simple asterisk build for docker image, version 20-latest diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70bee2b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +etc/ +log/ +spool/ diff --git a/20-debian/Dockerfile b/20-debian/Dockerfile new file mode 100644 index 0000000..04d0659 --- /dev/null +++ b/20-debian/Dockerfile @@ -0,0 +1,24 @@ +FROM debian:bookworm-slim +LABEL maintainer="Florian Overkamp " + +ADD asterisk-wrapper.sh /usr/local/sbin/asterisk-wrapper.sh +ADD asterisk-build.sh /usr/local/sbin/asterisk-build.sh + +RUN apt-get update && apt-get upgrade -y && \ + apt-get -y install pkg-config curl msmtp sox mpg123 && \ + asterisk-build.sh && rm /usr/local/sbin/asterisk-build.sh && \ + cd /etc/asterisk && tar czf /etc/ast-conf.tgz * + +VOLUME /etc/asterisk +VOLUME /var/spool/asterisk +VOLUME /var/log/asterisk +VOLUME /var/lib/asterisk/agi-bin +VOLUME /var/lib/asterisk/sounds/prompts +VOLUME /usr/local/bin + +EXPOSE 5060/udp +EXPOSE 5060 + +WORKDIR /etc/asterisk +CMD ["/usr/local/sbin/asterisk-wrapper.sh"] + diff --git a/20-debian/asterisk-build.sh b/20-debian/asterisk-build.sh new file mode 100755 index 0000000..663b932 --- /dev/null +++ b/20-debian/asterisk-build.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +apt-get -y install build-essential libssl-dev libedit-dev uuid-dev libxml2-dev libsqlite3-dev + +cd /usr/src +curl -L http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz > asterisk.tar.gz +tar zxf asterisk.tar.gz +cd asterisk-20.* +# set compiler flags for cross system compatibility +export ASTCFLAGS="-g -O2 -march=x86-64 -fstack-protector-strong -Wformat -Werror=format-security" +# configure to use the bundled jansson libs (less dependancy on base image) +./configure --with-jansson-bundled +make +make install +make samples + +cd /usr/src +rm -rf * + +apt-get -y purge build-essential +apt -y autoremove + +adduser --system --home /var/lib/asterisk --shell /sbin/nologin --group asterisk +chown -R asterisk:asterisk /var/lib/asterisk + diff --git a/20-debian/asterisk-wrapper.sh b/20-debian/asterisk-wrapper.sh new file mode 100755 index 0000000..24b64c1 --- /dev/null +++ b/20-debian/asterisk-wrapper.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +echo "=========================================" +echo " Asterisk container starting up " +echo "=========================================" + +if [[ ! -f /etc/asterisk/asterisk.conf ]] +then + # extract default distro config in volume + echo " -- No asterisk.conf found, unpacking distribution config for production" + cd /etc/asterisk + tar zxf /etc/ast-conf.tgz + + # (also) extract default distro config in dpkg-dist for easy reference + rm -rf dpkg-dist + mkdir dpkg-dist + cd dpkg-dist + tar zxf /etc/ast-conf.tgz +else + # extract default distro config in dpkg-dist for easy reference + echo " -- Existing asterisk.conf found, unpacking distribution config in reference folder" + cd /etc/asterisk + rm -rf dpkg-dist + mkdir dpkg-dist + cd dpkg-dist + tar zxf /etc/ast-conf.tgz +fi + +# ensure cdr-csv subdir exists +mkdir -p /var/log/asterisk/cdr-csv + +# fix permissions +chown -R asterisk:asterisk /etc/asterisk +chmod -R o+r /etc/asterisk +chown -R asterisk:asterisk /var/spool/asterisk +chmod -R o+r /var/spool/asterisk +chown -R asterisk:asterisk /var/log/asterisk +chmod -R o+r /var/log/asterisk + +# detect public IPv4 address and configure for sip +if [ -z "$IP4" ]; then + IP4=`curl -4 -s http://icanhazip.com/` + echo " -- Detected external (public) IPv4 address $IP4 (requested from icanhazip)" + echo " -- You can override this by passing the IP4 environment variable with the desired address" +else + echo " -- Detected external (public) IPv4 address $IP4 (set from environment)" +fi +sed -ri "s/external_media_address=(([0-9]{1,3}\.){3}[0-9]{1,3})/external_media_address=$IP4/g" /etc/asterisk/pjsip.conf +sed -ri "s/external_signaling_address=(([0-9]{1,3}\.){3}[0-9]{1,3})/external_signaling_address=$IP4/g" /etc/asterisk/pjsip.conf + +# configure msmtp +echo "account default" > /etc/msmtprc +if [ -n "$SMARTHOST" ]; then + IFS=: read -r SMARTHOST_HOST SMARTHOST_PORT <<< "$SMARTHOST" + echo " -- Expanding '$SMARTHOST' as default SMTP relay" +fi +if [ -n "$SMARTHOST_HOST" ]; then + echo "host $SMARTHOST_HOST" >> /etc/msmtprc + echo " -- Set '$SMARTHOST_HOST' as default SMTP relay host" +else + echo "host mail" >> /etc/msmtprc + echo " -- Using 'mail' as default SMTP relay host" +fi +if [ -n "$SMARTHOST_PORT" ]; then + echo "port $SMARTHOST_PORT" >> /etc/msmtprc + echo " -- Set $SMARTHOST_PORT as default SMTP relay port" +else + echo "port 587" >> /etc/msmtprc + echo " -- Using 587 as default SMTP relay port" +fi +echo "from msmtp@asterisk" >> /etc/msmtprc +# create symlink for asterisk to use +ln -s /usr/bin/msmtp /usr/sbin/sendmail + +# go live +echo " -- Launching Asterisk" +/usr/sbin/asterisk -f -p -U asterisk + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1bacdb1 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# asterisk-docker +A generic asterisk container build