-1
votes

Comment réparer l'erreur de compilation Asterisk 1.8.18+?

Je compile Asterisk 1.8.32.3 (l'erreur persiste à partir du 1.8.18), et à la fin j'obtiens cette erreur:

tcptls.c: In function ‘tcptls_stream_close’:
tcptls.c:401:20: error: dereferencing pointer to incomplete type
    if (!stream->ssl->server) {
                    ^

Les lignes les plus importantes sont:

root@ubuntu:/usr/src/asterisk-1.8.32.3# make
CC="cc" CXX="" LD="" AR="" RANLIB="" CFLAGS="" make -C menuselect CONFIGURE_SILENT="--silent" makeopts
make[1]: Entering directory '/usr/src/asterisk-1.8.32.3/menuselect'
make[1]: 'makeopts' is up to date.
make[1]: Leaving directory '/usr/src/asterisk-1.8.32.3/menuselect'
   [CC] tcptls.c -> tcptls.o
*tcptls.c: In function ‘tcptls_stream_close’:
tcptls.c:401:20: error: dereferencing pointer to incomplete type
    if (!stream->ssl->server) {*
                    ^
tcptls.c:403:5: warning: ‘ERR_remove_state’ is deprecated (declared at /usr/include/openssl/err.h:261) [-Wdeprecated-declarations]
     ERR_remove_state(0);
     ^
tcptls.c: In function ‘__ssl_setup’:
tcptls.c:768:4: warning: implicit declaration of function ‘SSLv2_client_method’ [-Wimplicit-function-declaration]
    cfg->ssl_ctx = SSL_CTX_new(SSLv2_client_method());
    ^
tcptls.c:768:4: warning: passing argument 1 of ‘SSL_CTX_new’ makes pointer from integer without a cast [enabled by default]
In file included from /usr/src/asterisk-1.8.32.3/include/asterisk/tcptls.h:59:0,
                 from tcptls.c:44:
/usr/include/openssl/ssl.h:1503:17: note: expected ‘const struct SSL_METHOD *’ but argument is of type ‘int’
 __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
                 ^
tcptls.c:773:4: warning: implicit declaration of function ‘SSLv3_client_method’ [-Wimplicit-function-declaration]
    cfg->ssl_ctx = SSL_CTX_new(SSLv3_client_method());
    ^
tcptls.c:773:4: warning: passing argument 1 of ‘SSL_CTX_new’ makes pointer from integer without a cast [enabled by default]
In file included from /usr/src/asterisk-1.8.32.3/include/asterisk/tcptls.h:59:0,
                 from tcptls.c:44:
/usr/include/openssl/ssl.h:1503:17: note: expected ‘const struct SSL_METHOD *’ but argument is of type ‘int’
 __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
                 ^
tcptls.c:775:4: warning: ‘TLSv1_client_method’ is deprecated (declared at /usr/include/openssl/ssl.h:1879) [-Wdeprecated-declarations]
    cfg->ssl_ctx = SSL_CTX_new(TLSv1_client_method());
    ^
/usr/src/asterisk-1.8.32.3/Makefile.rules:109: recipe for target 'tcptls.o' failed
make[1]: *** [tcptls.o] Error 1
Makefile:351: recipe for target 'main' failed
make: *** [main] Error 2

J'utilise dahdi 2.11.2 et g ++ / gcc 4.8; Compiler sur Ubuntu 16.04

Quelqu'un sait-il comment résoudre ce problème?

PS Je n'ai besoin de compiler que l'astérisque 1.8.18+ et uniquement sur Ubuntu 16.04.


0 commentaires

3 Réponses :


1
votes

Vous devez utiliser une ancienne version SSL (ce qui signifie généralement un autre système d'exploitation) OU une version plus récente d'astérisque.

1.8.x n'est plus pris en charge.


2 commentaires

J'ai utilisé gcc / g ++ 4.4 et openssl1.0.2. Ne fonctionne pas de toute façon.


1.0.1beta fonctionne à coup sûr (version sous centos 5). Vérifiez que votre configuration a trouvé la version correcte de openssl.



0
votes

Vous pouvez utiliser dahdi comme module et ne pas recompiler tout Asterisk.

Vous venez de compiler dahdi

Je l'ai fait plusieurs fois avec la 1.8.32, et je n'ai jamais recompilé la distribution Asterisk.


1 commentaires

J'ai installé dahdi 2.11.2 complet avant de commencer la compilation d'Asterisk pour l'installation, qui est une recommandation générale pour une installation générale. Aussi, je sélectionne dahdi comme module de compilation / installation Asterisk. Le moment principal c'est que tcptls.o jusc me cause des erreurs de compilation.



0
votes

J'ai trouvé la solution par moi-même:

Pour compiler et installer astérisque, il faut gcc / g ++ 4.4 / 4.8. Openssl 1.0.2. Mais, après l'installation, il doit être remplacé par de nouveaux, sinon mysql ne fonctionnera pas dans astérisque, ainsi que Freeswitch.

De plus, l'ancienne version compilée avec les anciens openssl et gcc permet d'exécuter curl , sinon elle devrait être remplacée par shell .

Remplacement du nouveau openssl par l'ancien:

# will install libssl-dev as a dependency
apt install libmysqlclient-dev

# download required package manually 
apt download libssl1.0.0
apt download libssl1.0-dev
apt download libcurl3
apt download libcurl-openssl1.0-dev

# remove libssl-dev without removing libmysqlclient-dev
dpkg -r --force-depends libssl-dev
dpkg -r --force-depends libcurl4
dpkg -r --force-depends libcurl4-openssl-dev

# install libssl1.0-dev manually
dpkg -i libssl1.0-dev_1.0.2n-1ubuntu5.4_amd64.deb
dpkg -i libcurl3_7.58.0-2ubuntu2_amd64.deb
dpkg -i libcurl-openssl1.0-dev_7.58.0-2ubuntu2_amd64.deb


0 commentaires