Archive for the 'gezegen-linux' Category

I want to monitor!

January 6, 2010

I’m fed of with nagios, and looking for an alternative, again.  I had a quick run over wikipedia and found 3 options after spending 5 minutes, by just judging the products by how they are marketted. I’ll have a deeper look to these three:

  1. http://www.hyperic.com/
  2. http://www.zabbix.com/
  3. http://pandorafms.org/

What can you suggest for a Nagios alternative?

Automatically decorating all views of a django project

January 5, 2010

After a long break I’m back to my blog.  I moved from Turkey to Singapore, which is a little change in my life.  Now the real thing, a middleware for Django.

This middleware auto-decorates each view function in a view module (views.py, or views/) with the decorators defined in settings.py.

An example setting is:

VIEW_AUTHENTICATORS = {
    "module.views.secret": [
        "django.contrib.auth.decorators.login_required",
        "module.decorators.secret_access_required"],
    "module.views.public": [
        "django.contrib.auth.decorators.login_required",
        "ptms.decorators.public_access_required"]
    }

Think this middleware as a firewall.  Whether you decorated your view functions or not, this ensures that your content is protected by using the decorators.

Note that this middleware needs to be at the end of the middlewares list because it always return an HttpResponse by calling the view function; which means no other middleware after this is executed.

Here is the function:

    def process_view(self, request, view_func, view_args, view_kwargs):
        if not hasattr(settings, "VIEW_AUTHENTICATORS"): return None
        mauths = settings.VIEW_AUTHENTICATORS.keys()
        module = view_func.__module__

        # Trying to find if any authenticator is defined for this module
        module_matches = [mauth for mauth in mauths if module.startswith(mauth)]

        # if there is no match, bail out
        if not module_matches: return None

        # if there is a match...
        authenticators = settings.VIEW_AUTHENTICATORS[module_matches[0]]

        functions = []
        # go on parsing the list
        for function_path in authenticators:
            try:
                dot = function_path.rindex('.')
            except ValueError:
                raise exceptions.ImproperlyConfigured, '%s isn\'t a function path (error from settings.VIEW_AUTHENTICATORS)' % function_path

            f_module, f_name = function_path[:dot], function_path[dot+1:]

            try:
                mod = import_module(f_module)
            except ImportError, e:
                raise exceptions.ImproperlyConfigured, 'Error importing module %s from settings.VIEW_AUTHENTICATORS: "%s"' % (f_module, e)
            try:
                f = getattr(mod, f_name)
            except AttributeError:
                raise exceptions.ImproperlyConfigured, 'View authenticator %s is not defined in %s' % (f_module, f_name)

            functions.append(f)

        def compose(f, g): return lambda *args, **kws: f(g(*args, **kws))
        multi_compose = functools.partial(reduce, compose)
        all_decorators = multi_compose(functions)
        decorated_view = all_decorators(view_func)
        return decorated_view(request, *view_args, **view_kwargs)

I await all the comments.

Backing up

August 17, 2009

Backup is an IO-intensive process so this forced me backing up during the off-hours.  I looked around for io-priorities and found “ionice”.  Here is the basic use for idle scheduler where the command will “io” only when the system is free, probably lowest priority in the io queue.

sudo ionice -c3 rsync -vaPx / /media/wd-big/backup/

gnome global menu

August 1, 2009

If you like Mac OS’ global menu, try the gnome version.

Adam lazım.

June 19, 2009

Aşağıdaki maddelerin bir kısmında deneyimli/ilgili arkadaşlar, kimilerine göre de süpermenler arıyoruz.

Aşağıdaki özelliklerde “bilgili” ya da “deneyimli” yazanları “ilgili” ya da “istekli” olarak okuyabilirsiniz.  Bilgili iseniz senior, ilgili iseniz junior pozisyonlarında değerlendirileceksiniz.

  • Linux sistem yönetimi konusunda deneyimli
  • Makina parkı yönetebilecek
  • Yüksek trafik/yük altında çalışan servislere gerekli müdaheleleri yapabilecek
  • Sistem ve servislerin performanslarını takip edip ölçebilecek
  • Gerektiğinde daha fazla trafik/kullanıcı/yük kaldırabilmesi için yeni sunucular ekleyip, birlikte çalışmalarını sağlayabilecek ya da yazılım ekibini bu konuda yönlendirebilecek
  • Disaster durumlarında servislerin çalışması için alınmış önlemleri devam ettirebilecek, gerektiğinde yeni önlemler alabilecek
  • IP telefon teknolojileri konusunda bilgili
  • İlginç entegrasyonlarda rol alabilecek/yönetebilecek
    • IP telefon – müşteri destek sistemi (CRM)
    • web sitesi – depo otomasyonu
  • Sorumlu olduğu konularda gerekli satınalmaları yönlendirebilecek
  • İlgili teknolojileri geliştirebilecek/takip edebilecek
  • Network yönetimi konusunda bilgili
  • Olası sorunlarda ilgili kişileri haberdar edecek monitoring
    sistemlerini çalıştıracak ya da yazılım ekibini bu konuda
    yönlendirebilecek

Kullandığımız temel markalar, yazılımlar, teknolojilerden birkaçı:
postfix, apache, nginx, asterisk, astaro, debian, postgresql

Hangi konular sizde heyecan uyandırıyor, ‘altından girer üstünden çıkar yaparım ben bunu’ diyorsanız lütfen bunu belirtin.

Daha fazla bilgi almak istiyorsanız: can.burak@akinon.com, başvuru icin jobs@akinon.com

USB’den firmware yüklerken…

April 5, 2009

Yakışıklı oğlumuz PowerEdge ile dünyalar güzeli kızımız Lenny birbirlerini ilk defa gördüğünde kızımız naz yaptı ve firmware olmadan kurulmam dedi.

İçinde firmware olan USB sunucuya takıldı, kurulum next next rahatlığıyla tamamlandı fakat oğlumuz işletim sistemini açamadı. Önce DELL’e sonra Debian’a saydırdıktan sonra sorunun ne olduğu ortaya çıktı.

Olur da Debian kurarken USB’den firmware yüklerseniz, grub’ın doğru cihaza yazıldığından ve sistem açıldığında diske atanacak olan cihaz adının kernel’a doğru verildiğinden emin olun. Kurulum esnasında /dev/sdc de duran disk, kurulum sonrası /dev/sda ya yerleşmeye karar verdi. Umarım bu ipucu birilerine bir miktar vakit kazandırır.

Emektar iconv yerine emacs

February 8, 2009

Saçma sapan encoding dertlerime sıklıkla derman olan iconv programcığını emekli etmeyi düşünüyorum. Özellikle dosyayı düzenlemem gerekiyorsa bu işi artik emacs’e devrediyorum.

Eğer emacs dosyanın içeriğini doğru yorumlayabiliyorsa (bkz: Recognizing Coding Systems) dosyayı

C-x C-f

ile açın. Olur da bu aşamada sorun çıkarsa C-x C-f basmadan önce

C-x RET c iso-8859-9-dos

basın. Tabi ki dosya her nasıl encode edilmişse uygun coding ile. -dos yerine -unix ya da -mac ile satır sonu sistemini seçebilirsiniz. Unitmayın, bu C-x C-f’ye ön-ek olacak, yani toplamda şu tuşlara basmış olmanız gerekiyor:

C-x RET c iso-8859-9-dos C-x C-f [dosyanin yeri]

Dosya düzgün açıldıktan sonra, yine aynı şekilde kaydetmeden önce yeni codingi belirtip kaydedebilirsiniz:

C-x RET c utf-8-mac C-x C-w [dosyanin yeri]

godel.cs.bilgi.edu.tr ve emacs

September 29, 2008

Bir süredir godel.cs.bilgi.edu.tr adresli yansımız donanım sorunu sebebiyle servis veremez durumda idi. Emre sorunu giderdikten hemen sonra bu sunucuyu yansılıktan emekli edip Xen host haline getirdi ve üzerine ilk evladını, russell.cs.bilgi.edu.tr’ı kurdu ve anahtarlarını takımımıza yeni katılan Onur‘a teslim etti.

Özetle, eskiden http://godel.cs.bilgi.edu.tr/ adresinden hizmet veren yansılarımızı artık http://russell.cs.bilgi.edu.tr/ adresine taşıyoruz. Lütfen sources.list dosyanızı güncelleyin.

