MacOsx (Host) ve Ubuntu (Client) Arasında NFS kurmak

Selamlar;

Önsöz : Genelde Virtualbox üzerinde kurduğumuz Ubuntu’lar ile ilgili dosya işlemlerini macosx’imde bulunan kod editörleri ile yapmak istiyordum. Bu sebeple kendime böyle bir ortam kurmam gerekti. Bu işlemi yaparken virtualboxımda 2 adet ethernet interface tanımlıyorum. İlk interface’i NAT olarak ayarlıyorum, 2. ethernet interface’ini ise, ipsi hiç değişmeyecek olan (ve değişmesine ihtiyaç da olmayan) host only adapter ile yapıyorum. Böylece İlgili NFS paylaşımını sadece host-only yapmış oluyorum ve networkte güvende oluyorum. ilgili virtualbox internete NAT üzerinden çıkıyor ve benim 2. interface’im sadece bana özel olmuş oluyor. Bu kısımda siz ihtiyacınıza göre bir ayar yapabilirsiniz.

Neden NFS? Klasör paylaşımı olmaz mı?

Aslında olur. Ancak ben web uygulaması için performans kaybı veya yavaşlık yaşamak istemiyorum ve ortak klasörde bu sefer ubuntu tarafında yavaşlıklar yaşıyorum ve bunu gerçekten istemeyeceğim boyutta yaşamaktaydım.

Haydi Başlayalım ;

Öncelikle Bu işlemleri yaptığım işletim sistemlerini belirteyim

Host : MacOsx 10.11.4 (El Capitan)

Client : Ubuntu 14.04.4 LTS

1- Client için Ubuntu üzerinde gerekli programın kurulması:

Aşağıdaki komut ile bu işlemi yapıyoruz.

apt-get install nfs-common

2- Macosx üzerinde export işleminin yapılması

sudo nano /etc/exports
ile açtığımız dosyaya aşağıdaki (veya benzer) bir satır ekliyoruz. Benim örneğimde /usr/local/share/web/custom adlı dizini NFS üzerinden yayına açıyoruz.

/usr/local/share/web/custom -alldirs -mapall=emre:admin -network 192.168.56.0 -mask 255.255.255.0

Burada, -mappall parametresinde benim macosx üzerindeki user ve grubum yer almakta. -network ile belirttiğim parametrede host-only adaptörümüzün ilgili IP range’i yer almakta.

Son olarak, macosx te default olarak var olan Nfsd uygulamasını restart ediyoruz.

sudo nfsd disable
sudo nfsd enable

3- Ubuntu üzerinde ilgili ayarların yapılması

1. maddede gerekli olan nfs-common paketini kurduktan sonra

İlgili klasörü ubuntuda nereye map etmek istiyorsak, buraya bir klasör oluşturuyoruz. Ben /home/web/custom adlı bir yere oluşturacağım.

mkdir -p /home/web/custom
sudo nano /etc/fstab

ile ilgili dosyayı açıyoruz ve içerisine yukarıdaki ayarlara istinaden şu satırı ekliyoruz.

192.168.56.1:/usr/local/share/web/custom /home/web/custom nfs defaults 0 0

ve daha sonra

mount -a

komutu ile mount işlemini tamamladım.

4- Deneyelim

Şimdi macosx üzerinde bir dosya oluşturalım ve ubuntu üzerinde de görebildiğinizden emin olalım.

5- User eşleşmesi (Opsiyonel)

Ben bir web uygulaması çalıştıracağım için yetkilerle ilgili problem yaşamak istemediğimden dolayı, macostaki dosyalarımın hepsini, ubuntudaki www-data user’ına map etmek istiyordum. Bunu normalde parametrelerle yapabileceğimiz gibi, ben yaşadığım birkaç problemden sonra şöyle bir trick buldum.

Ubuntu üzerinde denemek için oluşturduğumuz ilgili dosyanın user ve grubuna bakalım. ls -l komutu ile baktığımızda ilglii user ve grup idlerini görebiliriz.

Ubuntu üzerinde önceden apt-get install nginx ile nginx kurunca kendiliğinden oluşan www-data user ve grubu olduğundan dolayı, /etc/passwd dosyasına gittim ve www-data ya ait id yi bu id ile değiştirdim. Aynı şeyi /etc/group dosyasında www-data user’ının grubunu da değiştirerek tamamladım.

