OpenBSD Paket Yönetim Sistemi
From OpenBSD Belgeleme Projesi
Contents |
Açıklama
OpenBSD üzerinde çalıştırılabilecek, yeterince üçüncü parti yazılım bulunmaktadır. Bu yazılımların, kurulumunu ve yönetilmesini kolaylaştıracak, ayrıca OpenBSD kural ve amaçlarına uygun hale getirebilecek üçüncü parti yazılım, OpenBSD üzerinde ön kurulumu yapılmış halde gelir. Bu ön kurulum birçok değişik şey içerir. Örnek verecek olursak: OpenBSD nin paylaştırılmış kütüphanelerine uygun bir şekilde, yine OpenBSD dizinlerini kullanarak (mesela konfigurasyon dosyaları için /etc kullanılır) yazılımlar oluşturulması gibi.
Ön kurulumun doğal sonucu olarak sistem üzerinde, kuruluma hazır paketler bulunmaktadır. Paket mantığı ile çalışan sistemlerin ana amacı; kurulmuş paketlerin devamlılığını sağlamak, kolayca güncelleyebilmek ve kolayca sistemden kaldırılabilmek olmasıdır. Bu mantıkla sistem üzerinden kaldırılan uygulamaların gereksiz dosyaları sistem üzerinde kalmaz ve kullanıcılar sürekli temiz bir sistem kullanır. Paket mantığı ile çalışan sistemlerde, yazılım düzgün bir şekilde susturulmadan paketin yanlışlıkla silinmesine engel olunmuştur. Başka bir avantaj ise kullanıcının nadiren yazılım derlemeye ihtiyaç duymasıdır. Kısa bir sürede, birçok paket otomatik olarak düzgün bir şekilde kurulabilir.
Ayrık ve ön yüklemeli paketler OpenBSD temel sistemi üzerinde bütün güvenlik denetlemelerinden geçmez. Bunula beraber, yeterli personel olmamasına rağmen paket kalitesinin yüksek seviyede ve aynı güvenlik düzeyinde tutulması için gereken çaba sarfedilmektedir. Mümkün olduğunca değişik uygulamalar için yapılan güvenlik güncellemeleri aşağıda açıklandığı gibidir.
Paket Yönetimi
Nasıl Çalışır
Paketler, çok kullanılan üçüncü parti yazılımların ön tanımlı olarak derlenmiş halidir. Paketler pkg* araçları olarak tanımlanan değişik araçlar tarafından yönetilebilir:
- pkg_add(1) - yazılım paketlerinin kurulum ve güncellenmesi için kullanılan araç
- pkg_delete(1) – kurulumu yapılmış olan paketlerin sistemden kaldırılması için kullanılan araç
- pkg_info(1) – yazılım paketleri hakkında bilgi almak için kullanılan araç
- pkg_create(1) – yazılım paketleri oluşturmak için kullanılan araç
Mesela X paketinin çalışması için Y ve Z paketlerinin kurulmuş olması gerekmektedir. Burada X uygulaması Y ve Z uygulamalara ihtiyaç duymaktadır ki Y ve Z, X’ in bağımlı olduğu uygulamalardır. Burada Y, P ve Q gibi; Z’ de R gibi başka uygulamalara bağımlı olabilirler. Bu yapı, tam “bağımlı ağaç” olarak biçimlendirilmiştir.
Paketler .tgz uzantılı, basit yapıdadır. Basitce bu şekildedir ancak burada cok onemli bir fark vardir: bunlar bazı ekstra paket bilgileri içerirler. Bu bilgiler pkg_add aracı tarafından değişik amaçlar için kullanılır:
- Çeşitli kontroller: paket zaten kurulmuş mu, diğer kurulu paketlerle vaya isimleri ile çakışıyor mu?
- Kurulacak olan paketin ihtiyacı olan (bağımlı olduğu) paketlerden henüz kurulu olmayanları otomatik olarak getirerek kurar.
- Paketler hakkındaki bilgileri, merkezi bir yere, genellikle /var/db/pkg dizini altına kayıt eder. Bu, paketlerin silinmesi sırasında doğabilecek bağımlı olma hatasına engel olacaktır. Kullanıcılara, paketin kazayla silinip silinmediği bilgisini almak için yardımcı olur.
Nasıl Kolaylaştırılır: PKG_PATH
PKG_PATH çevresel değişkeni ile birtakım işler kolaylaşabilir. Sadece favori lokasyonunuzu (dizin) belirtmeniz yeterlidir. pkg_add aracı otomatik olarak belirtilmiş olan bu lokasyona bakar ve bağımlı olduğu paketleri de getirip kurulumu tamamlar.
Aşağıdaki bölümlerde paketlerin getirilebileceği muhtemel lokasyonlar verilmiştir.
Örnek 1 : CDROM dan getirme, /mnt/cdrom altına bağlandığı farzedilerek $ export PKG_PATH=/mnt/cdrom/3.8/packages/`machine -a`/ Örnek 2 : FTP yansılardan $ export PKG_PATH=ftp://your.ftp.mirror/OpenBSD/3.8/packages/`machine -a`/
Yukaridaki satırları ~/.profile dosyanıza yazmanız işinizi kolaylaştıracaktır. Klasik çevre değişkenleri gibi birden fazla lokasyon tanımını yapabilirsinz. Bununla birlikte PKG_PATH değişkeni içindeki herbir lokasyonun sonunda / olması gerekir. Bu, pkg_add(1) komutunun, içerikte kolonlar içeren URL şemalar olması halinde bile düzgün çalışmasına yardımcı olacaktır.
PKG_PATH içindeki ilk değişkenin hata vermesi halinde ikinci değişken ve daha sonrakiler denenecektir ta ki paket bulunana kadar. Bütün değerler hata verirse, bir hata mesajı oluştururarak çıktı verir.
Yukarıdaki komtularda kullanılan makinanin cinsi belirtilir. Bu, genellikle uygulamanın mimarisini belirler, fakat bu sürekli böyle değildir. Tabiki snapshot kullanılırsa, “3.8” i “snapshots” ile değiştirmek gerekir.
Paket Bulma
Birçok temel mimari için geniş bir paket koleksiyonuna ulaşmak mümkündür. İhtiyacınız olan paket için sadece aşağıdaki yerlere bakmanız yeterlidir:
- Mimarinize uygun olarak, üç CDROM’ dan biri. CDROM lar genel olarak kullanılan mimarileri için bedava paketler içerir.
- FTP yansıları. Paketler /pub/OpenBSD/3.8 dizini altında bulunur. Mimariye göre uygun dizin seçilir.
- OpenBSD wb sitesi paket listesi:
- OpenBSD 3.8 Paketleri
- OpenBSD 3.7 Paketleri
- OpenBSD 3.6 Paketleri
Sisteminiz üzerinde önyükleme ağacı varsa onu önyükleme ağacında arama kısmında açıklandığı gibi bulabilirsiniz.
“Çeşit” (flavors) denen birkaç yöntemle belirli paketlerin bulunması sözkonusudur. Diğerleri ise aynı uygulamanın ayrı ayrı kurulmuş parçacıklardır. Bunlara altpaketler denir.
Bunlar hakkında Çeşitler ve Altpaketler bölümünde bahsedilecektir ancak çeşit kavramını, basitçe değişik opsiyonlar ile konfigure edilmiş paketler olarak telaffuz edebilebilir. Birçok paketin değişik çeşitleri bulunmaktadır. Mesela, veritabanı sistemde X olmadan desteklenebilmesi ve veri ağının SSL ve IPv6 desteklerinin bulunması gibi. Herbir paket çeşidi değişik son eklerle değişik isimler alır. Paket isimleri ile ilgili dedaylı bilgiyi paket-özellikleri(7) bölümünde bulabilirsiniz.
Not: Bütün paketlerin FTP sunucularda olma ihtimali yoktur. Bazı uygulamalar her mimaride çalışmaz. Bazı paketler lisanslama nedeniyle FTP (veya CDROM) ile dağıtılmıyor olabilir.Ancak ön yüklemeli paketlerin çeşitleri ile ilgili birçok olasılık sözkonusudur. OpenBSD projesi hepsini yapabilecek kadar kaynağa sahip değildir. İhtiyacınız olan ama mevcut olmayan bir kombinasyonu kaynak kodundan kurmanız gerekebilir. Daha fazla bilgi için Önyükleme bölümündeki Çeşit ve Altpaketlerin Kullanımı kısmı okunabilir.
Yeni Paket Kurulumu
Paket kurulumu için, pkg_add(1) komutu kullanılır. Eğer basitleştirme kısmında anlatıldığı gibi bir PKG_PATH çevre değişkenine sahipseniz, sadece “pkg_add paket ismi” kombinasyonunu girmeniz yeterli olacaktır. Aşağıda basit bir örnek görebilirsiniz:
$ sudo pkg_add -v screen-4.0.2 parsing screen-4.0.2 installed /etc/screenrc from /usr/local/share/examples/screen/screenrc | 71% screen-4.0.2: complete
Bu örnekte –v bayrağı daha fazla bilgi çıktısı almak için kullanılmıştır. Bu opsiyon gerekli değildir, ancak pkg_add(1) komutu çalıştırıldığında tabanda neler yaptığı bilgisini alıp hata durumunda hatayı tespit etmek için kullanılır. /etc/screenrc den bahsedilen mesaja dikkat edin. Çoklu kullanılan –v bayrağı daha fazla çıktı verecektir. OpenBSD sisteminde, bazı paketler için konfigurasyon veya uygulamanın kullanımı sırasında daha fazla bilgi alınması sözkonusudur. Bu opsiyonun kullanılıp kulanılmamasının önemi için aşağıdaki örnek incelenebilir:
$ sudo pkg_add ghostscript-fonts-6.0 ghostscript-fonts-6.0: complete You may wish to update your font path for /usr/local/share/ghostscript/fonts --- ghostscript-fonts-6.0 ------------------- To install these fonts for X11, just make sure that the fontpath lists the 75dpi or 100dpi bitmap fonts before the ghostscript fonts, and make sure you have the string ":unscaled" appended to the bitmap font's fontpath. This way, the bitmap fonts will be used if they match, and the Type 1 versions will be used if the font needs to be scaled. Below is the relevant section from a typical xorg.conf file. FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/local/lib/X11/fonts/ghostscript/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
Bağımlı paketleri bulunan bir paketin kurulumu ile örneklerimize devam edelim:
$ sudo pkg_add -v tin-1.6.2 parsing tin-1.6.2 Dependencies for tin-1.6.2 resolve to: gettext-0.10.40p3, libiconv-1.9.2p1, libutf8-0.7.3, pcre-4.5 (todo: libiconv-1.9.2p1,gettext-0.10.40p3,pcre-4.5,libutf8-0.7.3) tin-1.6.2:parsing libiconv-1.9.2p1 tin-1.6.2:libiconv-1.9.2p1: complete tin-1.6.2:parsing gettext-0.10.40p3 Dependencies for gettext-0.10.40p3 resolve to: libiconv-1.9.2p1 tin-1.6.2:gettext-0.10.40p3: complete tin-1.6.2:parsing pcre-4.5 tin-1.6.2:pcre-4.5: complete tin-1.6.2:parsing libutf8-0.7.3 tin-1.6.2:libutf8-0.7.3: complete tin-1.6.2: complete
Tekrar –v bayrağını kullandık ve ne olup bittiğini izledik. Bir paketin, kurulmasından önce kurulması gereken paketler hakkında bilgi almış olduk. Mesajın ortalarında biryerde libiconv paketine bağımlı olan gettex paketinin kurulduğu bilgisini görebiliriz. Gettex paketi kurulmadan önce paket bilgileri incelendi ve libiconv paketinin kurulu olup olmadığı kontrol edildi. Birden fazla paket ismini, muhtemel bağımlı paketleri ile birlikte kurmak için tek bir satıra girmek mümkündür. Bazı nedenlerden dolayı PKG_PATH kullanmamaya karar verirseniz, paketin lokasyon bilgisini komut satırına girebilirsiniz. Bu lokasyon, lokal veya URL (FTP,HTTP veya SCP) adres olabilir. FTP lokasyona sahip bir kurulumu inceleyebiliriz:
$ sudo pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/`machine -a`/screen-4.0.2.tgz screen-4.0.2: complete
Bu örnekte –v bayrağı kullanılmadığından sadece gerekli olan mesajlar görüntülenebilmiştir. URL verilirken paketin .tgz uzantısına kadar tam adres verildiğine dikkat edin. Daha önceki örneklerde olduğu gibi, pkg_add(1) komutu otomatik olarak tamamladığından bu uzantıyı kullanmayabilirsiniz.
Not: Aynı paketler bütün mimarileri desteklemiyor olabilir. Bazı önyükelemeler bazı mimarilerde çalışmıyor olabilir. Diğerleri üzerine kurulu olan paketlerin performansları da farklı olabilir.
Güvenlik için daha önce kurulmuş (veya daha eski bir versiyonu yüklü ise) bir paketi kurmak veya sistemden kaldırmak isterseniz pkg_add(1) konfigurasyon dosyalarının üzerine yenisini yazmayacaktır. Bunun yerine size aşağıdaki gibi bir bilgi mesajı gelecektir (sadece –v bayrağı kullanıldığında !) :
$ sudo pkg_add -v screen-4.0.2 parsing screen-4.0.2 The existing file /etc/screenrc has NOT been changed** | 71% It does NOT match the sample file /usr/local/share/examples/screen/screenrc You may wish to update it manually screen-4.0.2: complete
Bazen aşağıdaki örnekte görüldüğü gibi bir hata mesajı ile karşılaşılabilinir:
$ sudo pkg_add xv-3.10ap3
xv-3.10ap3:jpeg-6b: complete
xv-3.10ap3:png-1.2.8: complete
xv-3.10ap3:tiff-3.7.3: complete
Can't install xv-3.10ap3: lib not found X11.9.0
Even by looking in the dependency tree:
tiff-3.7.3, jpeg-6bp2, png-1.2.8
Maybe it's in a dependent package, but not tagged with @lib ?
(check with pkg_info -K -L)
If you are still running 3.6 packages, update them.
Burada bütün xv kurulumları aniden iptal edildiğinde, pkg_add(1) bağımlı paketleri düzgünce kurar. Bu, OpenBSD 3.7 den sonra gelen başka bir güvenlik önlemidir. Paket bilgisi, paketin kurulmuş olmasını istediği paylaşımlı kütüphanelerin, üçüncü parti kütüphaneler gibi sistem kütüphane bilgilerini de içerir. Eğer gerekli bir kütüphane bulunamazsa paket, fonksiyonlarını yerine getiremediği için kurulamaz. Bu tip çakışmaları çözmek için sisteminizde kurulum yapabilmek için gerekli olan kütüphaneleri bulmanız gerekmektedir. Kontrol edilmesi gerekenler:
- Kurulmuş eski paketlere sahip olmalısınız: gerekli olan kütüphanelerin eski versiyonları sisteminizde bulunmaktadır, bunları güncellemeniz gerekmekir.
- Sisteminiz tamamlanmamış olabilir: gerekli kütüphaneleri içeren dosya kümelerinden birini kurmamışsınızdır. Sadece gerekli dosya kümesini ekle.
- Sisteminiz güncel olmayabilir: gerekli kütüphaneler eski versiyonlarda kalmış olabilir. Kurulum sihirbazını başlatarak (SSS 4 de detaylandırılmıştır) (U)pgrade’i seçin ve sisteminizin güncellemesini tamamlayın.
Kurulu Paketleri Sorgulama
pkg_info(1) komutunu çalıştırarak sistemde kurulmuş olan paketleri listeleyebilirsiniz.
$ pkg_info aterm-0.4.2 color vt102 terminal emulator with transparency support bzip2-1.0.3 block-sorting file compressor, unencumbered fluxbox-0.9.13 window manager based on the original Blackbox code gettext-0.10.40p3 GNU gettext imlib2-1.1.2p0 image manipulation library jpeg-6bp2 IJG's JPEG compression utilities libiconv-1.9.2p1 character set conversion library libltdl-1.5.18 GNU libtool system independent dlopen wrapper libungif-4.1.0b1 tools and library routines for working with GIF images libutf8-0.7.3 provides UTF-8 locale support mutt-1.4.2ip0 tty-based e-mail client ncftp-3.1.9 ftp replacement with advanced user interface pcre-4.5 perl-compatible regular expression library png-1.2.8 library for manipulating PNG images screen-4.0.2 multi-screen window manager tcsh-6.13.00 extended C-shell with many useful features tiff-3.7.3 tools and library routines for working with TIFF images tin-1.6.2 threaded NNTP and spool based UseNet newsreader
Kurulmuş olan paket ismi verildiğinde (veya kurulumuş olan paketin lokasyonu), pkg_info(1) bu paket hakkinda daha fazla bilgi verecektir.
Kurulu Paketleri Güncelleme
OpenBSD 3.7’ den beri, kurulu olan paketlerin güncellenmesi –r (=replace) bayrağı kullanılarak pkg_add(1) aracı ile yapılabilir. OpenBSD 3.8 ile –u bayrağının kullanılacağının sinyalleri verilmektedir. Gerçek anlamda güncelleme mekanizması bununla başlamakta ve gelecek versiyonlarda özellikleri daha da geliştirilecektir. Şimdilik sadece yeni paketin ismini göstermektedir.
Sisteminizi OpenBSD 3.7’ den 3.8’ e geçirmeden önce unzip uygulamasının eski versiyonu kurulmuş olsun. -u bayrağı yeni paketin ismini ve versiyon numarasını getirecektir. Bununla ilgili komut aşağıdaki gibidir:
$ sudo pkg_add -u unzip Updating unzip-5.51 -> unzip-5.52 Update using pkg_add -r unzip-5.52
Bir komutla eski paketi, yeni 3.8 paketine güncelleyebiliriz:
$ sudo pkg_add -r unzip-5.52 unzip-5.52 (extracting): complete unzip-5.51 (deleting): complete unzip-5.52 (installing): complete Clean shared items: complete
pkg_add(1) komutunu –u bayrağı ile hiçbir paket ismi vermeden çalıştırırsak, sistemde kurlu olan bütün paketlerin yeni versiyonları getirilir. Paketlerin başka paketlere bağımlı ise bu paketlerinde yeni versiyonları kontrol edilir.
Eski paketlere ait, ayaları yapılmış konfigurasyon dosyaları dokunulmadan tutulur. Bununla beraber pkg_add(1) komutu –c bayrağı ile çalıştırılarak yeni paketle birlikte gelen düzenlenmemiş konfigurasyon dosyasını kullanmak mümkündür. Yukarıda anlatılan yöntem paketleri güncellemenin en iyi yoludur. Bu yöntemin %99 gibi bir başarısı sözkonusudur. Bazı karmaşık yapıdaki uygulamalar klasik yöntemlerle güncellenebilir. Yani eski paketi sistemden kaldırıp yeni paketi taze kurulum ile kurmak gerekir. Bu biraz rahatsız edici bir yöntemdir. Çünki paketin bağımlı olduğu paketlerle ilgili sorunlarla karşılaşmak olasıdır. . Ayrıca paketin güncellemesi için büyük bir altkümenin silinmesi gerekebilir.
Kurulu Paketleri Kaldırma
Bir paketin gerçek ismini pkg_info(1) (yukarıda Kurulmuş Paketlerin Listelenmesi’ ne bakınız) kullanarak tespit edip pkg_delete(1) aracı ile sistemden kaldırmak mümkündür. Aşağıdaki örnekte screen paketi sistemden kaldırılmıştır. pkg_delete(1) aracının sistemden kaldıramadığı paketlerin kaldırılması için ekstra yönergelere ihtiyaç vardır. pkg_add(1) aracında olduğu gibi pkg_delete(1) aracında da –v bayrağı daha fazla bilgi almak için kullanılabilir.
$ sudo pkg_delete screen screen-4.0.2: complete Clean shared items: complete
Not: Çoğunlukla paket çeşitlerinin versiyon numaralarını vermeye gerek yoktur. pkg_delete(1) paketin tam ismini kendi kendine bulabilir. Ancak birden fazla aynı isimli paket kurulmuşsa veya bir karışıklık sözkonusu ise paketin tam ismini vermek gerekecektir ( örnekte, screen-4.0.2 şeklinde tam olarak verilmiştir.). Bu durumda pkg_delete(1) aracı hangi paketi sistemden kaldıracağını bilemez. Güvenlik nedeniyle, pkg_delete(1) aracı düzenlenmiş konfigurasyon dosyalarını silemeyecektir. Bunun yerine sizi bilgilendirecek bir mesaj verecektir.
$ sudo pkg_delete screen screen-4.0.2: complete Clean shared items: complete --- screen-4.0.2 ------------------- You should also remove /etc/screenrc (which was modified)
Eğer bu konfigurasyon dosyalarının silinmesini istiyorsanız pkg_delete(1) komutu ile birlikte –c bayrağını kullanmalısınız.
Güvenlik Paketlerini Güncelleme ( kararlı paketler)
Üçüncü parti bir uygulamada ciddi kod hataları veya sorun tespit edildiğinde, önyükleme ağacı tarafından soruna çözüm üretilir. Bundan sonra güncellenmiş paket erişilebilir duruma getirilir.
Güncellenmiş paketler ve önemli güncellemeler için kararlı paketler sayfası na göz atın. Güncellenmiş paketlerin sadece i386 mimarisi için erişilebilir olduğuna dikkat edin. Diğer mimariler için sistemin önyükleme ağacının –kararlı bölümünü kullanıp kaynak kodundan derlemeniz gerekecektir.Paketler ve önyükleme sisteminin yazılımları ile ilgili güvenlik anaonslarını almak istiyorsanız önyükleme-güvenlik mail listesine üye olabilirsiniz. Hatası düzeltilmiş paket ile yeni sürümün karıştırılarak bir hataya mahal vermemesi için paket isimleri sürekli değişir. Paket ismi, ya daha yüksek versiyon numarası değişikliği ile veya N+1 kere yamalanmış bir pakete bir pN soneki eklenerek değiştirilir.
Tamamlanmamış Paket Kurulumu ve Kaldırma
Bazı garip durumlarda paket diğer dosyalarla çakışma yaşandığı için ne tam olarak yüklenmiş ne de kaldırılabilmiştir. Tamamlanmamış yüklemelerde genellikle paketin önüne “kısmi-“ getirilerek işaretlenir. Bu durum yükleme sırasında CTRL+C’ ye basıldığında yaşanır:
$ sudo pkg_add screen-4.0.2 screen-4.0.2: complete 7% Adjusting md5 for /usr/local/info/screen.info-3 from 49fb3fe1cc3a3b0057518459811b6dac to 3b9c7811244fb9f8d83bb27d3a0f60d8 /usr/sbin/pkg_add: Installation of screen-4.0.2 failed , partial installation recorded as partial-screen-4.0.2
Potansiyel problemler ve oluşabilecek hatalara karşı kısmi yükleme yapılmış paketleri sistemden temizlemek en uygun yöntemdir. Diğer paketlerle karışıklık yaşanması sisteminizin temiz olarak yüklenmediği anlamına gelmektedir.