Ansible SSH Keys Deployment

Ansible authorized_key modulu 'delegate_to' ile sunuculara sshkey'leri deploy ederken bazi sshkey'lerin eklenmedigini gorebilirsiniz. Boyle bir sorun ile karsilasmamak icin asagidaki gibi bu module ihtiyac olmadan sshkey'leri ekleyebilirsiniz.

Nginx Reverse Proxy Cache

/images/nginx_logo.png

Bir websitesinin olmazsa olmaz unsurlardan biri performansli sekilde calismasidir. Performans ise birden fazla etkene bagli olabilir. Bu etkenler yazilan kodun kalitesinden tutun da websitenin yayinlandigi altyapiya kadar bagli olabilir. Fakat son kullanici sizin mukemmel kod kalitenize ya da sarsilmaz altyapiniza bakmaksizin kendine onune gelen performansdan memnun kalacaktir. Ayni zamanda dunyanin en iyi kodlarina yazarak cok iyi bir altyapi ile websitenizi yayina surseniz dahi kullaniciya giden iletisim surecleri belirlidir.

Bu yazida daha iyi bir performans ve hizli bir websitesi icin nginx uzerinde "content cache" hakkinda biraz bilgi vermeye calisacam. "Content Cache" kullanici ile proxy cache sunucusu arasinda saglanir. Asagidaki topolojiden inceleyebiliriz:

/images/nginx_reverse_proxy.jpg

Yukarda topolojide goruldugu gibi 'Client I' kullanicisi, reverse proxy sunucusu arkasindaki origin sunuculara ulasmaksizin website uzerindeki iceriklere reverse proxy uzerinden ulasir. Origin sunuculardan hic bir icerik istenmez.

Konfigurasyon:

Content cache islemi nginx uzerinde basit olarak "proxy_cache_path" ve "proxy_cache" konfigurasyonlari ile ayarlanabilir. Ilk olarak "/etc/nginx/nginx.conf" dosyasi icinde "http{}" arasina "proxy_cache_path" konfigurasyonunu girelim.

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m max_size=1g inactive=60m use_temp_path=off;

Yazdigimiz konfigurasyonu inceleyelim:

/var/cache/nginx

cache icin kullanilacak dizin. Eger bu dizin olusturulmamissa olusturun ve nginx kullanicisina yazma hakkini verdiginize emin olun.

# mkdir -p /var/cache/nginx
# chown nginx:nginx /var/cache/nginx
levels=1:2

Nginx yukarda olusturdugumuz dizin altinda two-level directory ile cachelenen tum icerikleri tek bir dizin altinda degilde two-level dizin altinda tutmasini istiyoruz. Eger levels konfigurasyonunu yapmazsaniz nginx tum icerikleri tek bir dizin altinda toplayacak ve buyuk boyutlu cachelenen iceriklerde dosyaya erisim hizlari azalacaktir.

keys_zone=cache:10m

Burada nginx cache key'ler icin shared memory zone olusturuyor. Cachelenen icerigi diske erisimi saglamadan direk olusturulan bu zone uzerinde okumasini sagliyor. "10m" ise cachelenecek olan keys buyuklugunu ayarliyoruz. 1 MB zone 8000 keys, 10MB zone 80000 keys icerebilir. Kendi cachelenecek sisteminize gore bu buyuklugu ayarlayabilirsiniz.

max_size=1g

Cachelenecek maksimum buyuklugu ifade eder.

inactive=60m

Cachelenmis bir icerige herhangi bir erisim olmuyorsa ne kadar sure sonra inactive olmasini ayarlar.

use_temp_path=off

Nginx yukarda bahsettigimiz '/var/cache/nginx' dizinine yazmadan once gecici olarak bir dizine yazmasini ya da ikinci bir dizine yazmayi kapatmayi ayarlar. Onerilen ikinci bir yazma olmamasi icin bu ayari her zaman "off" olarak ayarlamaniz.

"proxy_cache_path" ile ilgili kismimiz bu kadar. Artik herhangi bir upstream sitemiz ile ilgili ayarlamalarimizi yapalim. Asagidaki konfigurasyonlari tekil dosya kullaniyorsaniz "/etc/nginx/nginx.conf" dosyasi icinde, ayrisik konfigurasyon kullaniyorsaniz ornek olarak "/etc/nginx/conf.d/upstream01.conf" icinde "location / {}" arasinda ayarlamaniz gerekmektedir.

