Linux Unix

Linux LPIC-1 Sertifikasyon Sınavına Hazırlık – Modül 102

   Merhaba arkadaşlar, bir önceki makalemizin ilk modülünde, Sistem Mimarisi, Donanımlar, Kernel, Sistem Yöneticileri, Sistem Çalışma Seviyeleri gibi bir çok konularına değinmiştik. Şimdi bir bir işletim sistemi kurarken diski nasıl tasarlamak gerektiğine, LVM, Ext4, swap, Grub, Paket Yöneticileri, Kütüphanele ve Sanallaştırma gibi bir çok konuya değineceğiz. Vakit kaybetmeden işleyeceğimiz konulara başlayalım.

LPIC-1 Modül 1 İçin Bakınız:

https://www.cozumpark.com/lpic-1-sertifikasyon-sinavina-hazirlik-modul-101-500/

102.1 Tasarım sabit disk düzeni

Anahtar bilgi alanları

  • Dosya sistemlerini ayırın ve ayrı bölümlere veya disklere alan değiştirin.
  • Sistemin kullanım amacına göre tasarımı uyarlayın.
  • /boot bölümünün, önyükleme için donanım mimarisi gereksinimlerine uygun olduğundan emin olun.
  • LVM‘nin temel özellikleri hakkında bilgi.

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • /(kök) dosya sistemi
  • /var dosya sistemi
  • /home dosya sistemi
  • /boot dosya sistemi
  • EFI Sistem Bölmesi (ESP)
  • takas (swap) alanı
  • Bağlama noktaları
  • Bölümler

    Bir diskin bir bilgisayar tarafından kullanılabilmesi için önce bölümlenmesi gerekir. Bölüm, mantıksal fiziksel diskin mantıksal bir alt kümesidir. Bölümleme, örneğin işletim sistemi verilerini kullanıcı verilerinden ayırarak, diskte depolanan bilgileri “bölümlere ayırmanın” bir yoludur. Her diskin en az bir bölüme ihtiyacı vardır, ancak gerekirse birden fazla bölüme sahip olabilir ve bunlarla ilgili bilgiler bir bölüm tablosunda depolanır. Bu tablo, bölümün ilk ve son sektörleri ve türü hakkında bilgilerin yanı sıra her bölümle ilgili daha fazla ayrıntı içerir.

Her bölümün içinde bir dosya sistemi vardır. Dosya sistemi, bilgilerin gerçekte diskte saklanma şeklini tanımlar. Bu bilgiler, dizinlerin nasıl düzenlendiğini, aralarındaki ilişkinin ne olduğunu, her dosyanın verilerinin nerede olduğunu vb. içerir. Bölümler birden fazla diske yayılamaz. Ancak Mantıksal Birim Yöneticisi (LVM) kullanılarak birden çok bölüm, tek bir mantıksal birim oluşturmak için diskler arasında bile birleştirilebilir. LVM, verileri daha büyük bir cihaza geçirmek zorunda kalmadan bir bölüme daha fazla alan eklemeniz gereken durumlarda kullanışlıdır.

Montaj Noktaları

Linux’ta bir dosya sistemine erişilebilmesi için önce bağlanması(mount) gerekir. Bu, dosya sistemini sisteminizin dizin ağacında bağlama noktası adı verilen belirli bir noktaya eklemek anlamına gelir. Dosya sistemleri istediğiniz yere monte edilebilir. Ancak, sistem yönetimini kolaylaştırmak için izlenmesi gereken bazı iyi uygulamalar vardır.

/mnt dizini geleneksel olarak, tüm harici aygıtların altına monte edileceği dizindi ve altında CD-ROM sürücüleri ve disketle gibi yaygın aygıtlar için önceden yapılandırılmış bir dizi bağlantı noktası bulunurdu.

Bunun yerini yeni dağıtımlar da, sisteme bağlı herhangi bir kullanıcı tarafından çıkarılabilir ortam  USB, Bellek kartı okuyucuları, optik diskler vb. için varsayılan dizin bağlama noktası olarak /media olmuştur. Çoğu modern Linux dağıtımların da, çıkarılabilir cihazlar /media/USER/LABEL  olarak sisteme otomatik olarak bağlanır.

  • USER = Kullanıcı adı
  • LABEL = Cihaz Etiketi

Örneğin, bir flash bellek taktığınızda, otomatik olarak /media/mehmetoz/kingston dizini altına bağlanır.

İşleri Ayrı Tutmak

Linux’ta, ayrı bölümlerde tutmayı düşünmeniz gereken bazı dizinler vardır. Bunun pek çok nedeni vardır: örneğin, önyükleyici ile ilgili dosyaları bir önyükleme (/boot) bölümünde tutularak, kök dosya sisteminde bir çökme olması durumunda sisteminizin yine de önyükleme yapabileceğinden emin olursunuz.

Kullanıcının kişisel dizinlerini /home dizini olarak ayrı bir bölümde tutmak, yanlışlıkla kullanıcı verilerine dokunma riski olmadan sistemi yeniden yüklemeyi kolaylaştırır. Bir web veya veritabanı sunucusuyla ilgili verileri /var gibi ayrı bir bölümde  tutmak, bu kullanım durumları için daha fazla disk alanı eklemeniz gerektiğinde sistem yönetimini kolaylaştırır.

Bazı dizinleri ayrı bölümlerde tutmak için performans nedenleri bile olabilir. 

Önyükleme (/boot) Bölümü

Önyükleme bölümü, önyükleyici tarafından işletim sistemini yüklemek için kullanılan dosyaları içerir. Linux sistemlerinde önyükleyici genellikle GRUB2 veya daha eski sistemlerde GRUB Legacy’dir. Bölüm genellikle /boot altına ve dosyaları /boot/grub altına monte edilir.

df -h|grep -w boot 

Teknik olarak bir önyükleme (/boot) bölümü gerekli değildir, çünkü çoğu durumda GRUB kök bölümüne bağlayabilir ve dosyaları ayrı bir dizinden de yükleyebilir.

Ancak, güvenlik için (bir kök dosya sistemi çökmesi durumunda bile sistemin önyüklenmesini sağlamak) veya önyükleyicinin kök bölümde anlayamadığı bir dosya sistemini kullanmak istiyorsanız veya bir dosya sistemi kullanıyorsa, ayrı bir önyükleme bölümü istenebilir. 

Önyükleme bölümü genellikle diskteki ilk bölümdür. Bunun nedeni, orijinal IBM PC BIOS’un maksimum 1024 silindir, 256 kafa ve 63 sektör ile silindirler , kafalar ve sektörler  kullanarak disklere hitap etmesi ve maksimum 528 MB disk boyutu ile sonuçlanmasıdır. Bu nedenle, maksimum uyumluluk için, önyükleme bölümü genellikle diskin başlangıcında bulunur ve silindir 1024’ten önce biter, bu da ne olursa olsun makinenin her zaman çekirdeği yükleyebilmesini sağlar.

Önyükleme bölümü yalnızca önyükleyicinin ihtiyaç duyduğu dosyaları, ilk RAM diskini ve çekirdek görüntülerini sakladığından, günümüz standartlarına göre oldukça küçük olabilir. İyi bir boyut yaklaşık 300 MB’dir. Ancak, günümüzde /boot bölümü yeni dağıtımlarda varsayılan olarak bırakılırsa, 1GB ve 2GB olarak oluşmaktadır.

Kullandığınız dağıtım için ne kadar önyükleme alanına ayırıldığına ve ne kadar yer kapladığına aşağıdaki komutu çalıştırarak bakabilirsiniz.

df -hT|grep -w boot 

EFI Sistem Bölmesi (ESP)

EFI Sistem Bölümü (ESP), kurulu işletim sistemleri için önyükleme yükleyicilerini ve çekirdek görüntülerini depolamak için Birleşik Genişletilebilir Ürün Yazılımı Arabirimi’ne (UEFI) dayalı makineler tarafından kullanılır. Bu bölüm, FAT tabanlı bir dosya sisteminde biçimlendirilmiştir. GUID Bölüm Tablosu ile bölümlenmiş bir diskte, global olarak benzersiz bir tanımlayıcıya sahiptir. Microsoft Windows çalıştıran makinelerde bu bölüm genellikle diskteki ilk bölümdür, ancak bu gerekli değildir. ESP, kurulum sırasında işletim sistemi tarafından oluşturulur  ve bir Linux sistemine /boot/efı altına monte edilir.

/home Bölümü

Sistemdeki her kullanıcının kişisel dosyalarını ve tercihlerini saklamak için bir ana dizini vardır ve bunların çoğu /home bölümüdür. Genellikle giriş dizini kullanıcı adıyla aynıdır, bu nedenle örneğin, mehmet.oz kullanıcısının dizini /home/mehmet.oz olarak ayarlanır.

Ancak istisnalar vardır. Örneğin, kök kullanıcının ev dizini /root olarak ayarlanır. Bazı sistem hizmetleri, kullanıcıları başka bir yerde ana dizinlerle ilişkilendirmiş olabilir.

Kullanıcıların /home dizini için bir bölümün boyutunu belirlemek için bir kural yoktur. Sistemdeki kullanıcının hangi amaçla ve nasıl kullanılacağını göz önünde bulundurmalısınız. Yalnızca web’de gezinme ve kelime işleme yapan bir kullanıcı ile, örneğin video düzenleme işi yapan bir kullanıcıdan daha az alana ihtiyaç duyacaktır. Yani karar sizindir.

root (/ – kök) ifadeleri

ÖNEMLİ !!! Hazır root demişken çok karıştırılan bir konu hakkında aydınlık getirelim. Bir sistemde root konusu geçtiğinde bu aşağıdakilerini ifade edebilir.

  1. root / = Sistemin root dizin (/) anlamına gelebilir.
  2. root / = Sistemde tanımlanan root kullanıcısı anlamına gelebilir.
  3. root / = Sistemde bulun root kullanıcısının ev dizini olabilir.

Aşağıdaki görselde doğrulamasını gerçekleştirelim.

ls /
sudo ls /root
grep -w root /etc/passwd 

/var dizini

/var dizini, değişken verileri veya sistemin çalışma sırasında yazabilmesi gereken dosya ve dizinleri içerir. Buna sistem günlükleri /var/log içinde, geçici dosyalar /var/tmp ve önbelleğe alınmış uygulama  /var/cache verileri de dahildir.

Örneğin, Apache Web Sunucusunun veri dosyalarının varsayılan dizini /var/www/html  olmakla birlikte MySQL sunucusunun veritabanı dosyalarının varsayılan dosyaları /lib /mysql,  konumundadır. Ancak bunların her ikisi de değiştirilebilir.

/var’ı ayrı bir bölüme koymanın iyi bir nedeni kararlılıktır. Birçok uygulama ve işlem /var, /var/log veya /var/tmp gibi alt dizinlere yazar. Hatalı işlem, dosya sisteminde boş alan kalmayıncaya kadar veri yazabilir. Dosya sisteminin zarar görmesi durumunda sistemin etkilenmemesi için /var ayrı bölümde tutulması doğru olandır.

Takas (swap) Alanı

Takas alanı, sabit disk üzerinde işletim sistemi tarafından ayrılmış bir bölümdür. İşlenecek veriler RAM’e sığmadığı zaman bu bölüm RAM gibi kullanılır ve böylece işlemlerin devam etmesi sağlanır. Sabit disklerin veri okuma/yazma hızları RAM’lerden çok daha düşük olduğu için takas alanının kullanılması işlemleri yavaşlatır.

Linux işletim sisteminde bu alan sabit disk üzerindeki bir bölümlendirilmelidir. Fakat Microsoft’a ait işletim sistemlerinde “pagefile” isminde bir dosya oluşturulur, RAM’e sığmayan veri buraya yazılır ve windows kurulumunda ayarlanan boyut ortalama RAM miktarının 1.5 katıdır ve daha sonradan değiştirilebilir. Bu oluşturulan alanı kullanıcı normal olarak göremez. Ancak üçüncü parti yazılım üreticilerinin programları ile görmesi mümkündür.

Linıx swap bölümü diğerleri gibi monte edilemez, yani ona normal bir dizin gibi erişemez ve içeriğine göz atamazsınız.

Bir sistem birden fazla takas bölümüne sahip olabilir (bu nadir olmakla birlikte) ve Linux , gerektiğinde takas alanını hızla artırmak için yararlı olabilecek, bölümler yerine takas dosyalarının kullanımını da destekler.

Takas bölümünün boyutu tartışmalı bir konudur. Linux’un ilk günlerinden kalma eski kural (“RAM miktarının iki katı”), sistemin nasıl kullanıldığına ve kurulu fiziksel RAM miktarına bağlı olarak artık geçerli olmayabilir.

Red Hat Enterprise Linux 7 belgelerinde Red Hat aşağıdakileri önerir:

RAM miktarıÖnerilen Takas BoyutuHazırda Bekletme ile Önerilen Takas Boyutu
2 GB RAM2x RAM miktarıRAM miktarının 3 katı
2-8 GB RAMRAM miktarına eşit2x RAM miktarı
8-64 GB RAMEn az 4 GB1.5x RAM miktarı
> 64 GB RAMEn az 4 GBTavsiye edilmez

Elbette takas miktarı iş yüküne bağlı olabilir. Makine, veritabanı, web veya SAP sunucusu gibi kritik bir hizmeti çalıştırıyorsa, bir öneri için bu hizmetlerin belgelerini kontrol etmek akıllıca olacaktır.

swappines ayarlanması

Swap kullanımı ile alakalı önemli çekirdek parametresi ise  vm.swappines‘tir. Swap gerçekleştirilmeden önce boş olan RAM’in yüzdesini temsil eder. Bu değeri ne kadar yüksek tutarsak sunucumuzun swap’e düşme ihtimalini artacak iken, ne kadar düşük olursa swap’e düşme ihtimali o kadar düşük olur. 0-100 arasında belirlenebilen bu parametrenin işletim sistemi kurulduktan sonra varsayılan değeri 60′tır.  Yani bunun anlamı ram kullanımı %40 olduğunda en az kullanılan dosyaları cach’lemek için swap alanına atar.  Swap alandan dosyalara erişmek performans kaybına yol açar.

Veritabanı iş yükleri için daha düşük swappines değeri önerilir. Örneğin, Oracle veritabanları için Red Hat, 10’luk bir swappines değeri önerir. Buna karşılık, MariaDB veritabanları için swappines değeri 1 olarak ayarlanması önerilir. 

Artık biraz, swappines mantığını anladıysak aşağıdaki seçeneklere bakarak, bir değer belirleyelim.

  • 0  = Takas devre dışı
  • 1 = Tamamen devre dışı bırakmadan minimum takas miktarı
  • 10 = Bir sistemde yeterli bellek bulunduğunda performansı artırmak için önerilen değer
  • 100 = Agresif takas

İlk olarak sistemimdeki varsayılan swap değerine bakıyorum. Varsayılan olarak 60 olarak geldiğini doğrulamış olduk.

sysctl vm.swappiness 

Ben bu sunucuyu veritabanı olarak yapılandıracağım için, 0 olarak ayarlamaya karar verdim. Unutmayın bu işlem kalıcı olmayacaktır. Sistem yeniden başladıktan sonra varsayılan değere dönecektir.

sudo sysctl vm.swappiness=0 

Swappiness değerini kalıcı olarak ayarlamak için ‘/etc/sysctl.d/99-swappiness.conf’ dosyası oluşturup değerimi “0” olarak tanımlıyorum. Artık sistem yeniden başlasa bile  kalıcı hale gelecektir.

sudo echo "vm.swappiness=0" | sudo tee -a /etc/sysctl.d/99-swappiness.conf 

Ardından kullanacağım değeri tekrar tetikliyorum ve takas işlemini kapatmak (takas içeriğini RAM’e geri taşımak) ve ardından yeniden etkinleştirmek için son olarak aşağıdaki komutları çalıştıralım.

sudo sysctl vm.swappiness=0
sudo swapoff -a
sudo swapon -a 

swap oluşturma

Sistem kurulumunda gelen swap’e genişletme yapamayacağımız için dosya oluşturarak ve yeni disk ekleyerek swap alanını arttırabiliriz.  Swap oluşturmanın farklı yöntemleri vardır. Zor olmaması adına bu örnekte, dosya üzerinden yapalım. Swap dosyasına baktığımda 3.9 GB olduğunu görüyorum. Ben buna ek olarak 8 GB daha ekleme kararı verdim.

cat /proc/swaps
free
du -h /swap.img 

Kök dizinde  8GB boyutunda bir swap dosyası oluşturuyorum.  

sudo dd if=/dev/zero of=/swap1.img bs=1M count=8124 

Oluşturduğumuz dosyamızın sahipliğini, izinlerini ayarlıyorum ve takas alanı olarak kullanılacak dosyayı hazırlayıp aktif hale getiriyorum.

sudo chown root:root /swap1.img
sudo chmod 600 /swap1.img
sudo mkswap /swap1.img
sudo swapon /swap1.img 

Artık takas alanımız oluşmuştur. Ancak sistem yeniden başlatıldığında swap aktif olmayacaktır.  Kalıcı hale getirmek için, oluşturduğumuz swap alanını “/etc/fstab” dosyasına ekleyelim.

sudo vi /etc/fstab 

dosyasını açıp “/swapfile” dosyamızı aşağıdaki gibi ekliyoruz. 

/swap1.img swap                    swap    defaults        0 0 

swap alanımızı yeninden sorguladığımızda toplam 12 GB swap alanımızın olduğunu görüyoruz. 

free -m 

Bu kısımda önemli olan birden fazla swap dosyalarını free komutu ile göremeyiz. Hepsini görmek için aşağıdaki komutu kullanabiliriz. 

swapon -s 

