10 Dakika 7 Saniyede Kendi Github Sunucumuzu Kurmak

"21 Günde Python Öğrenin" veya "24 Saatte Java" gibi kitapları görmüşsünüzdür ve sonuç, hiç de kitabın adında yazdığı gibi olmaz. Bu başlıkta yazan da aslında doğru değil ama bir farkla: zaman kısmı doğru, GitHub kısmı yalan... Aslında GitHub değil, web arayüzü GitHub'a çok benzeyen, kendi Git sunucumuzu kuruyoruz.

Saat tutup denedim ve gerçekten de 10 dakika 7 saniye sürdü. Ve daha da güzeli, bütün yapacağımız, sadece 2 komut yazıp basit bir web formunu doldurmak...

Bu bilişime fazla kafa yorarsan, sıyırırsın
Aslında yapılacak işlem hiç de basit değil. Birazdan yazacağım birkaç basit komutu çalıştırdığınızda, arkaplanda şunlar gerçekleşecek:
  • host makinede, dışarıya kapalı sanal bir network oluşturulacak
  • bir Linux container (LXC) oluşturulacak ve ayarlanacak
  • veritabanı sunucusu kurulacak
  • Reverse proxy olarak çalışacak bir Nginx sunucu kurulacak ve ayarlanacak
  • Git sunucu kurulacak
  • iptables ile NAT ayarları yapılacak
  • Self signed SSL sertifikası oluşturulacak
  • vs vs vs
Şimdi bütün bu adımları detaylı detaylı yazarsam ne olur? Değerli bir büyüğümüzün dediği gibi kafayı sıyırılsınız. Büyüğümüz ne demiş bakalım: "Bu bilişime fazla kafa  yorarsan sıyırırsın, nimetlerinden kullanıp yararlanıp işini göreceksin. Kafayı taktın mı o zaman işin kötü."                        
                                                  
"Yok, ben illa kafayı sıyırmak istiyorum. Olayın detaylarını da öğrenmek istiyorum" dersen, kaynak kodlar açık. Dilediğin gibi inceleyebilirsin. Takıldığın yer olursa bana email at.              
                                                  
Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor              
Yalnız bu işi yapabilmek için tek bir şey gerekiyor: Debian Jessie kurulu bir makine...                                         
                                                  
"Ya şimdi kim uğraşacak Debian kurmakla" dersen, cevap yine sayın büyüğümüzden geliyor: "Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor gelen oradan işine yarayanı alıyor kullanıyor ben böyle anlıyorum. Sistematik bir şey yok. Abur cubur dolduruyorsun, herkes ihtiyacını oradan alıyor ama hiç de karışmıyor. İstediğini buluyorsun"             
                                                  
Siz de öyle yapın. Ben öyle yaptım. Gittim Digital Ocean'a, açtım Debian Jessie bir makina... Beyin bedava...

"Yok ben yine arıza çıkaracağım. Bulutsuz olmaz mı" dersen, sanal makineye, Debian Jessie kurup deneyebilirsin. Yalnız (swap dahil) minimum 1 GB RAM ayırmanız gerekiyor ve (i386 değil) AMD64 mimarisini kullanın.

Bildiğiniz gibi bilgisayarlar Binali sistemiyle çalışır
Şimdi sıra geldi mucizevi komutlarımıza... Debian Jessie makineye root olarak bağlandıktan sonra şu 2 komutu veriyoruz:

wget https://raw.githubusercontent.com/emrahcom/emrah-jessie/master/installer/ej
bash ej ej-gogs

Birinci komut, kurulumu yapacak olan Bash scriptini indiriyor. İkinci komut ise kurulumu yapıyor. Script işini bitirdikten sonra web tarayıcımızı açıp IP adresini kullanarak sunucuya bağlanıyoruz. Açılan formda sadece 2 yeri değiştirmeniz gerekiyor: Domain ve Application URL

Eğer bu sunucu için bir alan adı kullanmayacaksanız, "your.domain.name" yazan yerlere, sunucunun IP adresini yazabilirsiniz. Bu kadar...

Başka numaraların var mı
Evet, var. Aynı yöntemle kendi Gmail sunucunuzu, canlı video yayını yapabileceğiniz stream sunucunuzu, web panelden yönetebileceğiniz PowerDNS sunucunuzu veya web sitenizin önüne koyabileceğiniz WAF (web application firewall) sunucunuzu da kurabiliyorsunuz. Her biri yaklaşık 10 dakikada ve 2 komutla oluyor. Detaylar, benim GitHub hesabında var ama siz yine de detaya girmeyin, kafayı sıyırmayın.

selamlar

21 Ocak 2017

Posted In: Debian, git, github, linux, lkd

Mozilla Çalışmalarım 1


Herkese merhaba, bir miktar harikalı haber ile geldim :)

Bir önceki yazımda Mozilla'nın bir ürünü olan Balrog üzerinde çalıştığımdan bahsetmiştim.