Ornek olarak:

location / {
     proxy_cache cache;
     proxy_cache_valid  200 302  60m;
     proxy_cache_valid  404      1m;
     proxy_cache_revalidate on;
     proxy_cache_min_uses 3;
     proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
     proxy_cache_background_update on;
     proxy_cache_lock on;
     add_header X-Proxy-Cache $upstream_cache_status;
     proxy_ignore_headers Set-Cookie;
     proxy_pass http://upstream01;
}

Yukarda yazdigimiz konfigurasyona kisaca goz atalim.

proxy_cache cache;

proxy_cache_path konfigurasyonunda olusturdugumuz shared memory zone adini belirttik.

proxy_cache_valid 200 302 60m;

HTTP cevap kodu 200 ile 302 donen sayfalarin cache suresi 60 dakika olmasini belirttik.Kendi sisteminize gore konfigure edebilirsiniz.

proxy_cache_valid 404 1m;

404 cevabi donen sayfalarin cache surelerini 1 dakika olarak ayarladik. Kendi sisteminize gore konfigure edebilirsiniz.

proxy_cache_revalidate on;

Nginx, origin sunuculardan GET istegi gondererek icerekleri yeniler. Nginx 'If-Modified-Since' ve 'Last-Modified' cache control headerlari ekleyerek, cache kontrolunu yapar.Bir kullanici guncellenmis bir icerige istek yaparsa nginx sadece guncellenen icerigin cacheni yenileyerek performans ve band genisligininden tasarruf saglar.

proxy_cache_min_uses 3;

Nginx, bir icerigin cachelenmesi icin minimum istek sayisini belirtemeniz halinde icerigi cacheleyecektir. Default olarak 1 olan istegi ben 3 yaptim. Kendi isteginize ve sisteminize gore konfigure edebilirsiniz.

proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

Eger origin sunuculari down olursa ya da hata verirse cachelenmis icerigi kullanicilari sunar.

proxy_cache_background_update on;

Yukardaki 'stale' konfigurayonunda belirttigimiz hata aninda cachelenmis icerigi yayinlamasi icin iceriklerin backgrounddan guncellenmesi direktifini verir.

proxy_cache_lock on;

Eger birden fazla kullanici ayni anda cachelenmemis bir icerige istek yollarsa sadece bir tanesinin istegi origin servera gonderilerek cachelenmesi saglanir.Diger istek ya da istekler icerik cachelenme islemi bitine kadar bekletilir.

add_header X-Proxy-Cache $upstream_cache_status;

HTTP header'i icine 'X-Proxy-Cache' headerini ekler. Bu basligi eklemek daha sonra proxy cache isleminin calisip calismadigini kontrol etmek icin kullanabilirsiniz.

proxy_ignore_headers Set-Cookie;

'Set-Cookie' headerinin cachelenmemesini belirttik.

Test:

Yukardaki gibi konfigurasyonlari girip nginx web sunucunuzu reload/restart ettikten sonra Proxy Cache'in calisip calismadigini test edelim.

$ curl -I http://www.example.com
  HTTP/1.1 200 OK
  Server: nginx
  ...
  X-Proxy-Cache: HIT

'X-Proxy-Cache' headeri, gonderilen istedigin gecerli oldugunu ve cevabin cache'den gonderildigi gosteriyor.

Diger Cache status cevaplari:

MISS:

Gonderilen istedigin gecersiz oldugunu ve cache icinde istek gonderilen sayfanin olmadigini belirtir. Cevap origin sunucudan kullaniciya gonderilmistir.

BYPASS:

Gonderilen icerik direk olarak origin sunuculardan kullaniciya gonderilmistir.

EXPIRED:

Icerik cache uzerinde suresi dolmus ve origin sunucu uzerinden gonderilmis.

STALE:

Origin sunucular cevap vermedigini ve icerigin cache uzerinden verildigini belirtir.

UPDATING:

Icerigin stale durumda oldugunu ve bir onceki istek ile guncellemede oldugunu belirtir.

REVALIDATED:

Daha once yukarida(proxy_cache konfigurasyonu kisminda) acikladigim gibi revalidated isleminde oldugunu belirtir.

Sizde yapmis oldugunuz konfigurasyonu test ederek cache durumunuzu kontrol edebilirsiniz. Kolay gelsin :)

Locust: Load Testing Tool

