Showing posts with label gnu/linux. Show all posts
Showing posts with label gnu/linux. Show all posts

Friday, April 25, 2008

VLC Derleme - Bölüm I : Hazırlık

Asagidaki bilgiler eski olabilir. Daha guncel bir makale surada. ===== Bu bölümde GNU/Linux üzerinde çalışacak bir VLC'yi derlemek için gereken hazırlıkları anlatacağım. Öncelikle VLC'nin kendi geliştiricileri de Debian GNU/Linux dağıtımını kullandığı için sizin de bu dağıtımı kullanmanız işleri oldukça kolaylaştıracaktır, hatta ortak çalışmamız için Debian kullanmanız zorunlu diyebilirim. Debian'da birçok paket (VLC'nin bağımlı olduğu bütün paketler) önceden derlenmiş olarak geldiği için bir de onları ve onların bağımlılıklarını derlemenize gerek kalmıyor. Debian'ın özel program kurulum sistemi de zaten bağımlılıkları otomatik olarak tanıyıp yüklüyor.

1. Depoları Ayarlama ve Program İndirmeyi Öğrenme

Temel Debian sistemimizi kurduktan sonra ilk yapmamız gereken kurulum dosyalarının depolarını sisteme tanıtmak. Bu işlemi zaten kurulum sırasında yapmış olabilirsiniz, yine de buradaki adımları takip etmeniz en azından indirme hızı açısından yararlı olacaktır; örneğin ben, Debian depolarından ortalama 1.5MB/s ile program indirebiliyorum.
  1. Root kullanıcı olarak bir metin düzenleyici ile /etc/apt/sources.list dosyasını açın. İçeriğini şu şekilde değiştirin: deb http://ftp.tr.debian.org/debian/ etch main contrib non-free
  2. Daha sonra, herhangi bir terminalde (konsolda), root kullanıcı olarak şu komutu çalıştırın: apt-get upgrade Bu şekilde depodaki bilgileri güncellemiş olduk.
  3. Artık rahatlıkla yeni programları ve kütüphaneleri indirebiliriz. Bunun için Debian'da iki seçenek bulunmakta: Grafik tabanlı olan Synaptic ya da konsol tabanlı apt-get. İlk başlarda Synaptic kullanmak daha mantıklı olacaktır, alıştıkça apt-get'i kullanmaya başlayabilirsiniz.
    1. Synaptic: Synaptic'te yapmamız gereken tek şey istediğimiz programa sağ tıklayıp "Mark for Installation"ı seçmek. Daha sonra onay kutularını takip edip uygula dediğimizde program kurulmuş oluyor.
    2. apt-get: apt-get kullanmak için komut satırında öncelikle root kullanıcı olmak gerekiyor.(su komutuyla --ya da sudo apt-get ... da kullanabilirsiniz. sudo geçici olarak root olmanıza yarayan bir komut. Bunu kullanmak için sudo programını kurup daha sonra da /etc/sudoers dosyanızın sonuna şuna benzer bir satır eklemeniz gerekiyor: ustun ALL=(ALL) ALL ) Kullanımı şu şekilde: apt-get install abc komutuyla abc programını yüklüyoruz. Aynı anda hem abc, hem de xyz programlarını kurmak istersek yazmamız gerekense apt-get install abc xyz. Benzer şekilde, bir programı kaldırmak için apt-get remove abc komutunu kullanabilirsiniz. Son olarak, bir programı derlemek için gereken tüm bağımlılıkları indirmek için apt-get build-dep abc komutu var.
      Not: Bu komutu aslında VLC'nin gereksinim duyduğu tüm programları indirmek için kullanabiliyor olmamız gerek; ancak son denememde hata vermişti.(apt-get build-dep vlc) Belki şu an çalışıyordur.

2. Bağımlılıkları İndirme

