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.

E: dpkg was interrupted | dpkg –configure -a’ problemi (ubuntu)

Ubuntu’ya gelen güncellemeyi update-manager ile kurmaya çalışıyordum. Ancak uzun süre geçmesine rağmen update-manager durdu ve kapatılamaz hale geldi. Komut satırından da kill edemedim çalışan processi.

Bilgisayarı yeniden başlattım, ardından komut satırından apt-get update yapmak istedim. Aldığım hata;

"E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem."

Sebebi kurmak istediğim paketlerin dpkg ayarları ile ilgiliymiş. Bu aşamada tekrar update-manager açıp güncellemeyi oradan yapmaya çalışırsanız, üstte anlattığım durum tekrar karşınıza çıkacak ve bilgisayarı yeniden başlatmak zorunda kalacaksınız.

Durumu çözebilmek için ilk önce şu komutu çalıştırıp, kurulması yarım kalan paketleri fixliyoruz.

sudo apt-get install -f

Ardından şu komutu çalıştırarak dpkg konfigurasyonunu düzenleyip, iptal ettiğimiz paketleri kuruyoruz.

sudo dpkg --configure -a

Github Pages ve Jekyll ile blog oluşturmak

İlk olarak Jekyll nedir, ondan bahsedelim. Jekyll, statik içeriklerle site oluşturabildiğiniz bir araçtır. Ruby dili ile yazılmıştır. İçerik oluşturduğunuzda, header, sidebar, footer kısımları ( tabi kullandığınız temaya ve layout yapısına bağlı başka yerler de olabilir )  sabit kalır ve içerik kısmı url’e göre değişir.

GitHub Pages, projelerinize vs. websitesi oluşturabildiğiniz GitHub reponuzda host edilen, dolayısıyla terminalden git ile kontrol edebileceğiniz bir yapıdır.

Peki Jekyll’nin GitHub ile olayı nedir? Oluşturduğunuz bir GitHub Page içerisine, Jekyll push ettiğiniz takdirde, bir adet blogunuz olmakta. İşin özeti tamamen bu aslında.

Hızlıca bu işlemleri yapmak istiyorsanız, şu linke tıklamanız yeterli. Adım adım ne yapacağınız yazıyor, ancak ben kısaca bahsedeyim.

İlk olarak github içerisinde {{username}}.github.com isminde bir repo oluşturuyorsunuz. Ardından bilgisayarınızda Jekyll’i clonelayıp, remote set-url ile oluşturduğunuz repoya gönderiyorsunuz. Ve {{username}}.github.io adresiniz yaklaşık bir 10 dakika içerisinde açılmış oluyor.

Linkini verdiğim sitede layoutları bootstrap ile yapılmış bir Jekyll var. Eğer isterseniz tabi ki kendiniz de temasını şeklini felan düzenleyebilirsiniz. Ayrıca eğer isterseniz mevcut bir Jekyll’den clonelayıp kendiniz bir tane oluşturabilirsiniz. Burada bir liste var örneğin : https://github.com/jekyll/jekyll/wiki/Sites

Postların tamamı, _posts klasörünün altında bulunuyor. Eğer terminalden rake post title=”deneme” derseniz, _posts klasörünün altında, current-date-deneme.md isminde bir dosya oluşuyor. Bu dosyayı herhangi bir editör ile düzenlediğinizde bir adet post yazmış oluyorsunuz. Ancak bu şekilde yapmak zorunda değilsiniz, _posts altında herhangi bir dosya oluşturup onu {{username}}.github.io/{{dosya_adi}} şeklinde veya bir klasör oluşturup ardından onun altında dosya oluşturup {{username}}.github.io/{{klasör}}/{{dosya_adi}} şeklinde çalıştırabilirsiniz.

Jekyll’i localde çalıştırabilmek için bilgisayarınızda ayrıca ruby kurulu olması gerekiyor. Onu da buradaki yazımda anlatmıştım, belki yardımcı olabilir.

Ayrıca localde çalışırken başıma gelen bir olay; _config.yml dosyası jekyll serve dediğinizde load oluyor. Üzerinde değişiklik yaptığınızda tekrar jekyll serve  demeniz gerekiyor.

Localde çalışırken başıma gelen bir başka hata ise şu şekildeydi : runner.rb:365:in `require_program’: program version required (Commander::Runner::CommandError)

Çözümü ise : sudo gem install json

Jekyll’nin asıl amacı, yazılımcıların kod yazar gibi blog içeriği oluşturmalarıymış. Ufak bir araştırma yaptığımda kullanan sayısının bir hayli çok olduğunu da gördüm.

partition not found grub rescue hatası ve çözümü

İçerisinde Ubuntu ve Windows 7 işletim sistemleri dual boot olarak yüklü bilgisayarda, açılış sırasında aldığımız grub rescue hatasını aşağıdaki şekilde çözdük;

Boot ayarlarından USB’ye öncelik verdik ve içerisinde Ubuntu bulunan usb ile bilgisayarı başlattık. Install etmeden çalıştırdık. Ardından terminali açtık. Aşağıdaki komutları çalıştırdıktan sonra bilgisayarı restart ettik.

 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
 sudo apt-get install -y boot-repair && boot-repair

Bu şekilde sorunu halletmiş olduk.

linux hardware bilgileri detayları (inxi)

inxi, donanımınız ile ilgili detayları gösteren bir shell scriptdir.

Bir shell script olduğu için, bu scripti kullanıcılara ait programların olduğu dizine (usr/local/bin) koyarak, kurulumunu yapmış oluruz. Kullanabilmek için ek olarak gawk paketini de kurmamız gerekmekte.

Aşağıdaki komutları uyguladığımızda kurulum tamamlanır;

apt-get install gawk
cd /usr/local/bin && wget -Nc smxi.org/inxi && chmod +x inxi

Kullanımı ise şu şekilde; eğer tüm sistem bileşenleri ile ilgili bilgiyi aklmak istiyorsak inxi -F , sadece CPU bilgisini almak istiyorsak inxi -f , network adaptörü ile ilgili bilgiyi almak istiyorsak inxi -n , kullandığımız makinenin bilgilerini almak istiyorsak inxi -M komutları ile görebiliyoruz.

Parametre listesinin tamamı burada mevcut; https://code.google.com/p/inxi/wiki/inxi