13 Aralık 2015 Pazar

Travel Turkey İzmir

 Bu kez alanım dışında bir etkinlik hakkında bir blog yazısı yazmış olayım. Bu hafta Truzim fuarına katılma fırsatı buldum. Ne bu truzim fuarı?
 
  Türkiye'nin turizm alanındaki en önemli buluşmalarından biridir.Bu yıl 9. kez İzmir de gerçekleşiyor. Her yıl olduğu gibi bu yıl da, dünyanın çeşitli ülkelerinden katılımcı firmalarla işbirliği yapmak için farklı turistik yerlerden tur operatörleri, seyahat acentaları ile turizm basını fuara davet ediliyor. Fuar alanında stand sahibi turizmciler bir araya gelerek profesyonal bir ortamda iş bağlantıları yapmaları ve ülkenin turizm gelirlerini artıran şözleşmelere imza atmaları hedefleniyor.
 
  Fuar alanının bir bölümünde acentalar ve oteller tanıtılırken bir bölümünde Türkiye'nin turistlik yerleri tanıtılıyor. Turistik şehirlerin meşhur yiyecekleri, kıyafeteri, zanaatları tanıtılan fuar gerçekten çok ilgi çekici.

 Genel kültürü bol ve eğlenceli bir etkinlik oldu. Turizm alanındaki insanların mutlaka gidip gezmesi gereken bir fuar olduğunu düşünüyorum.




9 Ekim 2015 Cuma

LXC (Linux Containers)

Sanallaştırma

Sanallaştırma genel olarak fiziksel makinenin ya da ağ kaynaklarının bölünerek kullanılmasıdır. Bir serverin fiziksel kaynaklarının çeşitli yazılımlarla,birden fazla işletim sistemi ve donanımlara ayrılmasıdır. Birbinden bağımsız olarak açılıp kapatılabilir ve değişik programlar çalıştırılabilir.
Sanallaştırmanın çok fazla yönü vardır:

Platformu Sanallaştırma
Kaynak Sanallaştırma
Depolama Sanallaştırma
Sanallaştırma
Masaüstü Sanallaştırma


Sanallaştırmanın faydaları:
  1. Fiziksel sunucuların sayısını azaltma
  2. Enerji tasarrufu 
  3. Sunucuları tek bir merkezden yönetebildiğin için yönetimse gücü azaltma

LXC(Linux Containers)

Linux sistemlerde kullanabileceğimiz sanallaştırma uygulamasıdır. Lxc bir sunucuda birden fazla işletim sistemini farklı sunuculardaymış gibi çalıştırıyor.


Kurulumu

sudo apt-get install lxc

container oluştururken slackware için  /usr/share/lxc/templates klasörü altında yer alan template scriptleri kullanılıyor. Ben bu dizinin altına baktığımda boştu bu yüzden lxc-template paketini indirdim.container oluştururken debootsrap(containerın dosya sistemini ayarlamak için gereklidir) ve libvirt(container yönetimi için) paketleri de gereklidir . Gerekli paketleri indirdikten sonra  container oluşturmak için aşağıdaki komutu kullanıyoruz:


sudo lxc-create -t slackware -n container_name

Arka planda çalıştırmak için:

sudo lxc-start  -n container_name -d 

Konsola bağlanmak için:

sudo lxc-console -n container_name

Durdurmak için:

sudo lxc-stop -n container_name

Network Yapılandırması

Yapılandırma için bridge_utils dnsmasq ve iptables paketleri gereklidir.

host makinesinde ilk olarak bridge device oluşturduk(Bridge device aynı protokolü kullanan diger ağlarla ara bağlantı sağlayan bilgisayar ağ cihazıdır.)

brctl addbr br0
brctl setfd br0 0
ifconfig 192.168.100.1 netmask 255.255.255.0 promisc up

echo 1> /proc/sys/net/ipv4/ip_forward (ip_forward açıyoruz)
echo 1> /proc/sys/net/ipv4/conf/br0/proxy_arp (br0 için proxy açıyoruz)


host sisteminde nat tablosunda trafik yönelendirmesi yapıyoruz.İnternet erişimimi eth0 dan sağladığım için out device olarak onu ayarladım:

iptables -t nat -A POSTROUTING -o eth0 -j MASQERADE

dnsmasq'ın global configuration dosyasında (/etc/dnsmasq.conf)  şu satırın ekli olup olmadığını kontrol edin değilse ekleyin:

conf-dir = /etc/dnsmasq.d


Şimdi /etc/dnsmasq.d dizinin altına br0.conf  dosyası oluşturun içine aşağıdaki satırları ekleyin:

interface=br0
dhcp-range = 192.168.100.2,192.168.100.254,72h
bind-interfaces
except-interface=virbr0


/var/lib/lxc/container_name/config dosyasına aşağıdaki eklemeleri yapıyoruz:

#Network
lxc.network.type = veth
lxc.network.flags = up

#Network host side
lxc.network.link = virbr0

#Must be Unıque for each container
lxc.network.veth.pair= veth0
lxc.network.hwaddr=00:FF:AA:00:00:01

#Network container side 
lxc.network.name=eth0
lxc.network.ipv4=0.0.0.0/24

Yapılandırmaları yaptıktan sonra containerı baştan başlatabilirsiniz.


Lxc container oluştururken oluşturduğum containerdan ayar yapmadan ip adresi atamak için aşağıdaki değişiklikleri yapmanız yeterlidir:
/etc/lxc/default.conf dosyasına aşağıdaki satırları ekleyin:

lxc.network.name = eth0
lxc.network.ipv4 = 0.0.0.0/24






5 Ağustos 2015 Çarşamba

Güvenlik Duvarına Kural Ekleme

   Iptables ağ trafiğini yönlendirmek ve kurallar yazmak için kullanılan bir duvar programıdır.Bir ağ sitemi üzerinde bağlantı kurmaya çalıştığınızda kural listesinde arama yapar eğer bulamazsa varsayılan eyleme başvurur. Bir linux dağıtımına kurulu gelmediyse iptables paketini indirmelisiniz:

sudo yum install iptables

iptables da üç farklı zincir vardır: giriş ,ileri ve çıkış:

Girdi(input): Bu zincir gelen bağlantıların davranışlarını kontrol etmek için kullanılır. Örneğin bir pc sunucuya ssh çalışırsa , iptables giriş zincirinin bir kuralının ip adresi ve port ile uyuşmasını sağlayacaktır.

İleri(forward): Bu zincir aslında gelen bağlantıların yerele teslim edilmediğinde kullanılır. Eğer yönlendirme gerekmiyorsa genelde bu zincir kullanılmaz.

Çıkış(output): Bu zincir giden bağlantılar için kullanılır.Bir siteye ping atarken iptables karar vermeden önce site konusundaki kurallara bakar yani çıkış zincirini kontrol eder.

Sistemin bir kural yolu olup olmadığını kontrol etmek için:

 sudo iptables -L -v





 Görüldüğü gibi girdi zincirinde 11G bytes işlenir çıktı zincirinde ise 17G bytes.
Dikkat edilmesi gereken bir nokta da protokollerin çoğu giriş ve çıkış zincirini birlikte kullanır bu yüzden düzgün yapılandırılmalıdır.


Belirli kuralları eklemeden önce bağlantı herhangi bir kurala uymazsa varsayılan olarak ne yaptığını ayarlamalıyız. iptables genelde varsayılan olarak bağlantıları kabul etmenizi söyler:

sudo iptables -L | grep policy



Eğer varsayılan olarak böyle değilse yani siz bir değişiklik yapmışsanız bu varsayılan olarak bağlantıyı kabul et yapılır:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT


Eğer sadece el ile bağlanılmasına izin vermek istiyorsunuz o zaman varsayılanı değiştirmeniz gerekecektir. Ama bu çok hassas bilgiler içeren sunucular için yararlı olacaktır:

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Üç tane temel yanıt vardır.

Accept -> Hepsi bağlansın.




Drop -> Bağlantıyı bırak,hiç olmamış gibi davran.




Reject->Bağlantıya izin verme ama hatayı gönder.




       Belirli adresleri , adres aralıklarını ve bağlantı noktalarını engellemek, izin vermek için kural tanımlayabilirsiniz. iptables kuralları zincirin en üstünden başlar ve uyan bir kural bulana kadar hepsinin üstünden geçer. Listenin istediğiniz bir yerine kural koymak istiyorsanız:

iptables -I [zincir ][sıra]

Zincire kural eklemek için iptables -A parametresi kullanılır.

Tek ip adresi için kural:

iptables -A INPUT -s  18.18.18.18  -j DROP

ip adresi aralığı için kural :

iptables -A INPUT -s 18.18.18.0/24  -j DROP  
iptables -A INPUT -s 18.18.18.0/255.255.255.0 -j DROP

Bağlantıya özel port verme

 iptables -A INPUT -p tcp --dport ssh -s  18.18.18.18  -j DROP
  
Siz herhangi bir protokol veya port numarası ile "ssh" değiştirebilirsiniz.
-p tcp iptablesın hangi kısmı protokolle bağlantı kuracağını söyler. TCP yerine UDP kullanan bir protokol engellenseydi o zaman tcp yerine udp yazılcaktı.

Herhangi bir ip adresine gelen ssh bağlantılarını engellemek için :

iptables -A INPUT -p tcp --dport ssh  -j DROP

iptables -L listeleme -v ile paket ve veri byte bilgisi -n ile konak protokol ve ağlar sayı olarak listelenir.

Eklediğiniz özel kuralları -D parametresiyle silebilirsiniz:

iptables -D INPUT -p tcp --dport ssh -s  18.18.18.18  -j DROP

Tüm kuralları temizlemek için iptables -F komutu kullanılır.

Yaptığımız değişiklikleri kaydetmek için(Dağıtıma göre değişiklik gösterebilir.):

Ubuntu:      sudo /sbin/iptables-save
Redhat ya da Centos:      /sbin/service iptables save
Ya da:       /etc/init.d/iptables save





3 Ağustos 2015 Pazartesi

NTP(NETWORK TIME PROTOCOL)

      Bilgisayardaki zaman sapmalarını engellemek için kullanılan bir protokoldur. Saati sürekli güncel tutmak için güvenli bir kaynaktan senkronize eder. UTC zamanı referans olarak alınır. Ulaşılabilir bir kaç kaynağı kontrol eder ve zaman sapması en az olanı otomatik olarak seçer.

UTC zamanını referans olarak kullanır.
UTC zamanını referans olarak kullanır.
UTC zamanını referans olarak kullanır.
UTC zamanını referans olarak kullanır.
UTC zamanını referans olarak kullanır.
    Ntp 123 port'u kullanır. Dağıtımına göre yapılandırma dosyası /etc/ntp.conf ve /etc/xntp.conf olarak değişiklik gösterir.İki tip ip adresi vardır biri saat ayarı istenen sunucu ip diğeri sahte ip (Birincisi asıl sunucu ikincisi yedek sunucu).

NTP Çalışma Modları

İstemci Mod: Sunucu diğer sunucuları kontrol eder.Sunuyu istemci modda yapılandırmak için NTP yapılandırmasında kontrol edilecek sunucuların adı ve ip adreslerinin bulunduğu bir sunucu cümlesi olmalıdır.

Broadcast ve multicat:  NTP paketlerini dinler. Yapılandırma dosyasında "Broadcast yes" "multicast yes"  cümleciğini içermelidir.


NTP Kurulması

# yum install ntp ntpdate ntp-doc

İşletim sistemi  açılırken servisin başlaması için :

#chkconfig ntpd on

Servisi başlatmak için:

#service ntpd start ya da /etc/init.d/ntpd start 

