SSH veya SCP nin birden fazla makinede çalıştırılması

Eğer sizde benim gibi birden fazla Debian GNU/Linux çalıştırıyorsanız ve zaman zaman tüm bu makineler için bir veya birkaç komutu çalıştırmanız gerekiyordur. Tüm makineler üzerinde aynı komutu çalıştırmanın çeşitli yolları vardır, tüm makinelere bağlanıp elle çalıştırmak gibi, veya daha karmaşık çözümleri kullanmak gibi; CFEngine veya Puppet. Bunların arasında yazdığınız tek komutu tüm makinlerde çalıştırmak için pssh kullanabilirsiniz.

pssh paketi size bu çözümü sunun bir araçtır, SSH bağlantılarını birden fazla makinede paralel olarak kullanmanıza izin veririr.

Debian paket deposunu araştırdığınızda benzer birçok çözümü görebilirsiniz:

me@home:~$ apt-cache search cluster ssh
clusterssh - administer multiple ssh or rsh shells simultaneously
dish - the diligence/distributed shell for parallel sysadmin
dsh - dancer's shell, or distributed shell
kanif - cluster management and administration swiss army knife
libtaktuk2 - C bindings for taktuk
libtaktuk2-dev - C bindings for taktuk (development files)
pssh - Parallel versions of SSH-based tools
taktuk - efficient, large scale, parallel remote execution of commands

Öncelikle pssh paketini yükleyelim. Bu paket ile birlikte birkaç yeni komut gelir.

# apt-get install pssh

parallel-slurp
Bu komut birden fazla uzak makineden dosyaların yerel sisteminize kopyalamınızı sağlar. Kısaca bunun kullanımını aşağıda göstereceğim.

parallel-ssh
Bu komut yerel makinenizde yazmış olduğunuz komutun paralel olarak uzak sistemlerde çalışmasını sağlar. Bunu komutunda kullanımını aşağıda kısaca göstereceğim.

parallel-nuke
Bu komut birden fazla uzak sistemde işlemlern öldürülmesini sağlar.

parallel-scp
Bu komut parallel-slurp ‘un tersidir ve birden fazla uzak sisteme dosya, veya dosyalar, kopyalamayı sağlar.

Genel Kullanım
pssh paketi ile birlikte yüklenen herbir yeni komut bir text dosyasnda bulunan listedeki makine isimlerini okur. Bu otomatik kullanım biraz komut-satırı çözümleme işlemini kolaylaştırmak için yapılmıştır.

Birden fazla makine üzerinde konut çalıştırılması
En basit kullanım; herbir makine üzerinde basitçe çalıştırmak ve rapor çıktısı almamaktır. Örneğin hosts.txt ,dosyada verilen numara ve makine ismi vardır, dosyasını çalıştırmak:

me@home:~$ parallel-ssh -h hosts.txt uptime

[1] 18:29:35 [SUCCESS] gold.my.flat 22
[2] 18:29:35 [SUCCESS] silver.my.flat 22

Bu komut “uptime” komut çıktısını bizim istediğimiz gibi bize göstermez. İstediğimiz gibi bir çıktı almak için “-i” (inline) flag (bayrak) eklememiz gerekmektedir:

me@home:~$ parallel-ssh -i -h hosts.txt uptime

[1] 18:30:29 [SUCCESS] gold.my.flat 22
 18:30:29 up 36 days,  5:21,  5 users,  load average: 0.39, 0.24, 0.23
[2] 18:30:29 [SUCCESS] silver.my.flat 22
 18:30:29 up 36 days,  4:45,  1 user,  load average: 0.04, 0.02, 0.00

En basit komutlar için  bu iyi bir çözümdür fakat bazı zaman mümkün olan tüm çıktıları toplamak istediğiniz zaman bu yeterli olmaz. Burada çıktı (output) parametresini de kullanmanız gerkmektedir. Basitçe çıktı (output) ” -o path” dir.  Herbir sistem için çıktılar aşağıdaki şekilde dosyaya yazılır.