Locust, kullanimi diger uygulamalara gore kolay distributed load testing aracidir. Websitenizi ya da diger sistemlerinizi kullanici sayilarini simule ederek yazdiginiz kodlari ya da sistemlerinizi load testing yaparak kontrol etmenize olanak saglar.

Locust'un ozellikleri:

  • Kolay test senaryosu yazma. Diger araclara gore daha sade ve kolay syntax ile yazabilme. Python'a asina olanlar icin yabancilik cekmeyecekleri sekilde python kod.

  • Distributed load testing. Tekil ya da coklu makinelerle load testing yapabilme. Ister kullandiginiz bir bilgisayarla isterse 20 makine ile test yapabilme imkani.

  • Webarayuzu. Locust HTML+JS ile size realtime test sonuclarini webarayuzunden izleyebilme imkani sagliyor.

  • Her turlu sistemi test edebilirsiniz. Sadece websitelerini degil ldap,smtp gibi servis verdiginiz her turlu sistemleri biraz python biliyorsaniz client kod vs yazayarak test edebilirsiniz.

  • Apache JMeter gibi java bagimliliginiz kalmadan bu testlerinizi yapabilirsiniz.( JMeter uzerinde SSL sertifikaniz 4096 bit gibi yuksek sifrelenmis ise javanin en yuksek 2048 bit desteklemesi yuzunden basarili olamayabilirsiniz. )

Kurulumu

Locust, Python 2.7, 3.3, 3.4, 3.5,3.6. versiyonlarini desteklemektedir. Sistemizdeki 'pip' kurulu oldugundan emin olun. Bir cok modern sistemlerde halihazirda kurulu olarak zaten geliyor.

# pip install locustio

Eger sadece kendi kullaniciniz icin kuracaksaniz;

$ pip install --user locustio

Ardindan '~/.local/bin/' dizinini "PATH'inize ekleyin. GNU/Linux dagitiminiza ya da sisteminize gore '.bashrc' ya da 'bash_profile' dosyaniza eklemeniz gerekir.

PATH=$PATH:~/.local/bin

Kurulum adimlari bu kadar.

Ilk olarak sistemiz uzerinden file-limit degerini ogrenip yukseltmek icin;

# cat /proc/sys/fs/file-max
75000

Yukarda goruldugu gibi sistem uzerinde file-limit degeri '75000'. Bu degeri ornek olarak '750000' yukseltmek icin;

# sysctl -w fs.file-max=750000

Sistem uzerinde kalici olarak degistirmek icin, "/etc/sysctl.conf" dosyasina asagidaki satiri ekleyin.

fs.file-max = 750000

Aktif etmek icin;

# sysctl -p

Bu limit degerlerini sisteme giris yaptiginiz ya da test yapacaginiz kullanici icin yukseltmek icin '/etc/security/limits.conf' dosyaniza asagidaki gibi degerleri ekleyin;

## hard limit
kullanici1        hard nofile 10000
## soft limit
kullanici1        soft nofile 5000

Yaptiginiz degisikligin aktif olmasi icin cikis yapip tekrar giris yapmaniz gereklidir.

Senaryo olusturma

Locust icin cesitli senaryolar yazabilirsiniz. Iki basit ornek verelim.

Ornek 1: Websitenizin anasayfasini ve hakkimda sayfalarini test etmek icin load-testing senaryosu yazalim.

from locust import HttpLocust, TaskSet, task

class MyTaskSet(TaskSet):
     @task(2)
     def index(self):
             self.client.get("/")

     @task(1)
     def about(self):
             self.client.get("/hakkinda/")

class MyLocust(HttpLocust):
     task_set = MyTaskSet
     min_wait = 5000
     max_wait = 15000

'min_wait' ve 'max_wait' degerleri simule eden kullanicilarin bu sureler arasinda istek yapmasini gosterir.

Ornek 2: Websitenizin login sayfasina kullanici ile giris yapip, anasayfasini ve profile sayfasini test senaryosu yazalim.

from locust import HttpLocust, TaskSet

def login(l):
     l.client.post("/login", {"username":"ellen_key", "password":"education"})

def index(l):
     l.client.get("/")

def profile(l):
     l.client.get("/profile")

class UserBehavior(TaskSet):
     tasks = {index: 2, profile: 1}

     def on_start(self):
             login(self)

class WebsiteUser(HttpLocust):
     task_set = UserBehavior
     min_wait = 5000
     max_wait = 9000

Load-Testing Yapmak

Locust ile yazdigimiz senaryolar ile load-testing yapmak icin;