Servisi durdurmak için:

#service ntpd stop

Servisi yeniden başlatmak için:

#service ntpd restart


Yapılandırması

ntp yapılandırma dosyasını açıyoruz:

#vim /etc/ntp.conf 

Sunucu adreslerine pool.ntp.org dan bakabilirsiniz. Biz Türkiye de olduğumuz için aşağıdaki satırları conf dosyasına ekliyoruz:

server 0.tr.pool.ntp.org
server 1.tr.pool.ntp.org
server 2.tr.pool.ntp.org
server 3.tr.pool.ntp.org

Herkesin sunucu üzerinde değişiklik yapmasını ve sunucu durumunu sorgulaması engeller:

restrict default kod nomadify notrap nopeer noquery

Hizmet verilcek kullanıcılara izin tanımlama (aslında bu tanımlama zaten yapılandırma dosyasında var):

restrict 127.0.0.1
restrict ::1



pgrep ntpd komutu ile ntp servisinin çalışıp çalışmadığını görebilirsiniz. Ekrana işlem numarasını vermelidir.



NTP Zaman Sapması Kontrolü

ntpstat ağ zaman eşitleme durumu gösterir.  
Senkronize olduğu tespit edilirse ,yaklaşık zaman doğruluğunu bildirir.

Çıktısı şu şekilde olacaktır:

synchronised to NTP server (149.20.54.20) at stratum 3 
time correct to within 42 ms
polling server every 1024 s



Centos Timezone Yapılandırması

/usr/share/zoneinfo/ altında zaman dilimini seçeceğiniz ülkelerin listesi vardır. Burdan olduğunuz ülkeyi seçiyorsunuz . Timezone değiştirmek için daha genel bir dosyaya bağlıyoruz:

"ln -sf /usr/share/zoneinfo/Turkey  /etc/localtime"

"date" komutu ile de kontrolunuzu yapabilirsiniz.








2 Ağustos 2015 Pazar

Nedir bu ifconfig ?

        Ağ ara birim yapılandırması için ifconfig kullanılır. ifconfig parametre verilmeden kullanılırsa sistemde çalışan tüm ağ arabirimlerini gösterir.









MTU -> Her ip paketinin maksimum boyutunu belirtir.

Scope -> interface 'in faliyet alanıdır.

metric ->Önceliği belirtir. Örneğin iki tane ethernet kartınız varsa önce hangisinden paket gönderimi yapılcağını seçebilirsiniz.

Link encap: Ethernet  ->  Arayüz ethernetle ilgili cihaz olduğunu gösterir.

Hwaddr -> Bu üretilen her Ethernet kartı için benzersiz olan donanım adresidir.

inet addr-> Makine ip adresidir.

inet6 addr ->IPv6 ya göre ip adresidir.

Bcast -> Yayın adresini gösterir.

Mask -> İp adresinde hangi bitlerin sabit olacağını gösterir.

RX packets ,TX packets -> Sırasıyla alınan ve iletilen paketlerin toplam sayısını gösterir.

collisions -> İdeal değer sıfırdır. Sıfırdan büyükse bu paketlerin ağınızda geçme sırasında çarpışması anlamına gelir.

txqueuelen -> Bu, cihazın iletim kuyruk uzunluğunu ifade eder. 

RX bytes , TX bytes ->  Ethernet arabiriminin her iki durumdada geçtiği toplam veri miktarını gösterir.
 

27 Temmuz 2015 Pazartesi

VPN Bağlantı Sorunu

      Öncelikle vpn hakkında kısaca bilgi verip sonra karşılaştığım sorunun ne olduğu ve nasıl çözdüğüm hakkında bilgi vermek istiyorum.

VPN
VPN(virtual private network), türkçe karşılığı sanal özel ağdır. Klasik internet üzerinde özel ve güvenli bir bağlantı türüdür. Güvenli olmayan ağlara bağlanırken bağlantıyı şifrelemek ve güvenli hale getirmek için kullanılır. Vpn bağlantısının iki çeşidi vardır.
  1. Uzaktan erişim : Ofis dışında çalışan ya da sık seyahat eden kullanıcıların internet üzerinden özel ağ ile sunucuya bağlanmalarıdır.
  2. Siteden siteye erişim : Farklı ofisler arasında kurulan bağlantıdır. Veri bağlantısı gibi çalışır.
 
VPN bağlantısı yapacak cihaz (VPN Client) üzerinde bir VPN ayarı veya programı bulunur. Bu ayar veya program ile de VPN sunucusuna İnternet üzerinden VPN bağlantısı kurulur. Fakat bu bağlantı özel bir şekilde şifrelendiğinden başkalarının bu tünel içerisinde geçen bilgilerin ne olduğunu anlamaları çok zordur.Vpn hakkında daha fazla bilgi almak istiyorsanız wiki sayfasına bakabilirsiniz.



VPN Bağlantı Sorunu

  Open VPN client kurduk. vpn sunucusuna bağlanma isteği gönderdiğimizde bir tane tünel açıyor. Bir ip adresi de atıyor. Buraya kadar herşey normal. Ancak client sunucunun tüm trafiği vpn üzerinden geçtiği route tablosundan görülüyordu. Bu istediğimiz bir durum değildi ve vpn ağında olmayan bir yerden client makinaya erişemez olmuştuk. Route tablosu hem sorunun tespit etmede hem sorunu çözmede işimize yarayacak.
   Route tablosu İp ağı üzerindeki yönlendirmeleri gösterir. Siz route tablosu üzerinde değişiklik yapabilir. Hangi ip adresinin nerden çıkış yaptığını görebilirsiniz.
route tablosunu görmek için  "route -n"komutunu kullanabilirsiniz:

"ip route show" komutunu da kullanabilirsiniz:


Destination : Hedef ağ
Gateway : Ağ geçidi adresi
Genmask : Hedef ağ için ağ maskesi  255.255.255.255 ,yol için 0.0.0.0 öntanımlıdır.
Genmaskı şöyle bir örnekle açıklayabiliriz: 172.16.8.0 hedefinin 255.255.248.0 ağ maskesi olsun. Bu ağ maskesi, ilk iki sekizlinin tam olarak eşleşmesi, üçüncü sekizlinin ilk beş bitinin eşleşmesi (248=11111000) gerektiğini ve son sekizlinin önemli olmadığını belirtir. 172.16.8.0 adresinin üçüncü sekizlisi (yani 8) ikili biçimde 00001000'dir. İlk 5 biti değiştirmeden (kalın olarak gösterilen maskesiz bölüm), 15'e kadar veya ikili olarak 00001111 değerine kadar çıkabilirsiniz. Bu şekilde, 172.16.8.0 hedefine ve 255.255.248.0 maskesine sahip bir yol, 172.16.8.0 ile 172.16.15.255 arasındaki adreslere gönderilen tüm paketlere uygulanır.

iface: Arabirim, bir sonraki yönlendiriciye erişmek için kullanılacak LAN veya isteğe bağlı arabirimi gösterir. 



Biz route tablosunda belli ip adreslerinin vpn bağlantısını kullanmasını geri kalanının normal makine üzerinden çıkış yapmasını istedik bu yüzden bağlantı sağladığımız dosyaya (/etc/openvpn/infovpn_openvpn_remote_access_l3.ovpn)
aşağıdaki gibi eklemelerde bulunduk:

route vpne_yönlendirmek_istediğiniz_ip(destination)  Genmask
Örneğin : route 172.16.8.0 255.255.248.0  gibi...

Elle route tablosunda ekleme ve route tablosundan silme işlemlerini yapmak içinde aşağıdaki komutları kullanabilirsiniz:

Eklemek için : "sudo /usr/sbin/ip route add destination/32 via gateway"

Silmek için: "sudo /usr/sbin/ip route del destination"

destination daki /32 genmask dizilimini ifade eder. Yani burda /32 olması direk olarak verilen adresin yönlendirilmesi istendiği anlamına gelir genmask'ı 255.255.255.255 dir.
IP için genmask hesaplamalarınızı bu siteden yapabilirsiniz.

23 Temmuz 2015 Perşembe

jenkins'de github ile kullanıcı kimlik kanıtlaması

    Jenkins yapılandırmasında varsayılan olarak oturum açmadan herkes erişim yapabilmektedir. Güvenlik açısından bunu düzeltmek gereklidir.
    Biz kullanıcıları doğrulamak için GitHub OAuth mekanizmasını kullandık.Bunun için 'jenkins'i Yönet'->'Eklentileri Yönet' da GitHub Authentication plugin yüklüyoruz.




Daha sonra 'Jenkins Yönet'->'Configure Global Security' seçiyoruz. "Güvenliği devreye al" seçeneğini işaretleyip orda "Github Authentication Plugin"lı seçiyoruz. Burda "Global Github OAuth" ayarlarını yapmamız gerekecek.


GitHub Web URL : https://github.com/
GitHub API URL: https://api.github.com/
Client ID : Github işlemci kimliği
Client Secret : Github gizli kimlik

Burada Github Apı ve Web aynı şekilde kalacak.
API bir uygulamanın belli işlevlerini  diğer uygulamanın kullanabilmesi için  iletişim kurmasını sağlıyor.



Client ID ve Client Secret'i github'dan elde edeceğiz şöyleki. Github sayfamıza giriyoruz. Sağ üst köşedeki profil resminin üstüne tıklayıp settings 'e giriyoruz.



Applications'ı seçiyoruz ve Authorized application oluşturuyoruz.Bizim için gerekli olanlar :

Application nameUygulama adı

: Uygulamanın ana sayfasının github urlsini giriyoruz.

: Kendinden başka bu uygulamanın potansiyel kullanıcılarının github url'ri

Authorization callback URL : Dönüş yapıcağı Url (http://İp:8080/securityRealm/finishLogin)(jenkins varsayılan olarak 8080 kullandığından ben portu 8080 yazdım siz değiştirdiyseniz ona dikkat edin)

Daha sonra kaydediyoruz ve git bize bir tane client id ve client secret vericek.



Yetkilendirme kısmında Github Commiter Authorization Strategy seçiyoruz ve buradaki ayarları yapıyoruz.

Admin user names : Admin olucak kişilerin github adı.

Participant in Organization : Dahil olunan organizasyon adı

Use Github repository permissions : Github depo izinlerini kullan.

Grant READ permissions to all Authenticated Users : Doğrulanmış kullanıcılara
okuma izni verilmesi.

Grant CREATE Job permissions to all Authenticated Users : Doğrulanmış kullanıcılara İş oluşturma izni.

Grant READ permissions for /github-webhook : /git-webhook okuma izni

Grant READ permissions for /cc.xml : /cc.xml dosyaları için okuma izni

Grant READ permissions for Anonymous Users : Anonim kullanıcılara okuma izni


Bu ayarları yaptıktan sonra kaydedip jenkins'i yeniden başlatıyoruz.


19 Temmuz 2015 Pazar

JENKINS

        Sürekli entegrasyon aracıdır.Kaynak kodlarını alır, sizin istediğiniz süreçten geçirip build eder.

Ben size jenkinsin centos için kurulumu anlatacağım.Siz jenkins'in sayfasından diğer sistemler için kurulumuna bakabilirsiniz.

jenkins kurulumu için minimum sistem gereksinimleri:
2G RAM
2 CPU
Java(1.7)

Kurulum 

yum deposuna jenkins deposunu ekleyelim:
 "sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
--2015-07-06 04:16:06--  http://pkg.jenkins-ci.org/redhat/jenkins.repo (Depoya indirme yapıyoruz.)"

Jenkins anahtarını import ediyoruz.Jenkins dosyasının yeri yani şuanda jenkins-ci.org/redhat deposunu kullanabilirsiniz:  "sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key"

Depodaki Jenkins'i kuruyoruz: "sudo yum install jenkins"



Java kurulumu

wget ile Oracle'dan JDK 7'yi indiriyoruz:
`wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz" `

/opt nin altına jdk dizini oluşturuyoruz: "sudo mkdir /opt/jdk"

Arşiv dosyasını buraya açıyoruz: "sudo tar  -zxf  jdk-7u80-linux-x64.tar.gz -C /opt/jdk"

 Java yolunu sürekli source etmemek için /etc/init.d/ dizininin altına java dosyası oluşturuyoruz. Java yolunu belitriyoruz:
"export JAVA_HOME=/opt/jdk/jdk1.7.0_80"
"export PATH=$PATH:$JAVA_HOME/bin"

java -version komutu ile yükleyip yüklemediğimizi kontrol ediyoruz.

 Jenkins Başlatma/Durdurma

Jenkins'i başlatmak için : "sudo service start jenkins"

Jenkins'i sonlandırmak için: "sudo service stop jenkins"

Jenkins yapılandırması


1)Git ve Github eklentileri yükleyin