me@home:~$ parallel-ssh -o uptime.out -h hosts.txt uptime

[1] 18:32:30 [SUCCESS] gold.my.flat 22
[2] 18:32:30 [SUCCESS] silver.my.flat 22
me@home:~$ ls uptime.output/
gold.my.flat  silver.my.flat
me@home:~$ cat uptime.out/silver.my.flat
 18:32:30 up 36 days,  4:47,  1 user,  load average: 0.00, 0.01, 0.00

Burada sizin kullanbileceğiniz birçok seçenek vardır. örneğin bağlanılan kullanıcı adları ve farklı port numaraları kullanımı gibi. Seçenekleri görmek için parallel-ssh komutunu hiçbir parametre olmadan kullanmanız yeterlidir.

Birden fazla makineden dosya kopyalanması
Kopyalanan dosyaların çalışması gösterdiğimiz komutların çalışması gibidir. Sadece farkı yerel dizini özellikle belirtmenizdir, böylelikle uzak sistemden kopyalanan dosya tekrar üzerine yazılmaz.

Böylece, /etc/motd dosyasını herbir  hosts.txt dosyamızdan kendi sistemimize kopyalayarak çalıştırırız.

me@home:~$ parallel-slurp -h hosts.txt  -L local.dir /etc/motd  motd
[1] 18:39:39 [SUCCESS] gold.my.flat 22
[2] 18:39:39 [SUCCESS] silver.my.flat 22

Bu bize /etc/motd dosyasını local.dir dizini içerisinde  motd adı ile adlandırarak kendi sistemimize kopyalar.

