Gnu/Linux

You are currently browsing articles tagged Gnu/Linux.

Annemin Ubuntu’su

Gnu/Linux’la bir geçmişi olan herkesin kafasından “GNU/Linux harikulade, açık kaynak. Üstelik çoğunlukla da hem işletim sisteminin kendi, hem de uygulamaların ezici çoğunluğu bedava. Pekiyi neden yaygın değil?” sorusu mutlaka geçmiştir.
Herkesin bu soruya kendince bir yanıtı vardır. Bana göre de yanıt eğitim ve alışkanlıklarda yatıyor.

Geçtiğimiz hafta içinde bir gün annem (1980 Darbesi olduğunda üniversitede bir kaç yıllık hocaydı. Varın yaşını siz çıkarın) yanında, içinde dizüstü bilgisayarının olduğu bir çantayla çıkageldi. Derdi, kullandığı Windows’un “Lisansınız sahte. Sizi gidi üçkağıtçı sizi!” yollu bağırıyor olmasıydı. Oysa lisansı sahte falan değildi. Büyük olasılıkla yaşadığı Ankara yakınındaki kasabada, herkese “yolunacak kaz” gözüyle bakan bir “bilgisayarcının” gazabına uğrayarak lisanslı özgün Windows CD’sini kaptırmış, bunun yerine eline bir kopya Windows CD’si tutuşturulmuş ve yollanmıştı. Windows destek hattından da kısa zamanda bir sonuç çıkamayacağı anlaşılınca da bilgisayarını kaptığı gibi bize getirmişti. Biz durumu anlayıp, Micro~ Destek Hattı’nı arayıp tatlı tatlı(!) konuşmayı düşünürken, annemin gözü bizim makinelerimizde koşan Ubuntu’ya takıldı.
“Linux bu mu?” diye sordu.
“Budur!” dedik.
“Tamam”, dedi, “Bana da bundan kurun!”
“Aman anne!”, dedim, “sarsmasın Linux seni?”
“Ne olacak! Öğrenirim!” dedi.

Sonuç olarak, annemin bilgisayarına Ubuntu 10.04 kurduk ve masaüstünü de Ubuntu’ya çabuk adapte olacağı şekilde düzenledik. Yukarıda annemin Ubuntu’sunun masaüstü ekran görüntüsü var. (Büyük halini kaçırmayın!)
Eve gittikten sonra bir kere (evet yalnız bir kere) Türkcell Vınn ile İnternet’e bağlanmayı beceremediği için aradı; hepsi o kadar.

Benim annem artık Ubuntu kullanıyor ve çok memnun. Ya sizin anneniz?

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: ,

Ubuntu 10.04 dün yayınlandı ve Karmic’ten altı aydır az çekmemiş olan ben, henüz web sitesinde resmen duyurulmamışken repoda kararlı sürümü görür görmez yükseltme işlemine başladım.

“Vuzuh Vaşak” demek suretiyle herhalde 16.10 sürümü civarına yükseltme yapmış gibi görünmüş oldum.

  • Pencerelerde “kapat”, “küçült”, “panele indir” ikonları sola kaymış. Bana güzel göründü ancak hemen belirteyim: alıştığınız sağda görünen duruma dönmek mümkün ve şu belgede anlatılmış.
  • Gözle görülür şekilde daha hızlı boot ediyor.
  • Karmic’teki bugların hemen hepsi temizlenmiş.
  • Skype sorunsuz çalışıyor.
  • PHP 5.3.2 ile PHP 5.3.x’li günler başlamış.
  • Python 2.6.5
  • gcc 4.4
  • Multimedia işlerindeki sıkıntılar tarih olmuş.
  • Öntanımlı arama motoru Google yerine Yahoo! olmuş, iyi olmamış, ancak yeni kurulum değil yükseltme yapıyorsanız bunu görmüyorsunuz.
  • Firefox 3.6.3
  • Öntanımlı masaüstü arka planı morarmış.
  • Tüm donanımlar sorunsuz tanınıyor.
  • Çekirdek 2.6.32-21
  • Gwibber entegrasyonuyla sosyal medya desteği iyi olmuş.

