21 May 2013

DNSSEC


Ana basliga “nasil” sozcugunu koyacaktim fakat yazi, ortalama bir nasil yazisindan biraz daha derine indi. Dolayisiyla okuyacaklarin bunu goz onunde bulundurmasinda fayda var.

Neden DNSSEC?
DNSSEC nasil yazisi okumaya gelmis insanlara “DNS nedir, nicin onemlidir?” anlatmaya gerek olmadigindan DNSSEC standardinin gelistirilmesine onayak olan ihtiyac ya da ihtiyaclar nelerdi bunlara kisaca deginmeye calisacagim.

Onbellek yaniltma saldirilari (DNS Cache Poisoning Attack) diye adlandirilan atak turu, onbellekleme yapan bir isim sunucuya (caching nameserver) asil iletisilmek istenen sunucu yerine o sunucuyu taklit eden baska bir sunucunun gosterilmesi olarak tanimlaniyor. Bunun sonucunda o isim sunucuyu kullanan diger istemcilerden gelen trafik ya gitmesi gereken yere hic ulasmadan baska bir yere gidiyor ya da gecmemesi gereken bir sunucu uzerinden gecirilip nihai hedefine yonlendiriliyor. Bu sayede e-posta iceriklerinin, VoIP vb. iletisimin takibi, hatta kullanicilarin hesaplarinin calinmasi mumkun olabiliyor. Onbellek yaniltma saldirilari disinda, tam olarak olmasa da benzer mantikla calisan aradaki adam (MITM) ve dogrudan o alan adini barindiran ana isim sunucudaki (authoritative nameserver) verinin degistirilmesi mantigiyla calisan saldirilar da mevcut.

Burada saydigim ve saydiklarima benzer saldirilarin onlenebilmesi icin, istemcideki DNS cozucunun bir sekilde aldigi DNS verisinin dogrulugunu ve butunlugunu kontrol etmesi gerekiyor. Iste DNSSEC bu asamada devreye
giriyor. Asimetrik sifreleme yapilarak genel anahtarlarla bir guven zinciri olusturuluyor.

Cogumuz genel anahtarli sifrelemenin e-posta uygulamalarina asinadir. Daha once kullanmamis olanlar da pek cok viki ya da dergide konuyla ilgili yazilar bulabilirler. DNSSEC icin genel anahtarli sifreleme uygulamalarindan verinin imzalanmasi konusuna deginecegiz. Aynen e-posta’da oldugu gibi DNSSEC’te de anahtarinizla DNS verinizi imzaliyorsunuz. DNSSEC dogrulamasi yapan istemciler sizi icinde barindiran zone’dan (alandan) anahtarinizi okuyor ve DNS verisinin degistirilmedigine boylelikle emin oluyorlar. Tabii DNS oldukca dagitik bir yapi oldugundan su an icin mevcut her ccTLD ve TLD’nin bu sistemi uygulamaya baslamadigini goruyoruz. Bu da guven zincirinin belirli noktalarda kirilmasina neden oluyor. “Bu gibi durumlarla bas edilebilir mi? Bas edilebilerse nasil edilebilir?” gibi sorularin yanitlarini yazinin ilerleyen kisimlarinda vermeyi deneyecegim.

DNSSEC Kayit Turleri
DNS’i yeniden icat etmektense DNSSEC varolan DNS uzerine eklenti olarak dusunulmustur. Dolayisiyla beraberinde birkac yeni kayit turu getirir.

-DNSKEY Kaydi
Bir DNS alanindaki kayitlar DNSSEC icin alana ait anahtar ile imzalanirlar. Fakat bu beraberinde su guvenlik riskini dogurur; Olasi bir saldirgan kayitlarin duz metin ve hashlenmis hallerine sahip olacagindan, eger cok sayida DNS kaydini barindiran bir alansa saldirilan, sifresinin kirilabilme ihtimali ortaya cikacaktir. Bu problemin onune gecmek icin iki tur anahtar tanimlanmistir.

a) Key Signing Keys (KSK-Anahtar imzalama anahtarlari)
b) Zone Signing Keys (ZSK-Alan imzalama anahtarlari)

Zone signing key, DNS alanini imzalamak icin kullanilir. Key signing key ise kendisi de dahil butun DNSSEC verisini imzalar. Bu sayede saldirganin elinde tek bir hash olacagindan sifrenin kirilmasi neredeyse olanaksizlasmistir. Sistemi biraz daha guvenilir yapmak icin bu anahtarlarin omurleri kisitlanabilir. Omru dolan anahtarlar, yeni anahtarlarla degistirilir. Bu isleme verilen isim de key rollover oluyor. DNSKEY kaydina geri donelim. Bu kayitlarin KSK ya da ZSK’leri tutan kayitlar oldugunu soylemistik. Ornegin paypal.com (su anda aklima gelen ve DNSSEC kullandigini bildigim ilk alan adi bu oldugundan bu ornegi sectim) icin kayitlarin nasil gozuktuklerine bakalim.

dig paypal.com DNSKEY
;; ANSWER SECTION:
paypal.com. 503 IN DNSKEY 256 3 5 AwEAAc/7r7w6qEg59vy...
paypal.com. 503 IN DNSKEY 257 3 5 AwEAAdVtmC6yOQb0+5M...

Biraz RFC karistirarak gelen cevabi anlamaya calisalim. RFC 4034[1] burada yardimimiza kosuyor ve bizim icin su tanimlari yapiyor. Ilk 4 hane DNS icin de aynisi oldugundan TTL, IN gibi bolumlere deginmeyecegim.

256 Alan imzalama anahtari (ZSK)
257 Anahtar imzalama anahtari (KSK)
3 Protokol degeri (Sabit olarak 3)
5 RSA/SHA1 Algoritmasi

RSA/SHA1 disinda kullanilabilecek algoritmalar da var, bunlar icin tek tek RFC numarasi vermek biraz uzun olacagindan ilgili okuyucuyu IANA sayfasina[3] yonlendireyim. Geri kalan ve okunurlugu arttirmak icin kisalttigim alan ise genel anahtarlarin tutuldugu bolumden olusuyor.

-DS Kaydi
Bu kayit tipi, ilgili DNS alani icin kullanilan KSK’nin hashinin tutuldugu kayit tipi oluyor. DS kaydimizi icinde bulundugumuz DNS alani tutuyor. Yani ornek.com alani icin DS kaydimiz .com tarafindan tutuluyor. Tekrar ornegimize donelim ve oradan bakalim.

dig paypal.com DS
;; ANSWER SECTION:
paypal.com. 8698 IN DS 21037 5 2 0DF17B28554954D819E...

21037 Anahtar Etiketi oluyor ve bir DNS alani icin essiz olmasi gerekiyor
5 RSA/SHA1 Algoritmasi
2 Son alanda gozuken hash’i hesaplamak icin kullanilan algoritma, SHA256

-RRSIG Kaydi
Bir alana ait bir tipten (ornegin sadece A ya da sadece MX) olusan kayit setinin ZSK ile imzalanmasi sonucu elde edilen verinin tutuldugu kayit tipidir. Ayni tipten birden fazla kayit olsa dahi bir tip icin bir RRSIG kaydi tutulur. Ornege bakalim.

dig +dnssec paypal.com MX
;; ANSWER SECTION:
paypal.com. 185 IN MX 10 gort.ebay.com.
paypal.com. 185 IN MX 10 lore.ebay.com.
paypal.com. 185 IN MX 10 data.ebay.com.
paypal.com. 185 IN RRSIG MX 5 2 600 20130530031336 20130430022820 11811 paypal.com. r2CuXIHZtJn1VHJ2jPC4

Ornegin paypal bana uc adet MX kaydi dondurmesine ragmen bu kayitlara ait tek bir RRSIG kaydina sahip oldugunu gorebiliyoruz.

MX ile hangi tip kayitlara ait RRSIG oldugunu soyluyor.
5 RSA/SHA1 Algoritmasi
2 Etiket numarasi (Burada paypal.com dedigimiz icin 2, wildcard kayit olup olmadigini tespit etmek icin kullaniliyor. Daha fazla detay icin RFC4034[2]‘a bakilabilir)
600 Orijinal TTL suresi. Onbellekleme yapan cozucu icin onemli
20130530031336 Imzanin suresinin ne zaman dolacagi
20130430022820 Imzanin ne zamandan itibaren gecerli olacagi
11811 Bu veriyi imzalayan DNSKEY kaydinin etiket numarasi
paypal.com. Imzalamayi yapan yer
Son alan ise dijital imzayi gosteriyor

-NSEC3(NSEC) Kaydi
Simdiye kadar tanimladigimiz kayit tipleri ile bir kaydin gercek olup olmadigini dogrulayabiliyorduk. NSEC3 ile ise bir kaydin olmadiginin dogrulamasini yapabiliyoruz. NSEC ile NSEC3 temel olarak ayni isi yapsalar da NSEC’in bir alan icindeki tum kayitlara ulasilabilmesine olanak veren yapisindan dolayi (herkesin DNS alaninizi transfer edebildigini dusunun) NSEC3 ortaya cikiyor. Paypal neyse ki NSEC kullaniyor da bir ornegini gorebilecegiz ne kadar istenmeyen bir sey olabileceginin.

dig aaaaaa.paypal.com NSEC

aaaaaa ile sorgulamaya basliyoruz.

paypal.com. 59 IN NSEC _dmarc.paypal.com. A NS SOA MX TXT RRSIG NSEC DNSKEY
_sip._tls.paypal.com. 59 IN NSEC accounts.paypal.com. SRV RRSIG NSEC

Bize _dmarc, _sip._tls ve accounts kayitlarini verdi. O halde accu ile bir sey deneyip sonraki kayidi almaya calisalim.

dig accu.paypal.com NSEC
paypal.com. 59 IN NSEC _dmarc.paypal.com. A NS SOA MX TXT RRSIG NSEC DNSKEY
accounts.paypal.com. 59 IN NSEC active-history.paypal.com. CNAME RRSIG NSEC

Artik active-history’yi de biliyoruz. Bu sekilde yeterince sorgu yaparsak gorulecegi uzere paypal’in tum DNS alanini alabiliriz ki pek istenmeyen bir sey. Ornegimizi NSEC3 donduren bir yer ile tamamlayip o kaydin da nasil gozuktugune bir bakalim.

dig verisign.com NSEC3
LVNT2DK6E38UB5HG27E7MCINT8M21C9P.verisign.com. 3599 IN NSEC3 1 0 8 4C44934802D3 LVP1CAGP8QAQJ5OTUH00PN5VDSSARVDE A NS SOA MX TXT RRSIG DNSKEY NSEC3PARAM

Gordugunuz gibi donen kisim gizlenmis bir sekilde geliyor. Iste NSEC ile NSEC3 arasindaki en onemli fark bu.

-DLV Kaydi
Yazinin baslarinda DNS’in dagitik bir sistem oldugundan ve kimi ccTLD ve TLD’lerin henuz DNSSEC destegi vermeye baslamadiklarindan bahsetmistim. Peki icinde bulundugumuz alan (diyelim .tr) DNSSEC destegi vermiyorsa DNSSEC’i hic mi kullanamayacagiz? Cevap neyse ki hayir. Iste DLV kaydi bu isi yapmamizi saglayan kayit tipi. DNS lookaside validation’in kisaltmasi olan DLV, DNS alanimizi dogrulayacak alternatif bir ust alan belirtebilmemize izin veriyor. ISC’nin (bind ve dhcp’den hatirlayacaginiz) DLV hizmeti mevcut. Ornek yapilandirmamizda https://dlv.isc.org/ adresinden erisilebilen bu hizmeti kullanacagiz. Aslinda DLV kaydini recursor sunucular icin kullaniyoruz. Boylelikle root alaninda bulamadiklari kayitlari bu alternatif guven adasindan dogrulamaya calisiyorlar. Biz bu yazida authoritative bir sunucu kuracagimiz icin pek isimiz dusmeyecek. Fakat dlv.isc.org uzerinden dogrulama yapabilen recursive sunucular icin dlv.isc.org’ta bir kayit olusturacagiz.

Yaziyi burada bir ozetlemekte fayda var. DNSSEC icin bir guven zinciri olusturmaliyiz. Bu guven zinciri root zone’dan baslayip, bizim alanimiza kadar gelmeli. Eger alanimizi icinde barindiran alan imzalanmamissa bir sekilde baska bir rota’dan root zone’a ulastirmaliyiz bu zinciri. Bunu da DLV ile yapiyoruz.

PowerDNS+MySQL ile Ana isim sunucunun DNSSEC icin yapilandirilmasi

Ana isim sunucular (authoritative nameservers) yapi geregi kendi tuttuklari alan bilgileri icin dogrulama yapamiyorlar. Ornek vermek gerekirse, arkadasiniza “Benim yasim 30.” dediginizde, kendinize hemen ardindan “Yasimin 30 olduguna guveniyor muyum?” demiyorsunuz. Guvenmeseydiniz ilk asamada soylemezdiniz degil mi? DNSSEC icin de durum bu sekilde. Yinelemeli sorgu yapan bir isim sunucu (recursive nameserver), ana isim sunucuya (authoritative nameserver) “Boyle boyle bir bilgi geldi, onayliyor musun?” derken, ana isim sunucu kendisine “Boyle bir bilgi paylastim, bunu onayliyor muyum?” demiyor. Dolayisiyla DNSSEC icin ilk asamada yinelemeli sorgu yapan isim sunuculara bu yetenegin kazandirilmasi gerekiyor. Google’in islettigi genel isim
sunucular gecen ay itibariyle[2] istemciden DNSSEC dogrulamasinin talep edildigi bilgisini alirsa dogrulama yapmaya basladilar. Yani aslinda DNS sunucularinizi sadece ana isim sunucu (authoritative nameserver) olarak
yapilandirsaniz da, DNSSEC destegini varsayilan olarak kullanan diger yinelemeli sunucular istemcilere dogrulanmis DNS verinizi sunabilecek. (Burada bir parantez acip DLV degil de dogru duzgun DNSSEC destegi veren bir alan kullandiginiz varsayiyorum. Ornegin .com ya da .net) Fakat bir sirketin ya da kurumun yerel agindan gelen istekler icin yinelemeli sorgu yapan kendi DNS sunucusuna ihtiyaci varsa, o sunucuya DNSSEC verisini nasil yorumlayacaginin ogretilmesi gerekiyor. UNBOUND bu konuda oldukca basarili denedigim kadariyla. Bu arada DNS verisinin dogrulandigini dig sorgusunun ciktisinda bulunan flags kisminda ad bulunup bulunmamasindan anliyoruz.

dig +dnssec paypal.com a
;
> DiG 9.9.2-P1
> +dnssec paypal.com a
;; global options: +cmd
;; Got answer:
;; ->>HEADER- opcode: QUERY, status: NOERROR, id: 47088
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

