Package Management Introduction

Bu yazımda Linux dünyasında kullanılan package management tool’larına değineceğim. Öncelikle Debian ve Red Hat farkını açıklamak gereklidir.

Red Hat

Red Hat IBM firması tarafından geliştirilen bir işletim sistemidir. Dağıtımları aşağıdaki şekildedir.

  • Red Hat Enterprise Linux(Paid Version)
  • Fedora
  • CentOS (Commuınity Version)

Debian

Debian GNU/Hurd ve GNU/Linux gibi farklı çekirdek seçeneklerine bağlı özgür bir Linux dağıtımıdır. Aşağıdaki bazı dağıtımlar örnek verilebilir.

  • Debian
  • Linux Mint
  • Ubuntu
DPKG/APT
DebianUbuntu
RPM
RedhatCentOS

Linux sistemlerini kategorize etmenin bir yolu kullandığı package management sistemidir.

RPM Based Distribution

Red Hat ailesi tarafından kullanılan paket yöneticisi Red Hat Package Manager dır. Paketler .RPM uzantılıdır.

Debian ailesi örneğin ubuntu, Arch Linux, Linux Mint Debian Package Manager kullanmaktadır. Paketler .DEB uzantılıdır.

Peki Nedir Bu Paketler?

Bir paket compressed bir arşiv dosyasıdır ve bir program için tüm dosyaları, binaries, metadata(yazılım hakkında bilgi verir) ve configuration files ları içermektedir. Yüzlerce Linux distro su vardır ve bu distrolar farklı toollar ve libariesler kullanır. Bunun sonucu olarak bir sistemde çalışan bir program başka bir sistemde çalışmayabilir. Bu sorunu çözmek için package ler manifest, dependencies, list of programs, ve version içermektedir.

Package Manager

Package Manager bir Software olarak Linux üzerinde tutarlı ve otomatik olarak installing, upgrading configuring ve package lerin sistemden kaldırılmasına olanak sağlamaktadır. Aşağıdaki görevleri yerine getirmektedir.

  • Paket bütünlüğü ve Özgünlük
  • Basitleştirilmiş package yönetimi
  • Package Grouping
  • Dependencies Yönetimi(En önemli özelliklerinden biri budur)

  • DPKG-> low-level Debian-based Package Manager
  • APT-> high-level Debian-based Package Manager(daha kullanıcı dostu APT-GET ile karşılaştırırsak)
  • APT-GET->high-level Debian-based Package Manager
  • RPM-> low-level Red Hat-based Package Manager
  • YUM->high-level Red Hat-based Package Manager

RPM(Red Hat Package Manager)

5 farklı moda sahiptir. Burada dikkat edilmesi gereken nokta RPM in dependenciess ler ile ilgilenmiyor oluşudur. Bu yüzden Higher Level Package Manager ler günümüzde kullanılmaktadır örneğin YUM.

Bazı RPM komutları

install package

rpm -ivh telnet.rpm

-i= install

-v=verbose

Uninstall package

rpm -e telnet.rpm

Update Package

rpm -Uvh telnet.rpm

Get details about installed package

rpm -q telnet.rpm

Verify Package

rpm -Vf  <path to file>

YUM

Yellowdog Updater Modified anlamına gelmektedir. RPM tabanlı Linux sistemlerinde çalışan bir Package Manager dır. YUM software repositoriesler ile birlikte çalışır. High Level bir Package Manager dır. RPM in aksine Dependencies ler ile karmaşıklığı ortadan kaldırır. Gerekli olanları yükler

Bazı YUM Komoutları

yum install httpd ->kurulum içindir

yum repolist->sistemdeki eklenmiş olan tüm repoları gösterecektir.

yum provide scp->Bir paketi kurmak için hangi bağlılıklar gerekiyor onu gösterir.

yum remove httpd->Uygulamayı kaldırır

yum update telnet->Uygulamayı update eder

yum update -> Tüm paketleri update eder

APT

High Level bir Package Manager dır. Debian tabanlı Linux dağıtımlarında çalışmaktadır. APT-GET e göre daha user friendly bir tooldur. Aşağıdaki görselde görüldüğü üzere daha sade bir output vermektedir

Verebileceğimiz bir diğer örnek ise repo larda arama yaparken apt-get in karışık bir output vermesi örnek gösterilebilir

Bash Shell Special Parameters

Shell’in özel anlam yüklediği değişkenler Special Parameter olarak bilinmektedir.

Bu parametrelerin değerleri mevcut script’e göre hesaplanmaktadır.

Değiştirilemezler bu yüzden tuttukları verilere güvenebiliriz.Bu yazıda Special Parameter’lerin birkaçına değineceğiz.

Diğer parametreler için aşağıdaki bağlantıyı ziyaret edebilirsiniz

Bash Reference Manual

$#

Script’imize kaç positional parameter sağlandığını bu variable yardımıyla görebiliriz.

echo $#   #kaç positional parameter sağlandı?

$0

Çalışmakta olan mevcut script için script adını ekrana hata basarken kullanmamızı sağlar. Aşağıdaki script için 2 positional parameter sağlanması gerekmektedir. $# ile sağlanan parameter count’u bulunmuştur. If bloğu ile 2 ye eşit olup olmadığı kontrol edilmiştir. $0 special parameter ile scriptin adı ve tam yolu belirtilmiştir.

#!/bin/bash
if [[ $# -ne 2 ]]; then
        echo "You didnt enter exactly 2 parameters"
        echo "Usage: $0 <file1> <file2>"
        exit 1 #non zero therefore it indicates error
fi

$?

Son çalıştırılan command için exit status kodunu döndürür. Exit değeri success bir command için 0 dır. Hata ile tamamlanan command ler için 0 dan büyük değerlerdir.

bugra@ubuntu:~/bash_course$ eechof
eechof: command not found
bugra@ubuntu:~/bash_course$ $?
127: command not found

$@

Script çalıştırılırken gönderilen tüm arguments lere erişimemize sağlar. Değerler <space> ile ayrılmışlardır.

#!/bin/bash
if [[ $# -ne 2 ]]; then
        echo "You didnt enter exactly 2 parameters"
        echo "Usage: $0 <file1> <file2>"
        exit 1
fi
echo $@

“$@”

Aşağıdaki şekildeki gibi çıktı üretmemizi sağlar. Gönderilen arguments’ler “word splitting” işlemine tabi tutulmayacaktır.

“$1” “$2” “$3″…..  “$N”

$@ Special parameter word splitting işleminden dolayı aşağıdaki kod bloğunda ” ” içine alınmış arguments lerin her biri için ayrı bir dosya oluşturacaktır. Oluşan dosyalar hello, world, so, smile olacaktır.

touch $@ #script içerisinde yer alan kod satırı
bugra@ubuntu:~/bash_course$ ./special.sh "hello world" "so smile"

Bunun önüne geçmek için “$@” special parameter kullanabiliriz

touch "$@"

$*

$@ Special Paramter ile tamamen aynı işi yapmaktadır.

“$*”

Gönderilen tüm argument leri boşluk ile ayırmak yerine , ile ayıracaktır. Bu parametreyi kullanabilmemiz için word splitting için kullanılan değişkenimize(IFS) “,” atamalıyız

#!/bin/bash
IFS=","
echo  "$*"

Printer Auto Configuration

Bu örnekte IT departmanına sıklıkla gelen printer tanımlama taleplerini PowerShell otomasyonu ile nasıl daha kolay hale getirebileceğimize değineceğiz. Özellikle yeni işe girişlerde bu talebin gelmesi kaçınılmazdır. Kullanıcıdan IP bilgisini öğrenmeyi deneyebiliriz. Eğer kullanıcı IP adresini bilmiyor ise referans bir kullanıcı isteyip onun bilgisayarına bağlanıp IP yi bulduktan sonra diğer kullanıcıya ekleyebiliriz. Fakat tüm bu işlemler zaman kaybına yol açmakta ve bir iş yükü yaratmaktadır. 

Bunu yapmak yerine tüm yazıcıları Print Server’ımıza belirli bir kimlik vererek ekleriz. Bu kimlik seri numarasının veya MAC adresinin son birkaç hanesinden oluşabilir. Yazıcıların üzerine bu kimlik numarasını son kullanıcın görebileceği şekilde ekleriz. Kullanıcı bilgisayarına GPO ile gönderilen bu küçük Tool’u çalıştırıp Printer’a ait kimlik numarasını yazdığında Script otomatik olarak Print Server’a gidip bu yazıcıyı Add-Printer komutu ile bilgisayara ekleyecektir. 

$userinput = Read-Host -Prompt ‘Printer kimliğini giriniz’ 

$path="\\10.10.10.5\"+$userinput 	 #PrintServer IP imiz    

Add-Printer -ConnectionName $path.  #Printer Ekleme komutumuz 

echo "printer başarı ile eklendi" 

Kaynak kod aşağıdaki şekildedir. 

Tool’un oluşturulmasında Win PS2Exe adlı araç kullanılmıştır.