$ locust --host=http://example.com

ya da yazdigimiz senaryo dosyasinin yolunu belirterek;

$ locust -f locust_files/my_locust_file.py --host=http://example.com

Test basladiktan sonra tarayiciniza 'localhost:8089' yazarak kullanicilari simule edip testinizi izleyebilirsiniz.

FreeIPA ve Active Directory Entegrasyonu

Kurulum oncesi hazirlik:
  1. FreeIPA Server 4.4.0-14 ( CentOS 7 )
    • IPA Server IP Adresi: 172.16.183.128

    • IPA Server Hostname: ipaserver.piesso.local

    • IPA Domain: piesso.local

    • IPA Netbios: PIESSO

    • IPA Kerberos realm: PIESSO.LOCAL

  2. Windows Server 2012 R2
    • Active Directory IP Adresi: 172.16.183.132

    • Active Directory Hostname: ad.pencere.local

    • Active Directory Domain: pencere.local

    • Active Directory Netbios: PENCERE

Windows Server 2012 R2 ve FreeIPA icin kerberos ticket vs gibi sorunlar yasanmamasi icin ntp ile zaman esitlemesi mutlaka baslatilmalidir. FreeIPA kurulumunda ontanimli olarak ntp client "time sync" islemini ntp pool'larindan alarak esitlemektedir. Fakat Windows Server 2012 R2 uzerinde de bunu yapmak icin manuel ntp pool sunucularini girip zaman servisini yeniden baslatilmasi gerekmektedir.

(Powershell uzerinde)

> net stop w32time
> w32tm /config /syncfromflags:manual /manualpeerlist:0.centos.pool.ntp.org, 1.centos.pool.ntp.org, 2.centos.pool.ntp.org
> w32tm /config /reliable:yes
> net start w32time

FreeIPA ve Active Directory Cross-Realm Trust:

  • Ilk olarak "ipa-adtrust-install" paketini repodan kuralim:

# yum install ipa-adtrust-install
  • IPA Server uzerinde cross-realm islemi icin:

# ipa-adtrust-install --netbios-name=PIESSO -a password

Firewall Konfigurasyonu:

Windows Server uzerinde firewall uzerindeki kurallar otomatik olarak ekleniyor. Fakat IPA Server uzerinde asagidaki portlarin acik olmasi gerekmektedir.

TCP ports: 80, 88, 443, 389, 636, 88, 464, 53, 135, 138, 139, 445, 1024-1300
UDP ports: 88, 464, 53, 123, 138, 139, 389, 445

Centos 7 ile birlikte gelen firewall manager firewalld spesifik servisleri acmak icin halen yetersiz oldugu icin bunu disabled edip yerine klasik iptables'i aktif edelim:

# systemctl disable firewalld
# systemctl stop firewalld
# yum install -y iptables-services
# systemctl enable iptables

"/etc/sysconfig/iptables" dosyasina gerekli olan portlari acmak icin kurallarimizi girelim:

\*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -s ad_ip_address -p tcp -m multiport --dports 389,636 -m state --state NEW,ESTABLISHED -j REJECT
-A INPUT -p tcp -m multiport --dports 80,88,443,389,636,88,464,53,138,139,445 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 88,464,53,123,138,139,389,445 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -j REJECT
-A INPUT -p tcp -j REJECT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Iptables servisini baslatabiliriz:

# systemctl start iptables

DNS Forward Zone:

Active Directory ve FreeIPA'yi inbound ve outbound trust olarak isaretlemeden DNS Forward Zone'lari ekleyelim.

  • Windows Server 2012 R2 uzerinde:

> dnscmd 127.0.0.1 /ZoneAdd piesso.local /Forwarder 172.16.183.128
  • FreeIPA Server uzerinde:

# ipa dnsforwardzone-add pencere.local --forwarder=172.16.183.132 --forward-policy=only
  • Forwarder DNS zone'larin dogru sekilde eklenip eklenmedigi iki tarafta da kontrol edelim:

Windows Server 2012 R2 (PowerShell):

> nslookup
> set type=srv
> _ldap._tcp.ad_domain
> _ldap._tcp.ipa_domain
> quit
  • FreeIPA Server uzerinde:

# dig SRV _ldap._tcp.ipa_domain
# dig SRV _ldap._tcp.ad_domain

Cross-Realm Trust:

Freeipa ile Active Directory arasinda "Two-way trust" konfigurasyonu:

