Szukaj

Napraw błąd w czasie instalacji modułu Asterisk’a chan_iax2 na starszych systemach operacyjnych

Napraw błąd w czasie instalacji modułu Asterisk’a chan_iax2 na starszych systemach operacyjnych

Jeśli interesuje Cię instalacja Asteriska z plików źródłowych, zajżyj koniecznie do jednego z tych postów: AlmaLinux, Debian, Rocky. Tutaj omówimy, jak rozwiązać problem z instalacją sterownika "chan_iax2", który pojawia się w czasie instalacji nowszych wersji Asteriska począwszy od wersji 18.

Spis treści

1) Objawy problemu

Po tym, jak w make menuselect wybierzemy niezbędne moduły (w tym sterownik chan_iax2 – który jest domyślnie zaznaczony do instalacji) i wykonamy polecenie make, pojawi się błąd związany z działaniem kompilatora gcc.

				
					[CC] chan_iax2.c → chan_iax2.o
chan_iax2.c:418:64: error: expected ‘;’, ‘,’ or ‘)’ before ‘buf’
static char *auth_method_names(int authmethods, char *restrict buf)
static char *auth_method_names(int authmethods, char *restrict buf)
^
chan_iax2.c: In function ‘socket_process_helper’:
chan_iax2.c:11533:8: warning: implicit declaration of function ‘auth_method_names’ [-Wimplicit-function-declaration]
ast_verb(3, “Accepting AUTHENTICATED call from %s:\n”
^
chan_iax2.c:11533:8: warning: format ‘%s’ expects argument of type ‘char *’, but argument 8 has type ‘int’ [-Wformat=]
make[1]: *** [chan_iax2.o] Error 1
make: *** [channels] Error 2
				
			

2) Przyczyna problemu

W poprawce 59bc6ce, która rozwiązywała problemy z debuggowaniem uwierzytelniania dla chan_iax2, użyto słowa kluczowego restrict w definicji nowej funkcji auth_method_names, ale to słowo kluczowe nie jest obsługiwane w wersjach gcc <= 4.9. Powoduje to niepowodzenie kompilacji w starszych dystrybucjach takich jak CentOS 7, w których dostępny jest tylko gcc w wersji 4.8.

Na przykład w najnowszej wersji CentOS 7 wygląda to następująco:

				
					# gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
				
			

Jak widać, korzystamy z gcc w wersji 4.8.5.

Poprawka została wydana w marcu 2024, co zaznaczono na oficjalnych stronach np: ChangeLog. Wspomniano tam o poprawce:

  • #586: [bug]: The „restrict” keyword used in chan_iax2.c isn’t supported in older gcc versions

3) Rozwiązanie problemu

Najlepszym rozwiązaniem będzie po prostu zainstalowanie nowszej wersji Asteriska (wydanej po marcu 2024) lub instalację na nowszym, a co za tym idzie bezpieczniejszym systemie operacyjnym. Jeśli z jakiegoś powodu nie jest to możliwe, poniżej znajdziesz rozwiązanie.

Bardzo często okazuje się, że parametry domyślnej kompilacji i instalacji Asteriska zawierają mnóstwo komponentów, sterowników i plików audio których nie potrzebujemy. Warto ręcznie przejrzeć opcje kompilatora i usunąć te składniki, których nie będziemy wykorzystywać. Jeżeli w tym przypadku sterownik chan_iax2 nie będzie nam do niczego potrzebny, po prostu go odznaczmy przed wykonaniem polecenia make.

				
					make menuselect
				
			

Jeżeli jednak chan_iax2 jest nam niezbędny, trzeba jeszcze raz wykonać polecenie configure tym razem z flagą -std=gnu99. Kompilator gcc dla CentOS 7 domyślnie używa flagi –std=gnu90.

				
					./configure --with-jansson-bundled CFLAGS=-std=gnu99
				
			

Następnie jeszcze raz wykonujemy polecenie make, które tym razem kończy się bez błędów.

				
					make
				
			

Możemy więc dalej kontynuować konfigurację naszego systemu.

Ale powiedzmy sobie szczerze … może jedak warto pomyśleć o aktualizacji oprogramowania?

Jeżeli chciałbyś monitorować wszystko, co dzieje się na Twojej centrali, wypróbuj nasze autorskie oprogramowanie VoiperoManager.

Instalacja i konfiguracja zajmuje kilka minut, a system możesz mieć całkowicie za darmo.

Przeczytaj, co potrafi nasz system VoiperoManager w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na Asterisku.

Share this post

Masz pytania lub potrzebujesz oferty?

Skontaktuj się z naszym doradcą.

Popularne wpisy

Powiązane posty

Projekt wystartował!

Monitorowanie i raportowanie Twojego serwera VoIP