Maceraya hazır mısın! bir BSD almaz mısın?

Bu konuya katılanlar

Duyuru
* Forum tasarımımız yenilendi.
* FreeBSD 10.4 - RELEASE Final çıktı.
* FreeBSD 11.1 - RELEASE Final çıktı.
Son Mesajlar
Çevrimiçi (0)

OpenBSD 5.3 sisteminde portlarla çalışma

docturdoctur 441
Aralık 2015 düzenlendi Rehberler
Paketler port ağacından derlenir.Port ağacı aslında Freebsd'den alınmış bir kavram olup bir dizi Makefile'lerden oluşur. Herbiri 3.parti bir uygulamaya karşılık gelir. Portlar aşağıdaki durumları kontrol eder:
-Yazılım kaynakları nerede ve nasıl alınır?
-Bu yazılıma bağlı diğer yazılımlar nelerdir?
-Gerekirse kaynaklar nasıl değiştirilir?
-Yazılımlar nasıl oluşturulur ve yapılandırılır?
-Yazılımlar nasıl test edilir?(isteğe bağlı)
-Yazılımlar nasıl kurulur?
Her port Makefile hariç en az aşağıdakileri içerir:
- PLIST : paket listesi: Uygulama yapıldıktan sonra paket oluşturmak için gerekli yönergeleri içerir.
- DESCR : uygulamanın açıklanması
- distfile: dağıtım dosya sağlamaları(checksums) ve boyutunu içerir.
Tüm bu bilgiler /usr/ports altında bir dizin hiyerarşisinde tutulur. Bu hiyerarşi üç özel alt dizini içerir:
- /distfiles -Port sistemi, yüklendikten sonraki yazılım dağıtım ayarlarını burada saklar.
- /infrastructure-Port altyapısının ana dizini olup, gerekli tüm scriptleri(komutları) ve makefile'leri içerir.
- /packages-Ports sistemi tarafından oluşturulan tüm ikili paketleri içerir.
Diğer tüm altdizinler farklı uygulama kategorilerini oluşturur ki bunlar güncel portların alt dizinlerini içerir.Karmaşık portlar, daha da derin bir
seviyede organize edilebilir.
Her port dizini paket listesi(listeleri) ve açıklama dosyası(dosyaları) içeren bir /pkg alt dizini içerir. Sırasıyla, kaynak yamalar ve ek dosyalar için, /patches ve /files alt dizinleri olabilir.
Bir kullanıcı belirli bir portun alt dizinindeki make' yi çalıştırınca, sistem ardışık olarak onun bağımlılık ağacını yürütecek, gerekli bağımlılık
ların kurulu olup olmadığını kontrol edecek, eksik bağımlılıkları oluşturup kuracak ve daha sonra istenilen portun yapılmasını devam ettirecektir.
Yapının tümü portun meydana getirdiği çalışma dizini içinde olur. Normalde çalışma dizini varsayılan olarak /usr/ports/pobj 'de  ${WRKOBJDIR} altındadır.Fakat çalışma dizinini /etc/mk.conf dosyasında yapacağınız bir ayarlama ile değiştirebilirsiniz(aşağıda port sisteminin yapılandırılması başlığına bakınız.). WRKOBJDIR /etc/mk.conf dosyasında ayarlanmamışsa bunun yerine portun ana dizininin bir alt dizini (paket adının önüne "w-" konur) w-paket_adı adıyla kullanılacaktır.
Not: Portlar asla sisteminize doğrudan kurulmaz.Yalancı bir kurulum dizini kullanırlar. Orada kurulan herşey birarada bir paket içinde toplanmıştır(daha önceden söz edildiği gibi port ağacının /packages alt dizininde saklanır). Gerçekte bir portu kurmak demek, önce bir paket oluşturmak ve daha sonra o paketten kurmaktır.
Port ağacını alma
Port ağacını farklı kaynaklardan alabilirsiniz. Hangi port flavor'unu(çeşidini) istediğinize karar vermelisiniz. Aşağıdaki tablo portların hangi flavor'unu nerede ve hangi biçimde bulabileceğinizi göstermektedir. Kullanılabilr kaynaklar x işareti kullanılamayan kaynaklar - işaretiyle gösterilmiştir:                                                        