# ipa trust-add --type=ad pencere.local --admin Administrator --password --two-way=true

"Two-way trust" baglantisinin basarili sekilde kurulup kurulmadigini kontrol edelim:

# ipa trust-fetch-domains "pencere.local"
# ipa trustdomain-find "pencere.local"

IPA Client Kurulumu

Kullanilan yazilimlar:
  • Centos Linux 7.2

    • ipa-client

    • ipa-admin-tools

Kurulum Oncesi Hazirlik:

FQDN = ipaclient.piesso.local
IP = 172.16.183.135/24
IPA Server = ipa.piesso.local
IPA DOMAIN = piesso.local
IPA NETBIOS = PIESSO

Kuruluma baslamadan once kontrol edilmesi gerekenler;

  1. Hostname

  2. /etc/hosts

  3. Sistem update

Hostname:

# hostnamectl set-hostname ipaclient.piesso.local

/etc/hosts:

172.16.183.135 ipaclient.piesso.local ipaclient
172.16.183.128 ipa.piesso.local

Sistem update:

# yum update -y

Kurulum:

  • ipa-client ve ipa-admintools yazilimlarinin repodan kurulmasi;

# yum install ipa-client ipa-admintools
  • ipa-client kurulumu;

# ipa-client-install --domain PIESSO.LOCAL --server ipa.piesso.local --realm PIESSO -p host/ipa.piesso.local --enable-dns-updates --force-ntpd

IPA Client ve Kerberos Ticket Testi:

  • FreeIpa sunucusundaki admin kullanicisi ve parolasi ile giris yapin;

# getent passwd admin
# getent group admins
  • Kerberos'tan ticket alimi;

# kinit admin
  • Ticketin basarili alinip alinmadigi kontrolu;

# klist
  • Hersey saglam gorunuyorsa client dns'lerini FreeIPA Server adresine donusturulmesi;

/etc/resolv.conf:

search piesso.local
nameserver 172.16.183.128

Centos 7 uzerine FreeIPA Kurulumu

Kullanilan yazilimlar:

  • Centos Linux 7.2

  • ipa-server 4.2.0

  • ipa-server-dns 4.2.0

  • bind-dyndb-ldap 8.0

  • bind 9.9.4

Kurulum Oncesi Hazirlik:

FQDN:

ipa.piesso.local

IP:

172.16.183.128/24

IPA DOMAIN:

piesso.local

IPA NETBIOS:

PIESSO

Kuruluma baslamadan once kontrol edilmesi gerekenler;

  1. Hostname

  2. /etc/hosts

  3. Statik IP

  4. Sistem update

1. Hostname:

# hostnamectl set-hostname ipa.piesso.local

2. /etc/hosts:

172.16.183.128 ipa.piesso.local ipa

3. Statik IP:

Ornek statik ip konfigurasyonu "/etc/sysconfig/network-scripts/ifcfg-xxxx"

ONBOOT= yes
BOOTPROTO= none
IPADDR= 172.16.183.128
PREFIX= 24
GATEWAY= 172.16.183.2
DNS1= 8.8.8.8
DNS2= 8.8.4.4
DEFROUTE= yes

4. Sistem update:

# yum update -y

Kurulum:

  • ipa-server, integrated dns, ad trust ve ldap back-end plugin yazilimlarinin repodan kurulmasi;

# yum install ipa-server ipa-server-dns bind-dyndb-ldap ipa-server-trust-ad
  • ipa-server kurulumu;

# ipa-server-install -a IpaAdminpassword -p IpaManagerpassword --domain=piesso.local --realm=piesso.local --setup-dns --no-forwarders -U
  • ipa-server kurulumu asagidaki sekilde basari ile biterse firewalld daemonuna gerekli port izinlerinin verilmesi;

Restarting the web server
==============================================================================
Setup complete

Next steps:
      1. You must make sure these network ports are open:
                 TCP Ports:
                   * 80, 443: HTTP/HTTPS
                   * 389, 636: LDAP/LDAPS
                   * 88, 464: kerberos
                   * 53: bind
                 UDP Ports:
                   * 88, 464: kerberos
                   * 53: bind
                   * 123: ntp
      2. You can now obtain a kerberos ticket using the command: 'kinit admin'
         This ticket will allow you to use the IPA tools (e.g., ipa user-add)
         and the web user interface.