me@home:~$ tree local.dir/
local.dir/
|-- gold.my.flat
|   `-- motd
`-- silver.my.flat
    `-- motd

2 directories, 2 files

Yukarıda  gördüğünüz gibi kopyaladığımız yerdeki herbir makine adı için bir seviye alt kategori oluşturulmuştur.

Bu aracı verimli bir şekilde kullanmak için birçok seçenek vardır, biraz manuel dokumanına bakarak işinize yarayan birçok özelliği bulabilirsiniz, örneğin -r (recursive) seçeneği hepimizin scp kullanırken kullandığı, aşina olduğumuz bir parametredir.

UYARI: parallel-slurp sadece birden fazla makineden kendi makinenize kopyalama içindir. Birden fazla makineye kopya yapmak için parallel-scp aracını kullanınız.

Sonuç olarak bu araç hali hazırda SSH key tabanlı yetkilendirmye sahip birden fazla sistem yönetiminde kullanılabilir.

CUPS-PDF ‘in Debian da yüklenmesi ve ayarlanması

CUPS-PDF, CUPS’ta isteğimiz dosyanın pdf’ini oluşturmakta kullnabileceğimiz kullanımı kolay bir araç. Sanal yazıcı olarak ayarlanarak, kağıtsız bir ağ oluşturulmasını sağlar. Dokümanlar ayarlanabilir (öntanımlı olarak ~/PDF dizinine) kaydedilir veya daha farklı yerler için  “post-processing” komutuna bakılır.

Bu doküman ~/PDF dizininde dosya adı zaman bilgisi olan sanal PDF yazıcısı kurmayı anlatacaktır.

Debian ‘a CUPS-PDF ‘in yüklenmesi

#aptitude install cups-pdf

CUPS-PDF ‘in ayarlanması

Şimdi webbrowser’a http://localhost:631 yazarak yönetim sayfasını açalım, sunulan seçenekler arasından sanal yazıcımızı ayarlayalım, kullanıcı adı ve parola sorulduğu zaman “root” kullanıcı adı ve parolasını girelim. Buradaki root parolası senin sistem root parolandır.

Menu > Settings > Printing System Settings ‘e gidelim ve “CUPS” seçelim,

Çıktı ayarlarının yapılması

# vi /etc/cups/cups-pdf.conf

PDF dosyalarının oluşturulduğu dizini değiştirmek isterseniz, “Out ${HOME}/PDF” satırını istediğiniz dizin ile değiştirmeniz yeterlidir.

CUPS-PDF oluşturacağı dosyanın isminin değiştirilmesine izin vermez, eğer dosya adını kişiselleştirmek istiyorsanız, “built-in post-processing” seçeneklerini kullanmalısınız. cups-pdf.conf dosyasındaki “PostProcessing” satırını yorumdışı bırakıp “/usr/local/bin/cups-pdf-renamer”satırını aktif yapalım.

Basit bir shell script oluşturalım

# vi /usr/local/bin/cups-pdf-renamer

Bu dosyaya aşağıdaki kodu yapıştıralım:

#!/bin/bash

FILENAME=`basename $1`
DIRNAME=`dirname $1`
DATE=`date +”%Y-%m-%d_%H:%M:%S”`

mv $1 $DIRNAME”/”$DATE”.pdf”

Kaydedip dosyadan çıkınız.

Son olarak gerekli izinleri veriniz

# chmod 755 /usr/local/bin/cups-pdf-renamer

Şimdi, yazıcılarınız arasından cups-pdf seçip yazdırdığımızda, ~/PDF dizininizde “2009-03-16_10:57:03.pdf” gibi isimlendirilmiş bir bir dosya görebilirsiniz.

mod_slotlimit ile Apache Kaynak Limitlerinin Yönetilmesi

mod_slotlimit dinamik yuvaları ayırmayı ve statik kurallarını kullanarak çalışan herbir sitede kaynakları yönetmek için kullanılan bir apache modülüdür.

Sistemin Hazırlanması

mod_slotlimit ‘i derlemek için apxs2 (Apache eklenti aracı) sistemde yüklü ve Apache ile yapılandırılmış olmalıdır.

Aşağıdaki komutu kullanarak yükleme yapalım.

#apt-get install apache2-prefork-dev build-essential

Kaynak paketini buradaki bağlantıdan indirelim

wget http://kent.dl.sourceforge.net/sourceforge/mod-slotlimit/mod_slotlimit.tar.gz

Aşağıdaki şekilde sıkıştırılmış dosyayı açalım ve derledikten sonra kuralım:

#tar zxvf mod_slotlimit.tar.gz

#cd mod_slotlimit-1.1

#make

#make install

Modülün Yüklenmesi

Ayar dosyasına mod_slotlimit modülünü ekleyelim

#vi /etc/apache2/httpd.conf

LoadModule slotlimit_module   /usr/lib/apache2/modules/mod_slotlimit.so

mod_slotlimit Ayarlanması

Kullanışlı talimatlar ve daha fazla bilgi istiyorsanız mod_slotlimit belgesine göz atınız.

AvailableSlotsPercent – Percentage of apache slots available in order to activate dynamic slot allocation algorithm
MaxConnectionsPerSite – Max connections for each running site
LimitSite – Specific site to limit
LimitSiteConnections – Max connections for “LimitSite”
ClientIpLimit – Number of maximum simultaneous connection per IP
ForceVhostName – Force vhost hostname in scoreboard. Useful when vhost hostname do not match site visited, for example if you’re using mod_vhost_alias

Şimdi apache2 ayar dosyamızı güncelleyelim

#vi /etc/apache2/apache2.conf

Aşağıdaki satırları ekleyelim ve çıkalım.

<IfModule mod_slotlimit.c>
AvailableSlotsPercent 15
MaxConnectionsPerSite 30
LimitSite www.BadSite.xxx
LimitSiteConnections 15
ClientIpLimit 15
ForceVhostName On
</IfModule>

Şimdi Apache sunucumuzu yeniden başlatalım

#/etc/init.d/apache2 restart