Gordugunuz gibi flags ad (authentic/authenticated data) ile donuyor eger DNSSEC dogrulamasi yapilabiliyorsa.

Ubuntu 12.04 LTS 64 bit uzerinde gerceklestirecegim tum islemleri. Depolarda pdns-server diye arama yaptigimda su anda 3.0.1 surumunun (son surumu tarih itibariyle 3.2) oldugunu goruyorum. Verileri MySQL'de saklayacagim icin pdns-backend-mysql ile birlikte kuruluma basliyorum.

sudo apt-get install pdns-backend-mysql

PowerDNS bizim icin MySQL yapilandirmasini onerecek fakat es gecip elle yapmayi tercih ediyorum. Ilk kurulumda oldukca makul degerler ile geliyor fakat degistirmek isterseniz /etc/powerdns/pdns.conf dosyasina goz atabilirsiniz. /etc/powerdns/pdns.d/ altindaki pdns.local.gmysql dosyasini ise veritabanimizi yapilandirdiktan sonra PowerDNS'e tanitmak icin kullanacagiz. Yalniz bu surumde bir bocek var ve bu sekilde conf.d ile kullandigimizda pdnssec komutunu kullanmamiza izin vermiyor. O yuzden ana yapilandirma dosyasi olan pdns.conf'taki !include ile baslayan satiri yorum haline getirip, pdns.local.gmysql dosyasinin icerigini pdns.conf dosyasina aktarmalisiniz.

mysql -u root -p

ile komut satirina duselim. Yeni bir veritabani ve bu veritabani icin bir kullanici olusturalim.

CREATE DATABASE mydnsdata;
GRANT ALL PRIVILEGES ON mydnsdata.* TO 'mydnsadmin'@'localhost' identified by 'sifre';
FLUSH PRIVILEGES;
USE mydnsdata;

Gerekli tablolari olusturalim.[4] Bu kisimi oldugu gibi kopyalayip yapistirabilirsiniz.

CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id INT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10),
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
ordername VARCHAR(255) BINARY,
auth BOOL,
primary key(id)
) Engine=InnoDB;
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
) Engine=InnoDB;
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(16),
content TEXT,
primary key(id)
);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
primary key(id)
);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
primary key(id)
);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

Bu islemlerin ardindan DNSSEC icin kullanabilecegimiz veritabani semamiz hazir hale geliyor. Simdi veritabanimiza bir alan ekleyecegiz. Istersek bunu yine MySQL uzerinden yapabiliriz fakat degisik bir sey gormek icin bir arayuz kullanalim bu sefer. PowerDNS icin oldukca fazla sayida yonetim arayuzu var. Bunlarin bildiklerimden hicbiri DNSSEC'i desteklemiyor. Dolayisiyla DNSSEC islerini yine terminalden yapacagiz fakat basit bir alani bu arayuzlerden biri ile ekleyelim. Tavsiye edebileceklerim arasinda poweradmin[5] ve powerdns-webinterface[6] var. Zaten ikisi de birbirine oldukca benziyor. Herhangi birini kurabilirsiniz.

Ubuntu icin php5-mysql ve apache2 paketlerine ihtiyac duyacaksiniz bagimlilik olarak. Kurmasi cok kolay oldugu icin daha detaya inmiyorum. Kurulum islemi(bir tar dosyasini indirip actiktan sonra veritabani bilgilerini tutan dosyayi duzenlemek) tamamlandiktan sonra arayuzden alan adimizi ekleyelim. Ben bu yazida .tr altindaki alan adlarinin DNSSEC destegi olmadigini gostermek icin test.name.tr alan adini ekledim.

pdns-webinterface

Bu asamayi da tamamladiktan sonra terminale donup su komutlari verebiliriz.

pdnssec secure-zone test.name.tr
pdnssec set-nsec3 test.name.tr
pdnssec rectify-zone test.name.tr

PowerDNS bizim icin anahtarlari olusturmaktan tutun, kayitlari imzalamaya kadar her islemi yapmis oldu. Bir sonraki yazida BIND ile ayni islemleri elle nasil yapabiliriz onlari da anlatmaya calisacagim. Unutulmamasi gereken en onemli nokta DNS alanimizda herhangi bir kayit degisikligi yaptigimizda (ekleme/cikarma/degistirme) son komut olan pdnssec rectify-zone alanadi komutunu yeniden calistirmak.

dnssec show-zone test.name.tr

komutu ile KSK ve ZSK'lerimizi gorebiliriz. Iki ZSK olmasinin nedeni PowerDNS'in, yazinin baslarinda bahsettigim key rollover islemini otomatik olarak yapmaya olanak tanimasi. Yazinin son kisimlarinda cevrimici araclarla yapilandirmamizi test ederken bu ikinci ZSK'i yeniden gorecegiz.

.tr'nin henuz DNSSEC destegine kavusmadigini (YIL 2013) defalarca tekrarladim ama bir kere daha tekrarlayayim. Su asamada bizim DLV kayitlarina sahip resolverlar icin dlv.isc.org adresine gidip DNSKEY'imizi (KSK) oraya eklememiz gerekiyor. show-zone komutunun verdigi ciktidaki DNSKEY'i dlv.isc.org adresinden bir hesap acip oraya tanitirsak bize DNS alanimiza eklememiz icin bir TXT kaydi veriyor. Yukaridaki ekran goruntusunde de bu TXT kaydinin ekli oldugunu gorebilirsiniz. Gelip bu kaydi DNS alanimiza ekliyoruz ve rectify-zone iceren komutu bir daha calistiriyoruz. Su asamada dlv.isc.org alanin gercekten bize ait oldugunu dogrulamaya calisacaktir. Bu islem de tamamsa artik alanimizi DNSSEC ile sunuyoruz demektir. dnsviz.net adresine gidip kontrol edelim bakalim her sey duzgun calisiyor mu? Bu arac bize asagidaki gibi bir cikti veriyor.

dnssec-test

Bu ciktida gordugunuz siyah kalin oklar DNSSEC destegi olmayan alanlari gosteriyor. Yani . (root) alani .tr icin, .tr alani .name.tr icin, .name.tr alani ise test.name.tr icin bir DS kaydina sahip degil. Dolayisiyla DNSSEC ne yazik ki desteklenemiyor. Fakat ISC'nin islettigi DLV sayesinde test.name.tr alani dogrulanabiliyor. Yalniz dedigim gibi cozumlemeyi yapan resolver'larin bu DLV kaydini kullanacak sekilde yapilandirilmis olmasi gerekiyor. Yine yukarida bahsettigim ikinci ve henuz kullanimda olmayan ZSK'i de kesikli cizgilerle cizilmis elips icerisinde gorebiliyoruz.

Bu testten de basariyla gectiyseniz, tebrikler. Artik DNS alaniniz bir nebze de olsa daha guvenli. Peki bunca seyi nicin yaptik? Burada favori DNS kaydim olan SSHFP'ye geliyoruz. SSHFP, adi uzerinde SSH fingerprint'leri (sunuculari tanimaya yarayan anahtarlar) DNS uzerinden dagitmaya yariyor. OpenSSH da sagolsun bizim icin bu anahtarlari kontrol edebiliyor. Dolayisiyla sunucuya erisirken gercekten erismek istedigimiz sunucuya gittigimize emin oluyoruz. Tabii eger biri DNSSEC ile guclendirdigimiz DNS alanimizla oynamadiysa. SSHFP'ye BIND ile bu islemleri nasil yaptigimiz yazida tekrar deginecegim.

[1] http://tools.ietf.org/html/rfc4034
[2] http://googleonlinesecurity.blogspot.com/2013/03/google-public-dns-now-supports-dnssec.html
[3] http://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xml
[4] http://doc.powerdns.com/html/generic-mypgsql-backends.html
[5] https://www.poweradmin.org/trac/
[6] https://code.google.com/p/powerdns-webinterface/



Yazılım Tanıtımı: Meld, WinMerge Alternatifi


WinMerge Windows ortamında, özellikle phpBB dil dosyalarını tercüme ederken kullandığım özgür bir yazılımdı. phpBB ile olan mesaimiz bitince* bir daha ihtiyacım olmamıştı.

Linux ortamında WinMerge malesef çalışmıyor. Lakin alternatifler de yok değil. 5-6 tane alternatif olsa da basitlik ve kullanım kolaylığı açısından Meld yazılımı hoşuma gitti.

Projenin Sitesinde özellikleri hakkında çeşitli bilgiler verilmiş durumda. Birazını tercüme edip aktarmak istedim.

İlk İzlenim

WinMerge’den aşina olduğum karşılaştırma ekranı beni karşıladı

Orta sıradaki küçük ok tuşları çok faydalı; bir tık ile ilgili seçimi sağa veya sola aktarabiliyor…

Aynı şekilde değişikliklerin gruplandırılması ve işaretlenmesi de çok başarılı.

En Sağ ve En Sol köşelerde farklılıkları vurgulayan barlardan hangi dosyada nasıl bir değişiklik olduğunu gözlemleyebiliyorsunuz.

Directory comparison / Dizin Karşılaştırma özelliğini ihtiyaç duymadığım için kullanmadım.

İki özgür yazılımın yeni sürümlerini karşılaştırırken veya tek kişilik olmayan ekip çalışmalarında karşılaştırma yaparken işe yarayacaktır.

Version control / Sürüm Kontrol konusundaki desteği çok geniş.

Git ve SVN dışında “Bazaar, Codeville, Arch, CVS, Fossil, Mercurial, Monotone, RCS, SVK” sürüm takip sistemlerini de destekliyor.

Beğenmekle birlikte Git veya SVN depom olmadığı için test etmeyi bilen arkadaşlara bıraktım…

Komut Satırı Desteği

Meld’in Komut Satırı desteği bulunuyor.

Dosya Karşılaştırma için:

meld dosya1 dosya2

Klasör Karşılaştırma için:

meld klasor1 klasor2

Sistem Gereksinimleri

Meld’in ihtiyaç duyduğu paketler çok fazla değil. Gnome kurulu ise neredeyse hiç* seviyesinde.

Python 2.6, GTK+/pygtk 2.14, GLib/pygobject 2.16, GtkSourceView/pygtksourceview 2.10 (optional)

Ubuntu Altında Kurulum

Yazılım, Ubuntu depolarında bulunduğu için büyülü sözcükleri kullanmak yetiyor.

sudo apt-get install meld

Alias tanımladığım için benim kur demem yetti.

kur meld

Türkçe Desteği

Meld’in en güzel yanı tamamen *İngilizce olması.

İroni bir yana, Meld rakiplerinin gerisinde kaldığı için veya kimsenin pek ilgisini çekmediği için Türkçe dil desteği konusunda çok zayıf. Hatta Türkçe desteği %0 ile sondan birinci durumda.

https://l10n.gnome.org/module/meld/

https://l10n.gnome.org/vertimus/meld/master/po/tr

Sonuç

Meld, benim işime yaradı ve ihtiyaçlarımla uyuştu. Umarım sizin de işinize yarar.

Not: Görseller Meld proje sitesinden bağlantı verilerek kullanılmıştır.