Jenkins de git kullanabilmek için github eklentilerini (github plugins) yüklememiz gerekiyor.Bunun için Jenkins arayüzünden 'jenkins Yönet(Manage Jenkins)'->'Eklentileri Yönet(Manage plugins)' kısmından 'github plugins' yüklüyoruz

2015-07-14 14:59:36.png



Daha sonra 'jenkins yönet(Manage Jenkins)'->'Sistem konfigurasyonunu değiştir(Configure System)' kısmından 'Git' kısmında git'in yolunu belirtiyoruz ve 'Github Web Hook' kısmında 'Manually manage hook URLs' seçiyoruz.

2.png
3.png






2)Java yolunu belirtme

Jenkins java kullanıyor ve yapılandırma sırasında java'nın yolunu belirtmediğimiz zaman javayı bulamıyor.Ben öyle bir sorunla karşılaştım:)
Bu yüzden 'jenkins Yönet(Manage Jenkins)'->'Sistem konfigurasyonunu değiştir(Configure System)' de JDK kısmında JAVA_HOME'un yolunu belirtmemiz gerekiyor.


10.png




3)Yeni item oluşturma ve yapılandırması



Yeni item tercihini seçiyoruz.Proje ismimizi yazıp biz projeyi maven ile yapılandıracağımız için o seçeneği seçiyoruz.Daha sonra proje ile ilgili yapılandırma yapabileceğimiz bir ekran çıkıyor karşımıza. Oraya Github project kısmına projenizin bulunduğu deponun http://url sini ekliyorsunuz.Biz bu kısımda eski yapılandırmalarımızdan kurtulmak istediğimiz için onunla ilgili ayarları da yaptık.


Daha sonra Kaynak Kodu Yönetimi kısmında Git seçip deponun urls'ini ssh olarak belirtin ve gerekirse branch belirleyin.


Url'yi ssh olarak vermemizin nedeni bir ssh-key tanımlanıp  bu sayede bizden sürekli parola sormasını engellemiş olacağız. Ssh-key'i 'ssh-keygen -t rsa' komutunu çalıştırarak oluşturuyoruz.Credentials kısmında Add deyip SSH seçeneğini seçtikten sonra private-key ayarını yapabilirsiniz.Public-key'i de github ayarlarına ekliyoruz.


12.png



Yapılandırma tetikleyici kısmında 'build when a change is pushed to github' seçeneğini de ekliyoruz böylece github da değişiklik olduğunda projenin buildi alınacak.

8.png


Eger maven ile build almadan önce projenizde ekstra bir pakete ihtiyaç varsa 'pre build step' ile build işleminden önce yapılması gerekenleri yapabilirsiniz:


13.png











17 Temmuz 2015 Cuma

MAVEN

Maven,geliştirilen java projelerinin geliştirme süreçlerini basitleştirmek, standartlaştırmak,belgelendirmek, kütüphane bağımlılıklarını kullanıcı zahmetinden kurtarmak için kullanılan bir araçtır.
Maven ile hemen hemen bütün java projelerinin iskeleti çıkarılabilir. Bu sayede oluşturduğunuz projeyi geliştirme ortamından bağımsız olarak geliştirirsiniz.

Maven ile neler yapılabilir:
  1. Proje yönetimi kolaylaştırılır.
  2. Belirli standartlar belirlenebilir.
  3. Farklı IDE'lere projenizi taşıyabilirsiniz.
  4. Proje temelini başka projelerde kullanabilirsiniz.
Maven ayarları üç levelden oluşur:
  1. Project: En statik yapılandırmadır,Proje uygulanacak bilgiler tanımlanır(pom.xml içinde gerçekleşir).
  2. Install(kurulum): 
  3. User(kullanıcı):Bu ayar özel kullanıcılara hitap eder.
Maven için sistem gereksinimleri:
  1. Maven 3.2 versiyonu için JDK 1.6 or üzeri, Maven 3.0/3.1
    versiyonu için ise JDK 1.5 üzeri olan paketler tercih edilmelidir.
  2. Yaklaşık olarak Maven'in kurulumu için 10mb yeterli olacaktır.
    Buna ek olarak sizin yani yerel Maven depolarınız için Maven sizden bir disk alanı isteyecektir.Aslında tamamen sizin projenizin büyüklüğüne bağlıdır.

Maven kurulumu

Sitesinden maveni indiriyoruz. İstediğimiz bir dizinin altına bu dosyayı çıkarıyoruz.İsterseniz /opt nin altına maven dizini oluşturup tar dosyasını burada açabilirsiniz. opt dizininde üçüncü parti kullanıcı programları bulunur:
  • Dosyayı açacağınız dizine gidin: cd  /opt
  • Maven dizini oluşturun: sudo  mkdir  maven
  • Maven dizinine gidin : cd maven/
  • Dosyayı açın : tar -xzf dosya_adı.tar
  • Maven yolunu belirtiyoruz: "export M2_HOME=/opt/maven/dosya_adi.tar" "export M2=$M2_HOME/bin"                                                                           "export PATH=$M2:$PATH"