Artık macosxte oluşturduğum yeni bir dosyanın, ubuntu tarafında www-data user ve grubuyla oluştuğunu görüyorum.

 

Sonuç

Böylece artık editör üzerinde taklalar atmaktan (remote sunucu ayarları vb..) kurtarıp, doğru düzgün bir ayar ile workbench imizi güzelce kurabiliyoruz. Veyahut da versiyon kontrol sistemleri üzerinden sürekli git push – pull lar beklemek zorunda kalmıyoruz. Güle güle kullanıyoruz.

Komut satirindaki mail komutu ile smtp mail gonderimi (MAC ve Linux icin)

Selamlar;

komut satırımızdan aldığımız verileri kimi zaman mailboxımıza atmak isteyebiliriz veya otomatik çalışan test sonuçlarının mailimize gelmesini de.. Ancak çok kullanılan mail sunucularının (gmail, yahoo, vb..) artık güvenilir kaynaktan gelmeyen mailleri spam dahi saymadığı ve direkt yok saydığı bir gerçek. Bu yüzden bu işlemleri smtp üzerinden yapmak gibi bir gereksinim doğuyor.

Bu işin windows platformunda nasıl yapıldığını kısaca http://www.dubluve.net/2013/08/01/windows-komut-satirindan-mail-gonderimi/ yazımızda anlatmıştık. Şimdi sıra mac’te ve Linux sistemlerde. Örneği gmail üzerinden vereceğim.

1. Adım : Postfix main.cf dosyasını düzenleyelim

sudo vim /etc/postfix/main.cf

sizin main.cf dosyanız farklı bir yerlerde olabilir tabi ki. Bir zahmet bulunuz.

Daha sonra commentlenmiş relayhosts yazısının hemen altına

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes

2. Adım : sasl_password dosyası yoksa oluşturalım

sudo vim /etc/postfix/sasl_passwd

içerisine aşağıdakini yazalım

[smtp.gmail.com]:587 username@gmail.com:password

3. Adım : bir kaç izin ve service restart felan..

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

bu launchctl sadece mac için geçerli. (mail’in konsol üzerinden gönderimlerde hizmet olarak çalışması gerekmiyor diye hatırlıyorum.)
4. Adım : Deneyelim :

echo "bu bir test maili bakalım gidecek mi?" | mail "your@gmail.com"

Bu işlem sonrasında mail gerçekten gmaile düşüyorsa tamamdır. Tabi sizin bu ayarlarınızı yaptığınız mail adresinizi SMTP olarak kullanmanız gerekiyor. (Bu tıpkı elektrikli ev aletlerin içinden çıkan olası arıza durumlarında yapılacaklar listesindeki “fişi taktığınıza emin olun” maddesine denk düşüyor sanırım)

 

Bu işi Linux için şöyle yapanlar da mevcut. Onu da şu an türkçeleştirmeye mecalim yoktur. Buyrunuz linki : http://tecadmin.net/send-email-smtp-server-linux-command-line-ssmtp/

mac osx icin notepad++ benzeri uygulama – textwrangler

Windowsta varsayılan metin düzenleyici olarak notepad++ kullanlardan biri olarak, mac için de benzer ihtiyaçlarım adına doğru düzgün bir metin düzenleyiciye ihtiyaç duydum. İnternette “notepad++ equivalent for mac osx” şeklinde arattığımda, bu programı hemen buldum.

Çok fazla uzun söze gerek yok, textwrangler bu işe birebir, hatta daha fazlasını (notepad++ kullanım alışkanlıkların bir miktar değişmesi beklenerek) yapıyor.

Buyrunuz App store linki : https://itunes.apple.com/tr/app/textwrangler/id404010395?l=tr&

Mac OS X Nginx PHP 5.3 ve percona-server (mysql) kurulumu

Bu yazıda Mac OS X üzerine Nginx ve PHP5.3 (özellikle php5.3, daha yenisi değil) kurmayı anlatmaya çalışacağım.

İnternetteki dökümanlar genelde konu güncel iken yazıldığı için, siz bir yazılım dilinin daha önceki versiyonlarına ait kurulumlar yapmak istediğinizde, varsayılan paket yöneticisi tarafından hep en son sürümü kurulmakta, ve bu da bizim o anki ihtiyaçlarımızı karşılamamaktadır.

