[Buildroot] [PATCH] package/asterisk: update to 22.3.0

Arnout Vandecappelle arnout at rnout.be
Wed Apr 2 20:09:54 UTC 2025


On 01/04/2025 08:45, Waldemar Brodkorb wrote:
> For a changelog see here:
> https://downloads.asterisk.org/pub/telephony/asterisk/ChangeLog-22.3.0.md
>
> Changes made by the package maintainer:
> - add systemd service file
> - run asterisk as non-root user asterisk
> - build pjsip as bundled source code, but download it like
>    sound files
> - remove unused configure options
>
> See here for the reason behind using the bundled pjsip:
> https://github.com/asterisk/asterisk/issues/671

  It remains super weird that the same source works fine if built within 
asterisk, but not if it's built externally...

  It's not clear to me from the information in the ticket if you tried finding 
what is different about the two cases. They suggested that asterisk uses a 
different config file, could that be what happens? It could also be different 
compiler options. Or it could be that we build libpjsip itself incorrectly. It 
could be a matter of a different struct alignment or something like that, 
because of different compilation options. But then I don't understand that other 
libraries don't have the same issue...

> Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
> ---
>   package/asterisk/asterisk.hash    |  4 +++-
>   package/asterisk/asterisk.mk      | 28 +++++++++++++------------
>   package/asterisk/asterisk.service | 34 +++++++++++++++++++++++++++++++
>   3 files changed, 52 insertions(+), 14 deletions(-)
>   create mode 100644 package/asterisk/asterisk.service
>
> diff --git a/package/asterisk/asterisk.hash b/package/asterisk/asterisk.hash
> index 8c8ebddc47..7b28624921 100644
> --- a/package/asterisk/asterisk.hash
> +++ b/package/asterisk/asterisk.hash
> @@ -1,6 +1,8 @@
>   # Locally computed
> -sha256  94647b3f887f7dc91df51a4f88dfc3a07cc279bef86b8d05aa72f0c49d187571  asterisk-20.11.1.tar.gz
> +sha256  4cc403c8885d4aed3956dfb75d315d3e5bcc129eb9cd47c156d3b12ecceed1ba  asterisk-22.3.0.tar.gz
>   
> +# Locally computed
> +sha256  58bb83cec4d431f48d006e455d821668450f8cf6b6c95f090def47062fa3a60c  pjproject-2.15.1.tar.bz2
>   # sha1 from: http://downloads.asterisk.org/pub/telephony/sounds/releases
>   # sha256 locally computed
>   sha1  721c512feaea102700d5bdce952fdc0bb29dc640  asterisk-core-sounds-en-gsm-1.6.1.tar.gz
> diff --git a/package/asterisk/asterisk.mk b/package/asterisk/asterisk.mk
> index ec67632ef4..88bb6902a6 100644
> --- a/package/asterisk/asterisk.mk
> +++ b/package/asterisk/asterisk.mk
> @@ -4,15 +4,17 @@
>   #
>   ################################################################################
>   
> -ASTERISK_VERSION = 20.11.1
> +ASTERISK_VERSION = 22.3.0
>   # Use the github mirror: it's an official mirror maintained by Digium, and
>   # provides tarballs, which the main Asterisk git tree (behind Gerrit) does not.
>   ASTERISK_SITE = $(call github,asterisk,asterisk,$(ASTERISK_VERSION))
>   
> +ASTERISK_PJSIP_URL = https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.15.1/

  Could we use LIBPJSIP_SITE and LIBPJSIP_SOURCE instead?


>   ASTERISK_SOUNDS_BASE_URL = http://downloads.asterisk.org/pub/telephony/sounds/releases
>   ASTERISK_EXTRA_DOWNLOADS = \
>   	$(ASTERISK_SOUNDS_BASE_URL)/asterisk-core-sounds-en-gsm-1.6.1.tar.gz \
> -	$(ASTERISK_SOUNDS_BASE_URL)/asterisk-moh-opsound-wav-2.03.tar.gz
> +	$(ASTERISK_SOUNDS_BASE_URL)/asterisk-moh-opsound-wav-2.03.tar.gz \
> +	$(ASTERISK_PJSIP_URL)/pjproject-2.15.1.tar.bz2
>   
>   ASTERISK_LICENSE = GPL-2.0, BSD-3-Clause (SHA1, resample), BSD-4-Clause (db1-ast)
>   ASTERISK_LICENSE_FILES = \
> @@ -76,7 +78,6 @@ ASTERISK_CONF_OPTS = \
>   	--without-neon29 \
>   	--without-newt \
>   	--without-openr2 \
> -	--without-osptk \
>   	--without-postgres \
>   	--without-popt \
>   	--without-resample \
> @@ -94,10 +95,9 @@ ASTERISK_CONF_OPTS = \
>   	--with-libjwt="$(STAGING_DIR)/usr" \
>   	--with-libxml2 \
>   	--with-libedit="$(STAGING_DIR)/usr" \
> -	--without-pjproject-bundled \
> -	--with-pjproject="$(STAGING_DIR)/usr" \
> +	--with-pjproject-bundled \
>   	--with-sqlite3="$(STAGING_DIR)/usr" \
> -	--with-sounds-cache=$(ASTERISK_DL_DIR)
> +	--with-download-cache=$(ASTERISK_DL_DIR)

  Actually, we could use LIBPJSIP_DL_DIR here... But then we have a problem with 