Bu kısımda VLC'yi derlemek için gerekli olan birkaç programı indireceğiz. Burada bilinmesi gereken kilit nokta şu: Bir programı derlemek için başka bir programa gereksinim duyuluyorsa bu genelde o programın geliştirme kütüphaneleridir. Mesela bizim programımız foo programına gereksinim duyuyor diyelim. Bu durumda Debian'da indirmemiz gereken genelde şu isimde bir paket olur: "libfoo-dev" Yani foo'nun geliştirme (dev) kütüphanesi (dev). Bazen de header paketlerine gereksinim duyulabilir. foo-headers şeklinde. Bazı paketlerdeyse baştaki lib bulunmamakta ve kütüphane foo-dev şeklinde depoda bulunmakta. Bu önemli noktayı bildikten sonra derleme işlemi oldukça kolaylaşıyor. Zira derlerken libhal bulunamadı gibi bir hatada yapmamız gereken Synaptic ya da apt-get kullanarak libhal veya libhal-dev gibi paketleri indirmek. Bu şekilde VLC'nin gereksinim duyduğu kütüphaneleri sırasıyla yüklüyoruz. Bu kütüphanelere VLC'nin wikisinden ulaşabilirsiniz. Debian'da paket yönetimiyle ilgili en güzel kısmı ise sona sakladım. apt-get'le sistemde kurulu paketlerin listesini alıp daha sonra tek bir komutla yeni veya farklı bir kuruluma aynı paketleri yükleyebiliyorsunuz. Örneğin benim sistemimde kurulu paketlerin listesini şuradan indirebilirsiniz. Daha sonra bu paketi kaydettiğiniz klasöre gidip şu komutu yazarsanız bende kurulu olan tüm paketler size de yüklenmiş oluyor: dpkg --set-selections <ustunsecim dselect install Böylece sizin sisteminiz de benim sistemim gibi VLC derlemeye hazır hale geliyor! :) Bir sonraki bölümde VLC derlemek için gereken komutları anlatacağım.

GNU/Linux'ta Program Derleme - I

Bu kısımda yeni başlayanlar için GNU/Linux üzerinde program derlemeyi ve kurmayı anlatacağım. Anlatacağım konular temel seviyede ve bu yazıda bütün kütüphanelerin sistemde kurulu ve tanıtılmış olduğunu varsayıyorum. (Tanıtılmamış olduğu durumları sonraki yazılarda inceleyebilirim.) Öncelikle, aslında küçük (iki üç dosyadan oluşan) programlarımızı gcc komutlarını konsolda kullanarak derleyebiliriz; ama program büyüdükçe hangi dosyanın hangisine bağlanacağı gibi kararlar karmaşıklaşır. Bu nedenle, automake gibi bu genel derleme işini otomatikleştiren araçlar kullanılmakta. Bu bölümde daha önceden automake kullanılmış programlara sahip olduğumuzu varsayıyoruz. (ki kullandığımız birçok programın kaynak kodları bu şekilde zaten) GNU/Linux'ta program derlemek üç ana adımdan oluşur:
  1. configure etme: configure komutları genelde sistemle ilgili veri almak için kullanılır. Bu komut sayesinde sistemde hangi program/kütüphanelerin nerede kurulu olduğu araştırılır ve programın hangi özelliklerini etkinleştirmek istediğimizi bu adımda belirtiriz. Bu adımdaki komutumuz şu şekilde: ./configure configure komutunun başındaki ./ karakterleri sistem PATH'inde bulunmayan herhangi bir çalışır dosyayı çalıştırmak için kullanılmakta. Yani, Windows altında olduğu gibi geçerli klasördeki çalışır dosyayı sadece adını vererek çalıştıramıyoruz; komutun önüne ./ eklememiz gerekiyor. (Not: Bir dosyayı çalışır hale getirmek için de chmod +x dosyaadi yapmamız gerekiyor.) Bunun dışında configure aşamasında programın seçeneklerini değiştirebileceğimizden bahsetmiştim. Mevcut seçenekleri çoğu durumda ./configure --help ile öğrenebiliyoruz. Daha sonra yapmamız gereken de ./configure --enable-abc --disable-foo şeklinde istediğimiz özellikleri ekleyip kaldırmak. Bu aşamada aynı zamanda bazı kütüphaneleri nereye kurduğumuzu da belirtiyoruz: ./configure --with-ffmpeg --with-ffmpeg-path=/usr/ffmpeg gibi. Tabii burada yazdığım parametreler sadece örnek, geçerli parametreleri daha önce belirttiğim gibi ./configure --help ile öğrenmeniz gerekiyor. configure komutunun sonucunda o klasör altında bir Makefile oluşturuluyor. Bu dosya bir sonraki adımda işe yarayacak.
  2. make: Bir sonraki aşama, asıl derleme aşamasının olduğu aşama. Genelde başkalarının yazdığı kodları çalıştırırken birinci aşamayı geçmeniz halinde make aşamasında fazla sorun yaşamıyorsunuz. Tabii kendi yazdığınız bir programsa bu aşamada hatalar çıkabilir.
  3. make install: Bu son aşamada aslında herhangi bir derleme yapmıyoruz. Bu adımın amacı derlediğimiz programı sistem klasörlerine kopyalamak; çünkü şu ana kadar yaptığımız bütün işlemler sonuçlarını içinde bulunduğumuz klasörde oluşturdu. Tabii ki sistem klasörlerine erişmemiz gerektiği için root kullanıcı olmamız gerekiyor. Bu komutu da make install deyip uyguladıktan sonra program her kullanıcı tarafından kullanılabilir duruma geliyor. Bu adımla ilgili belirtilmesi gereken diğer bir nokta aslında bu adımda 2. adımdaki make komutuna farklı bir parametre vermiş olduğumuz. Yani make komutu default halinde derlemeyi yapıyor; ama make install gibi bir komutla başka işlemler yapmasını sağlayabiliyorsunuz. Burada bir diğer örnek make clean olabilir. Bu da bütün derleme sonrası oluşturulmuş dosyaları silmenize ve sadece kaynak dosyalarının olduğu özgün duruma dönmenizi sağlıyor. Makefile dosyasını dikkatli incelerseniz bütün bu install, clean gibi komutların işlevlerinin yazılmış olduğunu göreceksiniz.