Bir günlük deneyimin ardından ön sonuçlar:

  • Karmic kullanıyorsanız saniye kaybetmeden yükseltin.
  • Ubuntu Karmic’le kaybettiği prestiji tekrar kazanacak gibi görünüyor. Kullanışlı bir Gnu/Linux dağıtımı arıyorsanız Ubuntu 10.04 iyi bir seçim olacaktır.
Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: , ,

Bir Web Sunucusu Kodlama Denemesi

Her şey Altan Tanrıverdi‘nin Ubuntu üzerine nginx kurulumu yazısını görmemle başladı. Hayır, Nginx’i daha önce görmemiş değildim, ancak Tanrıverdi’yi Apache’den başka bir web sunucusu kurmaya yönelten şey Apache’nin sistem kaynakları açısından “pahalı” sayılabilecek bir sunucu olmasıydı.

Apache’de bir web sunucusundan beklediğimiz her şey ve hatta fazlası var. Apache modül listesine (http://httpd.apache.org/modules/ ve http://modules.apache.org/) daha önce göz atmadıysanız bir bakın; belki de adını bile duymadığınız, hiç işiniz düşmemiş olduğu için kullanmadığınız bir çok modül olduğunu göreceksiniz. Oysa çoğu LAMP/LAPP programcısı, günlük işlerinde php ve rewrite modulleri dışındakileri kullanmaya pek ihtiyaç duymaz.

Elbette asla yılların eskitemediği dost Apache’ye kafa tutmak için değildi, ancak kafama şu soruyu takmadan edemedim:

“Acaba yalnız PHP yorumlayan ve başka hiç bir iş yapmayan bir web sunucusunu yine PHP ile kodlasak nasıl olurdu?”

Tabii bu soru büyük olasılıkla benden başka bir sürü kişinin de aklından geçmişti veAmerika’yı yeniden keşfetmemek için önce Hz. Google’a sordum.

Google bana “Nano Web Server var.” dedi. Bir de baktım ki, gerçekten bu arkadaş Apache’yi neredeyse bire-bir PHP’ye port etmiş. Modüllerine kadar yazmış. Ubuntu için deb paketi bile var ve daemon olarak kuruluyor. Öte taraftan bu çalışma hem benim ölçeğimi aşıyor hem de başlangıçtaki mantığımla ters düşüyor: PHP’den başka şey çalıştırmak istesem zaten “runtime’da yorumlanan” değil “derlenmiş” kod kullanmayı tercih ederim. Benim fikrimin özü, zaten native olarak PHP yorumlayabilen bir kod yapısı kullanarak bir web sunucusu yapmak.

Bunun dışında bir de phpStack‘i buldum. phpStack benim amaçladığım şeye oldukça yakındı ancak bana göre işleri olması gerekenden daha karmaşık hale getiriyordu.

Böylece kendi denememi yapmaya karar verdim. Önce php5-cgi paketini kurdum. PHP Manual’dan jenerik bir soket kodu aldım. Kodu düzenledim, mime türlerine göre gönderilecek header’ları ayarladım, PHP yorumlayıcısı desteği verdim ve sonuç:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php

interface server
{
    public function setWebRoot($path);
    public function setPort($port);
    public function serve();
}

final class webserver implements server
{
    private $_port , $_webroot;
    public function __construct()
    {

       //belki ileride lazım olur. şimdilik dummy
    }
   
    public function setPort($port)
    {
        $this->_port = $port;
    }
   
    public function setWebRoot($path)
    {
        $this->_webroot = $path;
    }
   
    private function _mimeHandler($input)
    {
            $fileinfo = pathinfo($input);
            switch ($fileinfo['extension'])
            {
                  case 'png':
                      $mime = "text/png";  
                      break;
                 
                  case 'jpg':
                  case 'jpeg':
                      $mime = "text/jpeg";  
                      break;
                 
                  case 'gif':
                      $mime = "text/gif";  
                      break;
                 
                  case 'css':
                      $mime = "text/css";  
                      break;
             
                  default:
                      $mime = "text/html; charset=UTF-8";
            }
        return $mime;
    }
   
    private function _handleCode($contents)
    {
         //eval() edilecek kodun başında <?php ya da <? varsa çakar. halledelim.
        $contents = trim($contents);
        if(substr($contents , 0 , 5) == '<?php')
        {
            $contents = substr($contents , 5);
        }
        elseif(substr($contents , 0 , 2) == '<?')
        {
            $contents = substr($contents , 2);
        }
       
        return $contents;
    }
   
    public function serve()
    {
        $socket = @socket_create_listen($this->_port);
        if (!$socket)
        {
          echo "Soket olamiyor!\n";
          exit;
        }
        while (1) //daire-i ilanihaye!
        {
          $client = socket_accept($socket);
          $input = trim(socket_read ($client, 4096));
          echo $input; //tarayıcı ne diyor? bu veriyi ileride $_SERVER array'ini doldurmak için kullanmak lazım.
          $input = explode(" " , $input);
          $input = $input[1];

          $mime = $this->_mimeHandler($input);
         
          if ($input == "" || $input == '/')
          {
            $input = "/index.html";
          }
          $input = ".$input";
          $inputArray = explode('?' , $input);
          $input = $this->_webroot . $inputArray[0];

          if (file_exists($input) && is_readable($input))
          {
            echo "Dosya: $input\n";
           
            $contents = file_get_contents($input);
            if(strstr($input , '.php'))
            {
             
                $contents = $this->_handleCode($contents);
               
                //PHP çalıştıktan sonra sonucu echo etmesini değil, $contents stringine atmasını istiyoruz.
                ob_start();
                eval($contents);
                //gidip $contents'in üstüne yazmak doğru alışkanlık değil ama yeni değişken register etmek istemiyorum
                $contents = ob_get_contents();
                ob_end_clean();
            }
            $output = "HTTP/1.0 200 OK\r\nServer: HyperTextServer\r\nConnection: close\r\nContent-Type: $mime\r\n\r\n$contents";
          }
          else
          {
            $contents = "<title>UHU 404</title><h2>UHU 404</h2>Iın-ıın-ıın-ıın-cav-cav-cav-cav-oooooo - oooooo - zört - zört - zört -zört (araba alarmı efekti) Çok afedersin müdürüm ama yok öyle bir dosya.";
            $output = "HTTP/1.0 404 OBJECT NOT FOUND\r\nServer: HyperTextServer\r\nConnection: close\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n$contents";
          }
          socket_write($client, $output);
          socket_close ($client);
        }
        socket_close ($socket);
    }
}
$server = new webserver();
$server->setWebRoot('/var/www/');
$server->setPort(8008);
$server->serve();

Bu kodu (örneğin /var/www altına) hyperTextServer.php adıyla kaydediyoruz.
Daha sonra varsayılan olarak görüntülenmesi için örnek bir /var/www/index.html dosyası oluşturuyoruz.
Son olarak

1
php-cgi /var/www/hyperTextServer.php

ile sunucuyu çalıştırdıktan sonra tarayıcıdan

http://localhost:8008

adresini çağırdığımızda oluşturduğumuz index.html dosyasının servis edildiğini görüyoruz.
Artık bir adım daha ileri giderek bir PHP dosyası çağırmayı deneyebiliriz:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$start = microtime(1);

for($n = 0; $n <= 10000; $n++)
{
    echo $n . ' ';
}
$end = microtime(1);
$elapsed = $end - $start;
echo "<br/>vakit(ms): $elapsed";
$fileHandle = fopen('serverBenchmark.txt' , 'a');
fputs($fileHandle , $elapsed . "\n");
fclose($fileHandle);

Bu kodu da /var/www/test.php adıyla kaydedip tarayıcıdan
http://localhost:8008/test.php adresini çağırdığımızda PHP kodumuzun da gayet başarılı şekilde yorumlandığını görüyoruz.
Gördüğünüz gibi test.php dosyası, serverBencmark.txt dosyasına, çalışmasının ne kadar zaman aldığını yeni bir satır olarak yazıyor. Böylece sevdiğimiz “benchmarkçılık” oyununu oynayabileceğiz.
test.php kodunu arka arkaya yüz kere önce kendi yazdığımız sunucu ile 8008′den, daha sonra da yine yüz kere apache üstünden (default 80.port) çalıştırıp basit bir aritmetik ortalama alacağız.
Benim lokal sistemimdeki sonuçlar söyle:
Apache ortalama: 0,0174917006493 ms
Bizim sunucu ortalama: 0,0098775601387 ms

Görüyoruz ki, beklediğimizin aksine PHP üstünde çalışan bizim sunucu, derlenmiş kod olarak çalışan Apache’den iki kat kadar hızlı çalışıyor. Bu durumun açıklamasının aslında çok da zor olmadığını düşünüyorum: Apache bir sürü kontrol yapıyor, aynı anda birden fazla bağlantı kabul edebiliyor, bir sürü port dinliyor, vs. Öte taraftan bizim sunucumuz yalnız PHP kodunu çalıştırmaya odaklanmış. $_SERVER’a, $_REQUEST’e bir değer atamak için tarayıcı verisini işlemiyor ve tek, basit bir süreç olarak çalışıyor.
Aynı işleri bizim sunucumuza yaptırdığımızda, büyük olasılıkla aradaki hız farkı kapanacak. Yine de şu andaki duruma bakarak iki kat yavaşlayacağını öngörmüyorum sonuç olarak başlangıçta umduğumun çok daha fazlasını alabildiğimi gözlemliyorum.

Bundan sonra yapılacaklar:
1- $_SERVER, $_REQUEST, $_POST, $_GET, $_FILES ve $_COOKIE arraylerinin doldurulması.
2- pcntl eklentisi ile süreçlerin “çatallanması”

Yukarıdaki iki maddelik yapılacaklar listesi de temizlendiğinde elimizde basbayağı düzgün çalışan bir web sunucumuz olacak.

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: , , , ,

Don Quijote. Wikipedia arşivinden

Geliştirdiğim “büyük-iri” sayılabilecek türden bir projeyi müşterime göstermek istiyorum. Müşterim de ciddi bir insan; yaptığınız iş kadar, nasıl yaptığınızla da ilgileniyor. Bunun için Active Collab kullanıyoruz ve memnunuz. Kodlamayı da rahatça takip edebilmesi için ona da VPS üstünde bir hesap açtım; her şey iyi.

Kodun bitirdiğim bir kısmını VPS’e yükledim ve test edeceğim. Fakat o da ne! Lokal sistemde şahane çalışan kod, VPS üstünde patlamasın mı!

Lokal sistem ubuntu 9.10/Suhosin-Patch’li PHP 5.2.10-2ubuntu6.4. Sunucu ise ubuntu 9.04/PHP 5.2.6-3ubuntu4.5

Yani ortada çok tuhaf konfigürasyonlar yok. Ubuntu’nun iki ardıl sürümü. Yazdığım kod da öyle “patlayabilir” cinsinden değil, sıradan bir kod.

Yalınlaştırmak gerekirse:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

class B
{
    public function __construct()
    {
    }
}

class A extends B
{
    public function __construct()
    {
        parent::__construct();
        //biraz kod
    }
   
    public function index()
    {
        //biraz kod
        $this->_methodPrivate();
        //biraz daha kod
    }
   
    private function _methodPrivate()
    {
        //burada da biraz iş...
    }
}

Türünden bir kod. Bakıyorum bakıyorum “hata nerede?” diye, bulamıyorum.
Başkasına sorarak iş yapmayı sevmememe rağmen, “herhalde benim gözüm görmüyor” diyerek friendfeed PHP odasına dahi soruyorum. I-ıh. Çözebilen yok çünkü ortada çözülecek bir şey yok.

Genel olarak bu tür işlerin FTP encoding dertlerinden olduğunu önceki deneyimlerimden (“acılarımdan” diye de okuyabilirsiniz) biliyorum ve kullandığım gFTP’yi bırakıp konsoldan sftp çekiyorum: Sonuç aynı. SSH ile VPS’e geçip nano’ya yapıştırıyorum: “Bana mısın!” demiyor!
Hissel olarak şunu deniyorum:
_methodPrivate()’ı methodprivate() şeklinde denediğimde her ne hikmetse kod çalışıyor! Ancak öyle yarım-yamalak, ne yaptığımı bilmez halde iş yapamam ki!

“Hmm” diyorum, “Bu eski PHP sürümü. Bug vardır bunda!” (Bakınız kaşıntı başlıyor.)
“Sahi, bu Ubuntu 9.04′e nasıl PHP 5.3 kurarım?” (Madem 9.10′da çalışıyor, sürüm yükseltsene be adam! PHP de düzelmiş olur ha? Yook kaşınıyorum ya, 9.04′e kuracağım!)
Vakıa, “Ubuntu 9.04 PHP5.3″ diye arıyorum ve şu yazıyı buluyorum. Bir bakıyorum; abim derlemiş, çalıştırmış phpinfo() ekran görüntüsü bile koymuş.

Bir programcının, Ubuntu kurduktan sonra kuracağı ilk paketlerden biri “build-essential”dır, tamam anladık ama, insan olmanın belki de en kötü taraflarından biri de kişinin mutluluklar kadar acıları da çabuk unutması. Hafızam beni yanıltmıyorsa, en son geçen yıl yine bu aylarda kaynak koddan PHP derlemiştim; demek ki akıllanmamışım!

Abimin yazısından yola çıkarak PHP5.3.0 indirdikten sonra ve kendi işlerime uygun olarak şöyle bir konfigürasyon öngörüyorum:

1
sudo ./configure --with-apxs2=/usr/bin/apxs2 --with-mysql --with-pdo-mysql --with-zlib --enable-calendar --with-curl --enable-dba --with-enchant --with-gd --enable-gd-native-ttf --with-gmp --with-mcrypt --with-readline --enable-soap --enable-zip --with-pgsql --with-pdo-pgsql

Tabii Allah’ın emri: “o kütüphane eksik, şu yok, bu yok” uyarıları içinde bir sürem “sudo apt-get install libfalanca-dev” yazmakla geçiyor…

…ve derlemeye başlıyorum.
Amca önce enchant bindingini derlerken çakıyor. “Abim yazısında enchant’ı öve öve bitirememiş ama benim ne işim olacak?” diyorum ve konfigürasyondan önce –with-enchant’ı çıkarıyorum ve biraz daha ilerliyoruz.
Bilahare, Phar derlenirken su koyuveriyor. Gidiyorum, dokümantasyona bir bakıyorum ki adamlar 5.3′ten itibaren PHP-core’a dahil etmişler.

“Behey adam!”, diyorum, “madem core’a dahil edecektin, gcc4.3 ile çakmayanından yapsaydın ya!”… Zaten “warning”ler gırla gidiyor derleme boyunca; üstünde bile durmaya değmez…

Derken, PHP bug raporlarının içinde yama ararken kendimi buluyorum, ancak yama bulamıyorum!
Tek önerdikleri gecelik snapshottan kurulum.
Onu da yapıyorum. İndirdiğim ve üstünde uğraştığım PHP dizinini uçurarak php5.3-201004092030 diye bir sürüm buluyorum ve baştan başlıyorum. Tabii Phar yine derlenmiyor!

“Çok da sevmişim Phar’ını!” diyerek konfigürasyona nihai şeklini veriyorum:

1
sudo ./configure --with-apxs2=/usr/bin/apxs2 --with-mysql --with-pdo-mysql --with-zlib --enable-calendar --with-curl --enable-dba --with-gd --enable-gd-native-ttf --with-gmp --with-mcrypt --with-readline --enable-soap --enable-zip --with-pgsql --with-pdo-pgsql --disable--phar

Ve nihayet bu sefer derlenmeyi başarıyor PHP, ama dert burada bitmiyor.
“make install” kısmına geldiğimizde “İlla /etc/apache2/httpd.conf dosyanda ‘LoadModule’ bulacağım!” diye tutturuyor.
“Ya sabır!” çekerek açıyorum dosyayı, elle “#LoadModule tiriviri” yazıyorum ve bunu yutturmayı beceriyorum.
Son olarak apache’yi yeniden başlatıyorum phpinfo() çekince karşımda “PHP5.3.3-dev” yazısını görüyorum.

Artık çakan koduma bakıp çalışmasını keyifle izleyebilirim. Hala açık sayfaya refresh çekiyorum…ve…
Kod yine de çalışmıyor, aynı yerde çakıyor!
“Kesin encoding bu! Kesin encoding bu! Encoding ulan!” diyerek bildiğim son numaraları da deniyorum: lokal makineden bir dizini sshfs ile vps’in ilgili dizinine mount ediyorum, lokaldeki dizinden bağlanmış uzak sistem dizinine kopyala+yapıştır deniyorum… Tabii ki yine olmuyor!
…derken, bir anda ilham geliyor ve methodPrivate() içindeki tarihleri Türkçe bastırmak için kullandığım

1
setlocale(LC_ALL , 'tr_TR.UTF-8');

satırını comment ediyorum, deniyorum, a-aa çalışıyor!
O ana kadar hiç aklıma gelmemiş zira işletim sistemini kurar kurmaz apt-get install language-pack-tr-all gibisinden bir paketi de kurmuşum.
Yukarıdaki satırı

1
setlocale(LC_TIME , 'tr_TR.UTF-8');

yapıyorum (biraz altta tekrar en_GB lokaline çevirmem gerekiyor yoksa PgSQL sorgularım patlıyor) ve iş bitiyor!
Kodda bir kelimelik değişiklik yapabilmiş olmak için sisteme gecelik snapshot bir sürüm kurduğumla kalıyorum… Kendi kendime sinirli sinirli gülüyorum ve bu yazıyı yazmaya başlıyorum!

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: , , ,

Sudo ilk kez Bob Coggeshall ve Cliff Spencer tarafından, SUNY/Bufalo’da Bilgisayar Bilimlieri Bölümü’nde 1980 yılı civarında tasarlandı.4.1BSD kullanan bir VAX-11/750 üstünde çalışıyordu. Phil Betchel, Cliff Spencer, Gretchen Phillips, John LoVerso ve Don Gworek tarafından 1985 Aralık ayında, güncellenmiş bir sürümü net.sources Usenet haber grubuna gönderildi.

1986 yazında, Garth Snyder sudo’nun genişletilmiş bir sürümünü yayınladı. Sonraki beş yıl boyunca sudo, CU-Boulder’da Bob Coggeshall, Bob Manchek ve Trent Hein’in aralarında bulunduğu bir kaç kişi tarafından beslenip büyütüldü.

1991 yılında, Dave Hieb ve Jeff Nieusma, “The Root Group” adında bir danışmanlık firmasıyla sözleşmeleri kapsamında, sudoers formatı daha da genişletilmiş bir sudo sürümü yazdılar. Bu sürüm daha sonra GNU kamu lisansı altında yayınlandı.

1994 yılında, sudo’yu gayrıresmi olarak CU-Boulder bünyesinde bir süredir geliştirmiş olan Todd Miller, “CU sudo”nun hata düzeltmeleri ve daha fazla işletim sistemi desteği içeren, herkese açık bir sürümünü yayınladı (sürüm 1.3). “CU”, “The Root Group” sürümünden farklılaşmak için eklenmişti.

1995 yılında, Chris Jepeway, sudoers dosyası için yazdığı yeni bir ayrıştırıcıyla katkıda bulundu. Yeni ayrıştırıcının grameri (eskisinin aksine) düzgündü ve hem sudo, hem de visudo ile çalışabiliyordu. (önceleri ayrıştırıcıları birbirinden biraz farklıydı).

1996 yılında, uzun yıllardır boş zamanlarında sudo’yu geliştiren Todd, sudo dağıtımını CU-Boulder ftp sitesinden, kendi domaini olan courtesan.com (“fahişe.com”) adresine taşıdı.

1999′da, “The Root Group” tarafından 1991 yılından beri resmi bir sudo sürümü yayınlanmamış olduğu için (asıl programcılar artık farklı yerlerde çalışıyordu), “CU” öneki düşürüldü. 1.6 sürümünden beri, Sudo’da artık özgün “Root Group” kodundan eser kalmadı ve ISC stili bir lisans altında yayınlanıyor.

2001′de, sudo web sitesi, ftp sitesi ve e-posta listeleri courtesancom’dan sudo.ws adresine taşındı (sudo.org daha öne başkası tarafından tescillenmişti).

2005′te Todd, son on yılda eklenen özellikleri daha iyi destekleyebilmek için sudoers ayrıştırıcısını yeniden yazdı. Yeni sürüm eskisinin bazı sınırlamalarını, sıralama kısıtlamalarını kaldırıyor ve birden çok sudoers dosyası için destek ekliyor.

Sudo, şimdiki haliyle Todd Miller tarafından yönetiliyor.

Todd sudo’yu genişletmeyi ve hataları gidermeyi sürdürüyor.

Özgün Metin:
A Brief History of Sudo

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: ,

Mongo DB, yeni yeni serpilen fakat şimdiden bir çok kişinin gözdesi haline gelmeyi başarmış bir veritabanı. PHP için de eklentisi mevcut: http://www.php.net/manual/en/intro.mongo.php

Buradan AMD 64 bit için derlediğim Mongo DB .deb paketini edinebilirsiniz.

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: , , ,

Anımsayamadığım kadar uzun zamandır, herhalde 1997 ya da 1998′den beri Gnu/Linux ile ilgiliyim. Slackware 2.4 günlerinden beri bu işletim sistemiyle uğraşıyorum. “Fanatik” olduğum söylenebilir. Ubuntu ise ben dahil birçok kişinin favori dağıtımı.

Bu başlangıçtan sonra bu yazıyı ben okuyor olsam “Neden bekliyorsun? Belli hastasın, işin gücün yok ‘yeni sürüm çıksa da indirsem kurcalasam!’ derdindesin!” derdim ve keşke öyle olsaydı.

Ubuntu 9.04 çok iyiydi. Taş gibiydi. Harika çalışıyordu. Ne zaman ki adamlar “9.10 çıktı” duyurusunu yaptılar ve ben mutlu mutlu sürümü yükselttim, işte o gün dertler başladı.
Eskiden izlediğim filmleri izleyemez, dinlediğim müzikleri dinleyemez olmuştum. “Dert değil, güncelleme çıkar.” diyerek VLC kurdum, idare etmeye başladım. Sistem genel olarak kararsız bir yapıya bürünmüştü ancak yeni sürümün ilk günlerinde normal olduğunu düşünerek üstünde durmadım. Vakıa, bir kaç gün içinde güncellemeler çıktı ki ne güncelleme! Çekirdekten Apache’ye kadar hemen hemen güncellenmedik paket kalmadı. Kalmadı ama, görünürde iyiye giden hiç bir şey yoktu.
Derken iki gün sonra bir güncelleme daha… Yine çekirdekten ofise kadar ve yine düzelme yok.
Olsun, Ubuntu yine canımdı. Bu arada tasksel’i deneyeyim dedim, sağolsun o da makinede gereksiz bulduğu Xorg dahil, paket repoları dahil, ne varsa kaldırıverdi. “Tasksel yerine mkfs yazsak daha iyiymiş!” diye homurdanarak konsoldan makineyi ayağa kaldırmakta birkaç saat içinde muvaffak oldum.

Sonra bir güncelleme daha ve bu sefer Apache de çalışmamaya başladı.” Artık alenen söverek onu da toparladım.
Webcam’in mikrofonun çekmeceye kalkmış olmasını sorundan saymıyorum bile zira webcamim çok sıradan ve ne çok eski ne de çok yeni bir model olmasına rağmen Ubuntu 9.04 de 9.10 da tanımadı. Arayıp bir kernel modülü bulup derledim ve çalıştırmayı başardım ancak kernel güncellemesinden sonra yine dağıldı. İki günde bir webcam modülü ile uğraşmak istemediğimden webcami basitçe söküp, haklı yeri olan çekmeceye kaldırdım.

Şimdilerde güncelleme yöneticisinde bekleyen 300 MB yeni paket var ancak benim de bir sabrım var.
Yayınlanmasına hesapça bir ay kadar kalmış olan Ubuntu 10.4′ten umutluyum, ancak “ne olur ne olmaz” diyerek bir de Debian indirdim, kenarda duruyor.

Paylaş:
  • Print
  • FriendFeed
  • Twitter
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • DZone
  • LinkedIn
  • MySpace
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati

Etiketler: , ,