大家好,又見面了,我是你們的朋友全棧君。
最近由于工作需求要搭建freeswitch,整個過程比較糾結,遂總結于此留作備忘。
起源
由于我的需求是将freeswitch跑起來,是以先按照freeswitch wiki上的介紹編譯freeswitch,但configure過程便遇到問題:
configure: error: OpenSSL >= 1.0.1e and associated developement headers required
很明顯,系統的openssl版本過于古老, 而安裝freeswitch的編譯和運作需要openssl >= 1.0.0e,第一直覺就是先把openssl更新再說,無盡的折磨從此開始。
坑一:openssl編譯
一般c項目的configure過程中會通過配置–prefix=xxx來設定被編譯lib的安裝目錄,我一般習慣放到/usr/local/xxx,是以openssl也不例外,順利安裝到/usr/local/openssl-1.0.1h目錄下,但freeswitch的configure還是一直提示openssl版本太低:
configure: error: OpenSSL >= 1.0.1e and associated developement headers required
不過很快意識到自己犯了個低級錯誤,編譯預設搜尋的header和lib還是系統自帶的老版本openssl,于是在freeswitch的configure過程中顯示設定openssl的相關路徑:
./configure –prefix=/usr/local CFLAGS=”-I/usr/local/openssl-1.0.1h/include” LDFLAGS=”-L/usr/local/openssl-1.0.1h/lib”
一波未平一波又起,freeswitch的configure過程又抛出libcrypt.so需要recompile with -fPIC,看起來是openssl的config需要指定-fPIC來編譯動态庫,freeswitch通過動态連結的形式依賴openssl相關的庫,于是加上shared和-fPIC後重新configure和make openssl:
./config shared –prefix=/usr/local/openssl-1.0.1h -fPIC
終于freeswitch的configure和make過了,長舒一口氣,但一個更大的坑還在後面。
坑二:openssl連結
原以為freeswitch可以愉快的運作了,事與願違,server無情的抛出以下錯誤:
symbol lookup error: /usr/local/lib/libfreeswitch.so.1: undefined symbol: EVP_aes_128_ctr
看起來是因為預設的sshd是用老版本openssl編譯的,于是想到更新openssh,指定依賴最新版本的openssl,于是一陣download,configure,make,make install,這裡需要注意的是openssh的configure參數配置需要手動指定openssl庫的位址:
./configure –prefix=/usr/local/openssh –sysconfdir=/etc/ssh –with-pam –with-ssl-dir=/usr/local/openssl –with-md5-passwords –mandir=/usr/share/man –with-zlib=/usr/local/zlib
因為考慮到openssh的重要性,覆寫預設的ssh風險比較高,是以選擇先安裝到/usr/local/openssh,然後将/usr/sbin/sshd符号連結到/usr/local/openssh/sbin/sshd中:
首先停止正在運作的sshd服務:service sshd stop
備份老版本sshd檔案,然後删除/usr/sbin/ssh
建立符号連結
啟動sshd服務service sshd start
立馬通過跳闆機ssh登入來測試新版本openssh的效果,一切看起來完美!
總結
糾結了這麼久,最後的效果就兩點:
更新openssl,覆寫預設的老版本openssl,這裡選擇的是覆寫,即安裝到/usr目錄下,因為我沒找到可以讓freeswitch運作時手動指定openssl相關so路徑的辦法。
更新openssh,考慮到風險,先安裝到/usr/local/openssh,然後通過符号連結将/usr/sbin/sshd連結到/usr/local/openssh/sbin/sshd
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/129133.html原文連結:https://javaforall.cn