Be sure to back up the CA certificate stored in /root/cacert.p12
This file is required to create replicas. The password for this
file is the Directory Manager password
# firewall-cmd --permanent --add-service={http,https,ldap,ldaps,kerberos,dns,kpasswd,ntp}
# firewall-cmd --reload
  • Firewall kurallarinin kontrol edilmesi;

# firewall-cmd --list-services

IPA Server ve Kerberos Ticket Testi:

  • Kerberos'tan ticket alimi;

# kinit admin
  • Ticketin basarili alinip alinmadigi kontrolu;

# klist
  • ipa-server servislerinin kontrolu;

# ipactl status
  • Hersey saglam gorunuyorsa sunucu dnslerini local adrese donusturulmesi;

/etc/resolv.conf:

search piesso.local
nameserver 127.0.0.1

Linux Yaz Kampi 2014

Ilki 2010 yilinda Isik Universitesi'nde baslayan Linux Yaz Kampi, bu yil 3.defa Bolu Abant Izzet Baysal Universitesi ev sahipliginde 11-23 Agustos tarihleri arasinda yapilacak.

  1. Linux Yaz Kampi ( 2010 - Isik Universitesi )
  2. Linux Yaz Kampi ( 2011 - Duzce Universitesi )
  3. Linux Yaz Kampi ( 2012 - Bolu Abant Izzet Baysal Universitesi )
  4. Linux Yaz Kampi ( 2013 - Bolu Abant Izzet Baysal Universitesi )
  5. Linux Yaz Kampi ( 2014 - Bolu Abant Izzet Baysal Universitesi )
Sadece bir sinif ve 20-30 kisi ile baslayan Linux Yaz Kampi, artik 10'u askin siniflarda 2 seviyede Linux Sistem Yonetimi, php-ruby-java egitimleri ve yuzlerce kisinin katilimiyla buyumeye devam ediyor. Bu yilki basvurularin kapanmasina az sure kalmis iken 1000'i askin basvuru yapildi. Ayrica bu yil ki yaz kampina uc farkli egitim eklendi:
  • Python/Django ile Web Programlama
  • Web Uygulama Guvenligi ve Guvenli Kod Gelistirme
  • Tersine Muhendislik

Yeni eklenen bu egitimler ile beraber toplam 8 kurs bulunuyor. Bu yilda guzel, eglenceli ve verimli yaz kampi olmasi dilegiyle.

Linux Yaz Kampi icin detayli bilgi icin tiklayin.

Gentoo ve Systemd

Systemd büyük bir hızla ,öncelikle güncel linux dağıtımlarında yerini almaya başladı.Systemd linux çekirdeği için geliştirilen ve klasik init sistemlerinin(openrc vs.) yerine geçecek olan daha hızlı ve kararlı bir sistem yönetim daemonu.

systemd pstree çıktısı systemd pstree çıktısı

init pstree çıktısı init pstree çıktısı  

Yukardaki ekran görüntüleri örneklerinde de gördüğünüz gibi systemd 'nin sistem üzerindeki ilk daemon(ve proses) olduğu ve userspace üzerinde çalışacak olan tüm prosesler klasik init sistemlerinde olduğu gibi systemd'nin alt proseslerini oluşturmaktadir.Systemd'nin yapısını biraz daha iyi anlamak için aşağıdaki şema yardımcı olacaktır.

Systemd Bileşenleri Systemd Bileşenleri

Binary Linux Dağıtımlarında eğer systemd'ye geçilmişse ayrıca birşey yapmanıza gerek yok.Fakat Gentoo Linux dağıtımında şu an stage 3'te öntanımlı gelmediği için kendiniz yardımcı araçlarla geçebilirsiniz.(ki gentoo geliştiricileri bunun için birçok şeyi hazırlamış bulunmakta.)

Kısa adımlarla systemd'ye geçişten bahsedebilirim:

  1. İlk olarak çekirdeğimize systemd için gerekli destekleri verelim.Gentoo geliştiricileri bu konuda kullanıcıları rahatlamak için güncel kernel sürümlerinde "kernel konfigürasyon menüsü"ne eklenen "Gentoo Linux" sekmesinin altında bulunan "Support for init systems, system and service managers" alt sekmesinin içinde bulunan "systemd" seçeneğini seçerek kernel için gerekli tüm destekleri kolayca verebilirsiniz.Bu seçenek sizin zorunlu olan destekleri tek tek elle vermek yerine hızlıca yapmanizi sağlayan bir kısayol.