Balrog, "backend server" ve "admin ui" şeklinde 2 bölümden oluşuyor. Admin-ui kısmı Github'da Balrog projesinin bir alt modülü şeklinde duruyor.

Ben de birkaç gün önce arayüz ile ilgili olan hata kaydıyla ilgili çalıştım. Kısaca istenen , Balrog'a eklenen kuralların  ID bilgisinin de arayüzde görünmesiydi.




İstediklerini yapıp Github'dan PR yolladım. Birkaç dakika içinde PR'in kabul edilmesinin yanında balrog-ui deposuna yazma hakkı da verildi. Arkasından da Balrog proje geliştiricisi tarafından onaylanıp, mozillian oldum.

Bu da halaya davet fotoğrafı ^-^



Mozilla tarafında işlerin benim açımdan hızlı ilerlemesinin en büyük kaynağının, öncesinde LibreOffice ve Linux Kernel gibi uluslararası projelere katkıda bulunmuş olmam olduğunu düşünüyorum.

Daha güzel haberler vermek üzere, hoş kalın :)

23 Mart 2016

Posted In: balrog-ui, github, members, mozilla

Git’te Yama Uygularken Oluşan Çakışmaları Çözmek


Yazma iznimizin olmadığı depodaki projeye katkı verme işlemini yama dosyası oluşturarak yaparız. Yama dosyaları karşı tarafa yaptığımız değişiklikleri insan okuyabilir şekilde özetler. Bu konu hakkında kısa bir yazı yazmışım, buradan bakabilirsiniz.

Github üzerinden geliştirdiğim kendi projelerime olan katkıları kabul ederken terminal kullanmadan, web sayfası üzerinden hallediyorum.

Linux çekirdeğinde her takım farklı alt dizinlere baktığından ve çoğu github kullanmadığından işlemleri konsol üzerinden yapmak gerekiyor.

Linux çekirdeğinde uzunca bir süredir büyük bir yama  setini kabul ettirmeye çalışıyorum. İnsanlık için küçük olabilir ama benim için büyük demeden geçmeyelim. Yamanın konusu özetle bellek üzerinde büyük bir baskı olduktan sonra swapten dönerken, ihtiyaç duyulmayan sayfaları da swapten belleğe getirip büyük sayfa oluşturarak, performans sağlamak.

Bu yama uzun bir sürece girdiğinden, linux çekirdeği sürekli güncelleniyor ve benim değişikliklerim deponun eski halindeki gibi kalıyor. Bu durumda karşı taraf uygulamaya çalışırken çakışma oluşacak, yama bu nedenle reddedilecek.

Eskiden hep küçük değişiklikler yaptığımdan ve daha kısa süreçte bittiğinden, kendi yamamı güncel depoya uygulama ihtiyacı duymadım. Her satırı tekrar kontrol ederek yeniden oluşturuyordum. Yama büyük olduğunda işler böyle olmadı. Her satırı tekrar oluşturmak çok zor ve derlemede hata almıyorsam bile mantıksal hata yapma ihtimalim çok yüksek.

Değişiklikleri uygulamadan önce git apply --check yama_dosyası şeklinde yamanın uygulanabilir olup olmadığını kontrol edebiliriz. Eğer git apply yama_dosyası komutunu verirsek, yamayı commit yapmadan depoya ekler. Bu durumda değişiklikler commitlenmediği için de git diff ile farkları görebiliriz. Bu bize yama dosyasını ekleyip, commit yapmayarak elle başka değişiklikler yapmaya olanak verir. Tüm değiştirmek istediğimiz dosyalar bittikten sonra kendimiz git commit -a komutuyla değişiklikleri loglayabiliriz.

Yamanın commit yapılarak depoya eklenmesini istiyorsak git am < yama_dosyası şeklinde uygulamalıyız.

Eğer daha önceden yaptığımız commitlerde düzenlemeler istiyorsak git rebase harika bir araç. Onunla ilgili daha önceden bir yazı yazmıştım, buradan bakabilirsiniz.

Yama uygularken geçenlerde karşılaştığım durum, yamanın (muhtemelen) güncel depoyla uyumlu olmamasından kaynaklıyordu. Hata aldığım makine çok sık kullandığım bir makine değildi, belki daha önceki başka bir şeyden kaynaklanıyor da olabilir. Hata mesajı şu şekilde:

Applying: mm: add tracepoint for scanning pages
error: include/trace/events/huge_memory.h: already exists in working directory
error: patch failed: mm/huge_memory.c:2673
error: mm/huge_memory.c: patch does not apply
Patch failed at 0001 mm: add tracepoint for scanning pages
The copy of the patch that failed is found in:
   /home/ebru/linux-stable/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

Bunu görünce daha önceden aynı commitler depoda vardı, bu yüzden bir yerde indeksleri tutuluyor düşündüm. mv linux-stable/.git/rebase-apply ..path/ ile rebase-apply dizinini başka bir yere taşıdım. Tekrar yamayı uygulamaya çalıştım yine aynı hatayı aldım (kaldırdığım dizin tekrar oluştu).

