[Bölüm 1] CentOS 6.8 için FreePBX 13 Kurulumu
[Not: Yazı MySQL’de kullanıcı ve veritabanı oluşturma anlatımları da eklenerek ve bazı işlemlerin sıraları değiştirilerek güncellendi.]
Merhabalar. Bu yazı, yeni kurduğum bu blog için ilk yazı olma özelliğini taşıyor. O yüzden amatörce yazılabilir, baştan belirtmek isterim. Ayrıca yıllardır hayalini kurduğum firmada, Turkcell’de staj yaparken bu yazıyı kaleme almak beni ayrıca heyecanlandırıyor. Şimdiden keyifli okumalar…
Bundan yaklaşık 1 yıl kadar önce DigitalOcean’dan satın aldığım CentOS 6 32 bit sunucumun üzerine FreePBX kurmak için çok efor sarfetmiştim. Gerek sistem yönetimi konularındaki tecrübesizliğim, gerek FreePBX’in dokümantasyonları ciddi sorunlar yaşatmıştı bana. Bir şekilde kurulup çalışmayı başarabilen sunucumu; bugünlerde, çok fazla upgrade almış olması, hantal çalışması, bakımsız ve güvensiz olması nedeniyle yeniden kurmaya karar verdim. Bu sefer bir çok konuda titiz çalışmak istiyorum ve bu yazının boş bir yazı olmamasını istiyorum.
Hazırsak, başlayalım!
Öncelikle bu yazıyı kaleme aldığım dönemde DigitalOcean’ın lokasyon bağımsız IP dağıtması ve yeni IP’leri sevmememden dolayı eski sunucumu Destroy etmeden, sadece Rebuild ederek devam etmek istiyorum. Rebuild edeceğim sunucu 512MB planındaki bir sunucu olacak ve CentOS 6.8 64 bit OS yükleyeceğim. Kuracağım FreePBX sürümü ise 13 olacak.
SSH üzerinden (şimdilik) root kullanıcı ile giriş yaptım. Öncelikle yum ile repo’ları kontrol edip varsa güncellemeleri yükleyelim:
yum -y update
Bir de işimizin garanti olması için EPEL repo’larını sisteme dahil edip tekrar kontrol edelim:
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm yum -y update
Mutemelen EPEL repo’ları üzerinden güncelleme alacaksınız. Tamamlandıktan sonra FreePBX kurulumumuza başlayabiliriz.
Öncelikle SELinux’un devre dışı olması gerek. DigitalOcean halihazırda zaten devre dışı gönderiyor bu özelliği. Kontrol etmek için şu komutu uygulayalım:
sestatus
Aldığınız yanıt “SELinux status: disabled” ise problem yok. Eğer değilse şu komutu uygulayarak SELinux’u devre dışı bırakalım:
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux
Değişikliklerin başarılı olduğundan emin olmak için sistemi reboot edip tekrar kontrol etmenizi öneririm.
FreePBX 13, kurulum sırasında ve çalışırken CentOS 6’nın “Development Tools” yazılım paketine ve bazı ek yazılımlara ihtiyaç duyuyor. Şu komutlarla yükleyelim:
yum -y groupinstall core base "Development Tools"
yum -y install gcc gcc-c++ lynx bison mysql-devel mysql-server php php-mysql php-pear php-mbstring php-xml tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel unixODBC mysql-connector-odbc libuuid-devel binutils-devel
Bu aşamalar tamamlandıktan sonra kurulum sırasında sorun yaşamamak için geçici olarak firewall’umuzu kapatmamız öneriliyor. DigitalOcean’daki CentOS 6 sunucular zaten önyüklü olarak firewall’u kapalı halde geliyor. Fakat kontrol edip gerekirse kapatmamız gerekli. İlk komutumuz kontrol etmek için, ikinci komutumuz firewall hizmetini durdurmak için:
service iptables status
service iptables stop
Eğer kontrolünüzde firewall’un çalıştığını gördüyseniz, durdurma komutu bir sonraki reboot’a kadar etkili olacaktır. Doküman bize açılışta çalışmayı tamamen engellememizi söylüyor fakat içim elvermiyor bunu yapmaya. O yüzden her reboot’tan sonra firewall hizmetini elle durdurmamız gerekecek.
Az önce yüklediğimiz yazılımların içindeki httpd ve mysqld servislerinin açılışta otomatik olarak başlatılabilmesi için şu komutları uyguluyoruz:
chkconfig --level 345 httpd on chkconfig --level 345 mysqld on
Şimdi de bu hizmetleri başlatıyoruz:
service httpd start service mysqld start
Bu konuyu araştıramadığım için bilgi vermek istemiyorum. Doküman PearDB kurmamızı istiyor. Şu komutlarla kurabiliriz:
pear channel-update pear.php.net pear install db-1.7.14
Bu sırada şöyle bir uyarı alırsak, şimdilik önemsememiz gerekiyor. Doğrudan geçebiliriz:
WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"
Sunucumuzu yeniden başlatalım:
reboot now
Bu nokta ön-ön koşulları hazırladı sadece. Yeniden başlatma tamamlandıysa FreePBX’in ön koşullarını ve bağımlılıklarını hazırlamaya başlayalım. Öncelikle unutmadan, tekrar firewall hizmetini durduralım:
service iptables stop
İşler karışmadan bir de Asterisk’in kullanacağı user account’u oluşturalım (“Asterisk nedir la?” diyen dostlarım için küçük bir Google araması öneriyorum. Kısaca FreePBX’in çekirdeği diyebiliriz.):
adduser asterisk -M -c "Asterisk User"
Öncelikle FreePBX için gerekli olan tüm paketleri /usr/src dizinine indirelim. Orada beklesinler:
cd /usr/src wget https://iksemel.googlecode.com/files/iksemel-1.4.tar.gz wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2 wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz
Bazı şeyler dokümana göre isteğe bağlı ama hangisi hangisinin kütüphanesi, ne neyle bağımlı, pek aşikar belirtilmemiş ve en başta dokümantasyonun çok tutarsız olduğunu söylemiştim. Bu yüzden işimizi sağlama alıp tamamını yükleyeceğiz. Daha sonra başımız ağrımasın. Sonuçta sunucunun saatine para gidiyor yani 😛
Bundan sonrasını toptan komutlar olarak yazıp geçmeyi düşünüyorum. Çünkü çok bilgili olduğumu söyleyemem paketlerin ne işe yaradıkları konularında. Kısa yoldan yükleyelim yani 🙂
Şu komutları uygulayarak sırayla paketleri extract edip compile ederek yüklemeye başlayalım. Bu aşama uzun sürebilir:
cd /usr/src tar xf iksemel-*.tar.gz rm -rf iksemel-*.tar.gz cd iksemel-* ./configure make make install cd /usr/src tar xvfz dahdi-linux-complete-current.tar.gz tar xvfz libpri-current.tar.gz rm -f dahdi-linux-complete-current.tar.gz libpri-current.tar.gz cd dahdi-linux-complete-* make all make install make config cd /usr/src/libpri-* make make install cd /usr/src tar -xjvf pjproject-2.4.tar.bz2 rm -f pjproject-2.4.tar.bz2 cd pjproject-2.4 CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound \ --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64 make dep make make install cd /usr/src tar vxfz jansson.tar.gz rm -f jansson.tar.gz cd jansson-* autoreconf -i ./configure --libdir=/usr/lib64 make make install cd /usr/src tar xvfz asterisk-13-current.tar.gz rm -f asterisk-13-current.tar.gz cd asterisk-* contrib/scripts/install_prereq install ./configure --libdir=/usr/lib64 contrib/scripts/get_mp3_source.sh make menuselect
Buraya kadar sorunsuz geldiyseniz, çok iyi ilerledik diyebilirim. Şimdi muhtemelen karşınıza şuna benzer bir menü geldi ve bir şeyler seçmenizi istiyor. Sadece gerekli olanı söyleyip devam etmek istiyorum. Sizin dikkatinizi çeken başka bir şey olursa yükleyin bakalım ne olacak 🙂
format_mp3’ü seçiyoruz, Save & Exit ile bu aşamayı tamamlıyoruz. Daha sonra Asterisk’i derleyip yüklüyoruz. Bu aşama ciddi ciddi uzun sürebilir:
make make install make config ldconfig
Şimdi Asterisk’in WAV ve G722 kodekli ekstra seslerini indirip yüklüyoruz:
mkdir -p /var/lib/asterisk/sounds cd /var/lib/asterisk/sounds wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-wav-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-g722-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-g722-current.tar.gz tar xvf asterisk-core-sounds-en-wav-current.tar.gz tar xfz asterisk-extra-sounds-en-wav-current.tar.gz tar xfz asterisk-core-sounds-en-g722-current.tar.gz tar xfz asterisk-extra-sounds-en-g722-current.tar.gz rm -f asterisk-core-sounds-en-wav-current.tar.gz rm -f asterisk-extra-sounds-en-wav-current.tar.gz rm -f asterisk-core-sounds-en-g722-current.tar.gz rm -f asterisk-extra-sounds-en-g722-current.tar.gz
Tüm aşamalarda mümkün olduğunca işi biten paketi temizletiyorum. Doküman da böyle göstermiş fakat bazı unuttuklarını ben tamamlamaya çalışıyorum elden geldiğinde, dikkatimi çekmişse 🙂
Artık sona yaklaştık. Şu komutlarla Asterisk’e ait dizinlerin sahipliğini değiştirmemiz gerek. Yoksa muhakkak çalışmayan noktalar olacaktır. Kısaca: “Sezar’ın dizini Sezar’a!” 🙂
chown asterisk. /var/run/asterisk chown -R asterisk. /etc/asterisk chown -R asterisk. /var/{lib,log,spool}/asterisk chown -R asterisk. /usr/lib64/asterisk chown -R asterisk. /var/www/
Ve sorunsuz çalışabilmek için Apache üzerinde de bir kaç yapılandırma değişikliği yapmamız ve httpd hizmetini yeniden başlatmamız gerek. Malum, yönetim büyük ölçüde web arayüzünden sağlanıyor:
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf service httpd restart
Sıra geldi FreePBX’i kurmaya! Şu komutlarla indirdiğimiz paketi extract edip yükleyelim:
cd /usr/src tar xfz freepbx-13.0-latest.tgz rm -f freepbx-13.0-latest.tgz cd freepbx ./start_asterisk start
Burada devam etmek için iki durum oluşuyor. Eğer şu komutla yüklemeye başlarsanız:
./install
MySQL üzerinde elle oluşturmanız gerekenler şunlar:
- Veritabanı Kullanıcı Adı (Aşağıdaki Veritabanlarında Tam Yetkili)
- Asterisk için Veritabanı
- Asterisk CDR için Veritabanı
Dokümana göre son satırda -n parametresi var. Yani son satır şöyle oluyor:
./install -n
Bu kullanım anladığım kadarıyla sessiz kurulum tarzı bir kurulum gerçekleştiriyor ama bazı sıkıntılara da yol açıyor. Mesela veritabanı adı ön tanımlı geldiği gibi oluşturuluyor, veritabanı kullanıcısı şifresiz root oluyor, vs.. Bu durum, özelleştirme isteyen kullanıcıları engelliyor. MySQL root erişimini vermek istemeyenler olabilir, root hesaba şifre koyanlar olabilir, vs.. Bu nedenle o parametre olmadan kullanıp her şeyini kendimiz yapalım diye düşündüm. İsteyenler bu parametreyle kullanabilir tabi. Ben elle yükleme yapmak için “./install” komutunu kullanıyorum.
Bu komutu girmeden önce elle oluşturulacak noktalar için de bilgi verelim. Veritabanı üzerinde kullanıcı oluşturmak için öncelikle MySQL’e SSH üzerinden erişelim. Eğer MySQL root kullanıcınız için bir şifre atamadıysanız şu komutu gönderin:
mysql -u root
Eğer şifre atadıysanız şu komutu gönderin:
mysql -u root -p
Şifre atayan dostlar şifrelerini girdikten sonra, atamayan dostlar doğrudan MySQL CLI’a erişmiş olacaklar. Önce veritabanlarımızı oluşturalım. Bu satırda FreePBX kurulumunda kullanılan ön tanımlı veritabanı isimleri olan asterisk ve asteriskcdrdb ile veritabanı oluşturuyoruz:
CREATE DATABASE asterisk; CREATE DATABASE asteriskcdrdb;
Bir de FreePBX’in kullanacağı kullanıcıyı oluşturuyoruz. Aşağıdaki satırda özelleştirmeniz gereken noktalar var, bunları unutmayın!
- yeni_kullanıcı: FreePBX’in MySQL’e erişirken kullanacağı yeni bir kullanıcı adı belirleyin. Bir sonraki aşamada istenen yere bu kullanıcı adını gireceksiniz, şimdiye kadar yaptığınız işlemlerle alakası yoktur.
- erişim_kısıtı: Bu kullanıcının erişim ilkesini belirleyin. Temelde alabileceği 3 değer vardır:
- localhost: Sadece MySQL’in kurulu olduğu ana makineden erişilebilir (şiddetle önerilen).
- IP Adresi: Sadece yazılan IP adresi üzerinden erişilebilir.
- %: Konum bağımsız, tüm ağlar üzerinden erişilebilir.
- yeni_şifre: FreePBX’in MySQL’e erişirken kullanacağı yeni bir şifre belirleyin. Bir sonraki aşamada istenen yere bu şifreyi gireceksiniz, şimdiye kadar yaptığınız işlemlerle alakası yoktur.
CREATE USER 'yeni_kullanıcı'@'erişim_kısıtı' IDENTIFIED BY 'yeni_şifre';
Kullanıcımızı oluşturduktan sonra önceki aşamada oluşturduğumuz veritabanı üzerinde işlem yapabilmesi için yetki vermemiz gerekli. Bunun için şu satırlar gerekli, yine bazı özelleştirmelerle tabi ki:
GRANT ALL PRIVILEGES ON asterisk.* TO 'yeni_kullanıcı'@'erişim_kısıtı'; GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'yeni_kullanıcı'@'erişim_kısıtı';
Herşey hazır! Şimdi küçük bir kontrolle neyin ne durumda olduğuna bakalım. Önce oluşturduğumuz kullanıcı sorunsuz biçimde oluşmuş mu? Onu kontrol edelim:
SELECT host, user FROM mysql.user WHERE user = 'yeni_kullanıcı';
Eğer aldığınız yanıt “Empty set (0.00 sec)” ise bir sorun var demektir. Kullanıcı oluşturduğunuz satırı kontrol edip tekrar deneyin veya komuttaki “WHERE user = ‘yeni_kullanıcı'” kısmını silip tüm kullanıcıları listeleyin.
Bir de bu kullanıcının yetkilerini görelim:
SHOW GRANTS FOR 'yeni_kullanıcı'@'erişim_kısıtı';
Eğer aldığınız yanıt “ERROR 1141 (42000): There is no such grant defined for user ‘yeni_kullanıcı’ on host ‘erişim_kısıtı'” biçimindeyse bir sorun var demektir. Yetki atadığınız satırı kontrol edip tekrar deneyin.
Buraya kadar sorun yoksa şu komutla bash’e geri dönün:
exit
Artık yüklemeye başlayabiliriz. Şu komutu yazalım:
./install
Köşeli parantez içinde yazılı olan değerler, size yöneltilen soruların ön tanımlı cevaplarıdır. Değiştirmek istemezseniz (ki uzman değilseniz sadece veritabanı bilgilerini elle girin) Enter’a basarak sonraki soruya geçebilirsiniz.
You have successfully installed FreePBX
Eğer bu satırı görüyorsanız, tebrikler! FreePBX başarıyla sunucunuza yüklenmiş demektir. Şimdi sunucunuzun IP’sini veya alan adını adres çubuğunuza girerek yönetici hesabınızı oluşturabilirsiniz.
Ek olarak; FreePBX’in kurumsal repo’larını sisteminize eklemek isterseniz şu komutları uygulayın:
wget -P /etc/yum.repos.d/ -N http://yum.schmoozecom.net/schmooze-commercial/schmooze-commercial.repo yum clean all yum -y install php-5.3-zend-guard-loader sysadmin fail2ban incron ImageMagick /var/lib/asterisk/bin/freepbx_setting MODULE_REPO http://mirror1.freepbx.org,http://mirror2.freepbx.org service httpd restart fwconsole ma download sysadmin fwconsole ma install sysadmin
Artık yönetim paneline girebilirsiniz!
Sorularınızı yorum alanına yazmaktan çekinmeyin. Bildiğim kadarıyla cevaplamaya çalışacağım. Yakın bir zamanda da Extension oluşturma, Trunk bağlama gibi temel yapılandırmalar üzerine bir şeyler yazabilirim.
FreePBX’li günler! 🙂
Semih Kıroğlu
Abdullah Çetinkaya
Yeni bir bilgi olduğu için başından sonuna okudum. yazmaya devam.
Semih Kıroğlu
Teşekkür ediyorum. Bu hafta içinde fırsat bulduğum an devamını yazmaya başlayacağım. Teşekkür ediyorum takip ettiğiniz için 🙂
Vedat Kamer
CentOS 6 kullanılacak ise FreePBX Distro deposunu kullanmak güncelleme ve bakım açısından daha basit olacaktır.
https://gist.github.com/monobilisim/d914b5d225cdab117e04 adresindeki kurulum betiği ile CentOS6 + Asterisk 13 + FreePBX 13 kolayca kurulabilir.
wget https://gist.githubusercontent.com/monobilisim/d914b5d225cdab117e04/raw/136095583207f7c4918ac3a91f84950845f573fe/centos6-asterisk13-freepbx13-install.sh
bash centos6-asterisk13-freepbx13-install.sh
Semih Kıroğlu
Merhabalar hocam. Bu yükleyici benim de dikkatimi çekti ama inceleme fırsatı bulamadım aslında. Böyle anlatmaya çalışarak neyin ne olduğunu anlamak isteyenlerin de fikir sahibi olmasını istedim. Bir noktada (ki benim başlangıç noktam) kendime de bir kaynak oluşturmak istedim ve bu yazı serisine başladım. Benzer bir paketi tüm sistemler için geliştiriyorum ben de şu sıralar. Tamamlandığında ekleyeceğim. Selamlar 🙂
Semih Kıroğlu
Repo konusunu yazmayı unutmuşum yorumumda. FreePBX’in kendi dokümantasyonlarında CentOS tarafı için ilginç biçimde ısrarla source derlemeyi kullanması, bende sağlam veya çalışır bir RPM repo’larının olmadığı fikrini uyandırdı. Ama commercial repo’lardan metnin sonunda bahsedince bu arayıştan vazgeçtim. Source derlemek daha garanti olacak fikri hasıl oldu bende 🙂 Selamlar.
utku
son asamada takıldım
Sıra geldi FreePBX’i kurmaya! Şu komutlarla indirdiğimiz paketi extract edip yükleyelim:
kısmında
Semih Kıroğlu
Selamlar. Geç gördüm yoğunluktan, af edersiniz. Hangi komutu yazıyorsunuz ve dönen hata nedir?
utku
./install -n
asterixE bağlanamadı hata veriyor
Murat
Merhaba,
Öncelikle bu makale için teşekkür ederim. Hobi olarak SoftPBX ile ilgileniyorum.
Baştan bir kurulum denemek istedim. Ancak asterisk paketinde make config ‘e geldiğimde
/bin/sh: /etc/os-release: No such file or directory çıktısı alıyorum ve devam etmek istemdim.
/etc/centos-release dosyası var ancak /etc/os-release dosyası yok.
Biraz araştırdım ancak üstesinden gelemedim.
CentOS release 6.9 (Final)
Teşekkürler
Murat
ln -s /etc/lsb-release /etc/os-release
yaptıktan sonra düzeldi
teşekkürler
Semih Kıroğlu
Hocam selamlar,
Sorunuz ve yanıtını paylaştığınız için teşekkür ederim. Bana gerek kalmadan bir bilgi kaynağı sunmuşsunuz, müteşekkir oldum.
İyi çalışmalar dilerim 🙂