Mevcut swapler’i açıp kapatmak için aşağıdakileri komutları kullanabilirsiniz. Sonrasında “/etc/fstab” dosyasından silmeyi veya yorum satırı eklemeyi unutmayınız. 

Oluşturduğumuz swap dosyasını açmak için 

sudo swapon /swap1.img

Oluşturduğumuz swap dosyasını kapatmak için 

sudo swapoff /swap1.img

LVM

   Disklerin, dosyaların ve ilişkili meta verilerin nasıl depolandığını açıklayan bir dosya sistemi içeren her bölümle, bir veya daha fazla bölüm halinde nasıl organize edildiğinden bahsetmiştik. Bölümlemenin dezavantajlarından biri, sistem yöneticisinin bir aygıttaki kullanılabilir disk alanının nasıl dağıtılacağına önceden karar vermesi gerektiğidir. Bir bölüm başlangıçta planlanandan daha fazla alan gerektiriyorsa, bu daha sonra bazı zorluklar ortaya çıkarabilir. Elbette bölümler yeniden boyutlandırılabilir, ancak örneğin diskte boş alan yoksa bu mümkün olmayabilir.

Mantıksal Birim Yönetimi (LVM), sistem yöneticilerine disk alanını yönetmek için geleneksel bölümlemeye göre daha esnek bir yaklaşım sunan bir depolama sanallaştırma biçimidir. LVM’nin amacı, son kullanıcılarınızın depolama ihtiyaçlarını yönetmeyi kolaylaştırmaktır. Yani LVM kullanın kafanız rahat etsin. 🙂 Madem LVM bu kadar övdük, hadi biraz kafa yoralım.

LVM yapısı, physical partition sonrasında volume group’larından ve logical volume’lerden oluşmaktadır.

  • Physical Partition (PV): Fiziksel hacim adından da anlaşılacağı üzere fiziksel aygıtlardan (disklerden) veya disk bölümlerinden oluşan kısımdır.
  • Volume Group(VG): Hacim grubu, fiziksel ve mantıksal hacimleri içine alan üst düzey bir katmandır.
  • Logical Volume (LV): Disk bölümlerinin karşılığıdır. Dosya sistemi içerir.

Aşağıdaki görselde gözüktüğü gibi LVM yapısı, physical partition sonrasında volume group‘larından ve logical volume‘lerden oluşmaktadır. Aynı şekilde LVM disk genişletirken de  physical partition, volume group ve logical volume genişletilmelidir.

Şimdi sizinle LVM disk ekleyip, yukarıdaki işlemleri uygulayalım. 

Bu işlem her ne kadar güvenli olsa da sunucunun yedeğini almanızı öneririm. Herhangi bir hatada  veri kaybı yaşanabilir. 

Sisteme LVM Disk Ekleme

Hypervisior üzerinden disk ekleyelim.

Sisteme Disk Tanıtma

Linux sunucumuza yeni bir disk eklediğimizde sistem bunu hemen algılayamayacaktır. Sunucuyu yeniden başlatabilir veya hemen tanıması için aşağıdaki komutları kullanabiliriz. 

Aşağıdaki komut ile SCSI veri yolunu tümünü tekrar taratalım.

sudo echo "- - -" | tee /sys/class/scsi_host/host*/scan 

Tarama bittikten sonra diskin sisteme eklendiğini kontrol edelim. 

lsblk 

Eğer diski görmez ise aşağıdaki satırı çalıştıralım.

sudo for host in /sys/class/scsi_host/*; do echo "- - -" | sudo tee $host/scan; ls /dev/sd* ; done

 Bu aşamaya kadar diskimizi eklemiş olduk. İkincil diskimizin dosya sistemini belirleyelim ve kullanılabilir hale getirelim. 

sudo fdisk /dev/sdb 

 Gelen ekranda m harfine basıp enter tuşuna bastığımızda yardım alabiliriz. İlk olarak diskin bölüm tabloları oluşturmamız gerekmektedir. Yardım komutlarına baktığımda GPT partition table oluşturmak için g tuşuna basmamın gerektiğini söylüyor.

Şimdi ise yeni bölüm eklemek için n tuşuna basalım. Bölüm numarası gibi bilgilerinde değişiklik yapmayacak için varsayılan olarak bırakıp enter tuşuna basıp işlemleri bitiriyorum.

Son olarak oluşturduğumuz tabloyu diske yazmak için w tuşuna basalım.

Şuana kadar yaptığımız işlemlerde fiziksel bölümümüzü oluşturmuş olduk.

lsblk 

Şimdi fiziksel volumler oluşturalım.

sudo pvcreate /dev/sdb1 

pvdisplay komutu ile yaptığınız işlemi görüntüleyebilirsiniz.

Bir volume grup oluşturarak fiziksel volumleri içine dahil ediyoruz. Ben volume group ismimi vg_mehmet olarak belirledim.

sudo vgcreate vg_mehmet /dev/sdb1 

vgdisplay komutu ile yaptığınız işlemi görüntüleyebilirsiniz.

Logical volume oluşturalım ve volume gruplara bağlayalım. Logical volume adlarını ve boyutlarına ihtiyacınıza göre belirleyebilirsiniz.

sudo lvcreate -n lv_home -L 2G /dev/vg_mehmet
sudo lvcreate -n lv_root -L 2G /dev/vg_mehmet 

lvdisplay komutu ile yaptığını işlemi görüntüleyebilirsiniz.

Diskimi tekrar kontrol ettiğimde, mantıksal birimlerin geldiğini ancak dosya sistemi ve boyutları gözükmeyecektir.

lsblk -f 

Oluşturduğumuz mantıksal birimlerin dosya sistemlerini biçimlendirelim. Yol değişiklik gösterebilir, tab tuşu ile tamamlayarak bulabilirsiniz.

sudo mkfs -t ext4 /dev/mapper/vg_mehmet-lv_home
sudo mkfs -t ext4 /dev/mapper/vg_mehmet-lv_root 

Son olarak oluşturulan birimleri kullanabilmek için  önce dizinleri oluşturalım.

sudo mkdir /mnt/home
sudo mkdir /mnt/root 

Şimdi ise mount işlemini gerçekleştirelim.

sudo mount /dev/mapper/vg_mehmet-lv_home /mnt/home/
sudo mount /dev/mapper/vg_mehmet-lv_root /mnt/root/ 

Mount işlemlerini kalıcı hale getirmez isek, sunucu yeniden başladıktan sonra kaybolacaktır. Şimdi bunları ilgi dosyaya yazıp kalıcı hale getirelim. Editör olarak nano’da kullanabilirsiniz.

sudo vi /etc/fstab

Yapılan işlemlerin ileride unutulmaması adına bir yorum satırı eklemekte fayda var. Akabinde mount ettiğiniz yolu, dosya sistemi ve diğer bilgileri girip dosyayı kaydediniz. Bu işlemden sonra sunucu yeniden başlatılsa bile yaptığımız bağlamalar kaybolmayacaktır.

Diskimi tekrar kontrol ettiğimde tüm işlemlerin başarılı bir şekilde gerçekleştiğini görebiliyorum.

lsblk -f 

Sistemdeki LVM Diski Genişletme

Hypervisior üzerinden disk’i genişletelim. Ben disk alanımı 120GB olarak ayarlıyorum.

Makina üzerinde snapshot/checkpoint var ise disk genişletilemez. Silip genişletme işlemini yaptıktan sonra snapshot/checkpoint alabilirsiniz.

Sunucu Disk Genişletme

İlk olarak dosya sistem tipini kontrol edelim. 

lsblk -f 

Sonra disk adımızı bulalım. Aşağıdaki görselde sda olduğu görüyoruz.

ls -l /dev/sd* 

Mevcut bir diskin boyutunu değiştirdiyseniz, Linux dağıtımlarında SCSI veri yolunu yeniden tarayana kadar işletim sisteminin yeni disk boyutunu görememektedir. Bunun için sunucuyu yeniden başlatabilir veya manuel tarama yaptırabiliriz. Manuel olarak görmesini sağlayalım.

Bulduğum en kolay yol, belirli cihazı aşağıdaki komutla yeniden taramak. Buradaki sd”a” , artırdığınız ve yeniden taramak istediğiniz cihazdır. (Yukarıdaki görselde sda olduğunu görebiliriz)

echo "1" > /sys/class/block/sda/device/rescan

Bu işlemden sonra diskimizi kontrol ettiğimizde, sadece diskimizin alanının güncellendiğini görüyoruz.

lsblk 

Unutmayın bu işlemleri yapmak için bir çok yol vardır. Her zaman en basit ve sade şekliyle anlatmaya çalışıyorum. İlk olarak fiziksel bölümü (sda1,sda2.. vb)  cfdisk aracı ile yeniden boyutlandıracağım.

sudo cfdisk /dev/sda

Ok tuşları ile genişletmek istediğimiz partition üstüne gelelim ve resize kısmına gelip enter tuşuna basalım. 

Varsayılan olarak size en yüksek değer girili olacaktır. Direk enter tuşuna basıyoruz. Yeni alanı 119GB olarak ayarlanacaktır. 

Ardından sağa basarak write üzerine gelip enterleyin ve yes yazıp tekrardan enterleyin. Quit ile çıkış yapıyoruz.

Şimdi ise fiziksel bölümün genişleme durumunu kontrol edelim.

sudo pvdisplay

Herhangi bir değişiklik olmamış bu gayet normaldir. LVM’e fiziksel bölümün değiştiğini söylemiz gerekir.

Fiziksel bölümün değiştiğini LVM’e söyleyelim.

sudo pvresize /dev/sda3 

Kontrol ettiğimizde physical volume ve virtual group’un güncellendiğini görebiliriz. Son yapmamız gereken mantıksal birimi genişletmektir.

İlk olarak mantıksal birimin yolunu bulmak için aşağıdaki komutu kullanalım.

sudo lvdisplay

Görselde gözüktüğü gibi bizim yolumuz  /dev/ubuntu-vg/ubuntu-lv olarak gözükmektedir.

İlk olarak mantıksal birimimizi 5GB artacak şekilde genişletelim.

sudo lvextend -L+5G /dev/ubuntu-vg/ubuntu-lv 

Dosya sistemini genişletelim.

sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 

Virtual grup’ta ne kadar boş alan kaldığını kontrol edelim.

sudo vgs 

Tüm alanı mantıksal sürücüye dahil edelim ve dosya sistemini genişletelim.

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 

Tekrar kontrol ettiğimizde işlemin başarılı bir şekilde canlı olarak gerçekleştiğini görebiliyoruz.

lsblk 

ext2/3/4 dosya sistemi türleri tek bir resize2fs araçla yeniden boyutlandırılabilir ancak XFS, dosya sistemleri için bunun yerine bir xfs_growfs aracını kullanmalısınız.

Sistem’de LVM Disk Logical Volume Genişletme

Hypervisior üzerinden disk’i genişletelim. Ben disk alanımı 120GB olarak ayarlıyorum.

Makina üzerinde snapshot/checkpoint var ise disk genişletilemez. Silip genişletme işlemini yaptıktan sonra snapshot/checkpoint alabilirsiniz.

Sunucu Disk Genişletme

İlk olarak dosya sistem tipini kontrol edelim. 

lsblk -f 

Sonra disk adımızı bulalım. 

lsblk 

Mevcut bir diskin boyutunu değiştirdiyseniz, Linux dağıtımlarında SCSI veri yolunu yeniden tarayana kadar işletim sisteminin yeni disk boyutunu görememektedir. Bunun için sunucuyu yeniden başlatabilir veya manuel tarama yaptırabiliriz. Manuel olarak görmesini sağlayalım.

Bulduğum en kolay yol, belirli cihazı aşağıdaki komutla yeniden taramak. Buradaki sd”a” , artırdığınız ve yeniden taramak istediğiniz cihazdır. (Yukarıdaki görselde nvme0n1 olduğunu görebiliriz)

echo "1" > sudo tee -a /sys/class/block/nvme0n1/device/rescan

Bu işlemden sonra diskimizi kontrol ettiğimizde, disk alanımızın güncellendiğini görebiliyoruz.

lsblk 

Unutmayın bu işlemleri yapmak için bir çok yol vardır. Her zaman en basit ve sade şekliyle anlatmaya çalışıyorum. İlk olarak fiziksel bölümü (sda1,sda2.nvmme. vb)  cfdisk aracı ile yeniden boyutlandıracağım.

sudo cfdisk /dev/sda

Ok tuşları ile genişletmek istediğimiz partition üstüne gelelim ve resize kısmına gelip enter tuşuna basalım. 

Varsayılan olarak size en yüksek değer seçili olacaktır. Ben 30G olarak ayarlıyorum.

Ardından sağa basarak write üzerine gelip enterleyin ve yes yazıp tekrardan enterleyin. Quit ile çıkış yapıyoruz.

Şimdi ise fiziksel bölümün genişleme durumunu kontrol edelim.

sudo pvdisplay

Herhangi bir değişiklik olmamış bu gayet normaldir. LVM’e fiziksel bölümün değiştini söylemiz gerekir.

Fiziksel bölümün değiştiğini LVM’e söyleyelim. Kontrol ettiğimizde physical volume ve virtual group’un güncellendiğini görebiliriz. 

sudo pvresize /dev/nvme0n1p2 

Logical Volume Genişletme

Artık son yapmamız gereken mantıksal birimi (Logical Volume) genişletmektir. Bu kısımda ilk olarak sistemde kurulu olan mantıksal birimleri görelim.

Yukarıda mantıksal birimleri görmekteyiz. Buradan örnek olması adına /var kısmını genişletmeye çalışalım. Aynı işlemleri diğer logical volume’ler içinde yapabilirsiniz. İlk olarak yolu bulalım.

lvdisplay

Komutu çalıştırdığım zaman bütün logical volume’ler gelecektir. Bizim ihtiyacımız olan /var olanının yolunu kolaylıkla bulabiliyoruz.

Mantıksal birimi istediğiniz kadar arttırabilirsiniz, ben 5GB artacak şekilde genişletiyorum.

sudo lvextend -L+5G /dev/ol/var

Eğer tüm alanı mantıksal sürücüye dahil etmek isterseniz aşağıdaki komut satırını örnek alabilirsiniz.

sudo lvextend -l +100%FREE /dev/ol/var 

Dosya sistemini genişletelim. Bu kısımda dosya sisteminize göre genişletme komutları değişmektedir. Benim kullandığım dosya sistemi xfs olduğu için ilgili komutu çalıştıracağım.

Dosya sistemini görmek için.

lsblk -f

xfs dosya sistemi için

xfs_growfs /dev/ol/var 

ext4 dosya sistemleri için

sudo resize2fs /dev/ol/var

Şimdi tekrar kontrol edelim.

Hazır disk ekleme ve genişletme konusuna girmişken, LVM olmayan bir sistemi’de aradan çıkaralım.

EXT4 Disk Ekleme

Hypervisior üzerinden disk ekleyelim.

Linux sunucumuza yeni bir disk eklediğimizde sistem bunu hemen algılayamayacaktır. Sunucuyu yeniden başlatabilir veya hemen tanıması için aşağıdaki komutları kullanabiliriz. 

Aşağıdaki komut ile SCSI veri yolunu tümünü tekrar taratalım.

sudo echo "- - -" | tee /sys/class/scsi_host/host*/scan 

Tarama bittikten sonra diskin sisteme eklendiğini kontrol edelim. 

lsblk 

Eğer diski görmez ise aşağıdaki satırı çalıştıralım.