the sounds cache of course...


  I think we should have a comment here to explain that we're using the exact 
same source as our libpjsip package, but just rebuild it. With a reference to 
the bug report.

>   
>   # avcodec are from ffmpeg. There is virtually zero chance this could
>   # even work; asterisk is looking for ffmpeg/avcodec.h which has not
> @@ -135,13 +135,6 @@ else
>   ASTERISK_CONF_OPTS += --without-gsm
>   endif
>   
> -ifeq ($(BR2_PACKAGE_ALSA_LIB),y)
> -ASTERISK_DEPENDENCIES += alsa-lib
> -ASTERISK_CONF_OPTS += --with-asound
> -else
> -ASTERISK_CONF_OPTS += --without-asound

  Commit message doesn't explain why this is removed (ALSA no longer supported? 
Is a bit surprising...)


> -endif
> -
>   ifeq ($(BR2_PACKAGE_BLUEZ5_UTILS),y)
>   ASTERISK_DEPENDENCIES += bluez5_utils
>   ASTERISK_CONF_OPTS += --with-bluetooth
> @@ -299,6 +292,15 @@ ASTERISK_INSTALL_TARGET_OPTS = \
>   	LDCONFIG=true \
>   	install samples
>   
> +define ASTERISK_USERS
> +	asterisk -1 asterisk -1 * /usr/lib/asterisk - - asterisk user
> +endef
> +
> +define ASTERISK_INSTALL_INIT_SYSTEMD
> +	$(INSTALL) -D -m 644 package/asterisk/asterisk.service \
> +		$(TARGET_DIR)/usr/lib/systemd/system/asterisk.service
> +endef
> +
>   $(eval $(autotools-package))
>   
>   #-------------------------------------------------------------------------------
> diff --git a/package/asterisk/asterisk.service b/package/asterisk/asterisk.service
> new file mode 100644
> index 0000000000..aeb01703ac
> --- /dev/null
> +++ b/package/asterisk/asterisk.service
> @@ -0,0 +1,34 @@
> +[Unit]
> +Description=Asterisk PBX and telephony daemon.
> +After=network.target
> +#include these if asterisk need to bind to a specific IP (other than 0.0.0.0)
> +#Wants=network-online.target
> +#After=network-online.target network.target
> +
> +[Service]
> +Type=simple
> +Environment=HOME=/usr/lib/asterisk
> +#if systemd do not provide hostname and you need to use ${ENV(HOSTNAME)}
> +#Environment=HOSTNAME=%H
> +WorkingDirectory=/usr/lib/asterisk
> +User=asterisk
> +Group=asterisk
> +ExecStart=/usr/sbin/asterisk -mqf -C /etc/asterisk/asterisk.conf
> +ExecReload=/usr/sbin/asterisk -rx 'core reload'
> +#if /var/run is a tmpfs, this will create /var/run/asterisk on start
> +RuntimeDirectory=asterisk
> +
> +#Nice=0
> +#UMask=0002
> +LimitCORE=infinity
> +#LimitNOFILE=

  Why are all those things commented out?

  Hang on, is this identical to contrib/systemd/asterisk.service? The you should 
just use that. Or if it is modified, then make sure you refer where it 
originally came from and what is changed. Actually, it should probably have a 
license header.


  Regards,
  Arnout




> +Restart=always
> +RestartSec=4
> +
> +# Prevent duplication of logs with color codes to /var/log/messages
> +StandardOutput=null
> +
> +PrivateTmp=true
> +
> +[Install]
> +WantedBy=multi-user.target


More information about the buildroot mailing list