Source(Kaynak)Form(Biçim)Flavor(Çeşit)
-release-stabilsnapshots-current
CD-ROM.tar.gzx---
FTP mirrors(FTP yansıları).tar.gzx-x-
AnonCVScvs checkoutxx-x
CD-ROM ve FTP yansılarda, ports.tar.gz adlı bir dosya arayın.Bu dosyayı /usr dizinine çıkardığınızda /usr/ports dizini oluşacaktır.Örneğin:
$ cd /tmp
$ cd /usr
$ sudo tar xzf /tmp/ports.tar.gz

FTP yansılarındaki mevcut snapshots(anlık) flavor current(güncel) port ağacından günlük olarak oluşturulur.Anlık(snapshots) flavoru /pub/OpenBSD/snapshots dizininde bulacaksınız. Eğer port ağacının bir anlık(snapshots) flavor'unu kullanıyorsanız OpenBSD'nin eşleşen bir anlık(snapshots) sürümünü (örneğin ftp://ftp.ulak.net.tr/pub/OpenBSD/snapshots/amd64/install54.iso) kurmalısınız.Bir başka deyişle port ağacınız ile OpenBSD sisteminizin aynı olmasından emin olun.
Port sistemini yapılandırma
OpenBSD projesi port ağacındaki tüm yazılımların kaynak kodunu tam olarak incelemek için yeterli kaynaklara sahip olmadığı için port sistemini bir kaç güvenlik önlemini almak için yapılandırabilirsiniz. Port altyapısı(infrastructure) normal bir kullanıcı olarak tüm yapıyı oluşturmayı mümkün kılar.Sadece make fake ve make install gibi make hedeflerini gerçekleştirirken root olarak super kullanıcı yetkileri gerektirir.Ancak,root yetkileri her zaman bir noktada gerekli olduğu için kötü niyetli bir uygulama kurmaya karar verdiğinizde port sistemi sizi tam olarak koruyamayacaktır:
- sudo 'yu kurabilir ve super kullanıcı izinleri gerektiren görevlerde port sisteminin sudo yu kullanmasını sağlayabilirsiniz. Sadece aşağıdaki satırı /etc/mk.conf dosyasına ekleyin:
  SUDO=/usr/bin/sudo
- Port ağacının sahibini değiştirebilirsiniz. Böylece normal bir kullanıcı olarak oraya yazabilirsiniz. Bu durumda, normal kullanıcı wsrc grubuna eklenmelidir.   Ve  alttaki dizinler grub yazabilir hale getirebilir.
# chgrp -R wsrc /usr/ports
# find /usr/ports -type d -exec chmod g+w {} ;
- Aşağıdaki satırı /etc/mk.conf dosyasına ekleyerek port sisteminin systraceyi kullanmasını sağlayabilirsiniz:
  USE_SYSTRACE=Yes
Bu, port yapım işlemini izin verilen dizinler içinde kalmaya zorlar ve yasadışı yerlerden yazılmasını engeller ve böylece bozuk bir sistemin oluşma riskini önemli ölçüde azaltır. systrace kullanımının port yapım zamanını yaklaşık %20 artırdığını unutmayın.
Port yapımı boyunca yazılan dizinleri ayırarak port ağacını salt okunur olarak kullanmak mümkündür:
-portların çalışma dizini. Bu, WRKOBJDIR değişkeni tarafından kontrol edilir.
-Dağıtım dosyalarını içeren dizin. Bu DISTDIR değişkeniyle kontrol edilir.
-Yeni oluşturulan ikili paketleri içeren dizin.Bu PACKAGE_REPOSITORY değişkeniyle kontrol edilir.
Örneğin, /etc/mk.conf dosyasına aşağıdaki satırları ekleyebilirsiniz:
WRKOBJDIR=/usr/obj/ports
DISTDIR=/usr/distfiles
PACKAGE_REPOSITORY=/usr/packages

Arzu edildiği takdirde, ayrıca bu dizinlerin sahipliğini yerel kullanıcı adı ve group olarak değiştirebilirsiniz. Böylece port sistemi normal bir kullanıcı olarak çalışma dizinleri altında oluşturulabilir.
Port ağacında arama
Sisteminizde port ağacı varsa yazılımları aramak çok kolay.Sadece make search key="searchkey" kullanıyorsunuz:
$ cd /usr/ports
$ make search key=rsnapshot
Çıktı:
Port:   rsnapshot-1.3.1p0
Path:   net/rsnapshot
Info:   remote filesystem snapshot utility
Maint:  Antoine Jacoutot
Index:  net sysutils
L-deps:
B-deps: :net/rsync
R-deps: :devel/p5-Lchown :net/rsync
Archs:  any

Arama sonuçları, görüldüğü gibi portun adını ve yolunu, porta ait tek satırlık bir açıklama, portun sağlayıcısını, portla ilşkili anahtar kelimeler(indexi), kütüphane/yapı/çalışma zamanı bağımlılıklarını ve portun çalıştığı bilinen mimariler gibi bilgileri gösterir.Bu sistem çok ayrıntılı aramalara SQL kullanarak izin verir. Bu sistem bir SQL veritabanıdır. Fakat temelde herhangi bir veritabanı biçimi port alt yapısı kullanılarak oluşturulabilir.
Ancak bu mekanızma port index dosyası üzerinde awk çalıştıran birçok temel mekanizmalardan biridir. OpenBSD 4.0 dan beri, "sqlports" olarak adlandırılan yeni bir port sistemi oluşturulmuştur. Bu port sistemi çok ayrıntılı aramaya izin verir. Bu bir SQLite veritabanıdır. Fakat temelde sadece herhangi bir veritabanı biçimi port alt yapısı kullanılarak oluşturulabilir. sqlport denen port veritabanı oluşturmak için kullanılan komut dosyasını(script) içerir. Bu script temelde farklı biçimdeki veritabanlarını oluşturmak için de kullanılabilir.
Sadece pkg_add  sqlports paketi başlatmak için, örnek bir oturum gibi aşağıdaki gibi görünebilir:
$ sqlite3 /usr/local/share/sqlports
Çıktı:
SQLite version 3.3.12
Enter ".help" for instructions
sqlite> SELECT FULLPKGNAME,COMMENT FROM Ports WHERE COMMENT LIKE '%statistics%';
Guppi-0.40.3p1|GNOME-based plot program with statistics capabilities
mailgraph-1.12|a RRDtool frontend for Postfix statistics
R-2.4.1|clone of S, a powerful math/statistics/graphics language
py-probstat-0.912p0|probability and statistics utilities for Python
darkstat-3.0.540p1|network statistics gatherer with graphs
pfstat-2.2p0|packet filter statistics visualization
tcpstat-1.4|report network interface statistics
wmwave-0.4p2|Window Maker dockapp to display wavelan statistics
diffstat-1.43p0|accumulates and displays statistics from a diff file
sqlite>

Yukarıdaki hala çok temel bir aramadır. SQL ile, bağımlılıklar, yapılandırma bayrakları,paylaşılan kütüphaneler vs de dahil olmak üzere hemen herşey aranabilir.
Porttan kurulum
Basit ve kolay bir kurulum örneğiyle işe başlayalım. rsnapshot 'u kurmayı isteyelim. Bu uygulamanın bir bağımlılığı var:rsync
$ cd /usr/ports/net/rsnapshot
$ make install
Çıktı:
===>  Checking files for rsnapshot-1.2.9
>> rsnapshot-1.2.9.tar.gz doesn't seem to exist on this system.
>> Fetch http://www.rsnapshot.org/downloads/rsnapshot-1.2.9.tar.gz.
100% |**************************************************|   173 KB    00:02
>> Size matches for /usr/ports/distfiles/rsnapshot-1.2.9.tar.gz
>> Checksum OK for rsnapshot-1.2.9.tar.gz. (sha1)
===>  rsnapshot-1.2.9 depends on: rsync-2.6.9 - not found
===>  Verifying install for rsync-2.6.9 in net/rsync
===>  Checking files for rsync-2.6.9
>> rsync-2.6.9.tar.gz doesn't seem to exist on this system.
>> Fetch ftp://ftp.samba.org/pub/rsync/old-versions/rsync-2.6.9.tar.gz.
100% |**************************************************|   792 KB    00:31
>> Size matches for /usr/ports/distfiles/rsync-2.6.9.tar.gz
>> Checksum OK for rsync-2.6.9.tar.gz. (sha1)
===>  Verifying specs:  c
===>  found c.40.3
===>  Extracting for rsync-2.6.9
===>  Patching for rsync-2.6.9
===>  Configuring for rsync-2.6.9
 [...snip...]
===>  Building for rsync-2.6.9
 [...snip...]
===>  Faking installation for rsync-2.6.9
 [...snip...]
===>  Building package for rsync-2.6.9
Link to /usr/ports/packages/i386/ftp/rsync-2.6.9.tgz
Link to /usr/ports/packages/i386/cdrom/rsync-2.6.9.tgz
===>  Installing rsync-2.6.9 from /usr/ports/packages/i386/all/rsync-2.6.9.tgz
rsync-2.6.9: complete
===> Returning to build of rsnapshot-1.2.9
===>  rsnapshot-1.2.9 depends on: rsync-2.6.9 - found
===>  Extracting for rsnapshot-1.2.9
===>  Patching for rsnapshot-1.2.9
===>  Configuring for rsnapshot-1.2.9
 [...snip...]
===>  Building for rsnapshot-1.2.9
 [...snip...]
===>  Faking installation for rsnapshot-1.2.9
 [...snip...]
===>  Building package for rsnapshot-1.2.9
Link to /usr/ports/packages/i386/ftp/rsnapshot-1.2.9.tgz
Link to /usr/ports/packages/i386/cdrom/rsnapshot-1.2.9.tgz
===>  rsnapshot-1.2.9 depends on: rsync-2.6.9 - found
===>  Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz
rsnapshot-1.2.9: complete

Gördüğünüz gibi, port sistemi otomatik olarak çok şey yapıyor.Bunlar kaynak kodu almak,ayıklamak ve yamamak, kaynağı yapılandırmak ve derlemek, yalancı bir dizine dosyaları yüklemek, bir paket(paket listesine karşılık gelen) oluşturmak, ve bu paketi sisteminiz üzerine(genellikle /usr/local altında) kurmak şeklinde sıralanabilir. Ve bu portun tüm bağımlılıkları için yineleyerek tekrar eder.
Yukardaki çıktıda "===> Verifying install for ..." ve "===>Returning to build of ..." satırlarının bağımlılık ağacı adımlarını gösterdiğine dikkat ediniz.
Yüklemek istediğiniz uygulamanın önceki bir sürümü zaten sisteminizde yüklü ise, "make install" yerine "make update" kullanabilirsiniz. Bu pkg_add komutunu -r bağrağıyla birlikte çağıracaktır. -r bayrağı var olan paketleri değiştirir.
Not:Büyük uygulamalar kurulurken çok fazla sistem kaynağına gereksinim duyulur.Bunun en iyi örnekleri GCC 4.0 ya da Java 2 Software Development Kit gibi uygulamaların derlenmesidir.Böyle bir portu kurarken "out of memory" tipinde hata mesajı alırsanız bu genellikle 2 nedenden dolayı olur:
1-Kaynak sınırlarınız çok kısıtlayıcıdır. Onları ksh'ın ulimit ya da csh'ın limit komutuyla ayarlayın. Bu işe yaramazsa kurulumu sınırlı kaynaklarla çalıştırmak için kuruluma başlamadan önce root olun yada -c bayrağıyla sudo kullanın.
2-Makinanızda yeterli RAM yoktur.
Kurulum sonrası temizlik
Paketi oluşturup kurduktan sonra portun varsayılan çalışma dizinini muhtemelen temizlemek istersiniz.
$ make clean
Çıktı:
===>  Cleaning for rsnapshot-1.2.9
Buna ek olarak, hedef portun tüm bağımlılıklarının çalışma dizinlerini de temizlemek isteyebilirsiniz.
$ make clean=depends
Çıktı:
===>  Cleaning for rsync-2.6.9
===>  Cleaning for rsnapshot-1.2.9

Portun kaynak dağıtım setini(setlerini) kaldırmak isterseniz, aşağıdaki kodu kullanmalısınız.
$ make clean=dist
Çıktı:
===>  Cleaning for rsnapshot-1.2.9
===>  Dist cleaning for rsnapshot-1.2.9
Aynı portun birden fazla flavor'larını derlemeniz durumunda bu flavor'ların çalışma dizinlerini aşağıdaki kodu bir kez kullanarak temizleyebilirsiniz.
$ make clean=flavors
Özel bir değişkeni ayarlayarak kurduğunuz şeyleri de temizleyebilirsiniz.Çalışma dizinleri paket oluşturulduktan sonra otomatik olarak temizlenmiş olacaktır:
$ make package BULK=Yes
Bir portun paketini kaldırma
Bir portu kaldırmak çok kolaydır:
$ make uninstall
Çıktı:
===> Deinstalling for rsnapshot-1.2.9
rsnapshot-1.2.9: complete
Clean shared items: complete

Bu sisteminizden karşılık gelen paketi kaldırmak için pkg_delete komutunu çağırır.İsterseniz aşağıdakini kullanarak kaldırdığınız bir portun paketini yeniden de kurabilirsiniz:
$ make reinstall
Çıktı:
===>  Cleaning for rsnapshot-1.2.9
/usr/sbin/pkg_delete rsnapshot-1.2.9
rsnapshot-1.2.9: complete
Clean shared items: complete
===>  Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz
rsnapshot-1.2.9: complete

Eğer sadece kurulum paketlerinden kurtulmak istiyorsanız aşağıdaki kodu kullanabilirsinz:
$ make clean=packages
Çıktı:
===>  Cleaning for rsnapshot-1.2.9
rm -f /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz

Flavors(Çeşitler) ve altpaketleri kullanma
Farklı ihtiyaçlara göre yazılımı paketlemeyi kontrol etmek için iki mekanizma vardır.
İlk mekanizma flavors olarak adlandırılır.Bir flavor genellikle belirli bir dizi derleme seçeneklerini gösterir.Örneğin, bazı uygulamalar "no_x11" flavora sahiptir. Bu tip uygulamalar X olmayan sistemlerde kullanılabilir.Bazı kabuklar "static" bir flavora sahiptir. Bu tip kabuklar statik bağlantılı bir versiyonu kurar. Farklı flavorları olan portlarda vardır. Böyle portlar farlı grafik araçlarıyla kurulabilir. Diğer örnekler: farklı vertabanı biçimleri için destek, farklı ağ seçeneleri(SSL,IPV6,...) için destek, farklı kağıt boyutları için destek vs.
Özet:Büyük olasılıkla, bir paket aradığınız flavor için uygun yapılmamış olduğunda flavorları kullanacaksınız.Bu durumda, istediğiniz flavoru belirtecek ve portu kendiniz oluşturacaksınız.
Çoğu port flavorlarının oluşmaları sırasında kendi çalışma dizini vardır ve her flavor herhangi bir karışıklığı önlemek için buna uygun adlandırılmış bir paket içinde paketlenecektir.Belirli bir portun farklı flavorlarını görmek için:
$ make show=FLAVORS
Portun DESCR dosyalarına da bakmalısınız ki bu dosyalar mevcut flavorları gösterir.
İkinci mekanizma altpaketler(subpackages) olarak adlandırılır. Bir kullanıcı aynı uygulamanın farklı parçaları için, eğer onlar mantıksal olarak ayrılabiliyorsa, altpaketler oluşturmaya karar verebilir.Sık sık bir programın sunucu kısmı ve istemci kısmı için altpaketler göreceksiniz.Bazen ayrıntılı belge ayrı bir altpaket içinde paketlenmiştir. Çünkü oldukça çok disk alanı kaplıyordur. Çok sayıda bağımlılıkları çeken fazla işlevsellik sıklıkla ayrı olarak paketlenmiş olacaktır. Kullanıcı ayrıca varsayılan olarak kurulması için hangi altpaketin ana altpaket olacağına karar verecektir.
Özet:Bazı portlar birkaç pakete ayrılır,bölünür.make install komutu sadece ana alt paketi kuracaktır.
Bir port tarafından oluşturulan farklı paketleri listelemek için aşağıdakini kullanın:
$ make show=PKGNAMES
make install komutu sadece ana alt paketi kuracaktır. Onların tümünü kurmak için aşağıdakini kullanın:
$ make install-all
Bir port için mevcut farklı altpaketleri listelemek için kullanın:
$ make show=MULTI_PACKAGES
Port ağacı içinde hangi altpaket/paketlerin kurulacağını seçmek mümkündür. Bazı testlerden sonra bu işlem istenilen altpaket/paketleri kurmak için sadece pkg_add i çağırır.
$ env SUBPACKAGE="-server" make install

Not: Alt paket mekanizması sadece paketleri oluşturur. Portu oluşturmadan önce herhangi bir yapılandırma seçeneğini değiştirmez.Bu amaç için flavorları kullanmalısınız.

Yorumlar

Yorum yapmak için Oturum Açın yada Kayıt Olun .