Ah, unutmadan, http://emacs.orebokech.com/ adresinde Debian için kırçılsız ( anti-aliased :) ) yazı tipleri kullanabilen emacs sürümü mevcut.

Gnus: Gonderici adresine gore smtp sunucusu seçimi

August 16, 2008

Başlık biraz yanıltici. Aslinda gnusun degil emacs smtp ve message ayarlari ile ilgili birseyler yapacagim.

  1. ~/.authinfo altina netrc formatinda kullanmak istediginiz eposta
    sunucularinizin kullanici adi ve parolalarini yazin
  2. smtpmail-starttls-credentials değiskenine de kullanici adi/parola
    bilgilerini yazin.

          '(("smtp.example.com" 25 "canburak" "xxyy")
          ("smtp.example.org" 25 "cbc@example.org" "yyxx"))
        

    Bunu duzgun bir sekilde dosyadan okutmanin yolunu bulunca
    guncelleyecegim.

  3. bir degisken icerisini hangi eposta adresinin hangi sunucuyu
    kullanmasi gerektigini yazin.

          (setq-default from-to-server-mapping
          '(("canburak@example.com" . "smtp.example.com")
          ("cbc@example.org" . "smtp.example.org")))
        
  4. epostanin from alanindan buradaki sunuculardan birisini sececek fonksiyonu yazin.

    (defun change-smtp ()
      (save-excursion
        (loop with from = (save-restriction
                            (message-narrow-to-headers)
                            (message-fetch-field "from"))
              for (address . server) in from-to-server-mapping
              when (string-match address from)
              do (return (setq-default smtpmail-smtp-server server))
              finally (error "Cannot interfere SMTP information."))))
        
  5. uygun hooku ekleyin: (add-hook ‘message-send-hook ‘change-smtp)

gnus-alias gibi bir paket kullanarak eposta yazarken from adresini
rahatlikla degistirebilecek bir cozum de gerekiyor. Henuz bu is icin
uygun bir aracim yok, olunca tabi ki paylasacagim.

Esin kaynağı: http://www.emacswiki.org/cgi-bin/wiki/MultipleSMTPAccounts

Neden gnus?

August 13, 2008

Uzunca bir süredir e-posta okurken mutt kullanıyordum.

Artık yavaşça Sinan‘dan özenerek kabullenmeye başladığım gnus kullanma fikrimi şu sıralar keşfettigim yeteneklerinden dolayı gerçekleştirmeye başladım.

Neden mi? Kisaca yaptigim ve yapmaya yeltendiklerimden bahsedeyim.

  • news-reader olmasına rağmen bu yetilerinden tamamen mağdur mahrum edilebiliyor (kaynak):
    (setq mail-sources nil)
    (setq
    gnus-nntp-server nil
    gnus-read-active-file nil
    gnus-save-newsrc-file nil
    gnus-read-newsrc-file nil
    gnus-check-new-newsgroups nil)
  • Epostalari silmek yerine “silinebilir” olarak işaretleyip 1 gun sonra otomatik silinmesini, daha doğrusu çöpe taşınmasını sağlayabiliyorum, hatta bu çöp apayrı bir sunucu ya da diskimde bir klasor veya mbox olabiliyor.
  • İstedigim klasordeki 1 haftadan eski epostalarin hemen silinmesini/otomatik tasinmasini saglayabiliyorum (spam)
  • Eposta silinirken herhangi bir parametresine gore cope gitsin, su klasore gitsin ya da kaybolsun diyebiliyorum
    (setq-default nnmail-expiry-target 'expire-to-trash-or-delete-from-trash)
    
    (defun expire-to-trash-or-delete-from-trash (group)
      (if
          (string= group "Trash")
          "delete"
        "Trash"))
  • İnternet baglantim yoksa mailleri sirada bekletebiliyorum (smtpmail-queue-mail ve smtpmail-queue-dir)
  • Eposta iceriklerini kendi istedigim gibi temizleyebiliyorum: http://www.gnu.org/software/emacs/manual/html_node/gnus/Washing-Mail.html ve
    (setq message-cite-function 'trivial-cite
          tc-normal-citemarks ">|:"
          tc-fill-long-lines nil
          tc-make-attribution 'tc-fancy-attribution)