Maven yolunu sürekli elle export etmek yerine /etc/profile dosyasına
"export M2_HOME=/opt/maven/dosya_adi.tar"
"export M2=$M2_HOME/bin" eklerseniz. Sürekli export etmek zorunda kalmazsınız.

/etc/profile yi source etmeyi unutmayın :)

JDK kurulumu

Mavenin gereksinimlerinde Jdk ya ihtiyaç olduğunu belirtmiştim.

Ben Oracle jdk indirdiğim için depodan indirme yaptım :
` wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-

 Maven için yaptığım işlemleri Jdk içinde yaptım. 
/opt dizininin altına Jdk dizini oluşturdum: sudo mkdir jdk/
tar dosyasını Jdk dizinine açtım: tar -xzf jdk-7u80-linux-x64.tar.gz
/etc/profile dizinine jdk yolunu ekledim:"export JAVA_HOME=/opt/jdk/jdk1.7.0_80" 
"export PATH=$PATH:$JAVA_HOME/bin"
source /etc/profile ile source ettim.


java'nın kurulu olup olmadığına bakmak için :
java -version komutunu çalıştırıyoruz. Aşağıdaki gibi bir çıktı bekliyoruz:







Eğer sunucu da başka bir java yüklü olsaydı o zaman varsayılan olarak oracle jdk yı ayarlamamız gerekecekti:
-sudo update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.7.0_80/bin/java 100
-sudo update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.7.0_80/bin/javac 100 (javac java komutlarını derlemek için komutların bulunduğu dosya)


Maven Hello Word!

Maveni yükledik gereksinimleri de sağladık şimdi bir proje oluşturalım.Aşağıdki komutu kullanarak bir proje oluşturuyoruz:

"mvn archetype:generate -DgroupId=org.sonatype.mavenbook -DartifactId=simple"
groupId proje ekipleri veya grupların tekil kimliğini belirtir. artifactId proje için oluşturulmuş ana yapının tekil adını belirtir.
Bu komut bize simple adlı bir dizin oluşturdu. İçinde pom.xml dosyası ve src dizini vardı.
-pom.xml Proje hakkında esas bilgiler vardır.
-src dizininde ise main ve test kısımları vardır.

mvn install :
      mvn install komutuyla yerel depo içindeki bağımlılıkları çektik ve bize kullanılabilir bir jar dosyası oluşturdu.Projenin build'ini almış olduk.

install ile oluşan target dizini içinde "java -cp simple-1.0-SNAPSHOT.jar org.sonatype.mavenbook.App" komutunu çalıştırarak Hello Word çıktısı aldık. (-cp jar/zip dosyaları veya klasörlerin yollarını classlarda arar)






 mvn clean :
      Önceki yapı tarafından oluşturulan tüm dosyaları silmek için kullanılıyor.
      Proje üstünde komutu denediğimizde mvn install çalıştırıldığında oluşturulan target dizinini kaldırdı.


10 Temmuz 2015 Cuma

SSH

SSH (Secure Shell) güvenli veri iletimini sağlayan bir ağ protokolüdür. Ssh ile ağa bağlı iki bilgisayar arasında veri aktarımı yapılır. Ssh genellikle uzaktaki makinede oturum açmak ve komut çalıştırmak için kullanılır. TCP portları üzerinde taşınır ve x11 bağlantısı sağlar. Standart TCP portu olan 22 SSH bağlantısı için atanmıştır.
Ssh ile;
-Uzak kullanıcı üzerinden kabuğa bağlanmak mümkündür.
-Uzak kullanıcıda tek bir komut çalıştırılabilir.
-Local bilgisayardan uzak bilgisayara dosya kopyalanabilir.
-Port yönlendirme için kullanılabilir.
-Otomatik olarak uzaktan server kontrolü ve yönetimi sağlanabilir.

Ssh çoğunlukla kurulu olarak geliyor. /etc/ssh/sshd-config dosyasından düzenleme yapabilirsiniz.

"ssh kullaniciadi@sunucu"
komutuyla uzak sunucunuza parolanızı doğruladıktan sonra giriş yapabiliyorsunuz. Ssh'ın önemli özelliklerinden biri de RSA ve DSA izin protokolleri aracılığıyla izinlendirme yapabilmesidir. Bir parola teminine gerek kalmadan uzaktaki sistemlere erişim sağlayabiliyoruz.RSA izinlendirmesinde iki tane anahtar oluşturulur,özel ve genel anahtar.Genel anahtar bir mesajı şifrelemek için kullanılıyor,bu şifreyi özel anahtarın sahibi çözebiliyor. RSA anahtar çiftini "ssh-keygen" komutunu çalıştırarak oluşturuyoruz.  Özel anahtarlar "$HOME/.ssh/identity" dosyasında ,genel anahtarlar "$HOME/.ssh/identity.pub" dosyasında saklanır."identity.pub" dosyası uzak makinenin  $HOME/.ssh/authorized_keys dosyasına kopyalanmalıdır. Böylelikle kullanıcı parola girmeden oturum açmaya hak kazanmış olur.  "ssh agent" ssh anahtarınızın parolasının hafızada tutulmasını sağlar. ssh agent ön tanımlı gelen bir ssh aracıdır. "ssh-agent" çalıştırdığınızda kullanacağı ortam değişkenlerini göstermektedir. Komutu "eval `ssh-agent`" ile çağırıyoruz ,değişkenleri kullanabilmek için. /etc/profile dosyasına " #echo 'eval `ssh-agent`' >> /etc/profile" ekliyoruz. ssh-agente özel bir anahtarınız olduğunu ve onu nerde sakladığınızı belirtmeniz gerekiyor. "$ssh-add ~/.ssh/id_dsa" her konsolu açtığımızda ssh-add komutunu çalıştırmanız gerekir.

Bazı ssh komutları:

  • pico : ssh üzerinden text editör ile dosya içeriğini görme ve düzenlemeye yarar.
  • netstat -n : sunucuya bağlanan ipleri gösterir.
  • passwd : Shell hesabınıza girerken kullandığınız parola değiştirmenizi sağlar.
  • vhosts ya da vhost : Sistemde bulunan vhostları(virtual host) listeler.
  • ip addr : root makineden ip öğrenme
  • adduser login & chown gokyuzu /home/  login & passwd pass1, passwd pass2 : rootta hesap açmak.
  • reboot : Sunucuya restart atar.
  • userdel kulanici_adi :Sistemde mevcut kullanıcıları sistemden uzaklaştırır siler.
  • chown  user /dosya: Bir klasör ya da dosyaya başka bir kullanıcı sahipliği vermek için
scp(secure copy (güvenli kopyalama))  komutunu kullanarak , ssh üzerinden dosyaları kopyalayabilirsiniz.
1)local bilgisayardan ,uzak sunucuya klasör kopyalama:
"scp -r /home/path/klasor username@sunucu_ip_adresi:/home/path/"
2)Uzak sunucudan,lokal bilgisayara klasör kopyalama:
"scp -r username@sunucu_ip_adresi:/home/path/ /home/path/klasor"
3)Sadece dosya kopyalama:
"scp -r /home/path/dosya.tar.gz username@sunucu_ip_adresi:/home/path/"

Başarısız bir dosya kopyalamasına rsync komutuyla devam edebilirsiniz:
"rysnc -partial -progress -rsh=ssh $file_source $user@$host:$destination_file local->remote "

wget : dosya indirmek için kullanabilirsiniz.
1) -c parametresi ile kaldığımız yerden indirmeye devam edebiliriz.
"wget -c http/......."
2) -P parametresi ile belirli bir dizine yükleme yapabiliyoruz.
"wget -c http/..... -P  $HOME/dosyalarim"

9 Şubat 2015 Pazartesi

Python ve Django ile Web Tasarımı(AB2015)


    Akademik Bilişimde  "Python ve Django ile Web Tasarımı" kursuna katıldım.4 gün eğitim aldık.İlk gün python ikinci gün postgresql'den veritabanı oluşturma ve djangoya giriş üçüncü ve dördüncü gün ise uygulama yaptık. Yaptığımız proje web arayüzlü bir bilet sistemiydi.Öğrendiklerimin bir kısmını paylaşacağım sizinle.

     Django , Python  Programlama Dili ile hazırlanmış yüksek seviyeli bir web çatısıdır. Modüler ,pragmatik bir tasarımla hızlı bir şekilde web uygulamaları geliştirmenize olanak sağlayan açık kaynak kodlu bir web uygulamaları geliştirme platformudur.
   Biz  kursta veritabanı oluşturmak için postgresql kullandık. Postgresql kullanmamızın sebebi zengin veri tiplerini desteklemesi ve açık kaynak kodlu olmasıdır. Postgresql buradan indirebilirsiniz. Arayüz olarak eclipse  django Ide si olanı  kullandık.

  • psql ile postgresql çalıştırıp kullanıcımızı ve veritabanımızı oluşturuyoruz.
  • create user ab2015user with password 'ab2015password';
        //ab2015 kullanıcısı oluştur parola ver
  • create database ab2015db; 
      //veri tabanı oluşturduk.
  • grant all privileges on database ab2015db to ab2015user;
       // database üzerindeki tüm yetkileri oluşturduğum kullanıcıya verdim.
  • /q ile posgresqualden çıkabilirsiniz.
  • /dt ile tablolarınızı görebilirsiniz.

Bilgisayarınızda pythonun  kurulu olması gerek. Linux bilgisayarlarda kuruludur fakat kurulu değilse burdan bakabilirsiniz. Djangoyu kurmak için adresinden dosyayı indiriniz. Daha sonra dosyayı bir klasöre açın terminalden dosyanın içine girin ve pyhton setup.py install komutunu çalıştırın.

$ tar xzvf Django-1.3.tar.gz //dosyayı çıkartmak için
$ cd /downloads/Django-1.3  //içine girmek için
$ python setup.py install   //yüklemek için.

Kurulup kurulmadığını anlamak için python shell'ine geçip "import django" yazın hata vermezse kurulum gerçekleşmiştir demektir

Yüklemeleri yaptıktan sonra eclipse girip projeyi oluşturuyoruz. Oluşturduktan sonra settings.py dosyasına girip aşağıdaki kısımları değiştiriyoruz.

DATABASES = {
    'default': {
        'ENGINE':
        'NAME':
        'USER':
        'PASSWORD':
        'HOST' :
    }
}

ENGINE kullanacağımız veritabanını gösteriyor.
NAME veritabanınızın ismi ya da yolu.
Diğerlerini tahmin edebilirsiniz :)
Yazdığınız uygulamayı INSTALLED_APPS  altında import etmeyi unutmayın.
settings.py  dosyası altında bir çok ayar vardır bunlar zamanı geldiğinde değiştirilecektir.
    Tarayıcınızda http://127.0.0.1:8000 adresine gidin. Eğer herşey yolunda “It Worked!” ile başlayan, Django’nun çalıştığını söyleyen bir mesaj göreceksiniz.
Dosya yapısı:
konsoldan "django-admin.py createproject" denildiğinde yeni proje oluşturulur.
manage.py yi oluşturduktan sonra proje adını değiştirmek çokta önemli değil.
proje
   manage.py
   proje
      setting.py //ayar dosyaları bulunur.
      urls.py   //urls ayarlarını kolay yönetmek içindir.
      wsgi.py
   userprofile //uygulamayı start app applicatinadı(userprofile) oluşturduk
    migrations  //models.py de uyguladığımız tüm değişiklikler version halinde altında sıralanıyor.
       __init__py
    admin.py
    models.py
    tests.py
    views.py
    __init__.py









"$ python manage.py runserver"
Projenin çalışıp çalışmadığını kontrol etmek için konsola yukarıdaki komutu yazalım. Bunun yerine eclipse arayüzünde çaıştırabilirsiniz. Run django kısmını kullanarak çalıştırılabilir.
    Models.py ye djangonun kendi syntaxlarını kullanarak oluşturuyoruz modelleri. class ları kullanarak modelleri oluşturuyoruz.  Model isimlerinden sonra gelen “(models.Model)” yazdığımız sınıfın biraz önce dosyamıza eklediğimiz models dosyasının içinde bulunan Model sınıfının bir alt sınıfı olduğunu belirtiyor. Django’da oluşturacağımız tüm modeller Model sınıfının bir alt sınıfı olmalıdır. Modeller oluşturulduktan sonra alanları ekliyoruz.
       İsim  için CharField işimizi görür. Tarih bilgileri için DateTimeField , email için ise EmailField() alanlarını kullanabiliriz.ForeignKey ilişkili alanlar için kullanabiliriz.
 Modelleri tanımladıktan sonra eclipse arayüzünden projenin üstünde sola tıklayıp djangodan shell with django enviroment kısmından kabuğu açıp import işlemini yapıyoruz . "from projeadı.models import (class)"  bu komutu yazıyoruz import etmek için.

      Django admin panelinin büyük bir kısmını kendiliğinden üretecektir, bizim yapmamız gereken ise sadece paneli aktif hale getirmek.Admin panelini aktifleştirmek için settings.py dosyasını açıp , INSTALLED_APPS kısmına django.contrib.admin önündeki # işaretini kaldırıp admin panelini projemizde kullanacağımız uygulamalar arasına eklemiş olduk.
urls.py dosyasında da yapmanız gereken değişiklikleri yaptıktan sonra komut satırından($ python manage.py (veritabanı)) veritabanı için gerekli tabloları oluşturdu. Projeyi çalıştırmak için komut satırından ($ python manage.py runserver ) komutunu giriyoruz ya da arayüzden "Run as->django" seçerek projeyi çalıştırıyoruz.
   "0 errors found Django version 1.3, using settings ‘blogum.settings’ Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C."
   Eğer herşey yolunda gittiyse yukarıdaki gibi bir cevap gelecek,şimdi tarayıcınızda http://127.0.0.1:8000/admin/ gidin .Superuser oluştururken kullandığınız parola ve kullanıcı ismini kullanarak giriş yapın. Artık admin panelini görüyor olmalısınız.
    
        View’imizde render ve context kullanmaktayız. Bu fonskiyonlar view’deki değişkenleri şablona bağlamamızı sağlıyor. Django bu yöntem oldukça sık kullanıldığı için Django’yu geliştirenler bize kısa bir yol hazırlamışlar : render_to_response
render_to_response fonskiyonu sayesinde render ve context’i her defasında kullanmak zorunda kalmıyoruz. View’imizi render_to_response kullanarak değiştirelim. render_to_response 2 parametre alıyor. İlk parametremiz şablon ismi (anasayfa.html). Diğer parametre ise şablona göndermek istediğimiz değerleri tutan bir Python sözlüğü.

Django hakkında daha fazla bilgi için kendi sayfasına bakabilirsiniz.
Yararlanabileceğiniz bazı siteler:
 http://www.djangobook.com/en/2.0/index.html
 4 bölümlük türkçe dersleri


Kursta yaptığımız bilet sisteminide githubta bu hesapta bulabilirsiniz.

25 Ocak 2015 Pazar

Namecheap Domain to Blogger

Namecheap 'deki Kayıtlı Domain Adresinizi Blogger Hesabınızda Kullanmak


  Google support bu konu hakkında gerekli bilgilendirmeleri yapmış. Şu siteden erişebilirsiniz.
 Domain adresinizi namecheap den aldıysanız ayarları hakkında size biraz bilgi vereceğim işinizi kolaylaşacağını düşünüyorum.


İlk olarak Blogger hesabınızda özel alanı kullanmak istediğiniz blogunuzun ayarlar kısmına gelmeniz gerekiyor.


"Yayıncılık" başlığı altında kendi blog adresinizi ve altında Özel alan adı ekle seçeneğini göreceksiniz.Bu seçeneği tıkladığınızda sizden var olan domain adresinizi girmenizi isteyecek, başında "www" olarak. Bu adresi girip kaydet dedikten sonra bir hata mesajı alacaksınız.

   Bu sayfayı kapatmayın burdaki bilgiler bize namecheap 'de lazım olacak.
Şimdi namecheap sayfasına gidin.Giriş yapın ve My Account → Manage Domains tıklayın. Daha sonra sayfada karşınıza çıkan domain name başlığı altında yönlendirmek istediğiniz domain tıklayın. Daha sonra karşınıza çıkan sayfanın sol tarafında "All Host Records" seçeneğine  tıklayın.
Eğer etki için "All Host Records" seçeneği yoksa, bu etki alanı üçüncü taraf ad sunucularını işaret anlamına gelir ve bu ayarları oluşturmak için sağlayıcı barındırma başvurmanız gerekir.
Önünüze çıkan sayfada @ kısıma http://www.Yoursdomainname.tld yazınız. Record type kısmını Url Redirect seçin TTL kısmına 1800 yazın. www. kısma ghs.google.com yazınız. Record type kısmını CNAME(alias) seçin TTL kısmına 1800 yazın.  SUB-DOMAIN SETTINGS  kısmına hata da verilen 2. kısmı yazıp record type kısmını CNAME(alias) seçin TTL kısmını da 1800 yazın ve kaydedin. 


 Buradan namecheap yardım sayfasına bakabilirsiniz. Güle güle kullanın :)