Bunun çözümü şu şekilde hatayı aldıktan sonra, git apply linux-stable/.git/rebase-apply/patch --reject komutunu veriyoruz. Bu sayede yamanın çakışma oluşturmayan kısımları depoda oluşturuluyor.

Checking patch include/linux/mm.h...
Checking patch include/trace/events/huge_memory.h...
error: include/trace/events/huge_memory.h: already exists in working directory
Checking patch mm/huge_memory.c...
Hunk #1 succeeded at 30 (offset 1 line).
Hunk #2 succeeded at 2270 (offset 53 lines).
Hunk #3 succeeded at 2307 (offset 53 lines).
Hunk #4 succeeded at 2319 (offset 53 lines).
Hunk #5 succeeded at 2327 (offset 53 lines).
....
       ........
Hunk #13 applied cleanly.
Hunk #14 applied cleanly.
Hunk #15 applied cleanly.
Hunk #16 applied cleanly.
Rejected hunk #17.
Hunk #18 applied cleanly

Bu şekilde uygulanan/uygulanamayan kısımları özetliyor. Uygulamada sorun oluşturan her dosya için uygulanamayan kısımları dosya_adı.rej uzantılı diff dosyası oluşturarak bize gösteriyor. Bu dosyaları git status ile bakarsak görebiliriz. Bu süreçte depo aslında rebase etme gibi git apply sürecinde oluyor. Yamanın uygulanmayan kısımlarına .rej uzantılı dosyalardan bakıp, kendimiz dosyaları açıp değişiklikleri yapıyoruz. git status ile tekrar bakıp eklememiz gereken dosyaları git add ile ekledikten git am --resolved ile işlemi sonlandırıyoruz. Bu şekilde çakışma oluşan yama dosyalarını depoya uygulamış olduk.

Çakışma çözme işlemini bu yazıdan okuyarak öğrendim. Umarım benim yazım da faydalı olmuştur.

8 Eylül 2015

Posted In: çekirdek, Gezegen, git, git am, git apply, github, kernel, linux, yama

Reverting Changes From Remote Git Repo

If you want to revert multiple changes So the solution is to create a new commit which reverts changes that you want to get rid of.

A <– B <– C <– D

$ git revert --no-commit D$ git revert --no-commit C
$ git revert --no-commit B
$ git commit -m'the commit message'

9 Şubat 2015

Posted In: commit, git, github, revert

Reverting Changes From Remote Git Repo

If you want to revert multiple changes So the solution is to create a new commit which reverts changes that you want to get rid of.

A <– B <– C <– D

$ git revert --no-commit D$ git revert --no-commit C
$ git revert --no-commit B
$ git commit -m'the commit message'

9 Şubat 2015

Posted In: commit, git, github, revert

Bir Git Deposuna Başka Bir Git Deposunu Geçmişiyle Taşımak

Diyelim ki git deposunda geliştirdiğiniz projenizi başka bir git deposunun içindeki bir yere taşımanız gerekti. (Transfer işleminden bahsetmiyorum.) Ve kendi deponuzdayken yaptığınız commitlerin de kaybolmasını istemiyorsunuz. Öyleyse sırayla aşağıdaki adımları takip edmelisiniz:

$git clone kendi_depom
$git clone hedef_depo
$cd hedef_depo
$git checkout master
$git remote add rm1remote <kendi_depomun_urlsi>
$git fetch rm1remote
$git merge rm1remote/master
$git remote rm rm1remote

7 Ocak 2015

Posted In: Gezegen, git, github, linux, move a repo, ozguryazilim

Google page rank sorgulama

Bugün bir iş için pagerank betiğine işim düşünce farkettim ki Google, “seo’cularin” gözbebeği olan Pagerank değerinin sorgulama sayfasında değişikliğe giderek kullandığı adres formatını değiştirmiş. Hatta son birkaç gündür forumlar ve twitter üzerinde bu konu ile ilgili çok yoğun bir mesaj trafiği varmış.

Elimdeki perl ve python betiklerinin çalışmadığını görünce ve güncellemelerden de hayır gelmeyince betiği kendim güncelleyerek github hesabıma eklemeye karar verdim. Yeni URL ve shell kullanımı ile ilgili bir iki satır ekledikten sonra commit ettim. Betiğin son haline http://github.com/dirigeant/google-pagerank adresinden ulaşılabilir. Betiği kabukta, istediğiniz adresi argüman olarak vererek ya da uygulamanızdan, kütüphane olarak çağırarak kullanabilirsiniz.

Son olarak belirtmek isterim ki, bu betik örnek bir çalışma olarak dağıtılmakta olup, kullanımından doğabilecek her türlü sorundan kullanıcının kendisi mesuldür. :)

9 Ekim 2011

Posted In: betikler, Gezegen, github, Google page rank, python, scraping, script

WP Twitter Auto Publish Powered By : XYZScripts.com