[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.

Capture

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

11 Comments

  1. Abdullah Çetinkaya

    2 Ağustos 2016 at 21:36

    Yeni bir bilgi olduğu için başından sonuna okudum. yazmaya devam.

    1. Semih Kıroğlu

      2 Ağustos 2016 at 21:39

      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 🙂

  2. Vedat Kamer

    3 Ağustos 2016 at 23:31

    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

    1. Semih Kıroğlu

      4 Ağustos 2016 at 06:31

      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 🙂

    2. Semih Kıroğlu

      4 Ağustos 2016 at 06:39

      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.

  3. utku

    15 Ocak 2017 at 04:47

    son asamada takıldım

    Sıra geldi FreePBX’i kurmaya! Şu komutlarla indirdiğimiz paketi extract edip yükleyelim:

    kısmında

    1. Semih Kıroğlu

      5 Mart 2017 at 20:18

      Selamlar. Geç gördüm yoğunluktan, af edersiniz. Hangi komutu yazıyorsunuz ve dönen hata nedir?

  4. utku

    18 Mart 2017 at 12:33

    ./install -n

    asterixE bağlanamadı hata veriyor

  5. Murat

    12 Mayıs 2018 at 16:47

    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

    1. Murat

      12 Mayıs 2018 at 16:50

      ln -s /etc/lsb-release /etc/os-release
      yaptıktan sonra düzeldi
      teşekkürler

      1. Semih Kıroğlu

        30 Haziran 2018 at 22:43

        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 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.