Gerekli destekleri verdikten sonra kernelimizi ve modüllerimizi yeniden derleyin.

  1. Kullandığınız herhangi grafik arabirimi ya da hangi sistem ise "Gentoo" profilinizi "systemd" profiline değiştirerek gerekli profil değişiklerini tanımlayın.
    # eselect profile list

Available profile symlink targets: [1]   default/linux/amd64/13.0 [2]   default/linux/amd64/13.0/selinux [3]   default/linux/amd64/13.0/desktop [4]   default/linux/amd64/13.0/desktop/gnome * [5]   default/linux/amd64/13.0/desktop/gnome/systemd [6]   default/linux/amd64/13.0/desktop/kde [7]   default/linux/amd64/13.0/desktop/kde/systemd [8]   default/linux/amd64/13.0/developer [9]   default/linux/amd64/13.0/no-multilib [10]  default/linux/amd64/13.0/x32 [11]  hardened/linux/amd64 [12]  hardened/linux/amd64/selinux [13]  hardened/linux/amd64/no-multilib [14]  hardened/linux/amd64/no-multilib/selinux [15]  hardened/linux/amd64/x32 [16]  hardened/linux/uclibc/amd64 Beşinci seçenekte olan "default/linux/amd64/13.0/desktop/gnome/systemd" profili ile değiştirelim.

# eselect profile set 5
  1. Bu adımda "systemd"yi yükleyelim.
# emerge --ask systemd
  1. Profilimizi değiştirdiğimiz için sistemi güncellemeden önce "sys-apps/dbus" uygulamasının "systemd" USE FLAG'ını deaktif(
/etc/portage/package.use dosyasınıza "sys-apps/dbus -systemd"

şeklindeki satırı ekleyin.) edin ve daha sonra sistemi güncelleyin.

# emerge -NuDa world

Sistemimize bu şekilde gerekli systemd desteğini vererek "systemd" ile açılmasına hazır hale getirdik.

  1. Yeniden başlatmadan önce sistemin systemd ile başlaması için ön yükleyicinizin kernel satırına(grub için) aşağıdaki gibi ekleyin:

( /boot/grub/menu.lst )

kernel /vmlinuz-3.7.10-r1 root=/dev/sda2 init=/usr/lib/systemd/systemd

Grub 2 için;

( /boot/grub/grub.cfg )

linux /vmlinuz-3.7.10-r1 root=UUID=21312312-12312312-1231121 init=/usr/lib/systemd/systemd

UEFI kullanan sistemler için 1.adımda kernel derlemeden önce "kernel konfigürasyon menüsü"nde "Processor type and features" -> "Built-in kernel command line" içine aşağıdaki gibi ekleyebilirsiniz;

root=/dev/sda2 init=/usr/lib/systemd/systemd

6.Sistemi yeniden başlatın.

7.Sistem yeniden başladıktan sonra eski(Openrc vs.) init sistemi üzerinde tanımladığımız hostname,locale ayarları artık systemd üzerinde geçerli olmayacaktır.

Systemd hostname ayarlamak için;

# hostnamectl set-hostname benimpc

Systemd klavye ayarları için;

# localectl set-keymap trq

X11 için;

# localectl set-x11-keymap tr

Sistem locale ayarı için;

# localectl set-locale LANG=en_US.UTF-8

Türkçe için;

# localectl set-locale LANG=tr_TR.UTF-8

8.Yukardaki adımda sistem için gerekli tanımlamaları yaptık.Fakat herhangi bir grafik arabirimi kullanıyorsanız,bu açılmayacaktır.Systemd üzerinde de diğer init sistemlerinde olduğu gibi gerekli olan servisleri sistem açılışına ekleyebilir,servisleri çalıştırabilir,durumunu öğrenebilir ve bir servisi durdurabiliriz.

Systemd üzerinde sistem açılışında aktif olan servis ya da  hizmetleri ve bunların durumlarını görmek için;

# systemctl

Aktif ve deaktif tüm servislerin durumunu görmek için;

# systemctl list-unit-files

Herhangi bir servisi sistem açılışına eklemek için;

# systemd enable vixie-cron.service

Herhangi bir servisi çalıştırmak için;

# systemctl start syslog-ng.service

NOT: systemd herhangi bir syslog yazılımına ihtiyaç duymamaktadır.Systemd üzerinde journal log bilgilerini tutmaktadır.

Herhangi bir servisin durumunu görmek için;