/** Projeyi başlatan “Stephen Kennedy”den şimdiki yönetici “Kai Willadsen”‘a, emeği geçen herkese sonsuz teşekkürler.

/* phpBB Türkiye ekibine ve WinMerge ile beni tanıştıran @Alexis’e tekrar selamlar, hürmetler.



20 May 2013

Linux Mint Türkiye e-Dergisi ROOT’un 11. sayısı


Bizimkiler yine okunası bir sayı çıkartmışlar.

GNU/Linux için Steam desteğinin gelmesi ile birlikte, bu tarz e-dergilerde kaliteli oyunlara dair nitelikli incelemeler görmek mümkün hale geldi.

Bu sayıda Okan arkadaşımız örnek bir Team Fortress 2 incelemesi sunuyor.

Bir süre e-dergilere ara veren Aydın hocamız da bu sayı ile birlikte tekrar okurlarla buluştu, fark ettim ki onun kendine özgü üslubunu özlemişiz.

İndirmek için buradan, geri bildirimler için buradan.



Yakından Eğitim’de Kötü Amaçlı Yazılım Görsellemesi


Yakındaneğitim kapsamında başlayan Malwarez isimli projede, Gürcan Gerçek alpha (Projenin ilk halinin fikir babası Ben Reardon için Ben kod ismi ile) sürümünü yayınladı. Dağıtık bal çanaklarından gelen kötü amaçlı yazılım bilgilerinin toplanmasını sağlayan hpfeeds ve veri paylaşımını sağlayan Hpfriends kullanarak alınan gerçek zamanlı verilerin Dünya haritası üzerinde görsellenmesini hedefleyen bir proje, Malwarez. Projede Github üzerindeki ilk yol adımı temel düzeyde tamamlandı. Proje detaylarını içeren Tükçe ve İngilizce birer günlük girdisi de yazıldı.

Alpha sürümünde Dünya haritası üzerinde anlık olarak kötü amaçlı yazılım kaynakları gösterilirken, ülke bazında da şehirlere ait sayısal değerleri görmek mümkün. Elbette projede yapılabilecek epey nokta var.

Geri bildirimlerinizi bekliyoruz.



Postfix, Dovecot ve MySQL ile Sanal Kullanici ve Alan Adlari icin E-posta yapilandirilmasi


Yazi biraz uzun, dolayisiyla gezegeni web’den takip edenlerden ozur diliyorum.

Bir gorsel kimi zaman bin kelimeden daha etkili olabildigi icin bir gorselle anlatima baslamak sistemin nasil calistigini aktarabilmek icin faydali olacaktir diye dusunuyorum. Gorsel icin .dia dosyasini yazinin sonundaki adresten indirebilir, indirdiginiz dosyayi istediginiz gibi duzenleyebilir ve dagitabilirsiniz. Kaynak gosterseniz hos olur ama zorunda degilsiniz.

mail

Bu gorselde bulunan sayilara karsilik gelen istek ve yanitlar ise su sekilde;

Gelen Posta
1) Gonderici, posta gondermek istedigi adres icin MX kayitlarini ister
2) DNS sunucu MX kayitlarini gondericiye iletir
3) Gonderici MX kaydinin gosterdigi sunucuya posta gondermek istedigini soyler
4) Postayi alan sunucudaki MTA(postfix), MySQL’e alicinin tanimli olup olmadigini sorar
5) MySQL ustteki sorguya evet ya da hayir cevabini verir.
6) Evet cevabini alan Postfix, Dovecot’a postayi kendisi icin saklamasini soyler
7) Dovecot(MDA) gelen postayi kullaniciya ait dizine depolar

Posta Kontrolu
8) Alici Dovecot’a postalarini kontrol etmek istedigini soyler
9) Dovecot aliciya iletisim icin bu sertifikayi kullan diyerek cevap verir
10) Alici, gelen sertifika ile hesap bilgilerini sifreler ve tekrar yollar
11) Dovecot MySQL’e hesap bilgilerinin dogru olup olmadigini sorar
12) MySQL bu sorguyu yanitlar.
13) Dovecot depolama yaptigi dizinden kullanici icin tuttugu postalari ister
14) Bilgi Dovecot’a gonderilir
15) Gondermesi gereken her seye sahip olan Dovecot kullaniciya postalarini iletir

Giden Posta
16) Alici, Postfix’e posta gondermek istedigini soyler
17) Postfix sertifikasini gonderir ve kimlik dogrulamasi yapmasini ister alicidan
18) Alici gelen sertifika ile kimlik bilgilerini sifreler ve geri yollar
19) Postfix, Dovecot’tan gelen bilgileri kendisi icin kontrol etmesini ister
20) Dovecot, MySQL’e kullanici bilgilerinin dogru olup olmadigini sorar
21) MySQL, Dovecot’a yanit verir
22) Dovecot, Postfix’e kimlik dogrulamasinin sonucunu bildirir
23) Postfix kullaniciya kimliginin dogru oldugunu postayi gonderebilecegini soyler
24) Alici, postayi Postfix’e iletir.
25) Postfix, karsi tarafin MTA’sina postayi iletir (karsi tarafin MX kaydina sahip oldugu varsayilmistir)

Artik sistemin nasil calistigini anladigimiza gore neye ihtiyacimiz oldugunu listelemeye gecebiliriz. Oncelikle posta gondermek isteyen birinin bizi bulabilmesi icin MX kayitlarimiza erisebilmesi gerekiyor. Dolayisiyla bu kayitlari yapilandiracagiz. Ardindan Postfix, Dovecot ve MySQL kurulumunu yapacagiz. MySQL bizim icin alan adlarini, kullanicilarin kimlik bilgilerini ve takma adlarini saklayacak. Dovecot, IMAP ve POP3 sunucu olarak calismasinin yani sira SASL(Simple Authentication and Security Layer) implementasyonu sayesinde Postfix icin kimlik dogrulamasi yapacak. Postfix ise gelen ve giden postalari ilgili yerlere iletme gorevini ustlenecek. Postfix ve Dovecot ile iletisimin duz metin olarak yapilmamasi icin SSL sertifikalari kullanacagiz. Anlatimi Ubuntu 12.04 LTS uzerinde yaptigimi da hatirlatayim.

Host adinin ayarlanmasi
Ben bu rehberde Venus’un bir ayi olarak dusunulen fakat daha sonradan olmadigi anlasilan neith adini kullanacagim. Posta alip gonderecegimiz adres ise .tk’den ucretsiz olarak kayit ettigim konusmalar.tk adresi olacak. Islemleri root olarak gerceklestiriyorum. Ardindan sudo kullanabilen bir kullanici olusturup SSH uzerinden root girisini kapatacagim fakat o baska bir anlatimin konusu.

nano /etc/hosts
127.0.0.1 localhost konusmalar.tk
198.199.112.50 konusmalar.tk neith
echo neith > /etc/hostname
hostname -F /etc/hostname

Bu asamada hostname ve hostname -f ciktilari sirayla su sekilde donmeli.
hostname
neith
hostname -f
konusmalar.tk

DNS kayitlarinin eklenmesi
MX kayitlari iki alandan olusuyor. Priority (oncelik) ve host adi. Ben VPS saglayicinin DNS hizmetini kullandigimdan kontrol paneline gidip oncelige 10, host adina da konusmalar.tk diyecegim bir kayit yaratacagim. Bu anlatimda tek bir posta sunucu yapilandiracagimizdan onceligin ne ise yaradiginin aslinda bir onemi yok ama kisaca aciklamak gerekirse birden fazla posta sunucu kurdugumuzda hangisinin tercih edilmesi gerektigini soylemek icin kullaniyoruz. Ornegin 10 konusmalar.tk ve 20 alt.konusmalar.tk MX kayitlarimiz var. alt ve @ farkli IP adresleri donduren A kayitlarina sahipler. Bize e-posta gondermek isteyen biri MX sorgusu yapiyor ve bu iki kaydi da aliyor. Ilk olarak onceligi yuksek olan (sayi degeri dusuk olan, bu durumda 10) sunucu ile iletisime gecmek istiyor. Eger bu sunucudan bir nedenden oturu cevap alamazsa ikinci siradaki sunucu ile iletisime gecmeye calisiyor. Basitce oncelik alaninin yaptigi is bu. Fakat dedigim gibi tek bir sunucu yapilandiracagimizdan 100 de verilse 1 de verilse bir onemi olmayacaktir. DNS konusundaki ikinci ve son onemli nokta ise MX kaydini tutan hostun bir A kaydina sahip olmasi gerektigi. Bu ornekte ben sunucunun FQDN’i icin (hostname -f ciktisi) konusmalar.tk kullandim karisikliga neden olmamak icin fakat posta.konusmalar.tk ya da oncelik ayarinda anlattigim gibi alt.konusmalar.tk gibi bir FQDN de kullanabilirdim. Eger boyle bir isim kullansaydim konusmalar.tk DNS alaninin (zone) alt ya da posta isimleri icin bir A kaydina (bu adresin IP’si nedir kaydi A kaydi oluyor) cevap vermesi gerekecekti. Eger sunucu adinizi bu sekilde yapilandirdiysaniz ve posta alamiyorsaniz DNS kaydinizi kontrol etmenizde yarar var.

Gerekli paketlerin kurulmasi

sudo apt-get install mysql-server postfix-mysql dovecot-mysql dovecot-lmptd dovecot-imapd dovecot-pop3d

Bu paketler zaten gerekli olan birkac diger paketi de kuracagindan kurulmasi gereken tum paketleri apt-get’e vermemize gerek yok. POP3 destegi vermek istemiyorsak dovecot-pop3d paketini kurmamiza gerek yok. Ayni sey IMAP icin de gecerli. Geri kalanlar anlatimin takip edilmesi icin mutlaka kurulmasi gereken paketleri iceriyor. Belki dovecot-lmptd biraz yabanci gelebilir. LMTP local mail transfer protocol anlamina geliyor. Kavrami aciklamadan once mail queue ne ise yarar ona bakalim. Diyelim postfix’e su iki posta adresine bizim icin bu postayi ilet dedik. Postfix ilk posta adresine gonderimizi iletti fakat ikincisine ilk denemesinde ulasamadi. Iste bu durumda postfix bizim icin daha sonra denemek uzere gonderimizi kuyruga aliyor ve bir sure sonra tekrar iletmeye calisiyor. Yerelde ise bu isi yapmak cekirdek citlemek icin cekic kullanmaya benziyor. Bu yuzden posta iletilebiliyorsa ileten, iletemiyorsa reddeden bir protokol gereksinimi ortaya cikiyor ve adina da LMTP deniyor. Postfix, Dovecot ile LMTP sayesinde iletisim kuruyor.

Kurulum asamasinda MySQL icin root sifresi istenecek. Sonrasinda gelen postfix yapilandirma ekraninda Internet Site secimi yapip, System mail name sordugu yere konusmalar.tk adresini girecegim. Eger alt.konusmalar.tk ya da posta.konusmalar.tk olarak yapilandirsaydim DNS kayitlarimi buraya o degerlerden biri gelecekti.

MySQL yapilandirmasi

Yazinin baslarinda MySQL’in bizim icin kullanici ve alan adi bilgilerini tutacagini soylemistik. Bunun icin bir veritabani ve bu veritabaninda uc adet tablo olusturacagiz. Veritabanina sanalposta, olusturacagimiz uc tabloya ise sirayla, sanal_alanadlari, sanal_kullanicilar ve sanal_takmaadlar isimlerini verecegim. Bu veritabanini kontrol eden kullanici sanalpostayoneticisi olacak ve sifresi anlatim kolayligi acisindan 12345 olacak. Umarim kendi sunucunuzda boyle bir sifre kullanmiyorsunuzdur.

mysql -u root -p
>> CREATE DATABASE sanalposta;
>> GRANT SELECT ON sanalposta.* TO 'sanalpostayoneticisi'@'127.0.0.1' IDENTIFIED BY '12345';
>> FLUSH PRIVILEGES;

Ilk satirda veritabanimizi olusturduk. Ardindan gelen iki satirda ise localhost’tan erisim yapacak ve 12345 sifresiyle kimlik dogrulayacak kullaniciya, sanalposta veritabaninda olusturacagimiz tum tablolarda SELECT islemi yapabilmesi icin izin verdik. Sira geldi sanal_alanadlari tablosunu olusturmaya.

>> CREATE TABLE `sanal_alanadlari` (
`id` int(5) UNSIGNED ZEROFILL NOT NULL auto_increment,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

En son RFC’yi kontrol ettigimde bir alan adi nokta dahil maksimum 64 karakter olabiliyordu. Dolayisiyla name sutununu 64 karaktere sinirladik. int(5) ise sadece gorsellik acisindan onemli oldugundan uzerinde durmaya pek gerek yok. sanal_kullanicilar tablomuzu ise su sekilde olusturuyoruz.

>> CREATE TABLE `sanal_kullanicilar` (
`id` int(5) UNSIGNED ZEROFILL NOT NULL auto_increment,
`domain_id` int(5) UNSIGNED ZEROFILL NOT NULL,
`password` varchar(106) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES sanal_alanadlari(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kullanici tablomuzda bir kullanici id’si, bu tabloyu alan adlari tablosuna baglayan domain_id, kullanici sifresi ve e-posta sutunlarini olusturduk. @alanadi.com su asamada maksimum 65 karakter tutabileceginden kullanici adina 35 karakter yer kaliyor. Eger daha uzun kullanici adlari tanimlayacaksaniz email kismindaki varchar degerini degistirebilirsiniz. Son olarak sanal_takmaadlar tablomuzu olusturalim.

>> CREATE TABLE `sanal_takmaadlar` (
`id` int(5) UNSIGNED ZEROFILL NOT NULL auto_increment,
`domain_id` int(5) UNSIGNED ZEROFILL NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES sanal_alanadlari(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Bir onceki asamada email alani icin varchar degerini degistirdiyseniz buradaki source ve destination alanlarinda da ayni degisikligi yapmak isteyeceksiniz. Gelelim olusturdugumuz bu tablolara veri eklemeye.

>> INSERT INTO `sanalposta`.`sanal_alanadlari`
(`id` ,`name`)
VALUES
('1', 'konusmalar.tk');

>> INSERT INTO `sanalposta`.`sanal_kullanicilar`
(`id`, `domain_id`, `password` , `email`)
VALUES
(’1′, ’1′, ENCRYPT(‘sifre1′, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘kullanici1@konusmalar.tk’),
(’2′, ’1′, ENCRYPT(‘sifre2′, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘kullanici2@konusmalar.tk’);

Yukaridaki istekte rand() ile 0-1 arasinda bir rastgele sayi urettik. Ardindan sha() ile bunu hashledik ve substring(hash, -16) ile bu hash degerinin son 16 hanesini aldik. concat(‘$6$’, hash’in son 16 hanesi) ile elimizdeki degerin basina $6$ ekledik ki bu da crypt icin SHA512 anlamina gelir. Ardindan ENCRYPT ile sifremizi ve az once olusturdugumuz tuzumuzu birlestirip sifre alanimiza bu degeri verdik. /etc/shadow dosyanizdaki root girdisine bakarsaniz benzer bir yapi goreceksiniz.

>> INSERT INTO `sanalposta`.`sanal_takmaadlar`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'root@konusmalar.tk', 'kullanici1@konusmalar.tk');

root posta hesabi icin de bir yonlendirme belirlemis olduk boylece takmaadlar tablomuzda. Simdi bu degerleri kontrol edebiliriz.

>> USE sanalposta;
>> SHOW TABLES;

+——————–+
| Tables_in_anlatim |
+——————–+
| sanal_alanadlari |
| sanal_kullanicilar |
| sanal_takmaadlar |
+——————–+
3 rows in set (0.00 sec)

>> SELECT * FROM sanal_alanadlari;

+——-+—————+
| id | name |
+——-+—————+
| 00001 | konusmalar.tk |
+——-+—————+
1 row in set (0.00 sec)

>> SELECT * FROM sanal_kullanicilar;

+——-+———–+———————————————————–+
| id | domain_id | password | email |
+——-+———–+——————-+—————————————+
| 00001 | 00001 | $6$bf198693267470de$YukkyGzAs/ | kullanici1@konusmalar.tk |
| 00002 | 00001 | $6$da2ea5ba6e70ac34$pRLBLvIRtJ | kullanici2@konusmalar.tk |
+——-+———–+———————————————————–+
2 rows in set (0.00 sec)

password alani burada gosterdigimden cok daha uzun olacak, duzgun gozukmesi icin bir kismini kestim. $ isaretlerine dikkat ederseniz concat ve encrypt islemlerinin sonucunu gorebilirsiniz.

>> SELECT * FROM sanal_takmaadlar;

+——-+———–+——————–+————————–+
| id | domain_id | source | destination |
+——-+———–+——————–+————————–+
| 00001 | 00001 | root@konusmalar.tk | kullanici1@konusmalar.tk |
+——-+———–+——————–+————————–+
1 row in set (0.00 sec)

Yukaridakilere benzer ciktilar goruyorsaniz her sey yolunda demektir.

Postfix Yapilandirmasi

/etc/postfix/main.cf dosyasinin yorumlardan arindirilmis nihai hali su sekilde olacak. Bu ayarlari dosyayi gosterdikten sonra aciklayacagim.

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_tls_security_level=may
smtpd_tls_auth_only=yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
myhostname = konusmalar.tk
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 198.199.112.50
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Postfix, bence, belgelendirmesi en iyi olan ozgur yazilim projelerinden biri. main.cf altindaki her ayarin aciklamasini da http://www.postfix.org/postconf.5.html adresinden bulabilirsiniz. Ustte paylastigim 25-30 tanesinin kisa aciklamalari soyle.

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

Herhangi bir bilgisayardan asagidaki komutu verirseniz

telnet konusmalar.tk 587

size suna benzer bir cikti donecektir.

Trying 198.199.112.50...
Connected to konusmalar.tk.
Escape character is '^]'.
220 konusmalar.tk ESMTP Postfix (Ubuntu)

iste buradaki 220 konusmalar.tk ESMTP Postfix (Ubuntu) satirini smtpd_banner ayari ile kontrol ediyoruz. smtpd_banner’in $myhostname ile baslamasi zorunlu, fakat bunun disinda istediginiz degisikligi yapabilirsiniz. Yani soyle bir goruntu elde etmek mumkun. Fakat bu kisimda belki Ubuntu’yu silmek disinda bir degisiklik yapmanizi pek onermem. Zannetmiyorum ama bu bilgileri e-posta gondermek icin kullanmaya calisan enteresan(!) uygulamalar olabilir.

Trying 198.199.112.50...
Connected to konusmalar.tk.
Escape character is '^]'.
220 konusmalar.tk Linux cok guzel, gelsenize!

Eger 1980′de yasamiyorsaniz biff ayarini no yapmanizda bir sakinca yok. Kullanicilar posta kontrol etmek icin lokal hesaplariyla sisteme giris yapmayacaklarindan -hatta bir lokal hesaplari olmayacagindan- biff kullanmak istemiyoruz.

append_dot_mydomain ayari lokal posta icin gitmesi gereken adresin sonuna alanadinin koyulup koyulmayacagini soyluyor. yani root a gitsin bu posta dediginizde sonuna @konusmalar.tk koymak isteyip istemediginiz soyluyorsunuz. Hayir diye devam ediyorum.

readme_directory derleme, calistirma islemlerini anlatan dosyalarin nerede tutulacagini soyluyor ki hic ihtiyacimiz yok.

smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_tls_security_level=may
smtpd_tls_auth_only=yes

Onemli kisimlardan bir tanesi burasi. Iletisimin duz metin olarak yapilmamasi icin sertifika kullanacagimizi soylemistik. Postfix icin sertifika ayarini burada yapiyoruz. Dovecot kurulurken bizim icin sertifika olusturuyor. Dolayisiyla eger bir CA tarafindan imzalanmis sertifika kullanmiyorsak Dovecot’in bizim icin urettiklerini kullanabiliriz. smtpd_tls_cert_file ve smtpd_tls_key_file sertifikanin ve ozel anahtarin nerede tutuldugunu belirtiyor. smtpd_tls_security_level ile iletisimin mumkunse sertifika ile sifrelenmesini istiyoruz. Burada encrypt ile zorunlu tutabilirdik fakat SquirrelMail kurulumu yaptigimizda encrypt biraz basimizi agritabilir. Eger security_level icin may dersek smtpd_tls_auth_only ile giris yapilmasi icin sertifika kullanilmasini zorunlu hale getirebiliriz ki istedigimiz de zaten buydu.

Bir sonraki onemli kisim SASL ayarlarini yaptigimiz kisim. Yazinin basinda Postfix’in kimlik dogrulamasi yaparken Dovecot’a benim icin su kullaniciyi dogrular misin diyecegini ve bu islemi SASL ile yapacagini soylemistik.

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

auth_enable ile Postfix’e SASL kullanacagimizi soyledik. SASL icin konusacagi daemon’i da smtpd_sasl_type’a dovecot degerini vererek gosterdik. Dovecot ile konusurken kullanacagi soketin yerini path degiskeniyle verdik. Buraya Dovecot’i yapilandirirken bir daha deginecegiz.

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

Yukaridaki ayar hangi kullanicilarin posta gonderebilecegini yapilandirmak icin gereken bir ayar. Icinde reject ya da defer tipinden en az bir tane deger olmasi gerekiyor. permit_sasl_authenticated eger bir kullanici SASL kullarak giris yapmissa posta gondermesine izin verilecegi anlamina geliyor. permit_mynetworks mynetworks’te belirtilen agdaki istemcilere posta gonderme izini verildigini soyluyor. reject_unauth_destination ile eger posta Postfix’in bildigi bir alana gelmiyor ise reddetmesi gerektigini anlatiyoruz.

myhostname = konusmalar.tk
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 198.199.112.50
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Yukaridaki bolumde myhostname, mydestination ve mynetworks parametreleri ilgi alanimiza giriyor. myhostname’i MX kaydindaki gibi ayarliyoruz. mydestination’da sadece localhost’u birakiyoruz. mynetworks’e ise kendi IP adresimizi ekliyoruz.

Gelelim Postfix’in MySQL ile nasil konusacagina.

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

virtual_transport degeri bize Postfix’in postalari MDA(Dovecot) ile nasil degis tokus edecegini anlatiyor. Bunun icin daha once de bahsettigimiz gibi LMTP protokolunu kullanacagiz.

virtual_mailbox_domains kisminda Postfix’in kontrol edecegi alan adlarini MySQL’den nasil alacagini anlatan dosyayi, virtual_mailbox_maps’te ise eslesen alanadlari icin kullanicilari nasil bulacagini gosteren dosyayi belirtiyoruz. virtual_alias_maps ise MySQL’de son olarak ekledigimiz sanal_takmaadlar tablosundaki sorgularin nasil yapilacagini anlatiyor. Boylelikle Postfix yapilandirmasinda son asamaya girmis oluyoruz. O da az once verdigimiz dosya yollarindaki dosyalari olusturmak.

/etc/postfix/mysql-virtual-mailbox-domains.cf dosyasi

user = sanalpostayoneticisi
password = 12345
hosts = 127.0.0.1
dbname = sanalposta
query = SELECT 1 FROM sanal_alanadlari WHERE name='%s'

/etc/postfix/mysql-virtual-mailbox-maps.cf dosyasi

user = sanalpostayoneticisi
password = 12345
hosts = 127.0.0.1
dbname = sanalposta
query = SELECT 1 FROM sanal_kullanicilar WHERE email='%s'

/etc/postfix/mysql-virtual-alias-maps.cf dosyasi

user = sanalpostayoneticisi
password = 12345
hosts = 127.0.0.1
dbname = sanalposta
query = SELECT destination FROM sanal_takmaadlar WHERE source='%s'

Simdi Postfix’i yeniden baslatalim ve bakalim MySQL ile konusabiliyor mu test edelim.

service postfix restart
postmap -q konusmalar.tk mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap -q kullanici1@konusmalar.tk mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
postmap -q root@konusmalar.tk mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Ilk iki sorgu icin 1 ciktisini, son sorgu icin ise hangi posta hesabina yonlendirdiysek onun ciktisini gormeliyiz. Ciktilar dedigim sekildeyse bir sorun yok demektir.

Dovecot yapilandirmasi

Dovecot 2.x surumlerine kadar tek bir yapilandirma dosyasina sahipti fakat yapilandirmanin daha kolay(!) olacagi dusunulerek 2.x surumleri itibariyle bu tek yapilandirma dosyasi birden cok dosyaya dagitildi. Bana sorarsaniz birden cok dosya ile yapilandirmasi daha zor. Fakat gelecege yatirim acisindan bu halini ogrenmek amaciyla birden cok dosya ile yapilandirma yapacagiz. Islem bittiginde doveconf -n ile aslinda bunca isin tek bir dosya ile ne kadar kolay yapilabilecegini gorecegiz.

Dovecot’un bizim icin yapacagi isler sunlardi. MySQL ile konusup kullanicilarin kimliklerini kontrol edecek Postfix icin. Postfix ile LMTP uzerinden konusup kullanicilarin postalarini dosya sisteminde ilgili dizine gonderecek. IMAP ya da POP3 sunucu olarak gorev yapip SSL destegi sunacak.

Ise /etc/dovecot/dovecot.conf ile baslayacagiz. Dosya ayni squid yapilandirma dosyasi gibi inanilmaz sayida yorum iceriyor. Yorumlari kaldirdiktan sonra elimizde kalanlar ise sunlar.

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp
dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
!include conf.d/*.conf
!include_try local.conf

Bu dosyaya bizim ekledigimiz aslinda su satirlar.

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp

POP3 ya da IMAP istemiyorsak buradan kaldirabiliriz. Siradaki dosya /etc/dovecot/conf.d/10-mail.conf dosyasi. Yine yorumlardan sonra icerigi su sekilde.

mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail

mail_location’da postalarin tutulmasini istedigimiz dizini veriyoruz. %d alanadini %n ise kullanici adini ifade ediyor. Bu dosyayla da isimiz bitti.

Simdi gerekli dizini yaratalim.

mkdir -p /var/mail/vohsts/konusmalar.tk

Simdi de Dovecot’un dosya sisteminde posta saklamak icin kullanacagi kullanici hesabini olusturalim.

groupadd -g 2000 vmail
useradd -g vmail -u 2000 vmail -d /var/mail
chown -R vmail:vmail /var/mail

/etc/dovecot/conf.d/10-auth.conf dosyasina gelip kimlik kanitlama ayarlarini yapalim. Yorumlanmis satirlardan sonra kalan satirlar soyle. !include auth-system.conf.ext satirinin basina # koyalim. Sisteme giris yapmis kullanici diye bir sey olmayacagindan ayarina da gerek yok.

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ex
t

auth-sql.conf.ext dosyasi ile MySQL ile nasil konusacagini anlatacagiz.

/etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Yukaridaki dosyada belirttigimiz dovecot-sql.conf.ext dosyasinin icerigi ise soyle olacak yorumlardan sonra.

driver = mysql
connect = host=127.0.0.1 dbname=sanalposta user=sanalpostayoneticisi password=12345
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM sanal_kullanicilar WHERE email='%u';

Dizin sahipligini duzeltelim.

chown -R vmail:dovecot /etc/dovecot
chmod 750 /etc/dovecot

/etc/dovecot/conf.d/10-master.conf dosyasinda soket ayari su sekilde yapiliyor. SSL kullanmasini istedigim icin imap-login ve pop-login’in port degerini 0 ile degistirdim. service-lmtp ve smtp-auth icin postfix’e gosterdigim ayarlari yaptim. Dosyadaki kimi yorumlari eklemelerin nereye yapilacagini gostermek icin birakiyorum.

service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
#port = 993
#ssl = yes
}

# Number of connections to handle before starting a new process. Typically
# the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
# is faster. <doc/wiki/LoginProcess.txt>
#service_count = 1

# Number of processes to always keep waiting for more connections.
#process_min_avail = 0

# If you set service_count=0, you probably need to grow this.
#vsz_limit = 64M
}

service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
#port = 995
#ssl = yes
}
}

service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}

# Create inet listener only if you can’t use the above UNIX socket
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

service imap {
# Most of the memory goes to mmap()ing files. You may need to increase this
# limit if you have huge mailboxes.
#vsz_limit = 256M

# Max. number of IMAP processes (connections)
#process_limit = 1024
}

service pop3 {
# Max. number of POP3 processes (connections)
#process_limit = 1024
}

service auth {
# auth_socket_path points to this userdb socket by default. It’s typically
# used by dovecot-lda, doveadm, possibly imap process, etc. Its default
# permissions make it readable only by root, but you may need to relax these
# permissions. Users that have access to this socket are able to get a list
# of all usernames and get results of everyone’s userdb lookups.

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group = vmail
}

# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}

# Auth process is run as this user.
user = dovecot
}

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn’t necessary, the user should be changed to
# $default_internal_user.
user = vmail
}

service dict {
# If dict proxy is used, mail processes should have access to its socket.
# For example: mode=0660, group=vmail and global mail_access_groups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}
}

Siradaki dosya /etc/dovecot/conf.d/10-ssl.conf dosyasi. Yorumlardan sonra kalan satirlar su sekilde. Ayarlar zaten kendini aciklar nitelikte.

ssl = required
ssl_cert = ssl_key =

Bu asama ile posta sunucu yapilandirmamizi tamamladik. Dovecot ve Postfix servislerini yeniden baslatalim.

service postfix restart
start dovecot

Thunderbird ile ornek olarak olusturdugumuz kullanicilardan birini yapilandirabilirsiniz. Yeni kullanicilar ya da alanadlari eklemek icin MySQL komut satirina dusup ornek kullanicilari ekledigimiz sekilde sorgulari ya da istekleri tekrar calistirmaniz gerekiyor. Tabii bu arada hangi alanadinin hangi id ile tutuldugu gibi detaylar gozden kacirilmamali. Catchall diye tabir edilen ve bir kullanici adiyla eslesmeyen tum postalari yakalamak icin sanal_takmaadlari tablosuna source icin @alanadi.com adresini verebilirsiniz.

Squirrelmail kurulumu ile rehberi tamamlamadan once yapmak isteyebileceginiz bir iki sey uzerinde durayim. Submission portunu(587) acmak icin /etc/postfix/master.cf dosyasini duzenlemelisiniz. Benim yapilandirmamda ilgili bolum soyle gorunuyor. Farkettiginiz uzere bu dosyada da main.cf dosyasinda oldugu gibi smtpd_sasl_auth_enable ve smptd_client_restrictions gibi secenekleri kullanabiliyoruz.

submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks,reject

Servislerin calisip calismadigi, calisiyorlarsa hangi portlari dinlediklerini gormek icin ise benim kullandigim komut su. IPv6 henuz ilginizi cekmiyorsa buyuk hata yapiyorsunuz fakat t’nin yanina 4 ekleyebilirsiniz sadece IPv4 icin. Ilk uc kolonu almazsak cikti suna benzeyecektir. Ben sadece IMAPs sundugum icin 993, SMTP icin ise 25 ve 587 calistiriyorum. Siz bu ciktida SSH ve calistiriyorsaniz diger daemon’lari da goreceksiniz.

netstat -plnt4

Active Internet connections (only servers)
Local Address Foreign Address State PID/Program name
127.0.0.1:3306 0.0.0.0:* LISTEN 22790/mysqld
0.0.0.0:587 0.0.0.0:* LISTEN 24543/master
0.0.0.0:25 0.0.0.0:* LISTEN 24543/master
0.0.0.0:993 0.0.0.0:* LISTEN 22920/dovecot

Squirrelmail yapilandirmasi

Ilk olarak gerekli paketi kuruyoruz.

apt-get install squirrelmail

Squirrelmail bir suru bagimliligiyla birlikte kurulacaktir. Ardindan su komutu veriyoruz.

squirrelmail-configure

SquirrelMail Configuration : Read: config.php (1.4.0)
———————————————————
Main Menu –
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color on
S Save data
Q Quit

Command >>

gibi bir ekran bizi karsilayacaktir. Onemli bolum 2. Server Settings dedigi bolum. R ile bir onceki menuye donuluyor. S ile yapilan ayarlar kaydediliyor. Q ise ile yapilandirmadan cikiliyor. 2′ye basrak ayarlara gecelim. Bu menude A ve B tuslariyla IMAP ve SMTP ayarlarinizi yapabilirsiniz.

Son islem ise Apache’ye squirrelmail yapilandirmasini tanitmak. Hazir gelen yapilandirmayi kopyalayalim.

cp /usr/share/squirrelmail/config /etc/apache2/sites-available

Sites-available altina aldigimiz dosyada istedigimiz degisiklikleri yapabiliriz. Ornegin alias direktifini duzenleyelim.

Alias /posta /usr/share/squirrelmail

Degisikliklerimizi de yaptiktan sonra Apache’yi yeniden yukleyelim.

service apache2 reload

Artik kullanicilar hesaplarina http://konusmalar.tk/posta adresine eriserek giris yapabileceklerdir.

Screenshot from 2013-05-20 14:09:59

Ekler:
doveconf -n ile tek bir dosya olsaydi yapilandirmanin nasil olacagini gorecegiz demistim. Su sekilde gozukuyor.

# 2.0.19: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-23-virtual x86_64 Ubuntu 12.04.2 LTS ext4
auth_mechanisms = plain login
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
protocols = imap lmtp
service auth-worker {
user = vmail
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service imap-login {
inet_listener imap {
port = 0
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
}
ssl = required
ssl_cert = ssl_key = userdb {
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
driver = static
}

Diyagramin kaynagi ise surada: https://blog.cagriemer.net/wp-content/uploads/2013/05/posta.dia



19 May 2013

iPhone ‘u Ubuntu’da webcam olarak kullanmak


Raspberry Pi için kamera modülleri bakarken aklıma eskiden Nokia 6670 telefonumu MSN’e webcam olarak kullandığım zamanlar geldi :) Aynı şekilde iWebcamera adlı iPhone uygulaması kendini bilgisayarınıza kurduğunuz istemci uygulaması yardımıyla webcam olarak gösteriyor. Ancak firma linux için istemci uygulaması yazmamış, sadece Windows ve Mac OS X ile çalışıyor. Ancak biraz araştırmayla linux ile de çalışabileceğini şu arkadaş yazmış.

iWebCamera ile istemci aynı network üzerinde çalışıyor ve iPhone üzerindeki uygulama sunucu haline geliyor. (http://iPhone_ip_adresi:8080/strm adresinden çalışıyor.) İstemci uygulama da bu adresten veriyi alarak kendisini kurulu olduğu işletim sistemine video sürücüsü olarak gösteriyor. Biz de gstreamer kullanarak aynı işlemi yapacağız.

Ubuntu Raring Ringtail için gereken paketleri kurun. (Gstreamer versiyonunuz 0.10 ‘dan daha yeni olmalıdır.

apt-get install build-essential libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libtool autoconf mercurial gstreamer-tools git

v4l2 loopback sürücüsünü (işletim sistemine kendisini video sürücüsü gibi gösterecek olan yazılım) ve Gstreamerin bunu tanıması için gereken yazılımı kurun.

git clone git://github.com/umlaeute/v4l2loopback.git
git clone git://github.com/umlaeute/gst-v4l2loopback.git

Önce video loopback sürücüsü kurulmalı ve kernel modülü olarak sisteme yüklenmeli.

cd v4l2loopback && make
sudo make install
sudo modprobe v4l2loopback

Buraya kadar her şey sorunsuz gitmiş ise, artık birden fazla video sürücünüz vardır. (/dev/video0 , /dev/video1 şeklinde gidecektir.)

Daha sonra Gstreamer yardımcı programı kurulmalı;

cd ../gst-v4l2loopback && ./autogen.sh
make && sudo make install

Eğer kurulum başarılıyla sonlanmış ise aşağıdaki komut ile yeni oluşan video sürücüsünün bilgilerini alabilirsiniz.

gst-inspect v4l2loopback

Artık test zamanı. iPhone üzerinde iWebCamera uygulamasını çalıştırın ve açık tutun. Ubuntu ‘da ise aşağıdaki komutu çalıştırın. (Bende ayrıca bir webcam olduğu için oluşan loopback cihazı /dev/video1 adresini aldı)

gst-launch-0.10 souphttpsrc location=http://iPhone_IP_adresi:8080/strm ! jpegdec ! ffmpegcolorspace ! v4l2loopback device=/dev/video1

Açılan pencere de iPhone kameranızla çektiğiniz görüntüyü anlık olarak görebilmelisiniz.

* Kamera yayınını Ubuntu üzerinde Skype için kamera olarak kullanmak isterseniz ;

gst-launch-0.10 souphttpsrc location=http://iPhone_IP_adresi:8080/strm ! jpegdec ! ffmpegcolorspace ! video/x-raw-yuv,format=(fourcc)YUY2 ! v4l2loopback device=/dev/video1

Mplayer ya da Miro gibi başka bir uygulama ile izlemek isterseniz;

gst-launch-0.10 souphttpsrc location=http://iPhone_IP_adresi:8080/strm ! jpegdec ! ffmpegcolorspace ! “video/x-raw-yuv,width=640,height=360,framerate=30/1,format=(fourcc)I420″ ! v4l2loopback device=/dev/video1

Kaynaklar:

http://www.kudanai.com/2010/11/howto-use-your-iphone-as-webcam-in.html
https://github.com/umlaeute/v4l2loopback/wiki



18 May 2013

Makale: Şubeler Harita Üstünde Görünsün


Birkaç gün önce, Şubeleri Harita Üstünde İşaretlemek konusuna kısa bir giriş yapmış ve klasik şube arama mantığını taşlamıştım.

Taşladığımız diğer bir konu da bilenlerin bildiklerini paylaşma konusundaki isteksizliği veya belgelendirme konusu idi.

Bu sıkıntıyı OpenOffice/LibreOffice konusunda 2 yıldır yaşarken Tübitak tarafından hazırlanmış kitaplar ve çevirimiçi yardım içerikleri sayesinde aşıldı.

/* Emeği geçen herkese tekrar sonsuz teşekkürler

Konumuza geri dönersek; Bir franchise zincirinin şubelerini listelememiz gerekiyordu ve bunu harita üstünde yapmamız gerekiyordu.

Örnek olarak sunulan uygulamayı inceleyip ilgili firmayla iletişime geçtik.

Merhaba Sabri Bey, Bizim xyz isimli bir uygulamamız var. Bu uygulama web sitenize eklenebiliyor. Ücreti, kiralama yöntemiyle senelik 3000 TL, satın alma yöntemiyle ise 12.500 TL.

Teklifini işitince alternatif yöntemlere doğru kanalize olduk…

Sonuçta ortaya şu güzel görüntü çıktı.

Peki nasıl yaptık?

Sır değil, tamamen özgür ve ücretsiz araçlarla. Birkaç yazı okuduk, biraz çay içtik, biraz kod yazdık.

Öncelikli olarak;

Sitemizdeki Body etiketini şöyle değiştirdik.


Sonrasında gerekli çağırma işlemlerini yaptık



Util.js dosyası şunları içeriyor

/**
* Returns an XMLHttp instance to use for asynchronous
* downloading. This method will never throw an exception, but will
* return NULL if the browser does not support XmlHttp for any reason.
* @return {XMLHttpRequest|Null}
*/
function createXmlHttpRequest()
{
	try
	{
		if (typeof ActiveXObject != 'undefined')
		{
			return new ActiveXObject('Microsoft.XMLHTTP');
		}
		else if (window["XMLHttpRequest"])
		{
			return new XMLHttpRequest();
		}
	}
	catch (e)
	{
		changeStatus(e);
	}
	return null;
};

/**
* This functions wraps XMLHttpRequest open/send function.
* It lets you specify a URL and will call the callback if
* it gets a status code of 200.
* @param {String} url The URL to retrieve
* @param {Function} callback The function to call once retrieved.
*/
function downloadUrl(url, callback)
{
	var status = -1;
	var request = createXmlHttpRequest();
	if (!request)
	{
		return false;
	}

	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			try
			{
				status = request.status;
			}
			catch (e)
			{
				// Usually indicates request timed out in FF.
			}
			if (status == 200)
			{
				callback(request.responseXML, request.status);
				request.onreadystatechange = function() {};
			}
		}
	}
	request.open('GET', url, true);
	try
	{
		request.send(null);
	}
	catch (e)
	{
		changeStatus(e);
	}
};

/**
* Parses the given XML string and returns the parsed document in a
* DOM data structure. This function will return an empty DOM node if
* XML parsing is not supported in this browser.
* @param {string} str XML string.
* @return {Element|Document} DOM.
*/
function xmlParse(str)
{
	if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined')
	{
		var doc = new ActiveXObject('Microsoft.XMLDOM');
		doc.loadXML(str);
		return doc;
	}
	if (typeof DOMParser != 'undefined')
	{
		return (new DOMParser()).parseFromString(str, 'text/xml');
	}
	return createElement('div', null);
}

/**
* Appends a JavaScript file to the page.
* @param {string} url
*/
function downloadScript(url)
{
	var script = document.createElement('script');
	script.src = url;
	document.body.appendChild(script);
}

Sonrasında biraz Js kodu eklememiz gerekiyor sayfamıza


	
»

Bu kodlarda birkaç nokta önemli, lakin en önemlisi subelerdata.xml kısmı; burada şube bilgilerimizi çekiyoruz.

Bunun dışında şu kısımlar çeşitli ayarlar içeriyor: başlangıç kordinatları, zoom seviyesi, harita tipi vs, sonra kurcalarsınız.

		var myLatlng = new google.maps.LatLng(20,10);
		var myOptions =
		{
			zoom: 2,
			center: myLatlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			mapTypeControl: true,
			panControl: false,
			zoomControl: false,
			scaleControl: false,
			streetViewControl: false
		}

Geldik XML dosyamıza. XML dosyamız proje için özelleştirilmiş durumda. İhtiyacınız olmayacak kısımları createMarker jscript fonksiyonunu →

createMarker(name, latlng, adres, adres2,url)

← ve XML dosyasını kurcalayarak kaldırabilirsiniz.

 ?xml version="1.0" encoding="UTF-8"?>

	
	
	

Geriye katmanımızı yerleştirmek kaldı

Çalışırsa çalışır, çalışmazsa neden çalışmadığını bana sormayın :)

Son ipucum, XML dosyasındaki koordinatları nasıl bulacağınız konusunda olsun

		lat="40.219581" 
		lng="29.061592" 

Şu araç İşinize yarayacaktır.

Çalışan uygulama: http://mrkumpir.elluga.com/subeler.php adresindedir; bakıp inceleyebilirsiniz.