Son olarak aslında derleme işlemiyle direk ilgisi olmayan; ama işinize yarayabilecek birkaç ipucunu belirtmek istiyorum.
  1. .tar.gz uzantılı bir dosyayı açmak için gereken komut tar -zxf dosyaadi ve tar.bz2 içinse tar -jxf dosyaadi
  2. VLC gibi programlarda çok uzun configure komutları oluyor. Bunları her seferinde girmek yerine, DOS'taki batch dosyaları gibi script dosyaları oluşturabilirsiniz. Yapmanız gereken şunlar: Düz metin dosyasının ilk satırına #!/bin/sh yazın, sonraki satırlara da gireceğiniz komutları yazın. Eğer tek bir satırdan uzun olursa okunabilirliği artırmak adına \ kullanarak bir sonraki satırın bu satırını devamı olduğunu belirtin. Örneğin: ./configure --enable-a --enable-b --enable-c --enable-d --enable-e --enable-f --enable-g --enable-h --enable-i --enable-j --enable-k yerine ./configure --enable-a --enable-a \ --enable-b --enable-c --enable-d \ --enable-e --enable-f --enable-g gibi satırlar yazın. NOT: Her satırdaki son karakter \ olmak zorunda, yani \ karakterinden sonra boşluk bile gelmemeli.
  3. Bu komutları çalıştırdığınızda ekrana bir sürü yazı gönderecekler. Bunların bir kısmı normal çıktılar, diğerleri ise uyarı ve hatalar. Haliyle bu iki grubu birbirinden ayırdetmek güçleşiyor. Bu nedenle bu iki grubu iki ayrı dosyaya yazdırmak işinize yarayabilir. Burada yapmanız gereken 1> ve 2> ile sırasıyla normal veriyi ve hataları başka dosyalara göndermek. Örneğin, ./configure 1>normal.txt 2>hata.txt satırıyla programın normal metnini normal.txt dosyasına, hataları ise hata.txt dosyasına yazdırabiliriz.
  4. Derleme işlemleri uzun sürdüğü için configure ve make işlemlerini ardarda yaptırmak isteyebilirsiniz. Burada dikkat edilmesi gereken nokta şu: Eğer yukarıda anlatıldığı şekilde bir script(batch) dosyası oluşturup bu iki komutu alt alta yazarsanız, birinci komut hata verse de ikinci komut yapılacaktır. Ör: ./configure make hatalı bir kullanımdır. Birincinin düzgün tamamlanması halinde ikinci programı başlatmak istersem ikisi arasına && koymak gerekir. Ör: ./configure && make