# systemctl status NetworkManager.service

Herhangi bir servisi durdurmak için;

# systemctl stop upower.service

Herhangi bir servisi yeniden başlatmak için;

# systemctl restart dhcpcd.service

NOT: Gerekli olan servisleri sistem açılışında aktif etmeyi ihmal etmeyin.Grafik arabirimini sistem açılışında başlaması için örnek olarak "xdm"i sistem açılışında aktif etmek için;

# systemctl enable xdm.service

Burada dikkat edilecek nokta openrc'den systemd'ye geçişte "/etc/conf.d/xdm" içerisinde yapmış olduğumuz herhangi bir "display manager" ayarımız geçersiz olacaktır.Geçerli olan "display manager"i xdm'nin açılışta çalıştırması istiyorsanız;

"/usr/lib/systemd/system/xdm.service" dosyası içindeki ,

[Service]
ExecStart=/usr/bin/xdm -nodaemon

--> satırını;

(GDM için)

[Service]
ExecStart=/usr/bin/gdm

---> şeklinde değiştirin.Bu şekilde sistem açılışında "gdm"yi aktifleştirebiliyoruz.

  1. Değinebileceğim diğer bir nokta ise açılışta otomatik yüklenmesi istediğiniz modüller ve network ayarları.

Sistem açılışında otomatik yüklenmesi istediğiniz modül ya da  modülleri "/etc/modules-load.d" dizini içerisine isterseniz ayrı ayrı,istediğiniz sekilde isimlendirdiğiniz dosyaların içerisine ilk satıra ve ya tek bir dosya içerisinde her modül tek satırda olacak şekilde yazabilirsiniz.Örnek:

( /etc/modules-load.d/modullerim.conf )

bridge

tun
şeklinde ekleyebilirsiniz.

Network Ayarları kısmında ise ,kablolu ve otomatik ip alan bir networkte bulunuyorsanız, açılışta dhcpcd servisini aktif etmeniz yeterli.
# systemctl enable dhcpcd.service

Eğer network-manager kullanıyorsanız , sistem açılışında aktif etmek için;

# systemctl enable NetworkManager.service

Ya da farklı bir network modelinde çalışıp kendiniz oluşturmak için kolayca systemd servis dosyası yazabiliriz."/etc/systemd/system" dizini içerisine kendi istediğimiz modelde bir script yazarak açılışta aktif edebiliriz.Örnek olarak;

( /etc/systemd/system/mynetwork.service )

[Unit]
Description=network ayarlarim
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes

EnvironmentFile=/etc/conf.d/bridge.conf

ExecStart=/bin/ifconfig eth0 up
ExecStart=/bin/ifconfig eth1 up
ExecStart=/usr/bin/tunctl -b -u rico -t tap0
ExecStart=/bin/ifconfig tap0 up promisc
ExecStart=/sbin/brctl addbr br0
ExecStart=/sbin/brctl addif br0 eth0
ExecStart=/sbin/brctl addif br0 eth1
ExecStart=/sbin/brctl addif br0 tap0
ExecStart=/sbin/dhcpcd br0

ExecStop=/usr/bin/killall dhcpcd
ExecStop=/bin/ifconfig eth0 down
ExecStop=/bin/ifconfig eth1 down
ExecStop=/bin/ifconfig tap0 down
ExecStop=/sbin/brctl delif br0 tap0
ExecStop=/usr/bin/tunctl -d tap0
ExecStop=/sbin/brctl delif br0 eth0
ExecStop=/sbin/brctl delif br0 eth1
ExecStop=/bin/ifconfig br0 down
ExexStop=/sbin/brctl delbr br0

[Install]
WantedBy=multi-user.target

Systemd ile iyi keyifler :)

Google Reader'a Özgür Alternatif : NewsBlur

NewsBlurGoogle Reader servisinin özgür yazılım alternatifi olan "NewsBlur" ile istediginiz blog ya da web adreslerinin RSS'lerini tarayıcınızdan takip edebilirsiniz.NewsBlur'un websitesine[ https://www.newsblur.com/ ] birkaç adımda kayıt olarak online takip etmeye başlayabilir ya da GitHub[ https://github.com/samuelclay/NewsBlur ] üzerinden kaynak kodlarını( MIT Lisansı ile) indirip kendiniz kurabilirsiniz.

Mimarisi:

* Django * Celery & RabbitMQ * MongoDB, Pymongo, & Mongoengine * PostgreSQL