sudo for host in /sys/class/scsi_host/*; do echo "- - -" | sudo tee $host/scan; ls /dev/sd* ; done

 Bu aşamaya kadar diskimizi eklemiş olduk. İkinci diskimizin cfdisk aracı ile açalım. 

sudo cdisk /dev/sdb 

Olması gerektiği gibi diskin ilk olarak bölüm tablolarının oluşturulması gerekmektedir. GPT yapacağım için, enter tuşuna basıp devam ediyorum.

https://tr.wikipedia.org/wiki/GUID

Yeni bölüm oluşturmak için, Ok tuşları ile New yazan yerin üstüne gelip Enter tuşuna basıyorum.

Varsayılan olarak size en yüksek değer girili olacaktır. Direk enter tuşuna basıyoruz. Yeni alanı 20GB olarak ayarlanacaktır. 

Ardından sağa basarak write üzerine gelip enterleyin ve yes yazıp tekrardan enter tuşuna basınız. Quit ile çıkış yapıyoruz.

Dosya sistemlerini ext4 olarak biçimlendirelim

sudo mkfs.ext4 /dev/sdb1 

Son olarak oluşturulan birimleri kullanabilmek için, dizinleri oluşturup ardından mount işlemini gerçekleştirelim.

sudo mkdir /mnt/yedekler
sudo mount /dev/sdb1 /mnt/yedekler/ 

Mount işlemlerini kalıcı hale getirmez isek, sunucu yeniden başladıktan sonra kaybolacaktır. Şimdi bunları ilgi dosyaya yazıp kalıcı hale getirelim. Editör olarak nano’da kullanabilirsiniz.

sudo vi /etc/fstab

Yapılan işlemlerin ileride unutulmaması adına bir yorum satırı eklemekte fayda var. Akabinde mount ettiğiniz yolu, dosya sistemi ve diğer bilgileri girip dosyayı kaydediniz. Bu işlemden sonra sunucu yeniden başlatılsa bile yaptığımız bağlamalar kaybolmayacaktır.

Diskimi tekrar kontrol ettiğimde tüm işlemlerin başarılı bir şekilde gerçekleştiğini görebiliyorum.

lsblk -f 

EXT4 Disk Genişletme

Hypervisior üzerinden disk’i genişletelim. Ben disk alanımı 120GB olarak ayarlıyorum.

Makina üzerinde snapshot/checkpoint var ise disk genişletilemez. Silip genişletme işlemini yaptıktan sonra snapshot/checkpoint alabilirsiniz.

Sunucu Disk Genişletme

 İlk olarak dosya sistem tipini kontrol edelim. 

lsblk -f 

Sonra disk adımızı bulalım. Aşağıdaki görselde sda olduğu görüyoruz.

ls -l /dev/sd* 

Mevcut bir diskin boyutunu değiştirdiyseniz, Linux dağıtımlarında SCSI veri yolunu yeniden tarayana kadar işletim sisteminin yeni disk boyutunu görememektedir. Bunun için sunucuyu yeniden başlatabilir veya manuel tarama yaptırabiliriz. Manuel olarak görmesini sağlayalım.

Bulduğum en kolay yol, belirli cihazı aşağıdaki komutla yeniden taramak. Buradaki sd”a” , artırdığınız ve yeniden taramak istediğiniz cihazdır. (Yukarıdaki görselde sda olduğunu görebiliriz)

echo "1" > /sys/class/block/sda/device/rescan

Bu işlemden sonra diskimizi kontrol edelim. Diskin 120 GB olduğunu ancak kök dizinin genişlemediğini görüyoruz. 

lsblk 

Unutmayın bu işlemleri yapmak için bir çok yol vardır. Her zaman en basit ve sade şekliyle anlatmaya çalışıyorum. İlk olarak fiziksel bölümü (sda1,sda2.. vb)  cfdisk aracı ile yeniden boyutlandıracağım.

sudo cfdisk /dev/sda

Ok tuşları ile genişletmek istediğimiz partition üstüne gelelim ve resize kısmına gelip enter tuşuna basalım. 

Varsayılan olarak size en yüksek değer girili olacaktır. Direk enter tuşuna basıyoruz. Yeni alanı 120GB olarak ayarlanacaktır. 

Ardından sağa basarak write üzerine gelip enterleyin ve yes yazıp tekrardan enter tuşuna basınız. Quit ile çıkış yapıyoruz.

Tekrar kontrol ettiğinizde partition hala genişlememiştir. Bu gayet normaldir. Dosya sistemini genişletmek için aşağıdaki komutu çalıştırıyoruz.

sudo resize2fs /dev/sda2 

Kontrol ettiğimizde alanımızın genişlediğini görebiliriz.

102.2 Bir BOOT (Önyükleme) Yöneticisi Kurun

  • Anahtar bilgi alanları
  • Alternatif önyükleme konumları ve yedek önyükleme seçenekleri sağlama.
  • GRUB Legacy gibi bir önyükleyici yükleyin ve yapılandırın.
  • GRUB 2 için temel yapılandırma değişikliklerini gerçekleştirin.
  • Önyükleyici ile etkileşim kurun.

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • menu.lst, grub.cfg ve grub.conf
  • grub-install
  • grub-mkconfig
  • update-grub
  • MBR

   Bir bilgisayar açıldığında çalıştırılacak ilk yazılım, önyükleyicidir. Bunun, tek amacı bir işletim sistemi çekirdeği yüklemek ve kontrolü ona devretmek için olan bir kod parçasıdır. Çekirdek gerekli sürücüleri yükleyecek, donanımı başlatacak ve ardından işletim sisteminin geri kalanını yükleyecektir.

GRUB, çoğu Linux dağıtımında kullanılan önyükleyicidir. Linux çekirdeğini veya Windows gibi diğer işletim sistemlerini yükleyebilir ve birden çok çekirdek görüntüsünü ve parametresini ayrı menü girişleri olarak işleyebilir. Önyükleme sırasında çekirdek seçimi, klavyeyle çalışan bir arabirim aracılığıyla yapılır ve önyükleme seçeneklerini ve parametrelerini düzenlemek için bir komut satırı arabirimi vardır.

Çoğu Linux dağıtımı, GRUB’u (aslında GRUB 2) otomatik olarak kurar ve yapılandırır, bu nedenle normal bir kullanıcının bunu düşünmesine gerek yoktur. Ancak, bir sistem yöneticisi olarak, örneğin başarısız bir çekirdek yükseltmesinden sonra sistemi bir önyükleme hatasından kurtarabilmeniz için önyükleme işleminin nasıl kontrol edileceğini bilmek hayati önem taşır.

GRUB Legacy vs. GRUB 2

GRUB’un ( GRUB Legacy ) orijinal versiyonu, 1995 yılında GNU Hurd projesinin bir parçası olarak geliştirildi ve daha sonra LILO gibi önceki alternatiflerin yerini alarak birçok Linux dağıtımının varsayılan önyükleyicisi olarak kabul edildi.

İşletim Sistemlerinde GRUB ve LILO arasındaki bazı karşılaştırmalar aşağıdaki gibidir.

ÖzelliklerGRUBLİLO
TanımGNU projesi tarafından sunulan bir önyükleyiciye GRUB adı verilir.Başarısını takip eden yıllarda çoğu Linux işletim sistemi için varsayılan önyükleyici olarak loadlin’in yerini alan bir Linux önyükleyicisidir.
Çıkış1995 yılında tanıtıldı.Werner Almesberger, 1992’den 1997’ye kadar LILO’yu ilk tanıtan kişi oldu.
İşletim Sistemini DesteklemeWindows, macOS, Linux, Unix, BSD ve Solaris dahil olmak üzere birden çok işletim sistemini destekler.Yalnızca Linux işletim sistemi olan tek bir işletim sistemini destekler.
KarmaşıklıkLILO’dan daha karmaşıktır.Basit ve kullanımı kolaydır.
GUI-Menü SeçimiBir GUI menü seçeneği içerir.Bir GUI menü seçeneği içermez.
GelişimGNU Projesi tarafından geliştirilmiştir.Werner Almesberger, John Coffman ve Joachim Wiedorn, LILO’yu geliştiren üç geliştiricidir.
TipYeni bir varsayılan önyükleyicidir.Eski bir varsayılan önyükleyicidir.
Ağ ÖnyüklemeAğ önyüklemesini destekler.Ağ önyüklemesini desteklemiyor.
Etkileşimli Komut ArayüzüEtkileşimli bir komut arayüzünü destekler.Etkileşimli bir komut arayüzünü desteklemez.

GRUB 2, daha temiz, daha güvenli, daha sağlam ve daha güçlü olmayı hedefleyen GRUB’un tamamen yeniden yazılmış halidir. GRUB Legacy’ye göre birçok avantajı arasında çok daha esnek bir yapılandırma dosyası ve daha modüler bir tasarım gibi iyi yerelleştirme vardır. GRUB 2 ile Temalar ve açılış ekranlı grafik önyükleme menüleri için destek, LiveCD ISO’larını doğrudan sabit sürücüden önyükleme yeteneği, x86 olmayan mimariler için daha iyi destek, UUID’ler için evrensel destek ve çok daha fazlası vardır. 

İşletim Sistemlerinde GRUB ve GRUB2 arasındaki bazı karşılaştırmalar aşağıdaki gibidir.

ÖZELLİKLERGRUBGRUB2
Yapılandırma dosyaları/boot/grub/menu.lst/boot/grub/grub.conf/boot/grub/grub.cfg/etc/default/grub/etc/grub.d/
Yapılandırma Nasıl DeğiştirilirDoğrudan menu.list /grub.conf’u düzenleyin. GRUB, her yüklendiğinde yapılandırma dosyalarını okuduğu için daha sonra yeniden yüklemeye gerek yoktur./etc/grub.d/ içindeki dosyaları düzenleyin. update-grub komutu ile  güncelleyin.
Düzenlemekgrub-install <device>grub-mkconfig veya grub2-mkconfig
Küresel seçeneklermenu.list/grub.conf içinde saklanır./etc/default/grub içinde saklanır.
Menü girişi başına seçeneklerBaşlık, Kök, Çekirdek, Initrd, Rootnoverify
Kök Biçimi: Her ikisi de 0’dan sayılır.
Menü girişi, kök ayarlama, linux /linux16 /linuxefi, initrd / initrdefi.
“Kök ayarla” formatı: 0’dan sürücü ve 1’den bölüm sayma.

Kernel (GRUB) veya Linux (GRUB2) ile başlayan satıra kernel seçenekleri ekleyebilirsiniz. Bunların tek bir boşlukla ayrılması gerekir.

GRUB Legacy artık aktif geliştirme aşamasında değil (son sürüm 2005’te 0.97 idi) ve bugün çoğu büyük Linux dağıtımı GRUB 2’yi varsayılan önyükleyici olarak kuruyor. Ancak yine de GRUB Legacy kullanan sistemler bulabilirsiniz, bu nedenle nasıl kullanılacağını ve GRUB 2’den nerede farklı olduğunu bilmek önemlidir.

Kullandığınız grub versiyonunu öğrenmek için aşağıdaki komut satırını kullanabilirsiniz.

grub-install --version 

Bootloader nerede?

  Tarihsel olarak, IBM PC uyumlu sistemlerdeki sabit diskler, 1982’de IBM PC-DOS (MS-DOS) 2.0 için oluşturulan MBR bölümleme şeması kullanılarak bölümlendi. Bu şemada, diskin ilk 512 baytlık kesimine Ana Önyükleme Kaydı adı verilir. Diskteki bölümleri (bölüm tablosu) açıklayan bir tablo ve ayrıca önyükleyici adı verilen önyükleme kodunu içerir.

Bilgisayar açıldığında, bu çok küçük önyükleyici kodu yüklenir, yürütülür ve denetimi, genellikle MBR ile ilk bölüm arasında 32 KB’lik bir alanda bulunan diskteki ikincil bir önyükleyiciye geçirir. MBR ile bölümlenmiş bir diskte, GRUB’un önyükleme kodu MBR’ye yüklenir. Bu, kontrolü yükler ve MBR ile ilk bölüm arasında kurulmuş bir kernel(çekirdek) görüntüye geçirir. Bu noktadan itibaren GRUB, gerekli kaynakların kalanını diskten yükleme yeteneğine sahiptir.

MBR’nin bölüm sayısı ve maksimum 2 TB disk boyutuyla ilgili sınırlamaları vardır. Bu sınırlamaların üstesinden gelmek için , UEFI standardının bir parçası olan GPT adlı yeni bir bölümleme şeması oluşturuldu.

GPT bölümlü diskler, geleneksel PC BIOS’u veya UEFI sabit yazılımı olan bilgisayarlarda kullanılabilir. BIOS’lu makinelerde GRUB’un ikinci bölümü özel bir BIOS önyükleme bölümünde depolanır.

UEFI sabit yazılımına sahip sistemlerde;

  • 32-Bit sistemler için EFI Sistem Bölümü   grubia32.efi  adlı bir bölümden yüklenir.
  • 64-Bit sistemler için EFI Sistem Bölümü grubx64.efi adlı bir bölümden yüklenir.

Önyükleme sistem tablonuzun, MBR veya GBT hangisi olduğunu aşağıdaki komut ile kontrol edebilirsiniz.

sudo parted -l

Aşağıda partition table gpt olduğunu görebilirsiniz.

Aşağıda partition table msdos yani MBR olduğunu görebilirsiniz.

Şimdi de, sisteminizin UEFI veya LEGACY(BIOS) olduğunu bulmaya çalışalım. UEFI veya BIOS çalıştırıp çalıştırmadığınızı öğrenmenin en kolay yolu, /sys/firmware/efi klasörünü aramaktır. Sisteminiz BIOS kullanıyorsa klasör eksik olacaktır.

ls /sys/firmware/

LEGACY olan sistem, aşağıdaki görseldeki gibidir.

UEFI olan sistem, aşağıdaki görseldeki gibidir.

/boot bölme

   Linux’ta önyükleme işlemi için gerekli dosyalar genellikle bir önyükleme bölümünde saklanır, kök dosya sisteminin altına monte edilir ve  /boot olarak adlandırılır. GRUB gibi önyükleyiciler genellikle kök dosya sistemini bağlayabildiğinden ve bir /boot dizini içinde gerekli dosyaları arayabildiğinden, mevcut sistemlerde bir önyükleme bölümüne gerek yoktur, ancak önyükleme işlemi için gereken dosyaları ayırdığı için iyi bir uygulamadır.

Bu bölüm genellikle diskteki ilk bölümdür. Bunun nedeni, orijinal IBM PC bios’nun, maksimum 1024 silindir, 256 kafa ve 63 sektör içeren Silindirler, Kafalar ve Sektörler  kullanan diskleri adreslemesi ve maksimum 528 MB (MS-DOS altında 504 MB) disk boyutuyla sonuçlanmasıdır. Bu, farklı bir disk adresleme şeması  kullanılmadıkça, bu işaretin ötesindeki herhangi bir şeye erişilemeyeceği anlamına gelir.

Bu nedenle, maksimum uyumluluk için /boot bölümü genellikle diskin başında bulunur ve silindir 1024’ten (528 MB) önce biter ve makinenin çekirdeği her zaman yükleyebilmesini sağlar. Geçerli bir makinede bu bölüm için önerilen boyut 300 mb’dir. Ancak yeni sistemlerde boot alanı varsayılan olarak 1G veya 2G oluşmaktadır. Aşağıdaki görselde boot alanının 1.8G ve kullanılan alanın 247M  olduğunu görebilirsiniz.

du -sh /boot 

Ek olarak RHEL önerilen bölüm şemasını inceleyebilirsiniz.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/s2-diskpartrecommend-x86

/boot bölümünün, ayrı bir bölüm olarak ayrılmasının diğer nedenleri şifreleme ve sıkıştırmadır, çünkü bazı yöntemler henüz GRUB 2 tarafından desteklenmeyebilir veya sistem kök bölümünün desteklenmeyen bir dosya sistemi kullanılarak biçimlendirilmesi gerekip gerekmeyebilir.

Önyükleme Bölümünün İçeriği

   /boot bölümün içeriği, sistem mimarisine veya kullanılan önyükleyiciye göre değişebilir, ancak x86 tabanlı bir sistemde genellikle aşağıdaki dosyaları bulacaksınız. Bunların çoğu, -VERSION son eki ile adlandırılır. Bu nedenle, örneğin, Linux çekirdek sürümü  4.15.0-65-generic  için bir yapılandırma dosyası  config-4.15.0-65-generic adı verilir.

Yapılandırma dosyası

Genellikle config-VERSION olarak adlandırılan bu dosya , Linux çekirdeği için yapılandırma parametrelerini depolar. Bu dosya, yeni bir çekirdek derlendiğinde veya yüklendiğinde otomatik olarak oluşturulur ve kullanıcı tarafından doğrudan değiştirilmemelidir.

ls /boot/config* 

Sistem haritası

Bu dosya, sembol adlarını bellekteki karşılık gelen konumlarıyla eşleşen bir arama tablosudur. Bu, kullanıcının hata oluştuğunda hangi değişkenin veya işlevin çağrıldığını bilmesini sağladığından, çekirdek paniği olarak bilinen bir türdür. Ayrıca, sistem hatasında hata ayıklarken kullanışlıdır. Yapılandırma dosyası gibi, adı genellikle System.map-VERSION olarak geçer. Örneğin,  System.map-4.15.0-65-generic.

ls /boot/Sys* 

Linux çekirdeği

 Bu, uygun işletim sistemi çekirdeğidir ve çekirdek isim genellikle vmlinux sürümüdür. (ör. vmlinux-4.15.0-65- genel). vmlinux yerine vmlinuz adını da bulabilirsiniz, sonunda z, dosyanın sıkıştırıldığı anlamına gelir.

ls /boot/vmlinuz* 

İlk RAMdisk

Buna genellikle initrd.img-VERSION denir ve çekirdeğin gerçek kök dosya sistemini bağlayabilmesi için gereken yardımcı programları ve çekirdek modüllerini içeren bir RAM diske yüklenen minimum bir kök dosya sistemi içerir.

ls /boot/init* 

Önyükleyici ile ilgili dosyalar

 Grub’un kurulu olduğu sistemlerde bunlar genellikle /boot/grub üzerinde bulunur. İçerisinde ki konfigürasyon aşağıdaki dosyaları içerir.

  • /boot/grub/menu.lst GRUB yapılandırma dosyasını içerir.
  • GRUB2 için  /boot/grub/grub.cfg dosyasını içerir.
  • /boot/grub/i386-pc dosyası GRUB Legacy  modüllerini içerir.
  • /boot/grub/locale dosyaları çeviri dosyasını içerir.
  • /boot/grub/fonts dosyası yazı tiplerini içerir.
ls /boot/grub/ 

GRUB 2  Yükleme

GRUB 2, grub-install yardımcı programı kullanılarak yüklenebilir. Önyükleme yapmayan bir sisteminiz varsa, Canlı bir CD veya kurtarma diski kullanarak önyükleme yapmanız, sisteminizin önyükleme bölümünün hangisi olduğunu bulmanız, bağlamanız ve ardından yardımcı programı çalıştırmanız gerekir.

Aşağıdaki komutlar, root olarak giriş yaptığınızı varsayar. Değilse, önce sudo su komutunu -“kök olmak” için çalıştırın. Bitirdiğinizde, exit ile oturumu kapatıp normal normal kullanıcıya geçebilirsiniz.

  Bir sistemdeki ilk disk genellikle önyükleme aygıtıdır ve diskte bir önyükleme bölümü olup olmadığını bilmeniz gerekebilir. Bu fdisk yardımcı programı ile yapılabilir. Makinenizin ilk diskindeki tüm bölümleri listelemek için aşağıdaki komutu çalıştırın.

fdisk -l 

Önyükleme bölümü, yukarıdaki örnekte, /dev/sda1′dir. 

GRUB 2’yi Yapılandırma

GRUB 2 için varsayılan yapılandırma dosyası /boot/grub/grub.cfg‘dir. Bu dosya otomatik olarak oluşturulur ve manuel düzenlemeniz önerilmez. GRUB yapılandırmasında değişiklik yapmak için /etc/default/grub dosyasını düzenlemeniz ve ardından uyumlu bir dosya oluşturmak için update-grub yardımcı programını çalıştırmanız gerekir.

GRUB 2’nin davranışını kontrol eden /etc/default/grub dosyasında önyüklenecek varsayılan çekirdek, zaman aşımı, ekstra komut satırı parametreleri vb. gibi bazı seçenekler vardır. En önemlileri şunlardır:

  • GRUB_DEFAULT= Önyüklenecek varsayılan menü girişi. Bu sayısal bir değer olabilir (0, 1 vb. Gibi).), bir menü girişinin adı veya GRUB_SAVEDEFAULT= ile birlikte kullanılan kaydedilmiş, aşağıda açıklanmıştır. Menü girişlerinin sıfırdan başladığını, dolayısıyla ilk menü girişinin 0, ikincisinin 1 vb. Olduğunu unutmayın.
  • GRUB_SAVEDEFAULT= Bu seçenek true olarak ayarlanmışsa ve GRUB_DEFAULT= kayıtlı olarak ayarlanmışsa, varsayılan önyükleme seçeneği her zaman önyükleme menüsünde en son seçilen seçenek olacaktır.
  • GRUB_TIMEOUT= Varsayılan menü girişi seçilmeden önce saniye cinsinden zaman aşımı. 0 Olarak ayarlanırsa, sistem bir menü göstermeden varsayılan girişi önyükleyecektir. -1 Olarak ayarlanırsa, sistem ne kadar sürerse sürsün, kullanıcı bir seçenek seçene kadar bekleyecektir.
  • GRUB_CMDLINE_LINUX= Bu, Linux çekirdeği için girişlere eklenecek komut satırı seçeneklerini listeler.
  • GRUB_CMDLINE_LINUX_DEFAULT= Varsayılan olarak, her Linux çekirdeği için biri varsayılan seçeneklere ve kurtarma için bir girişe sahip iki menü girişi oluşturulur. Bu seçenekle, yalnızca varsayılan girişe eklenecek ek parametreler ekleyebilirsiniz.
  • GRUB_ENABLE_CRYPTODİSK= Y olarak ayarlanırsa, grub-mkconfig, update-grub ve grub-install gibi komutlar şifrelenmiş diskleri arayacak ve önyükleme sırasında bunlara erişmek için gereken komutları ekleyecektir. Bu, otomatik önyüklemeyi devre dışı bırakır çünkü disklere erişilmeden önce disklerin şifresini çözmek için bir parola gerekir.

Yukarıda ki ayarları editör yardımı ile değiştirebilirsiniz. Bir önceki modülde örnekler yapmıştık.

cat /etc/default/grub.cfg  

Menü Girişlerini Yönetme

update-grub çalıştırıldığında, GRUB 2 makinedeki çekirdekleri ve işletim sistemlerini tarayacak ve /boot/grub/grub‘da ilgili menü girişlerini oluşturacaktır. /etc/grub..d/ dosyasının içindeki komut dosyalarına manuel olarak yeni girişler eklenebilir.

Bu dosyalar çalıştırılabilir olmalı ve update-grub tarafından sayısal sırayla işlenmelidir. Bu nedenle 05_debian_theme, 10_linux ve benzerlerinden önce işlenir. Özel menü girişleri genellikle 40_custom dosyasına eklenir.

Not = Çoğu Linux dağıtımı aslında çekirdeği ve initrd‘yi kök dosya sisteminin kök dizinine koymaz. Bunun yerine, bunlar /boot dizini veya bölümündeki gerçek dosyalara bağlantılardır.

GRUB 2 ile etkileşim

GRUB 2 ile bir sistemi önyüklerken bir seçenekler menüsü göreceksiniz. Bir seçenek belirlemek için ok tuşlarını kullanın ve seçilen girişi onaylamak ve önyüklemek için Enter tuşuna basın.

Yalnızca bir geri sayım görüyorsanız, ancak bir menü görmüyorsanız, menüyü getirmek için kullandığınız firmware (UEFI/LEGACY) göre Shift veya ESC tuşuna basın.

Bir seçeneği düzenlemek için, ok tuşlarıyla seçin ve E tuşuna basın. Bu, /boot/grub/grub.cfg‘de tanımlandığı gibi, o seçenekle ilişkili menü girişinin içeriğini içeren bir düzenleyici penceresi gösterecektir.

Bir seçeneği düzenledikten sonra, önyükleme yapmak için Ctrl + X veya F10 veya menüye dönmek için Esc yazın.

GRUB 2 kabuğuna girmek için menü ekranında C‘ye (veya düzenleme penceresinde Ctrl + C’ye basın). grub >  gibi bir komut istemi göreceksiniz.

Kullanılabilir tüm komutların listesini görmek için help yazın veya kabuktan çıkıp menü ekranına dönmek için Esc tuşuna basın.

help 

Not : GRUB_TİMEOUT /etc/default/grub dosyasında 0 olarak ayarlanırsa bu menünün görünmeyeceğini unutmayın.

GRUB 2 Kabuğundan Önyükleme

Menü girdisindeki bir yanlış yapılandırmanın başarısız olması durumunda, sistemi önyüklemek için GRUB 2 kabuğunu kullanabilirsiniz.

 Yapmanız gereken ilk şey, önyükleme bölümünün nerede olduğunu bulmaktır. Bunu, GRUB 2’nin bulduğu bölümlerin ve disklerin bir listesini gösterecek olan ls komutuyla yapabilirsiniz.

ls 

Yukarıdaki örnekte, işler kolaydır. Üzerinde yalnızca üç bölüm bulunan tek bir disk (hd0) ve (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) bölümleri vardır.

Listelenen diskler ve bölümler sisteminizde farklı olacaktır. Örneğimizde, disk MBR bölümleme şeması kullanılarak bölümlendiğinden hd0’ın ilk bölümüne msdos1 adı verilir. GPT kullanılarak bölümlenmiş olsaydı, ad gpt1 olurdu.

Linux’u önyüklemek için bir çekirdeğe ve başlangıç RAM diskine (initrd) ihtiyacımız var. (hd0) içeriğini kontrol edelim. 

grup> ls (hd0,gpt1)/ 

Yukarıda ki görseldeki gibi sırayla içeriğe bakarken, kolay bir şekilde bulduk.

Bir Linux terminaline benzer şekilde uzun bir liste elde etmek için -l parametresini ekleyebilirsiniz. Disk, bölüm ve dosya adlarını otomatik tamamlamak için tab tuşunu kullanın.

ls -l (hd0,gpt2) 

Bir çekirdeğimiz (vmlinuz) olduğunu unutmayın ve initrd (initrd.img) kök dizinindeki görüntüler. 

ls / 

Şimdi önyükleme bölümünü ayarlayın.

set root=(hd0,gpt2)

Linux çekirdeğini linux komutuyla yükleyin, ardından çekirdeğe giden yol ve çekirdeğe işletim sisteminin kök dosya sisteminin nerede olduğunu söylemek için root= seçeneği kullanın.

linux /vmlinuz root=/dev/sda1

İlk RAM diskini initrd ile ve ardından initrd’ye giden ımg dosyasını tam yolu yükleyin.

initrd /initrd.img

Şimdi, sistemi boot komutunu kullanarak önyükleyin.

initramfs yüklendikten sonra, inceleyebilir veya reboot ile çıkabilirsiniz.

Kurtarma Kabuğundan Önyükleme (grub rescue)

Önyükleme hatası durumunda GRUB 2, daha önce bahsettiğimiz kabuğun basitleştirilmiş bir sürümü olan bir kurtarma kabuğu yükleyebilir. Grub rescue> olarak görüntülenen komut isteminden tanıyacaksınız. Bir sistemi bu kabuktan önyükleme işlemi, daha önce gösterilenle hemen hemen aynıdır. Ancak, işlerin yürümesi için birkaç GRUB 2 modülü yüklemeniz gerekecektir.

Hangi bölümün önyükleme bölümü olduğunu bulduktan sonra, set prefix= komutunu ve ardından GRUB 2 dosyalarını içeren dizinin tam yolunu kullanın. 

set prefix=(hd0,gpt2)/boot/grub

Şimdi normal ve linux modüllerini insmod komutuyla yükleyin.

 insmod normal
 insmod linux

Linux çekirdeğini linux komutuyla yükleyin, ardından çekirdeğe giden yol ve çekirdeğe işletim sisteminin kök dosya sisteminin nerede olduğunu söylemek için root= seçeneği kullanın.

linux /vmlinuz root=/dev/sda1

İlk RAM diskini initrd ile ve ardından initrd’ye giden ımg dosyasını tam yolu yükleyin.

initrd /initrd.img

Şimdi, sistemi boot komutunu kullanarak önyükleyin.

initramfs yüklendikten sonra, inceleyebilir veya reboot ile çıkabilirsiniz.

GRUB Mirası | GRUB Legacy’yi Çalışan Bir Sistemden Yükleme

GRUB Legacy’yi çalışan bir sistemden bir diske yüklemek için grub-ınstall yardımcı programını kullanacağız. Temel komut, grub-ınstall Cihaz Aygıt Adı’dır. Legacy’yi yüklemek istediğiniz disk olduğu yerdir. Örnek /dev/sda olabilir.

grub-install /dev/sda

GRUB Mirasının yükleneceği aygıtı belirtmeniz gerektiğini unutmayın, /dev/sda/, /dev/sda1’deki gibi bölümleri seçmeyin.

Varsayılan olarak GRUB, gerekli dosyaları belirtilen aygıttaki /boot dizinine kopyalar. Bunları başka bir dizine kopyalamak isterseniz, –boot-directory= parametresini ve ardından dosyaların kopyalanması gereken yerin tam yolunu kullanın.

GRUB Mirasını bir GRUB Kabuğundan Yükleme

Herhangi bir nedenle sistemi önyükleyemiyorsanız ve GRUB Legacy’yi yeniden yüklemeniz gerekiyorsa, bunu GRUB Legacy önyükleme diskindeki GRUB kabuğundan yapabilirsiniz.

GRUB kabuğundan (grub> istemine ulaşmak için önyükleme menüsünde c yazın), ilk adım /boot dizinini içeren önyükleme aygıtını ayarlamaktır. Örneğin, bu dizin ilk diskin ilk bölümündeyse, komut şu şekilde olacaktır.

root (hd0,0)

Hangi aygıtın /boot dizinini içerdiğini bilmiyorsanız, grub’dan aşağıdaki gibi bul komutuyla onu aramasını isteyebilirsiniz:

find /boot/grub/stage1

Ardından, önyükleme bölümünü yukarıda belirtildiği gibi ayarlayın ve GRUB Mirasını mbr’ye yüklemek ve gerekli dosyaları diske kopyalamak için kurulum komutunu kullanın.

setup (hd0)

Bittiğinde sistemi yeniden başlatın ve normal şekilde önyüklenmelidir.

reboot 0

102.3 Paylaşılan Kitaplıkları (Libraries) Yönetme  

  • Anahtar bilgi alanları
  • Paylaşılan kitaplıkları tanımlayın.
  • Sistem kitaplıklarının tipik konumlarını belirleyin.
  • Paylaşılan kitaplıkları yükleyin.

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • ldd
  • ldconfig
  • /etc/ld.so.conf
  • LD_LIBRARY_PATH

   Bu rehberde, paylaşılan nesneler olarak da bilinen paylaşılan kitaplıkları inceleyeceğiz. Çeşitli programlar tarafından sürekli olarak kullanılan, derlenmiş, yeniden kullanılabilir kod parçaları gibi işlevler veya sınıflar.

Başlangıç olarak, paylaşılan kitaplıkların ne olduğunu, nasıl tanımlanacağını ve nerede bulunduklarını açıklayacağız. Ardından, depolama konumlarını nasıl yapılandıracağımıza gireceğiz. Son olarak, belirli bir programın bağlı olduğu paylaşılan kitaplıkları nasıl arayacağımızı göstereceğiz.

Paylaşılan Kütüphaneler Kavramı

Fiziksel benzerlerine, benzer şekilde yazılım kitaplıkları, birçok farklı program tarafından kullanılması amaçlanan kod koleksiyonlarıdır.

Bir programın kaynak kodundan yürütülebilir bir dosya oluşturmak için iki önemli adım gereklidir. İlk olarak, derleyici kaynak kodunu sözde nesne dosyalarında depolanan makine koduna dönüştürür. İkincisi, bağlayıcı nesne dosyalarını birleştirir ve son yürütülebilir dosyayı oluşturmak için bunları kitaplıklara bağlar. Bu bağlantı statik veya dinamik olarak yapılabilir. Hangi yönteme başvurduğumuza bağlı olarak statik kitaplıklardan veya dinamik bağlantı durumunda paylaşılan kitaplıklardan bahsedeceğiz. Farklılıklarını açıklayalım.

  • Statik kütüphaneler

Statik bir kitaplık, bağlantı zamanında programla birleştirilir. Kütüphane kodunun bir kopyası programa gömülür ve bunun bir parçası olur. Bu nedenle, program zaten kitaplıklar kodunu içerdiğinden, programın çalışma zamanında kitaplığa bağımlılığı yoktur. Kullanılan kitaplıkların her zaman kullanılabilir olduğundan emin olma konusunda endişelenmenize gerek olmadığı için hiçbir bağımlılığa sahip olmamak bir avantaj olarak görülebilir. Olumsuz tarafı, statik olarak bağlantılı programlar daha yavaştır.

  • Paylaşılan (veya dinamik) kitaplıklar

Paylaşılan kitaplıklar söz konusu olduğunda, bağlayıcı yalnızca programın kitaplıklara doğru şekilde başvurmasına özen gösterir. Ancak bağlayıcı, herhangi bir kitaplık kodunu program dosyasına kopyalamaz. Ancak, çalışma zamanında, programın bağımlılıklarını karşılamak için paylaşılan kitaplığın kullanılabilir olması gerekir. Bu, program dosyalarının boyutunu azaltmaya yardımcı olduğu ve birden çok program tarafından kullanıldığında bile kitaplığın yalnızca bir kopyasının belleğe yüklendiği için sistem kaynaklarını yönetmeye yönelik ekonomik bir yaklaşımdır.

  • Paylaşılan Nesne Dosyası Adlandırma Kuralları

so adı olarak da bilinen paylaşılan bir kitaplığın adı, üç öğeden oluşan bir kalıbı izler:

  1. Kütüphane adı (normalde öneki lib)
  2. so (“paylaşılan nesne” anlamına gelir)
  3. Kütüphanenin sürüm numarası

Örnek: libpthread.so.0

Buna karşılık, statik kitaplık adları son eki a ile biter

Örnek: libpthread.a

Program yürütüldüğünde paylaşılan kitaplıkları içeren dosyaların kullanılabilir olması gerektiğinden, çoğu Linux sistemi paylaşılan kitaplıklar içerir. Statik kitaplıklar yalnızca bir program bağlandığında ayrılmış bir dosyada gerekli olduğundan, bunlar bir son kullanıcı sisteminde bulunmayabilir.

glibc (GNU C kitaplığı) paylaşılan bir kitaplığa iyi bir örnektir. Bir Debian GNU / Linux 9.9 sisteminde, dosyasına libc.so.6 adı verilir. 

ls -l /lib/x86_64-linux-gnu/libc.so.6 

Belirli bir sürüm tarafından adlandırılmış paylaşılan kitaplık dosyalarına daha genel dosya adlarıyla başvurmanın bu modeli yaygın bir uygulamadır.

Paylaşılan kitaplıkların diğer örnekler aşağıdaki gibidir;

  • libreadline: Kullanıcıların komut satırlarını yazıldıkları sırada düzenlemelerine olanak tanır ve hem Emacs hem de vi düzenleme modları için destek içerir.
  • libcrypt: Şifreleme, karma ve kodlama ile ilgili işlevleri içerir.
  • libcurl: Çok protokollü bir dosya aktarım kitaplığıdır.

Bir Linux sistemindeki paylaşılan kitaplıklar için ortak konumlar şunlardır:

  • /lib
  • /lib32
  • /lib64
  • /usr/lib
  • /usr/local/lib

Paylaşılan kütüphaneler kavramı Linux’a özel değildir. Örneğin, Windows’ta dinamik bağlantılı kitaplıklar anlamına gelen DLL olarak adlandırılırlar.

Paylaşılan Kitaplık Yollarının Yapılandırması

Dinamik olarak bağlı programlarda yer alan başvurular, program çalıştırıldığında dinamik bağlayıcı (ld.so veya ld-linux.so) tarafından çözümlenir. Dinamik bağlayıcı, bir dizi dizindeki kitaplıkları arar. Bu dizinler kitaplık yolu ile belirtilir. Kütüphane yolu /etc/ld.so.conf dosyasında ve günümüzde daha yaygın olarak /etc/ld.so.conf.d dizininde bulunan dosyalarda yapılandırılmıştır.

Aşağıdaki görseldeki gibi, /etc/ld.so.conf dosyası aslında /etc/ld.so.conf.d/ dizini içindeki *.conf dosyalarını içerir.

cat /etc/ld.so.conf 
cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf 

*.conf dosyaları, paylaşılan kitaplık dizinlerinin mutlak yollarını içermelidir. Örnek, /lib/x86_64-linux-gnu

ldconfig komutu, bu yapılandırma dosyalarını okumaya, tek tek kitaplıkları bulmaya yardımcı olan yukarıda belirtilen sembolik bağlantılar kümesini oluşturmaya ve son olarak /etc/ld.so.cache önbellek dosyasını güncellemeye özen gösterir. Bu nedenle, yapılandırma dosyaları her eklendiğinde veya güncellendiğinde ldconfig çalıştırılmalıdır.

ldconfig için kullanışlı seçenekler şunlardır:

  • -v –verbose
  • -p,–print-cache

Kitaplık sürüm numaralarını, her dizinin adını ve oluşturulan bağlantıları görüntüleyin:

sudo ldconfig -v 

Böylece, örneğin libfuse.so.2‘nin gerçek paylaşılan nesne dosyası libfuse.so.2.9.7 ile nasıl bağlantılı olduğunu görebiliriz.

-p seçeneği ile, geçerli önbellekte depolanan dizin listelerini ve aday kitaplıkları yazdırın.

sudo ldconfig -p

Önbelleğin bağlantıların tam nitelikli so adlarını nasıl kullandığına dikkat edin:

sudo ldconfig -p |grep libfuse 

/lib/x86_64-linux-gnu/libfuse3.so.3 paylaşılan kitaplığını uzun bir listeleme yaparsak, aynı dizinde depolanan gerçek paylaşılan nesne dosyası libfuse3.so.3.10.5’i referansı bulacağız:

ls -l /lib/x86_64-linux-gnu/libfuse3.so.3 

Belirli Bir Yürütülebilir Dosyanın Bağımlılıklarını Arama

Belirli bir programın gerektirdiği paylaşılan kitaplıkları aramak için ldd komutunu ve ardından programın mutlak yolunu kullanın. Çıktı, paylaşılan kitaplık dosyasının yolunu ve yüklendiği onaltılık bellek adresini gösterir:

ldd /usr/bin/git 

Benzer şekilde, paylaşılan bir nesnenin bağımlılıklarını aramak içinde ldd  komutunukullanırız.

ldd /lib/x86_64-linux-gnu/libc.so.6 

-u seçeneğini ile kullanılmayan doğrudan bağımlılıkları gösterir.

ldd -u /usr/bin/git 

Kullanılmayan bağımlılıkların nedeni, ikili oluştururken bağlayıcı tarafından kullanılan seçeneklerle ilgilidir. Program kullanılmayan bir kitaplığa ihtiyaç duymasa da, yine de bağlandı ve nesne dosyasıyla ilgili bilgilerde gerektiği gibi etiketlendi.

Daha fazla detay için, readelf ve objdump komutlarını araştırınız.

102.4 Debian Paket Yönetimi

  • Anahtar bilgi alanları
  • Debian ikili paketlerini kurun, yükseltin ve kaldırın.
  • Yüklenebilecek veya yüklenmeyebilecek belirli dosyaları veya kitaplıkları içeren paketleri bulun.
  • Sürüm, içerik, bağımlılıklar, paket bütünlüğü ve kurulum durumu (paket kurulu olsun ya da olmasın) gibi paket bilgilerini alın.
  • apt

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • /etc/apt/sources.list
  • dpkg
  • dpkg-reconfigure
  • apt-get
  • apt-cache

Uzun zaman önce, Linux henüz emekleme aşamasındayken, yazılımı dağıtmanın en yaygın yolu sıkıştırılmış bir dosyayı kendiniz açıp kaynak koduyla derlemekti. Bununla birlikte, yazılımın miktarı ve karmaşıklığı arttıkça, önceden derlenmiş yazılımı dağıtmanın bir yoluna duyulan ihtiyaç netleşti. Sonuçta, herkesin Linux çekirdeği veya X Sunucusu gibi büyük projeleri derlemek için hem zaman hem de bilgi işlem gücü açısından kaynakları yoktu.

Kısa süre sonra, bu yazılım “paketlerini” dağıtmanın bir yolunu standartlaştırma çabaları arttı ve ilk paket yöneticileri doğdu. Bu araçlar, bir sistemden yazılım yüklemeyi, yapılandırmayı veya kaldırmayı çok daha kolaylaştırdı.

Bunlardan biri Debian paket formatı (.deb) ve paket aracı (dpkg).  oldu. Günümüzde sadece Debian’ın kendisinde değil, Ubuntu ve ondan türetilenler gibi türevlerinde de yaygın olarak kullanılmaktadır. Debian tabanlı sistemlerde popüler olan bir diğer paket yönetim aracı olan apt, paketlerin kurulumunun, bakımının ve kaldırılmasının birçok yönünü kolaylaştırabilen Gelişmiş Paket Aracıdır.

Bu dökümanda, Debian tabanlı bir Linux sisteminde yazılım elde etmek, kurmak, bakımını yapmak ve kaldırmak için hem dpkg’yi hem de apt’yi nasıl kullanacağımızı öğreneceğiz.

Debian Paket Aracı (dpkg)

Debian Paketi (dpkg) aracı, Debian tabanlı sistemlere yazılım paketleri yüklemek, yapılandırmak, bakımını yapmak ve kaldırmak için gerekli yardımcı programdır. 

Paket Yükleme

En temel işlem .deb paketlerini kurmaktır.  Aşağıdaki görseldeki gibi bir çok global firma artık linux desteği sağlamaktadır.

Burada PACKAGENAME yüklemek istediğiniz .deb dosyasının adıdır.

sudo dpkg -i PACKAGENAME

Paket Yükseltme

Eğer paket güncellemesi yapılacaksa, yine aynı yol izlenir yani yükleme yapılıyor gibi -i seçeneği kullanılır. Bir paket yüklemeden önce dpkg, sistemde önceki bir sürümün zaten mevcut olup olmadığını kontrol edecektir. Eğer öyleyse, paket yeni sürüme yükseltilecektir. Değilse, yeni bir kopya yüklenir.

sudo dpkg -i PACKAGENAME

Bağımlılıklarla Başa Çıkmak

Çoğu zaman, bir paketin amaçlandığı gibi çalışması başkalarına bağlı olabilir. Örneğin, bir görüntü düzenleyicinin JPEG dosyalarını açmak için kitaplıklara ihtiyacı olabilir veya başka bir yardımcı programın kullanıcı arayüzü için Qt veya GTK gibi bir widget araç setine ihtiyacı olabilir.

dpkg, bu bağımlılıkların sisteminizde yüklü olup olmadığını kontrol edecek ve yüklü değilse paketi yükleyemeyecektir. Bu durumda dpkg hangi paketlerin eksik olduğunu listeleyecektir. Ancak bağımlılıkları kendi başına çözemez.  .deb ile ilgili bağımlılıklara sahip paketleri bulmak ve kurmak kullanıcıya kalmıştır.

Aşağıdaki örnekte, kullanıcı OpenShot video düzenleyici paketini yüklemeye çalışır, ancak bazı bağımlılıklar eksiktir. İlk olarak bilgisayarımıza wget aracı ile openshot yazılımını indirelim.

wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openshot-qt/openshot-qt-doc_2.4.3+dfsg1-1_all.deb 

İndirme işlemi tamamlandıktan sonra, dpkg aracı ile yükleme işlemini gerçekleştirelim.

dpkg -i openshot-qt-doc_2.4.3+dfsg1-1_all.deb 

Yukarıda gösterildiği gibi, OpenShot yazılımı, libjs-jquery ve libjs-underscore paketlerine bağlıdır. OpenShot kurulumunun başarılı olabilmesi için bunların hepsinin yüklenmesi gerekir.

Paketleri Kaldırma

Bir paketi kaldırmak için dpkg aracı ve -r parametresinden sonra paket adını iletin. Örneğin, aşağıdaki komut nano paketi sistemden kaldıracaktır.

dpkg -r nano 

Bağımlı Paketleri Kaldırma

Kaldırma işlemi ayrıca bir bağımlılık denetimi de çalıştırır ve ona bağlı olan diğer tüm paketler de kaldırılmadıkça bir paket kaldırılamaz. Bunu yapmaya çalışırsanız, aşağıdaki gibi bir hata mesajı alacaksınız.

Aşağıdaki uygulamayı yapmak için p7zip-full paketinin kurulu olması gerekmektedir.

dpkg -r p7zip 

dpkg  aracına, birden çok paket adını iletebilirsiniz. Böylece hepsi aynı anda kaldırılacaktır.

dpkg -r p7zip p7zip-full 
  • Bir paket kaldırıldığında, ilgili yapılandırma dosyaları sistemde kalır. Paketle ilişkili her şeyi kaldırmak istiyorsanız , -r yerine -P (purge) seçeneğini kullanın.
  • dpkg -i –force package-name  gibi –force parametresini ekleyerek, bağımlılıklar karşılanmasa bile dpkg’yi bir paketi yüklemeye veya kaldırmaya zorlayabilirsiniz. Ancak, bunu yapmak büyük olasılıkla yüklü paketi ve hatta sisteminizi bozuk durumda bırakacaktır. Ne yaptığınızdan kesinlikle emin olmadığınız sürece güç kullanmayın.

Paket Bilgilerini Alma

Sürüm, mimari, bakımcı, bağımlılıklar ve daha fazlası gibi bir paketi yüklemeden önce hakkında bilgi almak için dpkg komutunu -I parametreyle birlikte incelemek istediğiniz paketin dosya adını kullanın. Örneğin, google-chrome indirip, inceleme yapalım.

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 

Şimdi paket hakkında detaylı bilgi alalım.

dpkg -I google-chrome-stable_current_amd64.deb 

Kurulu Paketleri ve Paket İçeriklerini Listeleme

Sisteminizde yüklü olan her paketin bir listesini almak için dpkg aracı ile –get-selections seçeneğini kullanın. Örneğin, vim editörüne bakalım.

dpkg --get-selections vim 

 -L  parametresi ve paket adı ile aşağıdaki gibi  belirli bir paket tarafından yüklenen her dosyanın bir listesini de alabilirsiniz.

Hangi Paketin Belirli Bir Dosyaya Sahip Olduğunu Bulma

Bazen sisteminizde hangi paketin belirli bir dosyaya sahip olduğunu bulmanız gerekebilir. dpkg-query yardımcı programının, ardından -S parametresi ve söz konusu dosyanın yolunu kullanarak bunu yapabilirsiniz. Örneğin, unrar-nonfree paketine bakalım.

dpkg-query -S /usr/bin/unrar-nonfree 

Kurulu Paketleri Yeniden Yapılandırma

Bir paket yüklendiğinde, yazılımın çalışması için izinler, yapılandırma dosyalarının yerleştirilmesi vb. Gibi gereken her şeyi ayarlamak için bir komut dosyasının çalıştığı post-install adlı bir yapılandırma adımı vardır. Bu, kullanıcının yazılımın nasıl çalışacağına ilişkin tercihleri belirlemesi için bazı sorular da sorabilir.

Bazen, bozuk veya hatalı biçimlendirilmiş bir yapılandırma dosyası nedeniyle, bir paketin ayarlarını “fresh” durumuna geri yüklemek isteyebilirsiniz. Veya ilk yapılandırma sorularına verdiğiniz yanıtları değiştirmek isteyebilirsiniz. Bunu yapmak için dpkg-reconfigure yardımcı programını ve ardından paket adını çalıştırın.

Bu program eski yapılandırma dosyalarını yedekleyecek, yenilerini doğru dizinlere açacak ve paket tarafından sağlanan yükleme sonrası komut dosyasını sanki paket ilk kez yüklenmiş gibi çalıştıracaktır. Örneğin, tzdata paketini aşağıdaki gibi yeniden yapılandırmayı deneyin.

dpkg-reconfigure tzdata

Lokasyon seçimi yapalım.

Bölge veya şehir seçimi yaparak işlemi tamamlıyoruz.

Gelişmiş Paket Aracı (APT)

Gelişmiş Paket Aracı (APT), paket kurulumunu, yükseltmesini, kaldırılmasını ve yönetimini büyük ölçüde basitleştiren bir dizi araç içeren bir paket yönetim sistemidir. APT, gelişmiş arama yetenekleri ve otomatik bağımlılık çözümü gibi özellikler sunar.

APT, dpkg için bir “yedek” değildir. Bunu bir “ön uç” olarak düşünebilir, işlemleri düzene sokabilir ve bağımlılık çözümü gibi dpkg işlevselliğindeki boşlukları doldurabilirsiniz.

APT, yüklenebilecek paketleri içeren yazılım depolarıyla uyumlu çalışır. Bu tür depolar yerel veya uzak bir sunucu veya  bir CD-ROM diski bile olabilir.

Debian ve Ubuntu gibi Linux dağıtımları kendi depolarını korur ve diğer depolar, ana dağıtım depolarından erişilemeyen yazılımlar sağlamak için geliştiriciler veya kullanıcı grupları tarafından muhafaza edilebilir.

APT ile etkileşime giren birçok yardımcı program vardır, bunların başlıcaları şunlardır:

  • apt-get = paketleri sistemden indirmek, kurmak, yükseltmek veya kaldırmak için kullanılır.
  • apt-cache = paket dizininde arama gibi işlemleri gerçekleştirmek için kullanılır.
  • apt-file = paketlerin içindeki dosyaları aramak için kullanılır.

Ayrıca, en çok kullanılan apt-get ve apt-cache seçeneklerini tek bir yardımcı programda birleştiren apt adlı “daha dostça” bir yardımcı program da vardır. Apt komutlarının çoğu, apt-get komutlarıyla aynıdır, bu nedenle çoğu durumda birbirinin yerine geçebilirler. Ancak, apt bir sisteme yüklenemeyebileceğinden, apt-get ve apt-cache’in nasıl kullanılacağını öğrenmeniz önerilir.

apt ve apt-get bir ağ bağlantısı gerektirebilir, çünkü paketlerin ve paket dizinlerinin uzak bir sunucudan indirilmesi gerekebilir.

Paket İndeksinin Güncellenmesi

Sistem Paketleri Nasıl Güncellenir. 

Paket yönetim, sistemde kurulu paketler, kurulu olmayan paketler, kurulabilir paketler vb. hakkında bilgileri kendi özel veritabanında tutmaktadır. apt-get programı bu veritabanını kullanarak istenilen paketin nasıl kurulacağını, başka hangi paketlerin daha kurulması gerektiğini öğrenir. Bu listeyi güncellemek için apt-get update komutunu kullanmalısınız. Bu komut /etc/apt/sources.list dosyanıza bakar ve belirtilen arşivlerden güncel paket listesini indirir.

Paket güncellemeleri ve güvenlikle ilgili güncellemelerden sizin ve sisteminizin haberdar olabilmesi için bu komutu düzenli aralıklarla çalıştırmakta fayda vardır 

apt ile yazılım yüklemeden veya yükseltmeden önce, yeni ve güncellenmiş paketler hakkında bilgi almak için önce paket dizininin güncellenmesi önerilir. Bu, apt-get veya apt komutu ve ardından update parametresi ile yapılır. 

Örneğin, sisteminize nano editörünü yükleyeceksiniz. Eğer paket indeksiniz eski ise  nano 2.0 yükleyecektir. Ancak güncel depo’da nano 2.2 vardır. İşte, en güncel sürümü yüklemek için paket indeksinizin güncel olması önerilir. Unutmayın paket indeksinizi güncellemek, herhangi bir uygulamanızı güncellemez. (Debian|Ubuntu)

apt update 

Depo Üzerinde Tüm Paketleri Listelenmesi

Hangi paketleri yükleyebileceğimizi ve tüm paketlerin sürümlerine bakalım.

apt list

Uygulama ismi belirterek, belirli paketlere de bakabiliriz.

apt list | grep wireshark

Sistemdeki Yüklü Paketleri Görmek

Sistem üzerindeki, tüm paket ve çekirdekleri aşağıdaki komutu çalıştırarak görebiliriz.

dpkg -l 

 Tüm yüklü paketlerin sayısına bakabiliriz.

dpkg -l | wc -l 

Belirli bir paketi arayabilirsiniz.

dpkg -l | grep -i nano
dpkg -l | grep -i sudo 

Paketleri Yükleme 

Paket dizini güncellendiğinde artık bir paket yükleyebilirsiniz. Bunu yapmak için, apt-get install ve ardından kurmak istediğiniz paket adını yazmanız yeterlidir.

Ayrıca apt-get yerine sadece apt yani  apt install ve apt remove kullanabilirsiniz.

apt install gedit 

gedit, GNOME masaüstü ortamı için tasarlanmış bir metin editörüdür. 

Özel karakter kullanarak paket kurmak

Eğer birden fazla paket var ise özel karakter kullanarak toplu bir şekilde kurabiliriz.

sudo apt-get install samba*

Yükseltme olmadan yazılım paketi kurmak

–no-upgrade komutunun kullanılması, önceden kurulmuş paketlerin yükseltilmesini engelleyecektir.

sudo apt-get install nano --no-upgrade 

Yalnızca belirli paketleri yükseltme

–only-upgrade sadece önceden kurulmuş paketleri yükseltir ve yeni paketler yüklenmez. Yani nano ve kurulu paketler yüklenir ,yeni paket kurulmaz. 

sudo apt-get install nano --only-upgrade 

Belirli bir sürümü yükleme

Paketlerin belirli bir sürümünü yüklemek istediğimizi varsayalım, paket adıyla = istenen sürümü ekleyin. 

sudo apt-get install nano=2.3.6-3ubuntu1

Yazılım Paketini Kurmadan İndirmek

download  parametresi ile herhangi bir paketi kurmadan indirebilirsiniz. 

sudo apt-get download nan

Paket Kaldırma

Benzer şekilde, bir paketi kaldırmak için apt-get remove ve ardından kaldırmak istediğiniz paket adını yazmanız yeterlidir.

Apt kullanırken, yaptığınız işlemlere devam etmek için y/n yes ve no seçeneğini sormasını istemiyorsanız aşağıdaki seçenekleri kullanabilirsiniz. Hepsi aynı yola çıkacaktır.

apt-get remove gedit
apt-get -y remove gedit
apt-get remove gedit -y 

Bağımlı Paketleri Yükleme ve Kaldırma

  Paketleri kurarken veya kaldırırken APT’nin otomatik bağımlılık çözümlemesi yapacağını unutmayın. Bu, kurmakta olduğunuz paketin ihtiyaç duyduğu ek paketlerin de kurulacağı ve kaldırdığınız pakete bağlı paketlerin de kaldırılacağı anlamına gelir . APT, devam etmek isteyip istemediğinizi sormadan önce nelerin kurulacağını veya kaldırılacağını her zaman gösterecektir.

sudo apt remove p7zip 

Yapılandırma Dosyaları Dahil Paketleri Kaldırma

Bir paket kaldırıldığında, ilgili yapılandırma dosyalarının sistemde kaldığını unutmayın. Paketi ve tüm yapılandırma dosyalarını kaldırmak için remove yerine temizle parametresini  –purge seçeneğiyle  kullanın.

apt-get purge p7zip 

Bozuk Bağımlılıkları Düzeltme

Bir sistemde “bozuk bağımlılıklara” sahip olmak mümkündür. Bu, yüklü paketlerden bir veya daha fazlasının, yüklenmemiş veya artık mevcut olmayan diğer paketlere bağlı olduğu anlamına gelir. Bu, bir APT hatası veya el ile yüklenmiş bir paket nedeniyle olabilir.

Bunu çözmek için apt install -f komutunu kullanın. Bu, eksik bağımlılıkları yükleyerek bozuk paketleri “düzeltmeye” çalışacak ve tüm paketlerin tekrar tutarlı olmasını sağlayacaktır.

apt install -f 

Güncellenecek paketleri görmek

Yazılımları güncellemeden önce hangi sürüme geçeceğini önceden görebiliriz. Tüm listeye bakabiliriz.

apt list --upgradable

Belirli bir uygulamaya bakabiliriz.

apt list --upgradable | grep -i nano*

Paketi Yükseltme

Paket yüklemek ile aynı komutu kullandığımızda eğer bir güncelleme var ise otomatik olarak bulacaktır ve izin verdiğimiz taktirde güncelleyecektir.   

sudo apt-get install nano

Tüm Paketlerin Yükseltilmesi

APT, yüklü paketleri depolardan erişilebilen en son sürümlere otomatik olarak yükseltmek için kullanılabilir. Bunu, apt-get upgrade komutu ile yapılır. Çalıştırmadan önce paket dizinini apt-get update ile güncelleyin.

Paketleri yükseltmek, çalışan uygulamalarınızı bozabilir. Bu işlemi yapmadan önce, sunucunun snapshot/checkpoint almanız önerilir. 

apt update
apt upgrade 

Yukarıdaki çıktının altındaki özet, kaç paketin yükseltileceğini, kaç paketin yükleneceğini, kaldırılacağını veya saklanacağını, toplam indirme boyutunu ve işlemi tamamlamak için ne kadar ekstra disk alanına ihtiyaç duyulacağını gösterir. Yükseltmeyi tamamlamak için Y yazıp enter tuşuna basın görevin bitirmesini bekleyin.

Tek bir paketi yükseltmek için, paket yükleme komutu olan apt install ve yükseltmek istediğiniz paket adını yazmanız yeterlidir. Dpkg’de olduğu gibi, apt-get önce bir paketin önceki bir sürümünün yüklü olup olmadığını kontrol eder. Bu durumda, paket depoda bulunan en yeni sürüme yükseltilecektir. Değilse, yeni bir kopya yüklenir.

apt install snapd 

Yerel Önbellek Temizleme

Bir paketi yüklediğinizde veya güncellediğinizde, ilgili .paket yüklenmeden önce deb dosyası yerel bir önbellek dizinine yüklenir. Varsayılan olarak, bu dizin /var/cache/apt/archives dizinidir. Kısmen indirilen dosyalar /var/cache/apt/archives/partial/ dosyasına kopyalanır.

Paketleri kurup yükselttikçe önbellek dizini oldukça büyüyebilir. Alanı geri kazanmak için apt-get clean komutunu kullanarak önbelleği boşaltabilirsiniz. Bu, /var/cache/apt/archives ve /var/cache/apt/archives/partial/ dizinlerinin içeriğini kaldıracaktır.

apt clean 

Paket Arama

apt-cache yardımcı programı, belirli bir paketi aramak veya hangi paketlerin belirli bir dosyayı içerdiğini listelemek gibi paket dizini üzerinde işlemler gerçekleştirmek için kullanılabilir.

Arama yapmak için apt-cache aramasını ve ardından bir arama modelini kullanın. Çıktı, paket adı, açıklaması veya sağlanan dosyalarda deseni içeren her paketin bir listesi olacaktır.

apt-cache search p7zip 

Yukarıdaki örnekte, liblzma5 – XZ biçimindeki sıkıştırma kitaplığı girdisi desenle eşleşmiyor gibi görünüyor. Ancak, show parametresini kullanarak paketin açıklaması da dahil olmak üzere tüm bilgileri gösterirsek, kalıbı orada bulacağız.

apt-cache show liblzma5 

apt-cache search yerine apt search ve apt-cache show yerine apt show da kullanabilirsiniz.

Paket ve Çekirdek Güncelleme Almasını Engelleme

Belirlediğimiz paketleri belli durumlar için güncellenmemesini sağlayabiliriz.  Sonlarına glob karakter olan asterisk “*” ekleyerek o paket ile ilgili tüm paketleri hariç tutabilirsiniz.

sudo apt-mark hold nano
sudo apt-mark hold nano*

Güncellenmeyecek paketleri görmek

apt-mark showhold

Paketleri güncellemeye tekrar açalım

apt-mark unhold nano

İşletim Sistemini Güncellemek

APT’nin bu özelliği sayesinde bir defada tüm sisteminizi yeni bir Debian sürümüne ister internet üzerinden isterse varolan bir CD üzerinden yükseltebilirsiniz. Ayrıca bu yöntem kurulu paketler arasındaki paket bağımlılıklarında değişmeler olduğunda da kullanılır. apt-get upgrade ile yapılan güncellemelerde bu tür paketlere dokunulmaz. 

sudo apt-get -u dist-upgrade 

Kaynak Listesi

APT, paketlerin nereden alınacağını bilmek için bir kaynak listesi kullanır. Bu liste /etc/apt dizininin içinde bulunan sources.list içinde bulunur. Bu dosya doğrudan vi, veya nano vb. gibi bir metin düzenleyici programlarla düzenlenebilir.

İçerideki tipik bir çizgi sources.list içinde şöyle görünür:

deb http://us.archive.ubuntu.com/ubuntu/ disco main restricted universe multiverse

Biz kullandığımız makina üzerindeki yorum satırlarını çıkarıp kaynak listesine bakalım.

grep -v "#" /etc/apt/sources.list.d/original.list
grep -v "#" /etc/apt/sources.list 

Söz dizimi arşiv türü, URL, dağıtım ve bir veya daha fazla bileşendir.

  1. Archive type = Bir depo, çalıştırılmaya hazır yazılıma (ikili paketler, deb türü) veya bu yazılımın kaynak koduna (kaynak paketler, deb-src türü) sahip paketler içerebilir. Yukarıdaki örnek ikili paketler sağlar.
  2. URL = Havuzun URL’si.
  3. Distribution = Paketlerin sağlandığı dağıtımın adı. Bir depo, birden çok dağıtım için paketleri barındırabilir. Yukarıdaki örnekte, Ubuntu kod adıdır.
  4. security = Güvenlik güncelleştirmeleri içerir.
  5. main = Resmi olarak desteklenen, açık kaynaklı paketler içerir.
  • restricted = Örneğin grafik kartları için aygıt sürücüleri gibi resmi olarak desteklenen, kapalı kaynaklı yazılımlar içerir.
  • universe= Topluluk tarafından desteklenen açık kaynaklı yazılımlar içerir.
  • multiverse = Desteklenmeyen, kapalı kaynaklı veya patentli yazılımlar içerir.

Debian’da ana bileşenler şunlardır:

  • main = Çalışması için bu alanın dışındaki yazılımlara dayanmayan Debian Özgür Yazılım Yönergelerine (DFSG) uygun paketlerden oluşur. Buraya dahil edilen paketler Debian dağıtımının bir parçası olarak kabul edilir.
  • contrib =DFSG uyumlu paketler içerir, ancak ana pakette olmayan diğer paketlere bağlıdır.
  • non-free = DFSG ile uyumlu olmayan paketler içerir.
  • security = Güvenlik güncelleştirmeleri içerir.
  • backports = main’de bulunan paketlerin daha yeni sürümlerini içerir. Debian’ın kararlı sürümlerinin geliştirme döngüsü oldukça uzundur (yaklaşık iki yıl) ve bu, kullanıcıların ana çekirdek havuzunu değiştirmek zorunda kalmadan en güncel paketleri alabilmelerini sağlar.

DFSG hakkında daha detaylı bilgi için bakınız:

https://www.debian.org/social_contract#guidelines

Farklı paketleri almak için yeni bir depo ekleyebilirsiniz. Bunlar genellikle depo yöneticisi tarafından sağlanır. Depoyu sources.list dosyasına ekleyip paket listesini apt-get update ile güncellemeniz yeterlidir. Sonrasında, yeni depodaki paketler apt-get install kullanılarak kurulum için hazır olacaktır.

  • # Karakteriyle başlayan satırların yorum olarak kabul edildiğini ve göz ardı edildiğini unutmayın.
  • /etc/apt/sources.list.d dizin içindeki ana kaynaklarını değiştirmeye gerek kalmadan APT tarafından kullanılacak ek depolarınızı aynı şekilde ekleyebilirsiniz.

102.5 RPM,YUM, DNF, ZYPPER Paket Yönetimi

  • Anahtar bilgi alanları
  • RPM, YUM ve Zypper kullanarak paketleri kurun, yeniden kurun, yükseltin ve kaldırın.
  • Sürüm, durum, bağımlılıklar, bütünlük ve imzalar gibi RPM paketleri hakkında bilgi edinin.
  • Bir paketin hangi dosyaları sağladığını belirleyin ve belirli bir dosyanın hangi paketten geldiğini bulun.
  • dnf farkındalığı.

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • rpm
  • rpm2cpio
  • /etc/yum.conf
  • /etc/yum.repos.d/
  • yum
  • zypper

Uzun zaman önce, Linux henüz emekleme aşamasındayken, yazılımı dağıtmanın en yaygın yolu sıkıştırılmış bir dosyayı kendiniz açıp kaynak koduyla derlemekti. Bununla birlikte, yazılımın miktarı ve karmaşıklığı arttıkça, önceden derlenmiş yazılımı dağıtmanın bir yoluna duyulan ihtiyaç netleşti. Sonuçta, herkesin Linux çekirdeği veya X Sunucusu gibi büyük projeleri derlemek için hem zaman hem de bilgi işlem gücü açısından kaynakları yoktu.

Kısa süre sonra, bu yazılım “paketlerini” dağıtmanın bir yolunu standartlaştırma çabaları arttı ve ilk paket yöneticileri doğdu. Bu araçlar, bir sistemden yazılım yüklemeyi, yapılandırmayı veya kaldırmayı çok daha kolaylaştırdı.

Bunlardan biri, Red Hat tarafından geliştirilen RPM Paket Yöneticisi ve ilgili aracıydı (rpm). Günümüzde sadece Red Hat Enterprise Linux’un (RHEL) kendisinde değil, Fedora, CentOS ve Oracle Linux gibi torunlarında, openSUSE gibi diğer dağıtımlarda ve hatta IBM’in AIX gibi diğer işletim sistemlerinde de yaygın olarak kullanılmaktadır.

Red Hat uyumlu dağıtımlarda popüler olan diğer paket yönetimi araçları yum (YellowDog Updater Modified), dnf (Dandified YUM) ve zypper’dır, bu da paketlerin kurulumunun, bakımının ve kaldırılmasının birçok yönünü düzene sokarak paket yönetimini çok daha kolay hale getirebilir.

Bu derste, bir Linux sisteminde yazılım elde etmek, kurmak, yönetmek ve kaldırmak için rpm, yum, dnf ve zypper’ın nasıl kullanılacağını öğreneceğiz.

Aynı paket biçimini kullanmasına rağmen, dağıtımlar arasında dahili farklılıklar vardır, bu nedenle openSUSE için özel olarak yapılmış bir paket bir RHEL sisteminde çalışmayabilir ve bunun tersi de geçerlidir. Paketleri ararken, her zaman uyumluluğu kontrol edin ve mümkünse özel dağıtımınız için uyarlanmış bir paket bulmaya çalışın.

RPM Paket Yöneticisi (rpm)

RPM Paket Yöneticisi (rpm), Red Hat tabanlı (veya türetilmiş) sistemlerdeki yazılım paketlerini yönetmek için gerekli araçtır.

Paketleri Yükleme

En temel işlem, aşağıdakilerle yapılabilecek bir paket kurmaktır. Aşağıdaki görseldeki gibi bir çok global firma artık linux desteği sağlamaktadır.

Burada PACKAGENAME adıdır. Yani yüklemek istediğiniz rpm paketi.

rpm -i PACKAGENAME

Paketleri Yükseltme

Sistemde bir paketin önceki bir sürümü varsa, -U parametresini kullanarak daha yeni bir sürüme yükseltebilirsiniz:

rpm -U PACKAGENAME

PACKAGENAME’İN önceki bir sürümü yüklü değilse, yeni bir kopyası yüklenir. 

Her iki işlemde de ayrıntılı bir çıktı elde etmek için -v parametresini (yükleme sırasında daha fazla bilgi gösterilir).

Paket Kaldırma

Yüklü bir paketi kaldırmak için  rpm ile birlikte  -e parametresini ve ardından kaldırmak istediğiniz paketin adına yazın.

rpm -e wget

Bağımlı Paketleri Kaldırma

Kaldırma işlemi ayrıca bir bağımlılık denetimi de çalıştırır ve ona bağlı olan diğer tüm paketler de kaldırılmadıkça bir paket kaldırılamaz. Bunu yapmaya çalışırsanız, aşağıdaki gibi bir hata mesajı alacaksınız.

rpm -e unzip

hata: Başarısız bağımlılıklar

İşlemi tamamlamak için önce kaldırmak istediğinize bağlı paketleri kaldırmanız gerekir. Aynı anda birden çok paketi kaldırmak için birden çok paket adını rpm  aracına iletebilirsiniz.

Paket Bağımlılıklarla Başa Çıkmak

Çoğu zaman, bir paketin amaçlandığı gibi çalışması başkalarına bağlı olabilir. Örneğin, uzak bağlantı aracı dosyalarını açmak için kitaplıklara ihtiyacı olabilir.

rpm, bu bağımlılıkların sisteminizde yüklü olup olmadığını kontrol eder ve yüklü değilse paketi yükleyemez. Bu durumda, rpm neyin eksik olduğunu listeler. Ancak bağımlılıkları kendi başına çözemez.

Aşağıdaki örnekte, kullanıcı teamviewer için bir paket yüklemeye çalıştı, ancak bazı bağımlılıklar eksikti.

rpm -i teamviewer.rpm

Bu bulmak için kullanıcıya kalmış. rpm paketleri karşılık gelen bağımlılıklara sahiptir ve bunları yükler.

Kurulu Paketleri Listeleme

Sisteminizde kurulu tüm paketlerin bir listesini almak için rpm -qa öğesini kullanın. Örneğin:

rpm -qa

Tüm yüklü paketlerin sayısına bakabiliriz.

rpm -qa | wc -l

Belirli bir paketi arayabilirsiniz.

rpm -qa | grep -i nano
rpm -qa | grep -i sudo

Paket Bilgilerini Alma

Yüklü bir paket hakkında sürüm numarası, mimarisi, yükleme tarihi, paketleyicisi, özeti vb. gibi bilgileri almak rpm -qi parametreleri ve ardından paket adını kullanın. Örneğin:

rpm -qi wget

Kurulu Paketleri ve Paket İçeriklerini Listeleme

Kurulu bir paketin içinde hangi dosyaların bulunduğunun bir listesini almak için  rpm -ql parametreleri ve ardından paket adını kullanın. Örneğin:

rmp -ql wget

Paket Bilgilerini Alma

Sürüm, mimari, bakımcı, bağımlılıklar ve daha fazlası gibi bir paketi yüklemeden önce hakkında bilgi almak için -qip  parametreyi ve ardından RPM dosyasının adını eklemeniz yeterlidir. Örneğin:

rpm -qip teamviewr.rpm

Hangi Paketin Belirli Bir Dosyaya Sahip Olduğunu Bulma

Hangi yüklü paketin bir dosyaya sahip olduğunu bulmak için -qf ve ardından dosyanın tam yolunu kullanın. Örneğin:

rpm -qf /usr/bin/unzip 

Paket ve Çekirdek Güncelleme Almasını Engelleme

Sistemi yum aracılığıyla güncellerken çekirdeğin veya diğer paketlerin  Linux’ta güncellenmesini nasıl engelleyeceğimize bakalım. Test amaçlı ilk olarak sistemde kurulu olan bir paketi bulup, sonrasında güncelleme sonrası yükseltme alıp almayacağına bakıyorum. Görseldeki gibi openssh server güncelleme sonrası 8.0p1-5’ten 8.0p1-10’a yükselecek. Ancak ben güncellenmesini istemiyorum.

sudo rpm -qa | grep -i openssh-server
sudo yum update | grep -i openssh-server

 İlgili konfigürasyon dosyamızı açıyorum.

sudo vi /etc/yum.conf

Bu kısımda, güncelleme almasını istemediğimiz paketleri, başına exclude yazarak ekliyoruz. Sonlarına glob karakter olan asterisk “*” ekleyerek o paket ile ilgili tüm paketleri hariç tutabilirsiniz.

exclude=package package1 package2*

 Dosyayı kayıt edip çıkış yapıyorum.

:wq!

İşletim sistemi versiyonlarına göre, paket yöneticileri değişebilir. O yüzden yum ve dnf paket yöneticilerini kullanarak paket yükseltmeye çalışıyorum. İşlemin başarılı olduğunu rahatlıkla görebiliyoruz.

sudo yum install nano
sudo dnf install openssh-server

 Son olarak dosyayı tekrar açıp, sadece asterisk “*” ekleyiyorum. Artık sistemde hiç bir paket ve çekirdek güncellenemez hale geliyor.

sudo yum upgrade

YellowDog Updater Modified (YUM)

yum başlangıçta Yellow Dog Linux dağıtımında paket yönetimi için bir araç olan Yellow Dog Updater (YUP) olarak geliştirildi. Zamanla, Fedora, CentOS, Red Hat Enterprise Linux ve Oracle Linux gibi diğer RPM tabanlı sistemlerdeki paketleri yönetmek için gelişti.

İşlevsel olarak, paketleri arayabilen, yükleyebilen, güncelleyebilen ve kaldırabilen ve bağımlılıkları otomatik olarak işleyebilen Debian tabanlı sistemlerdeki apt yardımcı programına benzer. yum, tek bir paket kurmak veya tüm sistemi aynı anda yükseltmek için kullanılabilir.

Paketleri Aramak

Bir paket kurmak için adını bilmeniz gerekir. Bunun için yum search PACKAGENAME ile bir arama yapabilirsiniz, burada PACKAGENAME aradığınız paketin adıdır. Sonuç, adı veya özeti belirtilen arama modelini içeren paketlerin bir listesidir. Örneğin, 7Zip sıkıştırılmış dosyaları işlemek için bir yardımcı programa ihtiyacınız varsa  aşağıdaki gibi kullanabilirsiniz:

yum search 7zip

Paketleri Yükleme

Yum kullanarak bir paket yüklemek için yum install PACKAGENAME komutunu kullanın, burada PACKAGENAME paketin adıdır. yum, paketi ve ilgili bağımlılıkları çevrimiçi bir depodan alır ve her şeyi sisteminize yükler.

yum install wget

Paketleri Yükseltme 

Yüklü bir paketi yükseltmek için yum update PACKAGENAME kullanın. Burada PACKAGENAME, yükseltmek istediğiniz paketin adıdır. Örneğin:

yum update wget

Bir paketin adını atlarsanız, güncellemenin mevcut olduğu sistemdeki her paketi güncelleyebilirsiniz.

Tüm Paketlerin Yükseltilmesi

Sistemdeki tüm paketleri yükseltmek istiyorsanız, aşağıdaki komutu çalıştırmanız yeterlidir.

yum update

Paket Güncellemesi Kontrol Etme

Bir paketin adını atlarsanız, güncellemenin mevcut olduğu sistemdeki her paketi güncelleyebilirsiniz. Belirli bir paket için bir güncellemenin mevcut olup olmadığını kontrol etmek için yum check-update PACKAGENAME kullanın.

yum check-update wget

Tüm Paketlerin Güncellemesini Kontrol Etme

Herhangi bir paket adı vermezseniz, yani paket adını atlarsanız, yum sistemde yüklü olan her paket için güncellemeleri kontrol eder.

yum check-update

Paket Kaldırma

Yüklü bir paketi kaldırmak için yum remove PACKAGENAME kullanın; burada PACKAGENAME, kaldırmak istediğiniz paketin adıdır.

yum remove wget

Paket Hakkında Bilgi Alma

Sürüm, mimari, açıklama, boyut ve daha fazlası gibi bir paket hakkında bilgi almak için, bilgisini istediğiniz paketin adını yazmanız yeterlidir.

yum info firefox

Yeni Depo Ekleme

Yum için “repolar” /etc/yum.repos.d/ dizininde listelenir. 

ls /etc/yum.repos.d/

Ek olarak, kullanıcı tarafından yeni ek depolar eklenebilir. Manuel olarak ekleme yapılabilir. Ancak, depoları eklemenin veya yönetmenin önerilen yolu yum-config-manager aracıdır. Bir depo eklemek için –add-repo parametresini ve ardından URL’sini yazmanız yeterlidir.

yum-config-manager aracını kullanmak için,  yum-utils.noarch paketi yüklü olması gerekmektedir.

sudo yum install yum-utils.noarch

Tüm Depoların Listelenmesi

Mevcut tüm depoların bir listesini almak için yum repolist all kullanın. Aşağıdakine benzer bir çıktı elde edersiniz:

yum repolist all

Depo Etkinleştirme ve Devre Dışı Bırakma

Yazılımı yüklerken veya yükseltirken devre dışı bırakılan depolar göz ardı edilecektir. Bir depoyu etkinleştirmek veya devre dışı bırakmak için yum-config-manager yardımcı programını ve ardından repo id yani depo kimliğini kullanın.

yum repolist all yukarıdaki çıktıda gibi, depo kimliği her satırın ilk sütununda (depo kimliği) gösterilir. Örneğin:

Yukarıdaki çıktıda gibi, epel-debuginfo deposu kapalı gözükmektedir. Şimdi güncellemeleri etkinleştirelim.

yum-config-manager --enable epel-debuginfo

Yeniden devre dışı bırakmak için aşağıdaki gibi, disable konumuna çekebilirsiniz.

yum-config-manager --disable epel-debuginfo

Yerel Önbellek Temizleme

Yum, indirilen paketleri ve ilişkili meta verileri bir önbellek dizininde depolar. Genellikle dağıtıma göre /var/cache/yum veya dnf konumunda bulunur. Sistem yükseltildikçe ve yeni paketler yüklendikçe, bu önbellek oldukça büyüyebilir.

du -sh /var/cache/dnf

Önbelleği temizlemek ve disk alanını geri kazanmak için yum clean komutunu ve ardından neyi temizleneceğinizi seçmelisiniz. En kullanışlı parametreler packages yani indirilen paketleri silmek ve metadata ilişkili meta verileri silmektir.

yum clean packages
yum clean metada

DNF

dnf, Fedora’da kullanılan paket yönetim aracıdır ve yum’un bir çatalıdır. Bu nedenle, komutların ve parametrelerin çoğu benzerdir. Bu bölüm size dnf’ye hızlı bir genel bakış sağlayacaktır.

Paket Aramak

dnf search pattern, burada pattern aradığınız şeydir. Örneğin, dnf search p7zip, ad veya açıklamada p7zip kelimesini içeren tüm paketleri gösterecektir.

dnf search p7zip

Paket hakkında bilgi alma

dnf info PACKAGENAME , burada PACKAGENAME bilgisini almak istediğiniz paketin adıdır. 

dnf info unzip

Paketleri Yükleme

dnf ınstall PACKAGENAME , burada PACKAGENAME yüklemek istediğiniz paketin adıdır. Bir arama yaparak adı bulabilirsiniz.

dnf install unzip

Paketleri Kaldırma

dnf remove PACKAGENAME , burada PACKAGENAME kaldırmak istediğiniz paketin adıdır. 

dnf remove unzip

Paket Güncellemesi Kontrol Etme

Bir paketin adını atlarsanız, güncellemenin mevcut olduğu sistemdeki her paketi güncelleyebilirsiniz. Belirli bir paket için bir güncellemenin mevcut olup olmadığını kontrol etmek için dnf check-update PACKAGENAME kullanın.

dnf check-update wget

Tüm Paketlerin Güncellemesini Kontrol Etme

Herhangi bir paket adı vermezseniz, yani paket adını atlarsanız, dnf sistemde yüklü olan her paket için güncellemeleri kontrol eder.

dnf check-update

Paketleri Yükseltme

dnf yükseltme PACKAGENAME yalnızca bir paketi güncelleştirmek için. Sistemdeki tüm paketleri yükseltmek için paket adını atlayın.

dnf upgrade unzip

Tüm Paketleri Yükseltme

Sistemdeki tüm paketleri yükseltmek için herhangi bir paket adı vermeden dnf upgrade komutunu çalıştırın.

dnf upgrade

Yüklü Paketleri Listelemek

Sistemde yüklü olan tüm paketlerin bir listesini almak için aşağıdaki komutu çalıştırın.

dnf list --installed

Paket İçeriği

Bir paketin içeriğini detaylı olarak listelemek için aşağıdaki komutu çalıştırın.

dnf repoquery -l PACKAGENAME

dnf, her komut için daha fazla bilgi gösteren yerleşik bir yardım sistemine sahiptir. Kullanmak için dnf help yazın.

Depoları Listelemek

Tıpkı yum ve zypper’da olduğu gibi, dnf de yazılım depolarıyla (repolar) çalışır. Her dağıtımın varsayılan depoların bir listesi vardır ve yöneticiler gerektiğinde depo ekleyebilir veya kaldırabilir.

Mevcut tüm depoların bir listesini almak için dnf repolist‘i kullanın. Yalnızca etkinleştirilmiş depoları listelemek için –enabled seçeneğini ve yalnızca devre dışı bırakılmış depoları listelemek için –disabled seçeneğini ekleyin.

dnf repolist
dnf repolist --enabled
dnf repolist --disabled

Depoları Etkinleştirme ve Devredışı Bırakmak

Bir depo eklemek için dnf config-manager –add_repo URL’sini kullanın; burada URL, havuzun tam url’sidir. Bir depoyu etkinleştirmek için dnf config-manager –set-enabled REPO_İD kullanın.

dnf config-manager --set-enabled

Aynı şekilde, bir depoyu devre dışı bırakmak için dnf config-manager –set-disabled REPO_İD kullanın. Her iki durumda da REPO_İD , dnf repolist kullanarak alabileceğiniz depo için benzersiz kimliktir. Eklenen depolar varsayılan olarak etkindir.

dnf config-manager --set-disabled REPO_ID

Zypper

Zypper, SUSE Linux ve Opensuse’da kullanılan paket yönetim aracıdır. Özellik açısından, otomatik bağımlılık çözümlemesi ile bir sistemden paketleri yükleyebilme, güncelleyebilme ve kaldırabilme gibi işlemlerde apt ve yum paket yöneticilerine benzer.

Paket İndeksinin Güncellenmesi

Diğer paket yönetim araçları gibi zypper da paketler ve meta veriler içeren depolarla çalışır. Yardımcı programın mevcut en son paketleri bilmesi için bu meta verilerin zaman zaman yenilenmesi gerekir. Yenileme yapmak için şunu yazmanız yeterlidir:

zypper refresh

Paket İndeksinin Otomatik Güncellenmesi  

zypper, depo başına etkinleştirilebilen bir otomatik yenileme özelliğine sahiptir; bu, bazı depoların bir sorgu veya paket yüklemesinden önce otomatik olarak yenilenebileceği ve diğerlerinin manuel olarak yenilenmesi gerekebileceği anlamına gelir. 

Bu, modifyrepo operatörünün -f ile otomatik yenilemeyi etkinleştirebilir veya -F parametresi ile devredışı bırakmayı kontrol edilebilirsiniz.

Otomatik yenileme, ‘repo-non-oss’ deposu için devre için;

zypper modifyrepo -F repo-non-oss

Otomatik yenileme, ‘repo-non-oss’ deposu etkinleştirmek için;

zypper modifyrepo -f repo-non-oss

Paket Arama

Bir paketi aramak için search (veya se) operatörünü ve ardından paket adını kullanın:

zypper se gnumeric 
zypper search gnumeric 

Sistemdeki Paketleri Listelemek

Belirli bir paketin yüklü olup olmadığını görmek için search komutuna paket adını ekleyin. Örneğin, aşağıdaki komut yüklü paketler arasında adında “firefox” içeren herhangi birini arayacaktır.

zypper se -i firefox

Sistemdeki Tüm Paketleri Listelemek

Arama operatörü, sistemde kurulu tüm paketlerin bir listesini almak için de kullanılabilir. Bunu yapmak için, zypper se -i gibi paket adı olmadan -i parametresini kullanın.

zypper se -i 

Sistemde Yüklü Olmayan Paketi Listelemek

Yalnızca yüklenmemiş paketler arasında arama yapmak için bu işlece -u parametresini ekleyin.

zypper se -u firefox

Paket Güncellemelerini Kontrol Etme

Hiçbir şey yüklemeden yalnızca mevcut güncellemeleri listelemek istiyorsanız, zypper list-updates’i kullanabilirsiniz.

zypper list-updates

Paketleri Güncellemek

Sistemde yüklü paketleri güncellemek için zypper güncellemesini kullanın. Yükleme işleminde olduğu gibi, bu, devam etmek isteyip istemediğinizi sormadan önce yüklenecek / yükseltilecek paketlerin bir listesini gösterecektir.

zypper update

Paket Yükleme

Bir yazılım paketi yüklemek için install (veya in) operatörünü ve ardından paket adını kullanın. 

zypper in unrar

Paket Kaldırma

Bir paketi kaldırmak için remove (veya rm) operatörünü ve ardından paket adını kullanın:

zypper rm unrar

Bir paketi kaldırmanın, ona bağlı diğer paketleri de kaldırdığını unutmayın.

Paket Bilgilerini Alma

Bir paketle ilişkili meta verileri görmek için info operatörü ve ardından paket adını kullanın. Bu size kaynak deposu, paket adı, sürüm, mimari, satıcı, kurulu boyut, kurulu olup olmadığı, durumu (güncel ise), kaynak paketi ve bir açıklama sağlayacaktır.

zypper info unrar

Hangi Paketlerin Belirli Bir Dosya İçerdiğini Bulma

Hangi paketlerin belirli bir dosyayı içerdiğini görmek için search operatörünü ve ardından –provides parametresini ve dosyanın adını (veya dosyanın tam yolunu) kullanın. 

zypper se --provides /usr/lib64/libgimpmodule-2.0.so.0

Depoları Listelemek

zypper yazılımı havuzlarını yönetmek için de kullanılabilir. Şu anda sisteminizde kayıtlı olan tüm depoların bir listesini görmek için şunu kullanın.

zypper repos

Depo Ekleme ve Kaldırma

Zypper için yeni bir yazılım deposu eklemek için addrepo operatörünü ve ardından aşağıdaki gibi depo URL’sini ve depo adını kullanın.

zypper addrepo http://packman.inode.at/suse/openSUSE_Leap_15.1/ packman

Depo eklerken -f parametresiyle otomatik güncelleştirmeleri etkinleştirebilirsiniz. Eklenen depolar varsayılan olarak etkindir, ancak -d parametresini kullanarak bir depoyu aynı anda ekleyebilir ve devre dışı bırakabilirsiniz.

Bir depoyu kaldırmak için removerepo operatörünü ve ardından depo adını (alias) kullanın. Yukarıdaki örnekte eklenen depoyu kaldırmak için komut şu şekilde olacaktır.

zypper removerepo packman

Depoları Etkinleştirme ve Devredışı Bırakmak

Depoları listeledikten sonra enabled sütununda bazı depoların etkin olduğunu, diğerlerinin etkin olmadığını görebilirsiniz. Bunu modifyrepo operatörü kullanarak, ardından -e (etkinleştir) ve -d (devre dışı bırak) parametresi ve depo diğer adıyla değiştirebilirsiniz.

Alias kısmında yazdığı gibi repo-non-oss deposunu aşağıdaki gibi devre dışı bırakabilirsiniz.

zypper modifyrepo -d repo-non-oss

Veya repo-non-oss deposunu aşağıdaki gibi etkinleştirebilirsiniz.

zypper modifyrepo -e repo-non-oss

102.6 Sanallaştırma Konuğu Olarak Linux

  • Anahtar bilgi alanları
  • Sanal makineler ve kapsayıcıların genel konseptini anlayın
  • Bilgi işlem örnekleri, blok depolama ve ağ oluşturma gibi bir IaaS bulutundaki sanal makinelerin ortak öğelerini anlayın
  • Bir sistem klonlandığında veya şablon olarak kullanıldığında değişmesi gereken bir Linux sisteminin benzersiz özelliklerini anlama
  • Sanal makineleri, bulut örneklerini ve kapsayıcıları dağıtmak için sistem görüntülerinin nasıl kullanıldığını anlayın
  • Linux’u bir sanallaştırma ürünüyle bütünleştiren Linux uzantılarını anlayın
  • Cloud-init farkındalığı

Kullanılan dosyaların, terimlerin ve yardımcı programların kısmi listesi

  • Sanal makine
  • Linux kapsayıcısı
  • Uygulama kapsayıcısı
  • Konuk sürücüler
  • SSH ana bilgisayar anahtarları
  • D-Bus makine kimliği

Linux’un en güçlü yanlarından biri çok yönlülüğüdür. Bu çok yönlülüğün bir yönü, Linux’u diğer işletim sistemlerini veya bireysel uygulamaları tamamen yalıtılmış ve güvenli bir ortamda barındırmanın bir yolu olarak kullanma yeteneğidir. Bu ders, sanallaştırma ve kapsayıcı teknolojileri kavramlarının yanı sıra bir sanal makineyi bir bulut platformuna dağıtırken dikkate alınması gereken bazı teknik ayrıntılara odaklanacaktır.

Sanallaştırmaya Genel Bakış

Sanallaştırma, hipervizör adı verilen bir yazılım platformunun tamamen öykünülmüş bir bilgisayar sistemi içeren işlemleri çalıştırmasına izin veren bir teknolojidir. Hiper yönetici, tek tek sanal makineler tarafından kullanılabilecek fiziksel donanımın kaynaklarını yönetmekten sorumludur. Bu sanal makinelere hipervizörün konukları denir. Sanal makine, bir sistemin BIOS’u ve sabit sürücü disk denetleyicileri gibi yazılımda öykünülen fiziksel bir bilgisayarın birçok yönüne sahiptir. Bir sanal makine genellikle tek tek dosyalar olarak depolanan sabit disk görüntülerini kullanır ve hiper yönetici yazılımı aracılığıyla ana makinenin ram’ine ve cpu’suna erişebilir. Hipervizör, ana sistemin donanım kaynaklarına erişimi misafirler arasında ayırır ve böylece birden fazla işletim sisteminin tek bir ana sistemde çalışmasına izin verir.

Linux için yaygın olarak kullanılan hipervizörler şunları içerir:

  • Xen

Xen, açık kaynaklı bir Tip-1 hipervizörüdür, yani çalışması için temel bir işletim sistemine dayanmaz. Bu tür bir hipervizör, bilgisayar doğrudan hipervizöre önyükleme yapabildiğinden çıplak metal hipervizör olarak bilinir.

  • KVM

Çekirdek Sanal Makinesi, sanallaştırma için bir Linux çekirdek modülüdür. KVM, hem Tip-1 hem de Tip-2 hipervizörünün bir hipervizörüdür, çünkü çalışması için genel bir Linux işletim sistemine ihtiyaç duymasına rağmen, çalışan bir Linux kurulumuyla entegre olarak mükemmel bir şekilde hipervizör olarak performans gösterebilir. KVM ile dağıtılan sanal makineler, oluşturulacak ve yönetilecek libvirt arka planını ve ilişkili yazılım yardımcı programlarını kullanır.

  • Virtualbox

Sanal makineler oluşturmayı ve yönetmeyi kolaylaştıran popüler bir masaüstü uygulaması. Oracle VM VirtualBox çapraz platformdur ve Linux, macOS ve Microsoft Windows üzerinde çalışacaktır. Virtualbox’ın çalışması için temel bir işletim sistemi gerektirdiğinden, bu bir Tip-2 hipervizörüdür.

Bazı hipervizörler, bir sanal makinenin dinamik olarak yeniden konumlandırılmasına izin verir. Sanal makineyi bir hipervizör kurulumundan diğerine taşıma işlemine geçiş denir ve ilgili teknikler hipervizör uygulamaları arasında farklılık gösterir. Bazı geçişler yalnızca konuk sistemi tamamen kapatıldığında, bazıları ise konuk çalışırken gerçekleştirilebilir (canlı geçiş olarak adlandırılır). Bu tür teknikler, hipervizörler için bakım pencereleri sırasında veya bir hipervizör işlevsel olmadığında ve konuk çalışan bir hipervizöre taşınabildiğinde sistem esnekliği için yardımcı olabilir.

Sanal Makine Türleri

Üç ana sanal makine türü vardır:

  • Fully Virtualized

Konuk işletim sisteminin yürütmesi beklenen tüm yönergeler, tamamen sanallaştırılmış bir işletim sistemi yüklemesi içinde çalışabilmelidir. Bunun nedeni, talimatları simüle edilmiş veya gerçek donanıma çevirmek için konuk içinde ek yazılım sürücülerinin yüklü olmamasıdır. Tamamen sanallaştırılmış bir konuk, çalışan bir sanal makine örneği olduğunun farkında olmadığı bir konuktur. Bu tür sanallaştırmanın x86 tabanlı donanımda gerçekleşmesi için, hipervizörün kurulu olduğu sistemde Intel VT-x veya AMD-V CPU uzantılarının etkinleştirilmesi gerekir. Bu, bir BIOS veya UEFI ürün yazılımı yapılandırma menüsünden yapılabilir.

  • Paravirtualize

Paravirtualized konuk (veya PVM), konuk işletim sisteminin çalışan bir sanal makine örneği olduğunun farkında olduğu yerdir. Bu tür konuklar, konuk işletim sisteminin hipervizörün yazılım ve donanım kaynaklarını kullanmasına yardımcı olacak değiştirilmiş bir çekirdek ve özel sürücüler  kullanacaktır. Paravirtualize edilmiş bir konuğun performansı, bu yazılım sürücülerinin sağladığı avantaj nedeniyle genellikle tamamen sanallaştırılmış konuğun performansından daha iyidir.

  • Hybrid

Paravirtualization ve tam sanallaştırma, tamamen sanallaştırılmış işletim sistemlerinde paravirtualized sürücüleri kullanarak değiştirilmemiş işletim sistemlerinin neredeyse yerel G/Ç performansı almasına izin vermek için birleştirilebilir. Paravirtualized sürücüler, gelişmiş disk ve ağ G/Ç performansına sahip depolama ve ağ aygıtı sürücüleri içerir.

Sanallaştırma platformları genellikle sanallaştırılmış işletim sistemleri için paketlenmiş konuk sürücüler sağlar. KVM, Virtio projesindeki sürücüleri kullanırken Oracle VM VirtualBox, indirilebilir bir ISO CD-ROM görüntü dosyasından erişilebilen Konuk Uzantılarını kullanır.

Örnek libvirt(KVM) Sanal Makine

Bu bölümü uygulamalı gerçekleştirmek için, KVM kurulu olması gerekmektedir.

Libvirt tarafından yönetilen ve KVM hipervizörünü kullanan örnek bir sanal makineye bakacağız. Sanal makine genellikle bir grup dosyadan oluşur, öncelikle sanal makineyi tanımlayan bir XML dosyası (donanım yapılandırması, ağ bağlantısı, görüntüleme yetenekleri ve daha fazlası gibi) ve işletim sisteminin ve yazılımının kurulumunu içeren ilişkili bir sabit disk görüntü dosyasından oluşur.

Öncelikle sanal makine ve ağ ortamı için örnek bir XML yapılandırma dosyasını incelemeye başlayalım:

ls /etc/libvirt/qemu

Dizin yolunun qemu kısmı, KVM tabanlı sanal makinelerin dayandığı temel yazılımı ifade eder. QEMU projesi, hipervizörün disk denetleyicileri, ana CPU’ya erişim, ağ kartı öykünmesi ve daha fazlası gibi sanal makinenin kullanacağı donanım aygıtlarını taklit etmesi için yazılım sağlar.

Networks adlı bir dizin olduğunu unutmayın. Bu dizin, sanal makinelerin kullanabileceği ağ yapılandırmaları oluşturan tanım dosyalarını (XML kullanarak da) içerir. Bu hiper yönetici yalnızca bir ağ kullanıyor ve bu nedenle, bu sistemlerin kullanacağı bir sanal ağ segmenti için yapılandırma içeren yalnızca bir tanım dosyası var.

ls -l /etc/libvirt/qemu/networks/

Bu tanım, bir C Sınıfı özel ağ ve bu ağ için yönlendirici görevi görecek öykünülmüş bir donanım aygıtı içerir. Ayrıca, hipervizörün bu ağı kullanan sanal makinelere atanabilecek bir DHCP sunucusu uygulamasıyla kullanması için bir dizi IP adresi vardır. Bu ağ yapılandırması, paketleri hipervizörün lan’ı gibi diğer ağlara iletmek için ağ adresi çevirisini (NAT) de kullanır.

Şimdi dikkatimizi Centos 7 sanal makine tanım dosyasına çeviriyoruz. Çıktı çok uzun olduğu için biraz filtreleme yaptım.

sudo grep -iE "name|memory|vcpu|mac|input type|source network|disk type" /etc/libvirt/qemu/mehmetoz_centos7.0.xml |grep -v timer*

Bu dosya, kendisine atayacağı RAM miktarı, konuğun erişebileceği hipervizörden gelen CPU çekirdeği sayısı, bu konukla ilişkili sabit disk görüntü dosyası  gibi bu konuk tarafından kullanılan bir dizi donanım ayarını tanımlar, görüntüleme yetenekleri  ve konuğun USB aygıtlarına erişiminin yanı sıra öykünülmüş klavye ve fare girişi ayarlarınıda içerir.

Örnek Sanal Makine Disk Depolama

Bu sanal makinenin sabit disk görüntüsü /var/lib/libvirt/images/ adresinde bulunur. İşte bu hipervizördeki disk görüntüsünün kendisi.

sudo ls -lh /var/lib/libvirt/images/

Bu disk görüntüsünün geçerli boyutu, hipervizörde yalnızca 11 GB alan tüketebilecektir. Ancak, disk görüntüsü görselde gözüktüğü gibi cow türü olduğu için  disk boyutu yalnızca diske yeni veriler yazıldıkça artar. Eğer disk görüntüsünü raw türü olarak ayarlasaydınız,  tüm alanı önceden ayrılacaktı . Örneğin, 10 GB’lık bir ham disk görüntü dosyası, hiper yöneticide 10 GB’lık gerçek disk alanı tüketecekti.

Sanal Makine Şablonlarıyla Çalışma

Sanal makineler genellikle yalnızca bir hiper yönetici üzerinde çalışan dosyalar olduğundan, belirli dağıtım senaryoları için özelleştirilebilecek şablonlar oluşturmak kolaydır. Genellikle bir sanal makine, temel bir işletim sistemi kurulumuna ve gelecekteki sistem başlatmalarını kolaylaştırmak için önceden yapılandırılmış bazı kimlik doğrulama yapılandırma ayarlarına sahip olur. Bu, temel paket kurulumu ve yerel ayar ayarları gibi sık sık tekrarlanan iş miktarını azaltarak yeni bir sistem oluşturmak için gereken süreyi kısaltır.

Bu sanal makine şablonu daha sonra yeni bir konuk sistemine kopyalanabilir. Bu durumda, yeni konuğun adı değiştirilir, ağ arabirimi için yeni bir MAC adresi oluşturulur ve kullanım amacına bağlı olarak başka değişiklikler yapılabilir.

DBus Makine Kimliği

Birçok Linux yüklemesi, yükleme sırasında oluşturulan ve D-Bus makine kimliği adı verilen bir makine kimlik numarasını kullanır. Ancak, bir sanal makine diğer sanal makine yüklemeleri için şablon olarak kullanılmak üzere klonlanırsa, hipervizörden gelen sistem kaynaklarının uygun konuk sistemine yönlendirilmesini sağlamak için yeni bir D-Bus makine kimliğinin oluşturulması gerekir.

Çalışan sistem için bir D-Bus makine kimliğinin var olduğunu doğrulamak için aşağıdaki komut kullanılabilir.

dbus-uuidgen --ensure

Hiçbir hata iletisi görüntülenmezse, sistem için bir kimlik bulunur. Geçerli DBus makine kimliğini görüntülemek için aşağıdakileri çalıştırın.

dbus-uuidgen --get 

Görüntülenen metin dizesi geçerli kimlik numarasıdır. Bir hipervizörde çalışan iki Linux sistemi aynı DBus makine kimliğine sahip olmamalıdır.

D-Bus makine kimliği /var/lib/dbus/machine-ıd adresinde bulunur ve sembolik olarak /etc/machine-ıd ile bağlantılıdır. Çalışan bir sistemde bu kimlik numarasının değiştirilmesi, sistem kararsızlığı ve çökmelerin meydana gelmesi muhtemel olduğundan önerilmez. İki sanal makine aynı D-Bus makine kimliğine sahipse, yeni bir tane oluşturmak için aşağıdaki yordamı izleyin:

sudo rm -f /etc/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id 

/var/lib/dbus/machine-ıd öğesinin /etc/machine-ıd öğesine sembolik bir bağlantı olmaması durumunda, /var/lib/dbus/machine-ıd öğesinin kaldırılması gerekir.

Sanal Makineleri Buluta Dağıtma

Hiper yönetici sistemlerini çalıştıran ve bir kuruluş için sanal konuk görüntüleri dağıtabilen çok sayıda IaaS (hizmet olarak altyapı) sağlayıcısı mevcuttur. Hemen hemen tüm bu sağlayıcılar, bir yöneticinin çeşitli Linux dağıtımlarına dayalı özel sanal makineler oluşturmasına, dağıtmasına ve yapılandırmasına olanak tanıyan araçlara sahiptir. Bu şirketlerin çoğunda, bir müşterinin kuruluşundan oluşturulan sanal makinelerin konuşlandırılmasına ve taşınmasına izin veren sistemler de vardır.

Bir Linux sisteminin bir IaaS ortamında dağıtımını değerlendirirken, bir yöneticinin bilmesi gereken bazı temel unsurlar vardır:

  • Computing Instances

Birçok bulut sağlayıcısı veya bulut tabanlı altyapınızın ne kadar CPU süresi kullanacağına bağlı olarak kullanım oranları talep edecektir. Uygulamaların gerçekte ne kadar işlem süresine ihtiyaç duyacağının dikkatli bir şekilde planlanması, bir bulut çözümünün maliyetlerini yönetilebilir tutmaya yardımcı olacaktır.

Bilgi işlem örnekleri genellikle bir bulut ortamında sağlanan sanal makinelerin sayısını da ifade eder. Yine, aynı anda çalışan sistemlerin daha fazla örneği, bir kuruluşun toplam CPU süresinin ne kadar ücretlendirileceğini de hesaba katacaktır.

  • Block Storage

Bulut sağlayıcıları ayrıca bir kuruluşun kullanabileceği çeşitli blok depolama düzeylerine sahiptir. Bazı tekliflerin yalnızca dosyalar için web tabanlı ağ depolama alanı olması amaçlanmıştır ve diğer teklifler, bulut tarafından sağlanan bir sanal makinenin dosyaları barındırmak için kullanabileceği harici depolama alanıyla ilgilidir.

Bu tür tekliflerin maliyeti, kullanılan depolama miktarına ve sağlayıcının veri merkezlerindeki depolama hızına bağlı olarak değişecektir. Daha hızlı depolama erişimi genellikle daha pahalıya mal olur ve bunun tersine veriler (arşiv depolamada olduğu gibi) genellikle çok ucuzdur.

  • Networking

Bir bulut çözümleri sağlayıcısıyla çalışmanın ana bileşenlerinden biri, sanal ağın nasıl yapılandırılacağıdır. Birçok IaaS sağlayıcısı, farklı ağ yollarının, alt ağların ve güvenlik duvarı yapılandırmalarının tasarımı ve uygulanması için kullanılabilecek bir tür web tabanlı yardımcı programa sahip olacaktır. Hatta bazıları, internete bakan sistemlerinize herkese açık FQDN (tam nitelikli alan adları) atanabilmesi için DNS çözümleri bile sağlayacaktır. Mevcut, şirket içi bir ağ altyapısını bir VPN (sanal özel ağ) aracılığıyla bulut tabanlı bir altyapıya bağlayabilen ve böylece iki altyapıyı birbirine bağlayabilen “hibrit” çözümler bile mevcuttur.

Bir bulut platformunda uzak bir sanal konuğa erişmek için kullanılan en yaygın yöntem, OpenSSH yazılımının kullanılmasıdır. Bulutta bulunan bir Linux sistemi OpenSSH sunucusunu çalıştırırken, bir yönetici uzaktan erişim için önceden paylaşılan anahtarlara sahip bir OpenSSH istemcisi kullanır.

Konteynerler

Kapsayıcı teknolojisi, bazı yönlerden, bir uygulamayı kolayca dağıtmak için yalıtılmış bir ortam elde ettiğiniz sanal makineye benzer. Sanal bir makinede tüm bir bilgisayar taklit edilirken, bir kapsayıcı bir uygulamayı çalıştırmak için yeterli yazılımı kullanır. Bu şekilde, çok daha az ek yük vardır.

Kapsayıcılar, sanal makineninkine göre daha fazla esneklik sağlar. Sanal makine bir hipervizörden diğerine geçirilebileceği gibi, bir uygulama kapsayıcısı da bir ana bilgisayardan diğerine geçirilebilir. Bununla birlikte, bazen bir sanal makinenin taşınabilmesi için önce kapatılması gerekirken, bir kapsayıcıyla uygulama taşınırken her zaman çalışır. Kapsayıcılar, uygulamaların yeni sürümlerini mevcut bir sürümle birlikte dağıtmayı da kolaylaştırır. Kullanıcılar oturumlarını çalışan kapsayıcılarla kapattıkça, bu kapsayıcılar kapsayıcı düzenleme yazılımı tarafından sistemden otomatik olarak kaldırılabilir ve yeni sürümle değiştirilebilir, böylece kesinti süresi azaltılabilir.

Linux için Docker, Kubernetes, LXD / LXC, systemd-nspawn, OpenShift ve daha fazlası gibi çok sayıda kapsayıcı teknolojisi mevcuttur. 

Kapsayıcılar, Linux çekirdeği içindeki kontrol grupları  mekanizmasını kullanır. Cgroup, tek bir uygulama için bellek, işlemci süresi, disk ve ağ bant genişliği gibi sistem kaynaklarını bölümlere ayırmanın bir yoludur. Bir yönetici, bir uygulamada veya tek bir cgroup içinde bulunabilecek bir uygulama grubunda sistem kaynağı sınırlarını ayarlamak için doğrudan cgroups kullanabilir. Temel olarak, kapsayıcı yazılımının yönetici için yaptığı şey budur ve cgroup’ların yönetimini ve dağıtımını kolaylaştıran araçlar sağlar.

Cgroup kavramı bilgi amaçlı paylaşılmıştır. En azından bir uygulamanın sistem kaynağı kullanımı nasıl ayrıldığına dair araştırmalar yapabilirsiniz.

LPIC-1 ikinci modülünde 100 sayfaya ulaştık 🙂 LVM, Ext4, swap, Grub, Paket Yöneticileri, Kütüphanele ve Sanallaştırma gibi bir çok konuyu işledik. Umarım faydalı olmuştur. LPIC-1 üçüncü modülünde görüşmek dileğiyle. Sağlıcakla kalın.

İlgili Makaleler

5 Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu