29 Aralık 2010 Çarşamba

Crontab

Crontab Nedir?


Cron, istenilen işlerin belirli aralıklarla sistem arkaplanında çalışmasını sağlayan bir yardımcı yazılımdır. Crontab (CRON TABle - CRON TABlosu) çalıştırılacak cron elemanlarını ve ne zaman çalıştırılacaklarını tutan bir dosyadır.


Nasıl Çalışır?


Bir cron iş takvimi (schedule) basit bir ASCII metin dosyasıdır. Her kullanıcı kendi cron iş takvimine sahiptir. Bu genellikle Linux makinelerde /var/spool/cron/crontabs içinde bulunur. Crontab dosyaları direk olarak değiştirilemez ya da yaratılamaz. crontab komutunu kullanmadan dosyaya erişemezsiniz. 


$ crontab -e 


komutuyla crontab dosyasını düzenleyebilir ya da eğer yoksa yeni bir dosya oluşturabilirsiniz. Dosya sistemdeki varsayılan metin editörüyle açılacaktır. export EDITOR=vi ile vi'yi varsayılan editör yapabilirsiniz (ya da vi yerine istediğiniz editörü yazabilirsiniz). 

Bütün cron işleri en az 6 bölümden oluşur. Her bölüm tek boşlukla ayrılır. Son bölüm kendi içinde boşluklar barındırabilir. İlk 5 bölümde kendi aralarında kullanılması haricinde boşluğa izin verilmez. Bu ilk 5 Bölüm bir işin ne zaman ve hangi aralıklarla çalışacağını belirler. 



Bir işin genel yapısı şu şekildedir:


*   *   *   *   *       çalıştırılacak komut
-    -   -    -   -
|    |   |    |   |
|    |   |    |   +---- day of week - haftanın günü (0-7) (pazar için 0, isim kullanılabilir(ingilizce))
|    |   |    +-------- month - ay (1-12) (veya ay isimleri)
|    |   +------------- day of month - ayın günü (1-31)
|    +----------------- hour - saat (0-23)
+---------------------- minute - dakika (0-59)


Yıldız (*) o zaman birimindeki tüm geçerli değerlerin kullanılacağı anlamına gelir (her saat, haftanın her günü gibi). 


Bir zaman biriminde birden fazla değer kullanmak için değerleri virgülle (,) ayırmak gerekir. Eğer bir aralık girmek istiyorsanız başlangıç ve bitir tire (-) ile ayrılır. Örneğin, eğer komutunuzun pazartesiden cumaya her saat için :05 ve :35 geçe çalışmasını istiyorsanız girdiniz şu şekilde olmalıdır:


5,35 * * * 1-5 


Altıncı bölüm verilen zaman(lar)da çalıştırılacak komutu içerir. Örneğin, "temp" dizininizi her sabah 4:45'te temizlemek için:

45 4 * * * rm /home/{kullanıcı-ismi}/temp/*


Dosya kaydedildiği zaman çalışmaya başlar. Başlatmak için herhangi bir şey yapmanıza ya da bir program çalıştırmanıza gerek yoktur. Crontab dosyada bir komut olduğunda zamanı geldiğinde çalıştıracaktır. Bir girdinin/komutun çalışmasını istemediğinizde silmeniz ya da yorum satırı haline getirmeniz yeterlidir (başına # koyarak).


Crontab ile kullanılabilecek parametreler:

crontab -e    crobtab dosyasını düzenler, yoksa yeni bir tane yaratır
crontab -l     crontab dosyasını listeler
crontab -r     crontab dosyasını siler


Daha fazla bilgi ve örnek için man dosyasına bakabilirsiniz.


Öntanımlı olarak cron iş çalıştırıldıktan sonra kullanıcıya email gönderir. Bu özelliği kapatmak için her girdinin/işin sonuna 


> /dev/null 2>&1

eklenebilir.


Olayları bir log dosyasında toplamak içinse:


45  4 * * * rm /home/{kullanıcı-ismi}/temp/* > /home/{kullanıcı-ismi}/cronlogs/log.txt >/dev/null 2>&1

Log dosyasına yönlendirirken > kullanmak varolanı değiştirmek, >> kullanmak yeni girdiyi dosyanın sonuna eklemek anlamına gelir.




# komutları çalıştırmak için /bin/sh kullanılsın,
# /etc/passwd'de belirtilen önemsizdir
SHELL=/bin/sh
# kimin crontab’ı olduğunu boşver, bütün çıktıları ‘paul’e postala
MAILTO=paul
#
# hergün gece yarısından sonra beş dakika çalıştır
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# her ayın ilk günü saat 14:15 de çalıştır -- çıktılar paul’e postalansın
15 14 1 * *     $HOME/bin/monthly
# hafta içi (Pazartesi-Cuma) hergün saat 22:00’da çalıştır ve Joe’yu kızdır
0 22 * * 1-5   mail -s "Saat 22:00" joe%Joe,%%Çocukların nerede?%
23 0-23/2 * * * echo "her gün 00:23, 02:23, 04:23 de çalışır"
5 4 * * sun     echo "her Pazar 4:05’de çalışır"


Bkn: [1]http://www.linuxweblog.com/crotab-tutorial
[2]http://adminschoice.com/crontab-quick-reference 
[3]http://www.belgeler.org/man/man5/man5-crontab.html


6 Kasım 2010 Cumartesi

PyQt'yi Etkileşimli(interactive) Kullanmak

    PyQt ile ilgili olarak Qt kodunun etkileşimli olarak kodlanabileceğini öğrendim. Qt'de yeni bir şeyler öğrenirken çok işe yarayabilecek bir özellik. Şöyle ki konsoldan python yazarak Python yorumlayıcısını açalım. 
    Şimdi basit bir pencere yaratalım(kodun kopyalanabilmesi için >>> kullanılmadı):
PyQt4.QtCore import *
from PyQt4.QtGui import *
app = QApplication([])
window = QWidget()
window.resize(400, 300)
window.show()
  
    Şöyle pencere göreceksiniz:
    Hadi bir buton ekleyelim:
button = QPushButton("Tikla!", window)
button.show()
  
    İşte interaktif şekilde butonumuzu ekledik:
    Şimdi de butonumuzu pencerenin ortasına alalım:

layout = QHBoxLayout(window)
layout.addWidget(button)

    Şimdi addStretch() özelliğinin görünüme etkisine bakalım:
layout.addStretch()


    Ve kolaylıkla butonumuzun tıklanma(clicked) özelliğine bir slot bağlayabiliriz(ifade biraz karışık oldu :| ):

def mySlot():
    print "Buton Tiklandi"
button.clicked.connect(mySlot)

    Görüldüğü üzere Qt'yi denemek için iyi bir yöntem.

Kaynak:http://pysnippet.blogspot.com/2010/11/getting-interactive-with-pyqt.html

5 Kasım 2010 Cuma

Python'da Socket Programlama


    Socketler ve portlar ağlarla ilgili çoğu programın temelini oluşturur. Soketler, bir tür süreçler arası haberleşme(interprocessing) yöntemidir. Soket, soyut bir tanımla haberleşme uç noktalarıdır. Pratik olarak soketler dosyalara benzer. Soketten okumak ile dosyadan okumak arasında hiçbir fark yoktur. Socketler için üç alan(domain) tanımlanmıştır:
    Unix Alanı/Dosya-Sistemi Alanı : Bu alandaki socketler bir sistemde iki veya daha süreç birbiriyle haberleşeceği zaman kullanılır. Socketler dosya sistemi içinde yaratılırlar. /var/lock/sock ya da /tmp/sock gibi yerel yolları içerecek şekilde string olarak gösterilirler
    İnternet Alanı : Bu alan TCP/IP üzerinden haberleşen süreçleri göstermektedir. Bu alanda yaratılan socketler (host, port) çiftleri şeklinde gösterilmektedir. Host, string ya da IP adresi şeklinde gösterilebilen host ismidir. Port ise o host üzerinde bağlanılacak portun sayısal değeridir.
    NS Alanı : Bu artık kullanılmayan Xerox protokolü üzerinden haberleşen süreçler için kullanılır.

    Bunlardan sadece ilk ikisi çoğunlukla kullanılmaktadır. Python hepsini destekler. Aşağıda TCP/IP socketleri kullanan bir uygulama yaratmak için gerekli adımlar sıralanmıştır:
    1. Socketi yaratmak (create)
    2. Sockete bağlanmak (connecting)
    3. Socketi bir adrese bağlamak (binding to an address)
    4. Bağlantıları dinlemek ve kabul etmek (listening and accepting connections)
    5. Veri göndermek/veri almak (transffering and recieveing  data)

    Bir socket yaratmadan önce kütüphanelerin yüklenmesi gerekir. socket modülü socketlerle çalışmak için gerekli herşeyi içerir.

    1. Socket Yaratmak
    Python'da socket yaratmak için socket() metodu kullanılır. 
socket(familytype, [protocol])
  • family : family parametresi socketin hangi alan için yaratıldığını belirtir. Birçok seçenek mevcuttur. Genel kullanılanlar ise Unix alanı için AF_UNIX ve internet alanı için AF_INET.
  • type : type kullanılacak protokol tipini belirtir. Tip TCP gibi bağlantı yönelimli (connection-oriented) ya da UDP gibi bağlantısız (connection-less) olabilir. TCP için SOCK_STREAM, UDP için SOCK_DGRAM sabitleri tanımlanmıştır. Diğer geçerli seçenekler ise SOCK_RAW, SOCK_SEQPACKET ve SOCK_RDM.
  • protokol : Bu parametre genellikle varsayılan değer olan 0 olarak bırakılır.
    Bunlar göz önüne alındığında internet alanı bir socket yaratmak için:
s = socket.socket(AF_INET, SOCK_STREAM)

    2. Sockete bağlanmak
    Yaratılan socketler sunucu-taraflı (server-side) ya da istemci-taraflı (client-side) olarak kullanılabilir. Sunucu-taraflı kullanılacaksa bir hosta bağlanması gerekir. Bunu socket nesnesinin connect() metodu ile gerçekleştiririz. connect() metodu host adresini ya da host adresi ve port numarasından oluşan (host, port) şeklinde bir ikiliyi kabul eder. Örneğin adresi 192.168.51.102 ve port numarası 8080 olan bir hosta bağlanmak için:
s.connect(("192.168.51.102", 8080))

    3. Socketi bir adrese bağlamak
    Eğer sunucu-taraflı kullanılacaksa socketin bir adres ve porta bağlanması gerekir. Bunun için bind() metodu kullanılır. bind() metodu parametre olarak socketin bağlanacağı adres ve gelen istekleri dinleyeceği port numarasından oluşan (host, port) şeklinde ikiliyi alır. Örnekse:
s.bind(("192.168.51.107, 8080))

    4. Bağlantı dinlemek ve kabul etmek
    Socket belli bir adrese bağlandıktan sonra, belirtilen porttan gelen istekleri dinlemek için görevlendirilmesi gerekir. Bu amaçla listen() metodu kullanılır. Parametre olarak kaç bağlantının kabul edileceğini alır. En az 1 olamalıdır. Aşağıda 2 bağlantı kabul edilmiştir:
s.listen(2)

    Yapılması gereken sonraki adım bağlantıları kabul etmektir. Bunun için accept() metodu kullanılır. Geriye istemciyi temsil eden bir socket nesnesi ve istemcinin adresini döndürür:
istemsock, adres = s.accept()

    5. Veri göndermek/veri almak
    Veri recv() ve send() metodlarıyla aktarılabilir. recv() metodu sunucu ya da istemciden gönderilen veriyi almak için kullanılır. Parametreler tampon boyu (buffer size) ve bayraklardır (flags). Bayraklar isteğe bağlıdır. Veri almak için kod:
tampon = 1024
s.recv(tampon)

    Veri göndermek içinse send() metodu çağrılır. Parametre olarak gönderilecek veri ve bayrak alır. Örnekse:
veri = raw_input(">>")
s.send(veri)

    Python'un socket dökümantasyonunda bulunan sunucu ve istemci örneğiyse şu şekilde:
    Sunucu:

# Echo server program
import socket
import sys

HOST = None               # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
                              socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except socket.error, msg:
        s = None
        continue
    try:
        s.bind(sa)
        s.listen(1)
    except socket.error, msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

    İstemci:




# Echo client program
import socket
import sys

HOST = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except socket.error, msg:
        s = None
        continue
    try:
        s.connect(sa)
    except socket.error, msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)


Kaynak ve Bknz:http://www.devshed.com/c/a/Python/Sockets-in-Python-Into-the-World-of-Python-Network-Programming/
http://docs.python.org/library/socket.html
http://cekirdek.uludag.org.tr/~meren/belgeler/socket/socket.htm

3 Kasım 2010 Çarşamba

Yerelde SVN Deposu Yaratmak

    Projelerinizdeki değişimleri takip edebilmek ve gerektiğinde eski bir duruma ulaşabilmek, projenin gelişimi sürecinde çoğu zaman ihtiyaç duyacağınız bir durumdur. Bunun için Subversion (SVN) kullanmak ve projelerinizi sürümlendirmek oldukça uygun ve güçlü bir yöntemdir. Biz de bu amaçla yerelde bir SVN deposunun nasıl yaratılacağına ve kullanılacağına bakacağız. Yaratacağımız depo tek kullanıcı tarafından kullanılacak ki bu da sizsiniz.

    Depoyu Yaratmak
    Öncelikle sisteminizde Subversion'un kurulu olduğundan emin almalısınız. $ svn --version komutuyla sistemde kurulu olup olmadığını görebilirsiniz. Eğer kurulu değilse $ sudo pisi it subversion komutuyla kurabilirsiniz. Şimdi ilk yapacağımız iş depomuzu yaratmak. Bunun için konsolda şu komutları veriyoruz:
    $ mkdir /home/user/svndepo                                #user yerine kullanıcı isminiz gelmeli
    $ cd ~/svndepo
    $ svnadmin create proje1

    Bu komutlarla kullanıcı dizininde tüm depolarımızı barındıracak "svndepo" isminde yeni bir dizin oluşturduk. Daha sonra bu dizine girdik. Hemen arkasından "svnadmin" komutuyla "proje" isimli depomuzu gerçekten yarattık. Depomuz şu anda boş ve uyarlama 0 (revision 0) durumunda. Depoya bazı veriler girer girmez bu durum değişecek. Şimdi yapmamız gereken depomuza başlangıç projemizi aktarmak:
    $ svn import /home/user/proje1 file:///home/user/svndepo/proje1/trunk -m "proje1'in ilk aktarımı"


    Bu komutla "proje1"in dosyalarını depoya aktardık(proje1'in /home/user/proje1'de olduğunu varsayalım). Proje dizininin sonuna "trunk" eklememizin sebebi bunun birçok Subversion kullanıcısı tarafından kullanılan bir dizin düzenleme geleneği olması. Son kısımsa SVN log 'da aktarmaya eklenecek bilgi içindir. Bu şekilde depomuzu yarattık ve dosyalarımızı aktardık. Şimdi verileri çekip çalışmaya başlamaya hazırız.

    Bir Çalışma Örneği Çekmek ve Çalışmaya Başlamak
    SVN kullanırken doğrudan depo üzerinde çalışmak yerine bir çalışma örneği çeker ve onun üzerinde çalışırsınız. Çalıma örneğini çekmek için:
    $ svn co file:///home/user/svndepo/proje1/trunk /home/user/proje1_calisma_ornegi


    Bu komut "/home/user/proje1_calısma_ornegi" dizini altında deponun bir çalışma örneğini oluşturacaktır. Artık çalışmalarımızı bu dizin/örnek üzerinde yapacağız. Değişiklikleri yaptıktan sonra depoya göndermemiz gerekecek. Çalışma dizininde oluğumuzu düşünürsek bunun için şu komutu vereceğiz:
    $ svn commit -m "degisikliklerle ilgili bilgi"


    Böylece değişiklikleri depoya göndermiş olduk.

Kaynak:http://www.guyrutenberg.com/2007/10/29/creating-local-svn-repository-home-repository/

SVN kullanımıyla ilgili:1 - http://tr.pardus-wiki.org/Pardus:Yeni_geli%C5%9Ftirici_k%C4%B1lavuzu#Subversion_kullan.C4.B1m.C4.B1
 2 - http://svnbook.red-bean.com/

29 Ekim 2010 Cuma

Statik ve Dinamik Kütüphaneler

Yazılım kütüphaneleri, daha sonra yeni geliştirilecek yazılımlara dahil edilmek üzere saklanan derlenmiş hazır kod ve veri dosyalarıdır. Bazı sebeplerden dolayı kütüphaneler önceden derlenmiş olarak bulunurlar. İlk sebep, kütüphanelerin nadiren değişmesidir. Kullanıldıkları her bir program için kütüphanelerin yeniden derlenmesi vakit kaybı olurdu. İkinci bir sebep de derlenmiş (makine koduna dönüştürülmüş) oldukları için dışarıdan müdahale edilememesidir. Bu da iş dünyası söz konusu olduğunda ya da kişiler çeşitli sebeplerle kodlarını açmak istemediklerinde önem kazanmaktadır.

    Statik Kütüphaneler
Statik kütüphaneler, yeniden derlenmeye ihtiyaç duymaksızın yazılıma derleme aşamasında yani çalıştırılmadan önce eklenir. Bir programı statik kütüphane kullanacak şekilde derlediğinizde, programının kütüphanenin bütün işlevselliğine sahip olur. Statik kütüphane dosyalarının uzantıları ".a" şeklindedir. Statik kütüphaneleri kullanmanın bir avantajı programınızı tek bir çalıştırılabilir dosya şeklinde dağıtmanızı sağlamasıdır. Ayrıca kütüphane, programınızın bir parçası olduğu için her zaman doğru versiyonun kullanıldığından emin olursunuz. Diğer taraftan kütüphanenin her programa eklenmesi hafıza israfına yol açmaktadır. Ayrıca statik kütüphanelerin güncellenmesi de pek kolay değildir. Bunun için tüm programın yeniden derlenmesi gerekir.

    Dinamik Kütüphaneler
Dinamik (shared-paylaşımlı) kütüphaneler ise programa çalışma sırasında dahil edilirler. Programınızı dinamik kütüphane kullanacak şekilde derlediğinizde, kütüphane programa o anda dahil edilmez, programa kod eklenmez. Uzantıları ".so" şeklindedir. Bu şekilde farklı programlar aynı kütüphaneyi ortak olarak kullanırlar ve bu sayede program boyutları daha küçülmüş olur. Ayrıca güncelleme yapmak için de kütüphaneyi kullanan tüm programların yeniden derlenmesi gerekmeyeceği için işlem daha kolaydır.

Kaynaklar:http://www.belgeler.org/howto/gcc-baslangic-libs.html
http://www.learncpp.com/cpp-tutorial/a1-static-and-dynamic-libraries/

20 Ekim 2010 Çarşamba

Pardus'ta Android SDK

Hadi Pardus'a Android SDK kuralım.
Önce sistem gereksinimlerine bakarak bilgisayarımızın SDK kurulumu için gerekli özellikleri sağlayıp sağlamadığını görelim. Daha fazla devam etmeden sistemimize JDK kurmamız gerekecek(eğer kurulu değilse). Bunun depodan sun-jdk paketini kurmalıyız:

$ sudo pisi it sun-jdk

Eğer geliştirmeyi Eclipse üzerinden Android Development Tools (ADT) Plugin ile yapacaksak -ki yeni başlayanlar için tavsiye edilen budur- sistemimizde Eclipse de olması gerekiyor doğal olarak :) Eclipse'in uygun bir sürümünü şu adresten indirip kurabileceğiniz gibi:

$ sudo pisi it eclipse-jdt-binary

komutuyla depodan da kurabilirsiniz. Eclipse'i de kurduktan sonra şimdi yapmamız gereken Android SDK başlangıç paketini(starter package) kurmak. Bu paket bütün bir geliştirme ortamından ziyade diğer SDK parçalarını indirebileceğiniz bir temel araçları içerir. Uygun SDK başlangıç paketini şu adresten indirip güvenli bir yere açıyoruz. İndirdiğiniz dosyayı açtığınızda öntanımlı olarak android-sdk- şeklinde bir dosya ortaya çıkacak. Örn. android-sdk-linux_x86. SDK'nın adresi daha sonra gerekli olacağı için not almakta fayda var. SDK'nın tools dizinini sistem yoluna ekleyerek Android Debug Bridge (adb) ve diğer komut satırı araçlarına doğrudan erişebiliriz. Bunun için:

$ export PATH=${PATH}:/tools

Geliştirmemizi Eclipse'de yapmamızın başlangıç aşamasında daha faydalı olacağını söylemiş ve nasıl kurulacağından bahsetmiştik. Şimdiyse Eclipse'de Android uygulamaları geliştirmemiz için gerekli olan Android Development Tools (ADT) eklentisini kurmamız gerekiyor.

*Eclipse'i çalıştırıyoruz. Help > Install New Software diyoruz.
*Açılan Available Software penceresinde Add butonuna tıklıyoruz.
*Açılan pencerede Name kısmına herhangi bir isim yazıyoruz. Location kısmına ise: https://dl-ssl.google.com/android/eclipse/ yazıp Ok diyoruz. Bir sorun olursa https yeri http deneyin.
*Tekrar Available Software penceresine gelindiğinde listede Developer Tools seçeneğinin ekli olduğunu göreceksiniz. Seçiyoruz ve Next diyoruz.
*Açılan yeni pencerede de Next, ardından Finish diyoruz. Yüklemelerden sonra Eclipse'i yeniden başlatıyoruz.

Şimdi ADT eklentisini düzenlemeliyiz. Window > Preferences diyerek Preferences penceresini açalım. Sol panelden Android'i seçelim. SDK Location kısmında Browse deyip
SDK dizinimizi seçiyoruz. Daha sonra Apply ardından Ok diyoruz.

Şimdi geliştirme ortamımız için gerekli olan SDK parçalarını kurmalıyız. Bunun için Android SDK and AVD Manager kullanılacak. Android SDK and AVD Manager'ı Eclipse içinden Window > Android SDK and AVD Manager yolunu izleyerek çalıştırıyoruz. Sol panelden Available Packages'ı seçelim. Böylece SDK deposundaki erişilebilir parçaları görebileceğiz. Yüklemek istediğiniz parçayı seçip Install Selected diyoruz. Hangi parçayı seçeceğiniz konusunda şuraya bakabilirsiniz (Ben hepsini seçtim). Yüklemek istediğiniz parçaları kabul edip Install Accepted diyoruz. Parçalar SDK dizinimize yüklendi. (Daha fazlası için burası)

Böylece Android SDK'mızı kurmuş olduk. Bir sonraki yazıda da örnek bir uygulama yapalım.

Daha ayrıntılı bilgi ve kaynak:http://developer.android.com/sdk/installing.html

16 Ekim 2010 Cumartesi

*.001 - *.999 Uzantılı Dosyaları Birleştirmek

Bunun için LX Split programını kullanacağız. Lxsplit, hjsplit uyumlu bir komut satırı dosya bölücü/birleştiricidir. Pardus depolarında mevcuttur.

$ sudo pisi it lxsplit

komutuyla sisteme yüklüyoruz.

$ lxsplit -j dosya.001

komutuyla da dosyalarımızı birleştiriyoruz.

Ayrıca: http://wiki.pardus-linux.org/index.php/Programlar:lxsplit

14 Ekim 2010 Perşembe

Pardus'ta havp kurulumu

Öncelikle havp nedir? havp (HTTP Anti Virus Proxy) bir proxy hizmeti/programı. Özelliğiyse tarayıcı ve web sunucusu arasında durarak dosyaları virüs taramasından geçirmesi.

havp Pardus depolarında yok (ben bulamadım en azından). Ama inşa dosyaları burda mevcut. havp programını sisteme kurmak için şu komutları kullanıyoruz:

$ sudo pisi bi https://svn.pardus.org.tr/pardus/playground/review/server/proxy/havp/pspec.xml -d
$ sudo pisi it havp*.pisi

İlk komutla pisi paketi oluşturulurken ya da kurulum sırasında clamav programının da kurulmasını gerekecek. Önceden de kurabilirsiniz. Bu program depoda mevcut.

Bu şekilde paketleri sisteme kurduğumuzda Servis Yöneticisi'nden başlatmamız gerekiyor. Ancak havp servisi bende söyle bir hata verdi: "getpwnam(): name not found: havp ". Bunun üzerine sisteme havp kullanıcısını eklemek için şu iki komutu verdim ve yeniden denedim:

# groupadd havp
# useradd -g havp havp

Ancak yine servis başlatılamadı. Şu komutu denedim:

# chown havp /var/tmp/havp /var/log/havp /var/run/havp

Bilgisayarı yeniden başlatıp servisleri çalıştırdım:

$ service clamav start

sorunsuz şekilde çalıştı.

$ servis havp start

havp da çalıştı. Ancak "service havp status" komutunu verdiğinizde çalışır halde görünmüyor. Servis Yöneticisi'nde de çalışır halde görünmüyor. Ama Sistem İzleyici'yi açtığımızda çalıştığını görebiliriz. İki servisi de çalıştırdıktan sonra proxy'yi kullanmak için tarayıcımızın proxy ayarlarını değiştirmemiz gerekiyor. Firefox için Düzen>Seçenekler>Gelişmiş>Ağ>Ayarlar penceresini açıp "vekil sunucu ayarları"nı tıklayıp sunucu adresi olarak localhost port numarası olarak da 8080 yazıyoruz. Tamam Tamam diyerek çıkıyoruz. Test etmek için adresini kullanabilirsiniz. Sayfayı aşağı kaydırıp alttaki 4 linkten birine tıkladığınızda eğer bir sorun yoksa şöyle bir sayfa çıkması gerekiyor:
Image and video hosting by TinyPic

13 Ekim 2010 Çarşamba

Pardus'ta Apache ile Küçük Bir Uygulama

Şimdi Pardus üzerinde Apache ile küçük bir uygulama yapacağız. Amacımız apache'den bir sayfa yayınlamak ve Bind ile kullanıcıyı bu yayınladığımız sayfaya yönlendirmek. Bunun içinden youtube.com adresini kullanacağız. Yani sistemimizde Bind ve apache kurulu olacak ve dns adresi olarak bizim dns sunucumuzu kullanan birisini youtube.com adresine bağlanmak istediğinde bizim web sunucumuzdan yayınlanan bir sayfaya erişicek. Umarım anlatabildim. Bind sunucusuyla ilgili bişeylerden daha önce bahsetmiştim[1]. Apache kurulumu için ise bu adrese bakabilirsiniz.

Apache kurulumu yapıldıktan sonra yapmamız gereken sanal konak oluşturmak. Okuduğum bazı belgelerde /etc/apache2/ dizininin altında sites-enabled, sites-available gibi dizinlerin olması gerektiği yazılıydı. Ama Pardus'ta bu dizinleri göremedim ve şöyle bir yol izledim:

#cd /etc/apache2/vhost.d

komutu ile vhost.d klasörüne girdim. Başlangıçta bu klasörde 00_default_vhost.conf dosyası bulunmaktaydı.

#vi youtube.conf

komutuyla yeni bir dosya oluşturdum. İçini şu şekilde doldurdum:
Image and video hosting by TinyPic

ip adresleri sunucumuzun ip adresi olacak. Diğer seçeneklerle ilgili bilgilere şu ve bu adreslerinden bakabilirsiniz. Dosyamızı kaydedip çıkalım. Sonra /var/www/youtube adında bir klasör oluşturup içinde yayınlamak istediğimiz bi index.html dosyası oluşturalım. Daha sonra Bind'le ilgili ayarları yapmalıyız. /etc/bind/named.conf dosyasına şu satırları ekleyelim:
Image and video hosting by TinyPic

Daha sonra /etc/bind/zones/youtube.com.db dosyasının içeriğini şu şekilde dolduralım(bu dosya yoksa oluşturalım):
Image and video hosting by TinyPic

Buradaki ip adresleri bilgisayarınızın ip si olacaktır. En son /etc/resolv.conf dosyasının başına nameserver 127.0.0.1 satırını ekleyip kaydedelim. bind ve apache servislerini başlatalım (ya da yeniden başlatalım):

#service bind start ya da restart
#service apache start ya da restart

Her şey yolunda gittiği taktirde tarayıcınızdan youtube.com adresine girmeye çalıştığınızda karşınıza kendi hazırladığınız index.html sayfası çıkması gerekir.

2 Ekim 2010 Cumartesi

Pardus'ta Bind Kurulumu Ve Ayarlanması

Öncelikle "bind nedir?" derseniz BIND internette yaygın olarak kullanılan bir DNS sunucudur. Bu yazıda BIND'in Pardus üzerinde kurulumu ve yapılandırılması naçizane anlatılmaya çalışılacak. BIND Pardus depolarında bulunmaktadır. Dolayısıyla paket yöneticisinden kolayca kurulabilir. Ya da konsoldan:

$ sudo pisi it bind

diyebilirsiniz. BIND kurulduktan sonra Servis Yöneticisi'nden ya da konsoldan:

$ service bind start

komutu ile çalıştırabilirsiniz. Basit bir örnekle ayarlamaların nasıl yapıldığına değinelim.
Öncelikle /etc/bind/named.conf dosyasını açıyoruz:

# cd /etc/bind/
# vi named.conf

sayfanın sonuna ya da oralara bir yere

Image and video hosting by TinyPic

satırlarını ekleyelim ve kaydedelim. Şimdi aynı klasörde(/etc/bind) zones isimli yeni bir dosya oluşturuyoruz ve içine giriyoruz:

# mkdir zones
# cd zones

Daha sonra named.conf dosyasında alper.com için gösterdiğimiz dosyayı oluşturuyoruz:

# vi alper.com.db

ve içine şunları yazıyoruz :

Image and video hosting by TinyPic

Son olarak da sunucumuzu sisteme tanıtmak için:

# vi /etc/resolv.conf

diyerek açtığımız dosyaya

nameserver 127.0.0.1

satırını ekliyoruz.

$ service bind start diyerek bind'i başlatalım (Daha önce başlattıysanız $ service bind restart).

dig alper.com diyerek test edelim.

Kaynaklar:[1]http://glonek.co.uk/linux-server/dns-bind9-configuration-howto/
[2]http://www.kemalkefeli.com/2010/09/bind9-ile-dns-sunucusu-kurma-ubuntu.html

7 Temmuz 2010 Çarşamba

Pardus'ta Google Chrome

Pardus'ta Google Chrome nasıl kurulur? İşte böyle:
Komut satırı açılır ve

sudo pisi bi http://sudrap.org/repository/users/ggorgen/chromium-browser/pspec.xml -d
sudo pisi it chromium-browser*.pisi

komutları sırasıyla çalıştırılır.
Kaynak ve ayrıntı:burda

22 Nisan 2010 Perşembe

Başlarken




Bir bilgisayar mühendisi adayı olarak bir bloğumun olmaması üzücü bir durumdu benim açımdan (başka kimin açısından olabilir ki :P). Birkaç defa başlamaya çalıştım ama olmadı. Ama bu sefer kararlıyım (aferim bana). Bloğun içeriği ne olur bilmiyorum. Temel olarak tabi ki bilgisayar vs. üzerine deneyimlerimi yazmaya çalışmak başlıca hedefim. Çoğunluğu (tamamı) kişisel notlardan oluşacak bu bloğun yeryüzündeki herhangi bir canlıya bi faydası dokunursa (nasıl olucaksa) ne mutlu bana. Ha dokunmasa da burda harcadığım zaman (zaten başka saçma şeyler için harcanıcaktı) ve enerji (elektrik) o kadar da büyük kayıp olmaz herhalde. Yoksa olur mu?