/*Malezya, GeorgeTown’dan selamlar, sevgiler…



17 May 2013

Fuduntu Projesi Hakkında


Fuduntu projesi yakın zamanda bitirilmiş ve İngilizce forum kapatılmıştı.

Daha sonra, dağıtımın üç ayrı koldan çatallandığını ve çalışmalara başlanıldığını öğrendik.

Baki ağabeyimin şuradaki yazısına katılarak, bu çatallanmanın Fuduntu için faydalı olacağını düşünmediğimi ve bundan sonra Fuduntu’nun devamı niteliğindeki hiçbir oluşumda rol almayacağımı buradan bildiririm.

(Özgür yazılımda çatallanmaya karşı değilim fakat Fuduntu gibi kısıtlı bir topluluğa sahip, ancak yükselişe geçmiş bir dağıtımın bir anda sonlandırılması ve sonra da üç ayrı koldan devam edileceğinin duyurulması, dağıtımı iş gücü ve kullanıcı tabanı açısından büyük bir sıkıntıya sokmuş durumda.)

Başta Baki ALPERTÜRK ve Eren KOVANCI olmak üzere, Fuduntu Türkiye projesinde rol almış herkese en içten teşekkürlerimi iletiyorum.

Linux Mint Türkiye’de özgür yazılım adına hep beraber daha uzun soluklu işler yapabilmek temennisiyle.



Bence BMC!


TMSF BMC’ye El Koydu Haberini görünce kendimi Nostradamus gibi hissettim.

Ben Demiştim :)

Şimdi gelelim soruya: Holding’in sitesi bile BMC Kamyon ile açılıyor. Holding ana sayfasından bu resmi ne zaman kaldıracaklar? 1 dakika ile ASLA arası diyenler orta parmağını kaldırsın.

Güzel parmak; Lütfen o güzel parmağı hiç indirmeden, şu soruyu hatırlayın: Devlet’in BMC’ye teslim etmediği zırhlı araç Kirpi için kestiği ceza ve çok daha fazlası kimin cebinden çıkacak!?

Lütfen parmağınızı indirmeyiniz! Gözünüze falan da sokmayınız! Çünkü o parmağın artık temiz olduğundan şüpheliyim!



16 May 2013

RHEL Disk I/O Performance Tunning


If you struggled to cope with disk I/O on virtual host machines which runs on Centos or RHEL, there is a great system performance tuning tool named TUNED, comes with different profiles.

For installing tuned;

yum install tuned -y

starting the service permanently;

service tuned start
chkconfig tuned on

service ktune start
chkconfig ktune on

status of running profile;

tuned-adm active

list of profiles;

tuned-adm list

setting the profile for disk I/O optimization;

tuned-adm profile virtual-host

if you want to disable defined profile (i don’t thing you will consider this :) ;

tuned-adm off

You are going to see significant optimization on atop tool. Here are tuned profile summary;

tunable default enterprise storage virtual host virtual guest latency performance throughput performance
kernel.sched min granularity ns 4ms 10ms 10ms 10ms 10ms
kernel.sched wakeup granularity ns 4ms 15ms 15ms 15ms 15ms
vm.dirty ratio 20%ram 40% 10% 40% 40%
vm.dirty background ratio 10% ram 5%
vm.swappiness 60 10 30
I/O Scheduler (Elevator) CFQ deadline deadline deadline deadline deadline
Filesystem Barriers On Off Off Off
CPU Governor ondemand performance performance performance
Disk Read-ahead 4x


Mac Mini üzerinde Mac OS X ve Ubuntu (Dual boot)


Evde uzun bir süredir sunucu olarak Mac Mini kullanıyordum. Snow Leopard kurulu olan sunucum Mac Mini (Mac Mini 1,1 i686 – 2006 ve öncesi) eski olduğu için artık üzerine Lion veya Mountain Lion kuramazdım. Ayrıca yeni gelen birçok universal uygulama 64bit istiyordu. Ben de üzerinde Ubuntu çalıştırmak için araştırmalar yapıyordum. Sonunda dün cihazı ofise getirdim (evde ekransız kullanıyordum) ve kurulum yaptım.

Mac Mini İntel işlemci kullandığı için Ubuntu seçtim. Kurulum için tek gereken Ubuntu image dosyası ve Mac Mini BIOS yerine EFI kullanığı için rEfit.

- rEfit ‘i download edin ve Mac üzerine kurun. ( Kurulumun / dizinine yapıldığından emin olun.)
- Ubuntu CD/DVD ‘nizi veya bootable Ubuntu USB diskinizi cihaza takın ve cihazı yeniden başlatın.
(Mac Air kullanıyorsanız external CD/DVD kullanabilir ya da başka bir cihaz üzerinde Ubuntu USB Creator veya uNetBootin kullanarak Ubuntu USB kurulum diski oluşturabilirsiniz.)
- Cihazı yeniden başattığınızda rEfit açılış yöneticisi çıkacaktır.
- Disk bölümlendirme için gParted tercih ettim.
- gParted seçtiyseniz rEfit ile seçim yapıp Ubuntu Live açılışını başlatın, gParted ile Linux için 2 partition (1-ext4 , 2-swap) oluşturun.
- Ubuntu kurulumunu tamamlayarak cihazı yeniden başlatın.

Artık hem Mac OS X hem de Ubuntu çalışan bir Mac’iniz var.

* Varsayılan olarak Ubuntu açılmasını istiyorsanız; /efi/refit/refit.conf dosyasında aşağıdaki satırı açın, cihazı yeniden başlatın.

default_selection L



15 May 2013

Bitirme projesi


Üniversitenin son yılında bütün mühendislik fakültelerinde iki dönem süren bir bitirme projesi dersi oluyor. Bu ders iyi kullanılırsa öğrencinin meslek hayatına atılmadan önce kullanabileceği çok iyi fırsata dönüştürülebiliyor. Eğer bir özgür yazılım projesine katılmamışsa yeni mezun bir bilgisayar mühendisinin şunu yaptım diyebileceği bitirme projesinden başka çok az şey oluyor elinde. Bir diğer fırsat alanı da yaz stajları ama o ayrı bir yazının konusu olabilir.

Elbette bir özgür yazılım projesinin parçası olmak cv'ye yazılabilecek en havalı şey. Bunun için ne bir danışmana ihtiyacınız var ne de başka bir şeye. Biraz İngilizce ve çokça çalışmak sizi istediğiniz özgür yazılım projesine dahil edebilir. Bence bir bilgisayar mühendisinin ortak çalışma yürütebildiğini, bir plana bağlı çalışabildiğini gösteren en önemli gösterge okulunun dışındaki birileriyle birlikte bir geliştirme yapmış olmasıdır. Ohloh'daki hesabınız bence sayfalarca cv'den daha etkili olacaktır.

Aşağıdaki önerileri okurken bambaşka doğrular da olabileceğini hesaba katmak, bunları yapmadan da çok başarılı olunabilirken bunları yapıp da başarısız olunabileceğini de unutmamak gerekir.

Danışman seçimi:

  • Bitirme projesinde danışmanınızı siz seçebiliyorsanız (bunun seçime bağlı olmadığı yerler de var) ne yapmak istediğinize bağlı bir seçim yapın. Danışmanınızın sürekli çalışmalarınızla ilgilenmesini, danışmanlık yapmasını istiyorsanız size vakit ayırabilecek birini seçin. Bu konuda hayalci olmayın. Hocanın ders yükünü haftalık mesaisinden çıkartıp kalan zamanı öğrenci sayısına bölmeyin. Gerçekte size ayırılabilecek zaman bu hesapta ortaya çıkanın çok altında olacaktır. Sizin de dersleriniz var ve bunlar hocanın size ayırabileceği vakitlerle nadiren çakışmayacaktır. Bir hocanın haftalık 1-2 saatini size ayırabilmesi durumunu olumlu kabul etmelisiniz. Projenizde daha fazla danışmanlığa ihtiyacınız olacaksa bunu baştan hocayla konuşun.
  • Projenize fazla karışan olmasın istiyorsanız gidin başı en kalabalık hocayı seçin. Hocanın çalışma alanıyla sizin projenin arası ne kadar fazla açılmışsa o kadar serbest kalacaksınızdır muhtemelen. Bunu önermiyorum ama hocanın çalışma alanında birşeyler yapıp gözden ırak olmayı beklememek gerekir diye yazıyorum.
  • Kiminle çalışacağınıza kesinlikle üçüncü sınıfın sonunda karar vermiş olun. Hocanın o yıl mezun olanlara hangi projeleri yaptırdığına bakın. Bazen çok iyi bir danışman sizi pek de ilgilenmediğiniz bir alana yöneltip, sevdirebilir. Danışmanınız olmasını istediğiniz bir kaç hocayla konuşun. Yanına gittiğiniz herkesin "nasıl bir konuda çalışmak istiyorsun" diye soracağını ve sizin "bilmiyorum" cevabınızı beğenmeyeceğini hemen söyleyebilirim.
  • Danışmanınızla ev arkadaşı olmayacağınızdan en çok anlaşabildiğiniz hocayı seçmenize gerek olmasa da en anlaşamadığınız hocayla çalışmak da çok keyifsiz olacaktır.
  • Bitirme projesindeki danışmanınızı en azından haftada bir defa göreceksiniz ve bu onu sınıfta 40-50 kişiyle birlikte görmek gibi olmayacak. Ya tek başınıza ya da ekip arkadaşlarınızla olacaksınız. Muhtemelen arada yaptıklarınızı beğenmeyecek. O hafta niye yeterince çalışmadığınızı soracak. Bazen onun dinlemeye enerjisi olmayacak ama sizin hep anlatacak enerjinizin olması gerekecek. O size kızacak ama siz ona küsemeyeceksiniz, bunu kesaba katın.
  • İlk iş başvurunuzda muhtemelen danışmanınız aranacak referans olarak.
  • Belki danışmanınızın 100. öğrencisi olacaksınız ama o sizin tek danışmanınız olacak. Bu seçimi iyi düşünerek yapın.
  • Sonuçta kiminle çalışırsanız çalışın herşeyi siz yapacaksınız. Çok çalışırsanız başarılı olacaksınız. İşin en net kısmı burası.
Proje seçimi:

  • Proje seçimi aşamasında sizden beklenen hangi alanla ilgilenmek istediğinize karar vermiş olmanız. Bu çerçeveyi belirlediğinizde konuyu hocanın danışmanlığında kararlaştırabilirsiniz. Elbette üzerinde çalışmak istediğiniz konuyu belirleyebilmişseniz bu daha da iyi olacaktır ama danışmanlık denen iş konuya karar verme aşamasında başlıyor çoğu zaman.
  • Kendinizi nasıl bir iş yaşamının içinde düşünüyorsanız bununla ilgili bir proje konusu belirlemeye çalışın. Mesleğe atılmadan önceki son yılınızı bir bakayım bu konuya diyerek geçirmeyin. Meslek hayatınızda tornavida tutmayı planlamıyorsanız bitirme projenizde de tutmayın.
  • Hiç yapılmamış birşeyi yapmaya çalışmayın. Sizden dağların yerini değiştirmeniz beklenmiyor. Bu proje ile kendinize en fazla ne katabilirseniz öyle değerlendirin.
  • Hem ulusal hem de uluslararası bir çok proje yarışması var. Onlardan birine katılmak yararlı bir deneyim olabilir.
  • Meslek hayatınızı da teorik çalışmalarla geçirmeyecekseniz mutlaka sonucunda ortaya birşey çıkan bir proje konusu belirleyin.
  • Okuldan mezun olduğunuzda bitirme projesi de sizin için bitmiş olacak. Bunu düşünerek yıl sonuna kadar tamamlayabileceğiniz bir iş seçin. Kesinlikle mezun olduktan sonra da geliştirmeye devam ederim demeyin. Etmezsiniz.
  • Projenizi belirledikten sonra mümkün olduğunca duyurun. Hakkında blog yazın, kodlarını paylaşın. Fikriniz çalınır diye korkmayın. Zaten işi tamamladığınızda gösterebilmek için yapıyorsunuz. Çalacak olan o zaman çalar. Çok istisnai durumların dışında projeniz hakkında ne kadar çok ses çıkartırsanız o kadar iyi olacaktır sizin için. Konuşabileceğiniz, çalışmalarınızı sunabileceğiniz her fırsatı değerlendirin.
Bireysel çalışma mı ekip çalışması mı?

  • Her ikisinin de zorlukları var. Bireysel çalışırsanız takıldığınız yerden çıkarken yardım alabileceğiniz kimse olmayacaktır ama bu aynı zamanda kimseyi bir yerden çıkarmanızın da gerekmeyeceği demek olur.
  • İkiden daha kalabalık ekiplerin yönetimi işi çok zahmetlidir. Hele ekip elemanlarının arkadaşlarınız olacağını düşünürseniz, ancak çalışma konunuz birbirinden bağımsız alanlara ayrılabiliyorsa ve danışmanınız bu kalabalık ekibi idare etmeyi göze alıyorsa böyle bir işe girişin. Yoksa sonu hüsran olur.
  • İki kişilik bir ekip iyidir aslında. Bazen siz ona sırtınızı dayarsınız, bazen o size. Hem koordine olması hem de birbirinin eksiğini kapatması kolay olur ama sakın sevgilinizle birlikte bir ekip oluşturup bitirme projesi yapmaya kalkmayın.
  • Mezun olduğunuzda mutlaka bir ekiple çalışacaksınız diye illa bitirme projesini de bir ekiple yapmanız gerekmez. İş hayatındaki takım arkadaşlarınız profesyonel insanlar olacağından (tamam beklentilerinizi çok yüksek tutmayın ama bu işten para kazanıyor olacaklar en azından) öğrencilikten çok farklı bir çalışma disiplini olacak herkeste. Çalışacağınız konuya, danışmanınıza ve size bağlı olarak bireysel çalışmak bazen daha iyi olabilir.


14 May 2013

Steam’in Linux’taki İlk 6 Ayının Ardından


steamlinux

Dünyada dijital oyun dağıtımının liderliğine sahip olan Steam, Linux için ilk beta sürümünü 2012 yılının kasım ayında kullanıcılara sunmuştu. 2003 yılında Windows ve 2010 yılında Mac sürümlerini (ve beraberlerinde bu platformlar için oyunlarla birlikte) çıkartan Steam’in Linux’taki ilk 6 ayında neler olduğunu şöyle toparlamaya çalışayım.

  1. Beta’nın yayınlandığı ilk akşam Linux oyun kütüphanesinde 26 oyun vardı. Bugün bu sayı 115. Bu oyunlara hızlıca göz gezdirdiğimizde çoğunun indie dediğimiz bireyler veya küçük oyun stüdyoları tarafından hazırlanan oyunlar olduğunu görüyoruz. Tabii ki sayfalara göz gezdirdiğimizde adını daha çok duyurmuş oyunlarla karşılaşabiliyoruz ama bunların da çoğunun Half-Life, Portal, Counter-Strike gibi yine bizzat Valve’in geliştirdiği oyunlar olduğunu görüyoruz.
  2. Steam Donanım & Yazılım istatistikleri sayfasında işletim sistemleri başlığını genişlettiğimizde karşımıza çıkan tüm Linux yüzdelerini toplayacak olursak 1.82% gibi bir sayı çıkıyor karşımıza. Bu yüzdenin önemli bir çoğunluğunu Ubuntu kullanıcıları oluştururken liderlikte 54.18% ile 64 bit Windows 7 kullanıcıları yer alıyor. Windows 8 kullanıcılarının sayısı ise toplamda 11.65%.
  3. İster Linus Torvalds tepkisini “gösterdi” diye olsun, ister Steam Linux’a geldi diye olsun; Nvidia’nın Optimus destekli ilk resmi sürücülerinin Linux’a çıkması da bu 6 ay içine denk geliyor :)
  4. Hakkında çok fazla açıklama olmasa da Valve’in Linux tabanlı oyun konsolu olan Steam Box söylentileri aldı başını gidiyor…

steamlinux

 

Gelecek İçin Tahminlerim

  1. Valve’in ürettiği tüm oyunlar neredeyse Linux’a port edildi ve Linux katalogundaki diğer oyunlar gibi güzel güzel problemsizce, takılmadan ve Windows sürümlerinden daha performanslı şekilde çalışıyorlar. Şu an aklıma geldiği kadarıyla geriye Portal 2 ile Dota 2 kalmış durumda, Dota 2 de Linux’a port edilirse kullanım yüzdelerinde bir miktar artış olacaktır (yazıyı hazırladığım şu an dünya genelinde Dota 2′yi açmış ve oynayan oyuncu sayısı 289.321).
  2. Geride bıraktığımız 3 yıl içersinde Mac için çıkmış olan oyun sayısı 412. Bu oyunlara hızlıca göz gezdirdiğimde Grand Theft Auto III-VC-SA başlıkları, Assassin’s Creed serisinden 1-2 başlık, Knights of the Old Republic gibi 4-5 Star Wars başlığı gibi adları duyulmuş ünlü oyunlar da yer alıyor ancak bu oyunların henüz Linux sürümleri yok. Bu başlıkların Windows’un yanı sıra Mac’e de çıkmış olmaları, oyun üreticilerinin eğer isterlerse ve gerekli emeği gösterirlerse Microsoft teknolojilerine olan bağımlılıklarını kırarak başka platformlarda da oyunlarını çalıştırabildiklerini gösteriyor. Örneğin daha ilk günden Linux’ta oynanabilir olan Serious Sam 3. Bu oyunların da şirketlerin zaman ayırdıkça Linux’a birer ikişer geleceğini düşünüyorum. Mesela indie cenneti haline gelmiş Linux’a aniden Assassin’s Creed IV: Black Flag geliverse ne güzel olurdu değil mi?
  3. Steam Box’ın Playstation gibi, Xbox gibi rakiplerini olduğu bir pazarda pay alabilmesi için yukardaki maddede de belirttiğim gibi ünlü oyunların Linux sürümlerini çıkartması için oyun şirketlerini teşvik etmesi gerekiyor.

Özetle ilk 6 ay Valve’in Linux dünyasında kendine yer açmasıyla geçti diyebiliriz. Artık diğer şirketlerin de katkı vermeye başlaması zamanı geldi. Bakalım bir 6 ay daha geçtikten sonra ne değişiklikler yaşanacak.



Laptop > Az Akıllı Telefon


Bir süre önce yazdığım bank asya yazısında başıma gelenleri biraz yazmıştım.

Şimdi gol atma sırası bizde. 2 ayda 600TL telefon faturası ödedikten sonra az akıllı telefondan kurtulmaya karar verdim. Peki ülkemizin sıkı korunan hiç hacklenmeyen telefonla şifre gönderen bankalarına nasıl gireceğiz…

Benim çözümüm, Sanal Makine’de Android Tablet çalıştırmak oldu.

Linux dünyasının özgürlüğünün bir ürünü olan Android, AndroVM projesiyle VirtualBox için OVA formatında paketlenmiş olarak geliyor.

AndroVM indirme sayfasında 4 farklı paketlenmiş OVA dosyası var.
T: Tablet, P: Phone, Telefon anlamında kısaltmalar.

Tablet ve Telefon desteğini birlikte veren ve içinde Flash desteği olan sürümünü indirmeyi uygun gördüm. Diğer sürümlerde Android Market uygulamasını bulamadım.

İndirmek için kullanabileceğiniz bağlantı

Ova dosyalar ISO formatlı cd dosyaları gibi sanal makine oluşturmaya gerek duymuyor.

VirtualBox ana ekranında File -> İmport Apliance yoluyla ova dosyasını tanıtmanız yeterli. Sanal makineniz kurulacaktır.

Güzel bir durum ise bu sürümün Laptop’unuzun internet ayarlarını direk tanıyarak köprü kurması, sizi fazladan uğraştırmaması.

Sonrasında Android Market uygulamasını bulup, ilgili bankanın şifre uygulamasını veya bankacılık uygulamasını kurmanız ve gerekli ayarları tamamlamanızdan ibaret.

Penang Malezya’dan, selamlar hürmetler.



13 May 2013

Şubeleri Harita Üstünde Göstermek


25 tane şubesi olan bir franchise/pazarlama zincirinin web sitesini elden geçiriyoruz.

Tasarımcı arkadaşlar klasik yöntemle hareket etmişler. Bir köşeden Ülke Seç, sonra İl seç, sonra Şehir seç.
Sonuç: Giresun ilimizde (benim memleketim) simit krallığının şubesi bulunmamaktadır.

Akbank ise daha daha özenli bir iş yapmış.

http://www.akbank.com/akbank-sube-atm.aspx

Aslında geo location bilgisini okuyarak en yakın şubeyi ve en yakın ATM’yi müşteriye gösterme imkanını varken es geçmiş.

Bence komik olan bir altyapı eksikliği de ATM İstiyorum seçeneğinde bulunuyor. ATM için nokta işaretlediğinizde şöyle uyarı veriyor:

ATM istediğiniz nokta için lütfen İl ve İlçe seçimi yapınız.

Angelina Jollie’nin dudakları ile Pamela Andersan’ın göğüsleri arasında bir yer seçmediğimize göre, kordiant okuyan altyapının İl ve İlçe bilgisini de kendisi bulması mümkündür.

Sözü fazla uzatıp işi şeytan taşlamaya çevirmeden:

Gelişen teknolojiyi ve yeni teknolojileri projelerimizde kullanmaz lazım. Lakin “Akşam Olsada Yatsak” diyen memuriyet mantığıyla değil; pratik, gerçekçi, kullanıcıyı dikkate alan bir yapıda uygulamak lazım…

“Şubeleri Harita Üstünde Göstermek” diye bir konuya dalmamın sebebi ise Malezya’lı Emlak Sitesi’nin şu güzel uygulaması oldu

http://www.propertyguru.com.my/property-map-search?&listing_type=rent

Geo Location konusunda biraz makale kurcalayınca Türkçe pek içerik olmadığını gördüm. Şubeleri harita üstünde işaretlemeyi çözersem konuyla ilgili bir makale yazmam mümkün olabilir.

Malezya, Penang’dan hürmetler, selamlar.



Wifi Algoritması Bu Kadar Kolay Olmamalı


Üzerinde misafir kaldığım ülkenin vatandaşlarına ücretsiz sunduğu wifi hizmeti var. Bir form ile kimlik kimlik no yazmak yeterli. Lakin benim bu ülkede bir kimlik numaram yok.

Yine de formu doldurdum. Kimlik doğrulaması kısmına gelince takıldım. Javascript ile bir korunan bir doğrulama algoritması vardı. Hemen kaynağı görüntüledim. Kimlik nosu için istenen özellik regex bu kadar basit imiş…

var icRegEx = /^[0-9]{6}[\- ]?[0-9]{2}[\- ]?[0-9]{4}$/;

Hemen bir deneme yaptım

111111-22-3333

Sistem beni önce vatandaşlığa sonra üyeliğe kabul etti :)

Ne demişler, Javascript ile saadet olmaz.

Normalde “Parayla Saadet Olmaz” parçasını eklerdim ama biraz Malezya havası katalım yazıya; sonuçta açık’lanan Malezya’ya ait bir durum.



Nagios'da Kullanıcı Oluşturma


Nagios'da web arayüzünden kimlik kanıtlaması yaparak sistem durumunu inceleyebiliriz. Bu durumda birden fazla farklı yetkilere sahip kullanıcılar oluşturumamız gerekebilir. Örneğin bir kullanıcı sadece web arayüzündeki bilgileri okusun ancak değiştiremesin (read-only) istiyorsak şu şekilde yapmalıyız. Öncelikle belirlediğimiz kullanıcı adı ve parolayı "htpaswd" komutuyla "/etc/nagios3/htpasswd.users" dosyasına yazdırmalıyız.  "htpasswd htpasswd.users testuser" diyerek "testuser" isimli bir kullanıcı adı ve parolası belirlemiş olduk. htpaswd komutunun bir miktar parametresi var. Şifrelenmesi gereken parolanın şifreleme algoritması türünü seçebiliriz, parolayı düz metin olarak tutabiliriz, oluşturduğumuz kulllanıcıları silebiliriz gibi.

Oluşturduğumuz bu kullanıcıya sadece webten okuma yetkisi vermek ise şu şekilde:
Öncelikle "/etc/nagios3/cgi.cfg" dosyasında muhtemelen yorum satırı halinde bulunan "authorized_for_read_only=" satırının başındaki "#" kaldırıp oluşturduğumuz kullanıcı adını ekliyoruz. Zaten cgi.cfg dosyasından oluşturulan kullanılacalara hangi yetkileri verebileceğimiz ile ilgili bilgiler var. Oradan istediğimiz özellikleri açabiliriz.

Oluşturduğumuz kullanıcıyı contact.cfg ( /etc/nagios3/conf.d/contacts_nagios2.cfg ) dosyasında da tanımlamalıyız.
define contact{
contact_name testuser
alias alias2
service_notification_period 24x7
host_notifications_enabled 1
service_notifications_enabled 1
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email mail_adresiniz
}
   
define contactgroup{
  contactgroup_name       test
  alias                   alias_test
  members                 testuser
  }
 
Bu tanımlamalarıda ekledikten sonra, Nagios'da çalıştırdığımız komutların tanımlamalarını yaptığımız yerlere "testuser" kullanıcısını ait olduğu grup adını eklemeliyiz ki, izlenen servisler "testuser" kullanıcısı tarafından görülebilsin. O da şu şekilde olmalı:
 
define command{
 command_name        cb_disk_read
command_line          $USER1$cb_disk_read  $ARG1$  $ARG2$ ...
}

define service{
  use                  generic-service
  host_name            localhost
  service_description  Couchbase Disk Read
  check_command        cb_disk_read!10!0
  contact_groups       admins, test # testuser'in bulundugu grup
}



Nagios Couchbase Eklentisinin Canlı Demosu Hazır


Bu dönem Kaan ile birlikte üzerinde çalıştığım Yakından Eğitim projesi olan Nagios Couchbase eklentisinin bu hafta büyük bir kısmını tamamladık, ve demosunu hazırladık. Uygulamanın çalışır halini web arayüzünden "testuser" kullanıcı adı ve "password"  parolası ile "http://54.234.80.73/nagios3/"  linkinden görebilirsiniz. Kullanıcı adı ve parolamızla sisteme girdikten sonra şöyle bir arayüzle karşılacağız:


Sol köşede "Current Status" kısmındaki "Services" bölümüne tıkladıktan sonra nagios kullanarak izlediğimiz servisleri görebiliriz.

Burada sistemin kendi üzerindeki kullanıcı sayısı, http servisi, ssh gibi çalışan süreçleri dışında benim CouchBase'den bilgi çekerek izlemimizi sağladığım özellikler de var. CouchBase, nagios ile aynı makine üzerine kurulu olduğundan localhost tanımlamasıyla nagios üzerinden izleme yaptım. Buradaki Couchbase'den aldığımız bilgilerin açıklaması ise şu şekilde:

CouchBase CAS: CAS aslında "check and set methods" kısaltması olarak kullanılıyor. Bu methodlarla var olan bilgiyi güncelleyebiliyoruz. 
CouchBase Create per second: Saniye başına disk üzerinde oluşturulan yeni verilerdir.
CouchBase Delete per second: Saniye başına disk üzerinde silinen verilerdir.
CouchBase Disk read: Belirtilen bucket için disk üzerinde yapılan okuma işlemleridir.
CouchBase Disk write queue: Belirtilen bir bucket üzerinde yazılmayı bekleyen kuyruktaki veriler.
CouchBase Memory usage: Kullanılmış olan bellek miktarı.
CouchBase Operation per second: Disk üzerinde saniye başına yapılan işlem sayısı.
CouchBase Disk update per second: Saniye başına disk üzerinde güncellenen veri miktarı.
CouchBase Disk set per second: Saniye başına disk üzerinde yapılan yazma işlemleri.

Nagios CouchBase Plugin diğer yaptığım projeler gibi bir özgür yazılım projesi ve GPL ile lisansladık. Uygulamanın kaynak koduna buradan bakabilir ve alıp kullanabilirsiniz. Gördüğünüz hataları, eksikleri, tavsiyelerinizi almaktan da oldukça memmun oluruz.

Bir kaç hafta içerisinde de CouchBase'den çekilmesi gereken diğer bilgilerle birlikte, daha fazla test etme, kod iyileştirme gibi kısımlarıda yaptıktan sonra projeyi bitirmiş olacağım.

12 May 2013

Honeynet GSoC istatistikleri


Bu seneki Google Summer of Code başvuru süreci bitti ve değerlendirme süreci içerisindeyiz. Bu süreç içerisinde her organizasyona verilecek slot sayısı ve kabul olacak öğrenciler belli olacak. David Watson geçen senelerde olduğu gibi bu sene de başvurular ve geçen senelerdeki durumu özetleyen istatistikleri yayınladı. Son başvurunun, süre bitimine 27 saniye kala olması, öğrencilerin kendi fikirlerini proje olarak sunmaları dikkate değer kısımlar. Dubai’deki çalıştayda da en başarılı projelerin öğrencilerin kendi önerdikleri projeler olduklarının altını çizmişlerdi. İçinde Android geçen projeler geçen sene de pek yüksek başvuru oranına sahip idi. Bu sene de o değişmemiş. Honeynet ekibindekilerin geliştirdikleri düşük etkileşimli balçanağı Thug, merkezi balçanağı verisini almanızı veya o merkeze katkı vermenizi sağlayan Hpfeeds, node-link grafik yaklaşımı ile trafik içerisindeki etkileşimi görselleyen Afterglow bu sene yeni fikirler ile başvuru alan projeler.

Benim önerdiğim ve danışmanı da olurum dediğim Network Analyzer projesine bu sene azımsanmayacak bir başvuru oldu. GSoC içerisindeki ilk danışmanlık tecrübem.  Süreç içerisinde Türkiyeden de başvurular aldım. İçlerinde iyi başvurular da vardı. Adil bir değerlendirme yapabilmek için yardımcı danışmanlarla beraber ortak karar vermeye çalışıyoruz. Bu sene Honeynet, geçen senelerden farklı olarak öğrenci değerlendirme sürecine danışmanlardan farklı bir başka Honeynet üyesini daha dahil etti. Bunun epey faydasını gördüm diyebilirim. Dışarıdan bir gözün de değerlendirme soruları sorması ve kendi kişisel notlandırmasını yapması, vereceğimiz karardan daha emin olmamızı sağlayacak.

Ben danışmanlık işinin biraz daha rahat geçeceğini düşünmüştüm ama değerlendirme süreci de dahil olmak üzere her başvuran ile ayrı ayrı ilgilenmek, yazdıklarını okumak, kodlarını incelemek, güzel bir fikri varsa değerlendirmeye çalışmak da epey vakit alan işlermiş. Tek başıma olsa epey zorlanırdım gibi geliyor. Her ne kadar Network Analyzer’ın şu anki kodlarını ben yazmış olsam da, yeni eklenecek fikirlere göre baştan doğru kararlar almak, yanlış yola sapmamak çoğu zaman öğrencilerden daha çok geriyor işin aslı. Diğer danışmanların olaya el atması epey rahatlatıyor diyebilirim.

Değerlendirme sonuçları 27 Mayıs’ta açıklanacak. Network Analyzer için başvuranların kafasında soru işareti olduğunu sanmıyorum. Hemen hepsinin kafasında kabul sürecinden sonra ne ve nasıl yapacaklarına dair fikirler olduğunu biliyorum. Bizlerin iyi başvuru dediğimiz başvurularım bu projeyi iyi bir şekilde bitireceklerine de inanıyorum. Aslında işin gerisi bu düşünceleri gerçekleştirebilmeleri ve yoldan sapmamaları için öğrencileri yönlendirmek olacak diye düşünüyorum. Büyük işi onlar yapacak.

Bakalım bu sene Google’un vereceği slotlar projelerin hepsine yetecek mi?



11 May 2013

sslh: beşi bir yerde!


Çoğu zaman kurumlarda çalışırken insanı zıvanadan çıkartacak, hatta tansiyonunu fırlatacak (literally) proxy yapılandırmalarıyla karşılaşmak mümkün oluyor. Hatta öyle ki, bazen bir yazılım kurmak istediğimde veya bir yere bağlanmam gerekiyorsa ilgili kurumdaki sistem yöneticisini ikna etmek için kırk takla atmam gerekiyor.

Benzer kısıtlamalardan bunalan Yves Rütschle oturmuş sslh‘ı yazmış. sslh, tek bir portu (isterseniz birden fazla ayarlamak da mümkün) kullanarak bu port üzerinden birden fazla hizmete erişebilmenizi sağlayan, katman görevinde bir yazılım. SSL ve SSH’in karışımından türetilmiş bir isim.

Genelde erişimi engelleyen yerlerde https (443) başta olmak üzere bazı portlar serbest bırakılır. Dolayısıyla bir porttan dışarı çıkabiliyorsanız, sslh yardımıyla SSH, HTTP(S), OpenVPN, XMPP hizmetlerine bağlanmanız mümkün oluyor. sslh’ı belirli bir portta -tercihen 443- dinlemeye (listening) alıp, bahsettiğim protokollere aktarmasını sağlayabiliyorsunuz.

Çoğu dağıtım için sslh’ın paketleri bulunuyor. Ben Arch Linux üzerinde nasıl yaptığımı anlatacağım. Öncelikle sslh’ı sürekli kullanacaksanız için bir ayar dosyası oluşturmanızda fayda var. Öteki türlü parametreleri kullanmak isterseniz nerden baksanız 1 paragraf bir komut girmek zorunda kalabilirsiniz.

Gelelim kuruluma, Arch Linux üzerinde kurmak için pacman kullanmanız yeterli, sslh’ın paketi Arch Linux depolarında (community) yer alıyor:

pacman -S sslh

Paket kurulduktan sonra /etc/sslh.conf dosyasını dilediğiniz gibi yapılandırabilirsiniz. Ben SSH, SSL, OpenVPN için aşağıdaki yapılandırmayı kullanıyorum.


verbose: true;
foreground: true;
inetd: false;
numeric: false;
timeout: 2;
user: "nobody";
pidfile: "/var/run/sslh.pid";

listen:
(
{ host: "0.0.0.0"; port: "443"; }
);

protocols:
(
{ name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; probe: "builtin"; },
{ name: "openvpn"; host: "localhost"; port: "1194"; probe: "builtin"; },
{ name: "http"; host: "localhost"; port: "80"; probe: "builtin"; },
{ name: "ssl"; host: "localhost"; port: "8443"; probe: [ "" ]; }
);

on-timeout: "timeout";

Yapılandırma dosyasındaki ilk 6 satır öntanımlı sunucu ayarları. Ne oldukları zaten anlaşılıyor. Listen bloğundaki değer, sslh’ı hangi interface’lerde hangi portta çalıştıracağınızı belirtmek için kullanılıyor. Ben 443 portunu kullanmayı tercih ediyorum.

Daha önemlisi ise protocols kısmı. Burada 443′ten gelen taleplerin arka taraftaki hangi servise/porta gideceğini belirttiğiniz kısım. probe kısımları önemli, zira “protocol mismatch” dediğimiz protokol çakışması durumunda ne olacağına burası karar veriyor. Kaba bir tabirle, 443 numaralı porta gelen talebin hangi servise gideceğine “prober” karar veriyor. (web sunucuda https için 8443 kullanıyorum, 443′ü sslh kullanıyor çünkü)

Ben bu hizmetlerin tamamını TCP protokolünde çalıştırıyorum, UDP denemedim. OpenVPN’i eğer udp kullanıyorsanız, tcp’ye çekin veya tcp’de çalışan bir instance çalıştırın.

Gelelim çalıştırma kısmına, sslh yapılandırmasını kaydettikten sonra Arch Linux kullanıcılarının vermesi gereken tek komut şu:

systemctl start sslh-fork.service

Elle çalıştıracaklar için ise verilecek komut şu:

/usr/bin/sslh-fork -f -F /etc/sslh.conf

Bu şekilde tek bir portu kullanarak birden fazla servise ulaşmanız mümkün oluyor.



Oh My Zsh!


Facebook’taki nixCraft sayfasının paylaştığı bir yazıda Zsh ile Bash’in karşılaştırılmasının yapıldığı bir slayt ile karşılaştım. Slaytta bahsedilen zsh özelliklerini anlık olarak kendi bilgisayarımda da denedikten sonra sanırım bir süreliğine yıllardır standart olarak kullandığım Bash’i bir kenara kaldırmaya karar verdim çünkü görünüşe göre slaytta bahsedilen 3-5 özellikten çok daha fazlasını sunan bir shell ile karşı karşıyayım :)

Söz konusu slayta http://www.slideshare.net/jaguardesignstudio/why-zsh-is-cooler-than-your-shell-16194692 adresinden erişebilirsiniz.



10 May 2013

İspanya’da LibreOffice Rüzgarı Esiyor


“Libre” İspanyol dilinde Özgür demek; LibreOffice de Özgür Ofis demek(miş). Bu açıdan düşününce LibreOffice’e bir ispanyol sempatiyle yaklaşmam kaçınılmaz olurdu herhalde. Kağan Mete muhabbetini es geçersek.

İspanya Özerk yönetimlerden Extremadura hükumeti özgür yazılım dünyasına hızlı bir giriş yaparak 40.000 bilgisayarda 2013 yılı sonuna kadar LibreOffice’e geçiş yapma kararı almış. Yapılan hesaplara göre bu geçiş ile hükümet yıllık 30 Milyon Euro / 38 Milyon Dolar tasarruf yapmayı planlıyormuş.

*In the meantime, another large migration to LibreOffice has been announced, as the government of Spain’s autonomous region of Extremadura has just begun the switch to free software of desktop PCs and expects the majority of its 40,000 PCs to be migrated by the end of 2013. Extremadura estimates that the move to open source – including LibreOffice – will help save 30 million Euro per year.

*Kaynak

Haberin başka kaynağındaki yazanları da okursak önceki hükumet zamanında orta öğretimlerde 70.000, sağlık sektöründe 15.000 bilgisayarda lokal linux dağıtımı Linex’e geçiş yapmışlar. Hatta 40.000 bilgisayarı kapsayan yeni geçiş de özelleştirilmiş bir Linux dağıtımı olan sysgobex üstünden olacakmış.

*The region’s government has decided to switch 40,000 PCs to open source software, including a customised Linux distribution called Sysgobex.

* Extremadura’s previous government had already switched 70,000 PCs in secondary schools and 15,000 PCs in health care to a local Linux distribution called Linex

* Kaynak

Linux dağıtımına geçiş işlemi bittiğinde Extremadura hükümeti, Fransa’nın ardından ikinci büyük Linux ve LibreOffice kullanıcısı konumuna yükselecekmiş.

Darısı, federasyonla yönetilen güzel *ülkemiz Malezya’nın başına… Münir Nurettin ne de güzel söylemiş:

/Penang, Malezya’dan selamlar hürmetler…



09 May 2013

SSH erisimi icin Google Authenticator Destegi


Yakindan Egitim[1] projeleri ilk duyuruldugunda proje tanimlarini okurken kimlik kanitlama araci fikri oldukca hosuma gitmisti. Gecenlerde tekrar kontrol ettigimde YEKK projesinin degerlendirilme sureci sonrasinda devam ettirilmemesine karar verildigini farkettim.[2][3] Google Authenticator ile isimi gorebilir miyim acaba diye bakinirken bu sabah, kodun aslinda ornek bir pam modulu[4] oldugunu ogrendim. Gerisi zaten iplik sokugu gibi geldi. Ubuntu makineler icin suradaki[5] betigi yazip 13.04′te test ettim. Bagimliliklar saglandigi muddetce de eski surumlerde calisabilecektir. Ornegin 12.04′te bir sorun cikarmasini beklemiyorum.

Kabaca anlatmak gerekirse betigin yaptigi isler soyle; Uygulama icin gereken bagimliliklari kontrol ettikten sonra Google Code’dan kaynak kodu indirip derliyor. Derlemenin ardindan google-authenticator ikiligini calistiriyor ve ev dizinine bir seferlik acil durum sifrelerinin ve gizli anahtarin tutuldugu bir dosya olusturuyor.

1

Ardindan libqrencode3 sayesinde terminalde, telefonunuzdaki Google Authenticator uygulamasini yapilandirmak icin kullanabileceginiz bir kare kod goruntuluyor. Yine bu asamada bir de cevrimici olarak goruntuleyebilecegiz kare kod baglantisi basiyor. Asagidaki ekran goruntusunun kare kod uzerindeki ilk satirina dikkatlice bakarsaniz gorebilirsiniz.

2
Kare kod’un kalitesi icin ozur dilerim, hata onarmada oldukca basarili oldugu icin iyice bulaniklastirmam gerekti. Bu islem de tamamlandiktan sonra /etc/pam.d/sshd dosyasinin basina su satiri ekliyor.

auth required pam_google_authenticator.so

Son olarak /etc/ssh/sshd_config dosyasinda su asagidaki degisikligi yapip SSH servisini yeniden baslatiyor.

ChallengeResponseAuthentication yes

3

Bu islemden itibaren makineye her SSH erisimi yapmaya calistiginizda once sizden Verification Code dedigi bir seferlik sifreyi girmenizi istiyor. Eger bu sifre dogru ise kullanici sifrenizi girip oturum acabiliyorsunuz. Eger oturum acmak icin sifre yerine genel/ozel anahtar ciftinizi kullaniyorsaniz herhangi bir etkisi olmuyor. Kodun icerisinde de belirttigim uzere eger giris yapamiyorsaniz, sunucunuzun ve Google Authenticator uygulamanizin saatlerinin dogru olduguna emin olmalisiniz.

4

Betik, yazilabilecek en duzgunu en hizlisi degildir muhtemelen fakat benim bilgim bu kadarini yazmaya yetiyor. Dolayisiyla soyle olursa daha iyi olur ya da burada sunu yapman lazim aslinda gibi onerilerinizi iletirseniz memnun olurum.

[1] http://yakindanegitim.org
[2] http://blog.yakindanegitim.org/2013/05/ara-donem-degerlendirme-sonuclar.html
[3] https://github.com/YakindanEgitim
[4] https://code.google.com/p/google-authenticator/source/browse/#git%2Flibpam
[5] https://github.com/cagriemer/betikler/blob/master/totpssh.sh



07 May 2013

Birden fazla aynı isimli kablosuz aygıtı arasından seçmek


Sanırım bu iş normalde düzgün bir arayüz aracılığı ile yapılıyor. Ama benim gibi yersiz yere wpa ayarlarını interfaces dosyasından yapıyorsanız, (sanırım bu noktada artık okuyan kalmadı hehe: ) ) ve birden fazla aynı isimli kablosuz aygıtı arasından bir tanesini seçmek istiyorsanız (ör: yan yana olan starbucks ve nero kablosuz aygıtlarını seçmek, çünkü Doruknet in sistemi logout u başaramıyor) şu komutu kullanabilirsiniz:
iwconfig wlan0 essid DorukNet_WiSpotter ap 6C:F3:7F:11:BF:C1
Böylece uzak kablosuz aygıtının MAC adresi ile seçim yapabilirsiniz. MAC adresleri nerede diyecek olursanız, ifup wlan0 dedikten sonra:
iwconfig wlan0 scan
Bundan sonra muhtemelen DHCP üzerinden IP almak isteyeceksiniz:
dhclient wlan0
Luzümsuz bilgi iletimi devam edecektir : )

Linux ile Uzay İstasyonu ve Ötesine


Bugün LibreOffice özel listelerinde gördüğüm bir haberi Türkçeye çevirip buradan aktarmak istedim. Haberin konusu NASA’nın uzay istasyonundaki dizüstü bilgisayarlarda Windows kullanmayı bırakıp bu bilgisayarlarda Linux kullanmaya karar vermesi, haliyle bu da demek oluyor ki kişisel kullanımdaki Linux ile birlikte LibreOffice de artık uzaya çıkıyor.

E-posta listesinde denildiğine göre -bazımız için bilindik şeyler- NASA epeyce zamandır komuta ve kontrol sistemlerinde GNU/Linux kullanmakta ayrıca başlıklı roketler, küçük araçlar, uydular ve Mars Rover’ları gibi araçlarda Unix ve GNU/Linux sistemleri kullanmakta. Sadece NASA değil elbette GNU/Linux’u ileri teknolojide kullanan, Büyük Hadron Çarpıştırıcısı’nın sahibi İsviçre’nin meşhur CERN laboratuvarlarında bilgisayarlarda kendilerine özel ürettikleri “Scientific Linux” dağıtımı koşmakta diyerek habere dönelim.

——————————————%<——————————————

“Evinizde yapabileceğiniz Linux ile çalışan Iron Man elbisesi hikayemin aksine, bu hikaye bilim kurgu değil. NASA, Uluslararası Uzay İstasyonu(ISS-International Space Station)’nda bulunan dizüstü bilgisayarlarda Windows kullanmayı bırakıp bu bilgisayarlarda Linux kullanmaya karar verdi ve uzaydaki ilk insansı robot R2 gerçekten Linux ile çalışıyor.

Bu bilim kurgu değil. Bu R2, uzaydaki ilk insansı robot ve Linux ile çalışıyor. (Resim: NASA)

Bu bilim kurgu değil. Bu R2, uzaydaki ilk insansı robot ve Linux ile çalışıyor. (Resim: NASA)

United Space Alliance üstlenicisi, NASA’nın Hesaplama Uzay Operasyonları müdürü ve ISS’nin Dizüstü ve Ağ Tümleştirme Takımları lideri Keith Chuvala NASA’nın ISS bilgisayarlarını Linux’a taşımaya karar vermiş olduğunu belirtti. “Anahtar işlevlerimizi Windows’tan Linux’a taşıdık çünkü biz kararlı ve güvenilebilir – ki kurum içi kontrolü bize verecek bir işletim sistemine ihtiyaç duyduk. Böylece eğer bir yamaya, ayarlamaya veya  uyarlamaya ihtiyaç duyduğumuzda yapabileceğiz.”

Özellikle, ISS astronotları Debian 6 koşan bilgisayarlar kullanacaklar. Önceleri bazı yerleşik bilgisayarlarda Scientific Linux veya Red Hat Enterprise Linux(RHEL) klonu kullanılmıştı. Debian’ın en yeni sürümü olmamasına rağmen, Debian 7 henüz yeni çıktı, Debian eğer iyice test edilmezse ve güvenilmezse Debian hiçbir şeydir.

Linux’un ISS’de ilk fırlatılışından beri kullanulması(PDF bağlantısı) ve NASA yer operasyonlarının neredeyse Linus Torvalds’ın Linux’u yarattığı günden beri onu kullanmasına rağmen, uzayda kişisel bilgisayarların kullanıldığı pek görülmemiştir. “Gerçekten tıklanan şeyler” diyor Chuvaka röportajında “Linux’un dünyayı nasıl gördüğünü, bir şeyin başka bir şeyi etkilemesindeki birbirine bağlılığı anlamamızdan sonra başka bir dünya görüşüne ihtiyacınız var. Benim epeyce Linux tecrübem var, fakat diğerlerinin bunu kaptığını görmek heyecan vericiydi.”  

Uçuş-içi dizüstü bilgisayarlarda görülmesine ek olarak, Linux ayrıca Robonaut(R2), uzaydaki ilk insansı robot, üzerinde de koşmakta. Şu anda istasyonda ve deneme kipinde olan R2, astronotlar için çok tehlikeli ve yorucu görevleri yerine getirmek için tasarlanmış.

Astronotlara yardım etmek ve Bilgi Teknolojileri uzmanlarına hız kazandırmak için, NASA The Linux Foundation(Linux Vakfı)‘a güveniyor. Chuvala’nın açıkladığı üzere “NASA olabildiğince çok türlü”.

“Yoğun biçimde Debian Linux, bunun yanısıra çeşitli RHEL/Centos kurulumu aldılar. Çünkü bizim eğitimimiz dağıtım çeşitliliğine uygun olarak esnek, bu farklı çevreleri tek bir eğitim oturumunda gösterme imkanımız var. Başka bir eğitim organizasyonu bunu sağlayamaz.”

Ayrıca diğer hiçbir işletim sisteminin Linux kadar esnek olmadığını da belirtmeliyim. Süperbilgisayarlardan robotlar ve masaüstlerine, NASA cevabın Linux olduğunu bulmuş.

Kaynak: ZDNET – To the space station and beyond with Linux, Steven J. Vaughan-Nichols  http://www.zdnet.com/to-the-space-station-and-beyond-with-linux-7000014958/

——————————————%<——————————————

Görüldüğü gibi bulunmuş cevabı tekrar aramaya gerek yok. Linux’un insanlık için ne kadar faydalı olabileceğini görmek varken hala kapalı kaynak teknolojilere dayanarak ilerlemenin pek de geleceği yok gibi, o sebeple beyhude yatırımlar yapmamak lazım, bunun yerine özgür yazılıma destek vermek gerekmekte. Kamunun çıkarına olan da budur.

Çok uzatmaya, açık olana yorum katmaya gerek yok. Dilerim bizim de kurum ve kuruluşlarımız da bir an önce özgür yazılıma geçiş için öncü adımlar atarlar. Geç oluyor…

Mutlu günler.

İlgili Diğer Başlıklar:

  1. LibreOffice ile doldurulabilir PDF form belgeleri oluşturmak
  2. Okular’da PDF üzerine not yazmak ve daha fazla okuma alanı!
  3. Debian Pardus Seçkisi 2011.3RC1 diye bir şey gördüm.