Ben de birkaç tane projedeki php 5.3 gereksinimim sebebiyle böyle bir şey yapmak durumunda kaldım. (aslında vagrant daha güzel bir çözüm tabi ki dileyen araştırabilir.)

Öncelikle Mac’inizde homebrew (http://brew.sh/) yüklü değilse, bunu yüklememiz gerekiyor. Bunun için konsolunuzda

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

komutunu çalıştırmanız gerekiyor.

Nginx kurulumu

brew install nginx

Bu kadar basit 🙂
Nginxi başlatmak için

nginx

komutunu yazmanız yeterli. (Evet konsola sadece nginx yazacağız, ubuntu gibi değil) Ancak sudo olarak çalıştırmanız gerekebilir.
Php kurulumu

php yi Nginx ile iletişim kurabilmesi için 2 şekilde kurabiliriz. 1. yöntem cgi ile. 2. yöntem ise, php-fpm ile. php-fpm ile kurmak daha mantıklı, çünkü fcgi process manager ile yönetilmeyen bir cgi kullanımı aynı anda çok fazla processi handle etmenizi yani stress test vb toolları çalıştırdığınız kısımlarda size problem çıkartabilir. Ben de bu ve birkaç sebepten dolayı php-fpm ile kurmayı anlatacağım. Ancak cgi ile kurmak isteyen için de sadece 1 parametre değişiyor 🙂

brew install php53 --with-mysql --with-suhosin --with-intl --with-imap --with-fpm

sondaki —with-fpm kısmı yerine –with-cgi yazarsanız da cgi ile kurmuş olursunuz.

Mac OS X içerisinde PHP, Ruby, Python gibi dillerin CLI (konsol üzerinden çalıştırılabilir) versiyonları ile birlikte geldiği için şu anda halen konsolda php -v yazdığınızda php 5.4.24 veya benzeri başka bir versiyonu görürsünüz. Ancak web arayüzünden (Yani browserdan nginx ile) girdiğinizde ilgili php 5.3 sürümünü çalıştırmış olacağız.

Eğer siz konsoldan da php 5.3 çalıştırmak istiyorsanız,

export PATH=/usr/local/Cellar/php53/5.3.28/bin:$PATH

şeklinde komut çalıştırmanız gerekiyor. (sudo ile çalıştırmanız icap edebilir).
Ancak bu şekilde yaparsanız da bilgisayarınızı yeniden açtığınızda (ya da konsoldaki oturumu kapattığınızda) bu ayar kaybolacaktır. Bunu kaybetmemek için bu komutu /usr/local/Cellar/php53/5.3.28/bin i sudo ile /etc/paths e yazmalısın.

Mac OS X üzerinde php-fpm ubuntudaki gibi /etc/init.d/php-fpm start stop, vb.. şeklinde kullanılamıyor. Bu yüzden kullanımı biraz farklı.
Php-fpm yi hemen başlatmak için

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php53.plist

Bilgisayarınız her açıldığında otomatik başlasın istiyorsanız da

ln -sfv /usr/local/opt/php53/*.plist ~/Library/LaunchAgents

şeklinde işlem yapmanız gerekiyor.

Şimdi sıra php-fpm.conf dosyasını bulup, buradaki ayarlardaki loglara veya dosyalara izin vermek kısmında.
php-fpm.confu bulup ilgili pid ve log dosyasını ve access log dosyasını yazabilmesi için yetki vb verip o gerekli klasörleri oluşturursan gerisi tamamdır. (Yine ubuntunun aksine, /var/run/php-fpm.pid yerine phpnin kendi klasörüne yapmanız daha mantıklı olacak ben bu şekilde yaptım. Log için de aynı yeri belirttim.)

 

percona-server kurulumu

Nginx kadar basit aslında.

brew install percona-server

Percona server’i hemen başlatmak için

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.percona-server.plist

Bilgisayar her başladığında başlatmak için ise,

ln -sfv /usr/local/opt/percona-server/*.plist ~/Library/LaunchAgents

komutlarını çalıştırmanız gerekiyor.

Bu yazı nginx ayarları, php ayarları ve mysql ayarlarının nasıl yapıldığı ile ilgili olmadığı için o detayları burada paylaşmıyorum. Ancak ihtiyacı olan tabi ki danışabilir.

Umarım yararlı olur.