aytekinux
Linux tırmalamaları, hayat sayıklamaları...
07 Haziran 2013
06 Ekim 2011
Sanal Makinede Saat Değişikliği
Proxmox 'da kurulu Debian 6.0.2'nin saatini değiştirmek istediğimde şöyle birşey oldu:
Kaynak : http://wiki.openvz.org/Timezone
# date 100616362011
date: cannot set date: Operation not permitted
Thu Oct 6 16:36:00 UTC 2011
OpenVZ ile sanallaştırılan Debian'ın saatini şu şekilde değiştirmek gerekiyor:# dpkg-reconfigure tzdata
Current default time zone: 'Europe/Istanbul'
Local time is now: Thu Oct 6 16:56:21 EEST 2011.
Universal Time is now: Thu Oct 6 13:56:21 UTC 2011.
Çıktıdan da anlaşıldığı gibi, aslında temel sorun Time Zone'un doğru olmaması. Komutu yazdıktan sonra gelen pencerede önce Europe sonra Istanbul'u seçiyoruz, hepsi bu.Kaynak : http://wiki.openvz.org/Timezone
12 Temmuz 2010
Komut Satırından XMPP Mesajı Göndermek
Kurum içinde anında mesajlaşma altyapısında Jabber protokolünü kullanan Openfire Server'ı kullanıyorum. Hazır altyapı varken serverların sistem bildirimlerini anında mesajlaşma yazılımı üzerinden almak güzel olur diye düşünerek çıktım yola. Zincirin eksik halkası, komut satırından bu işi yapacak program. Aramalarımda bulduğum güzel ise: sendxmmp
Önce kuralım (Ubuntu Server'a kurulum anlatılmıştır):
Kullanıcı adı, server, port bilgilerini gireceğimiz .sendxmpprc dosyasını kullanıcı dizinine oluşturuyoruz. Kullanılabilecek formatlar şöyleymiş:
Ben şu formatı kullandım:
Aslında bu dosyayı oluşturmadan da bilgileri parametrelerle girerek mesaj göndermek mümkün. Fakat bu durumda kullanıcı ve şifre deşifre olacağından ben güvenlik adına bu şekilde kullanmayı tercih etmiyorum. Zaten program da güvenliği önemsediğini .sendxmpprc dosyasının izinlerini 600 yapmadan çalışmayarak bize gösteriyor. Konfigürasyon dosyasına gerekli bilgileri girdikten sonra hemen dosya izinlerini düzenliyoruz:
Bu ayarlar normalde yeterli fakat Openfire Server kullanıyorsanız şu hata mesajı geliyor.
Yetklendirmede yaşanan bu sorunu çözmek için, /usr/share/perl5/Net/XMPP/Protocol.pm dosyasını açıyoruz:
Aşağıdaki satırı buluyoruz:
Başına # (diyez) koyuyoruz ve dosyayı kayıt ediyoruz:
Şimdi bir mesaj denemesi yapabiliriz:
Hepsi bu kadar.
Şimdi swatch ile log dosyalarını dinlemeye alıp, istediğim durumlara göre swatch'ın aksiyon alarak bana anında mesaj göndermesi için kolları sıvayalım.
Kaynaklar :
[1] http://www.kilrathy.net/sites/xmpp-meldungen-via-script-senden.html
[2] http://manpages.ubuntu.com/manpages/intrepid/man1/sendxmpp.1.html
[3] http://www.djcbsoftware.nl/code/sendxmpp/
Önce kuralım (Ubuntu Server'a kurulum anlatılmıştır):
# apt-get install sendxmpp
Kullanıcı adı, server, port bilgilerini gireceğimiz .sendxmpprc dosyasını kullanıcı dizinine oluşturuyoruz. Kullanılabilecek formatlar şöyleymiş:
CONFIGURATION FILE
You may define a ’~/.sendxmpprc’ file with the necessary data for your
xmpp-account, with a line of the format:
user@server password componentname
e.g.:
# my account
alice@jabber.org secret
(’#’ and newlines are allowed like in shellscripts). You can add a host
(or IP address) if it is different from the server part of your JID:
# account with specific connection host
alice@myjabberserver.com;foo.com secret
You can also add a port if it is not the standard XMPP port:
# account with weird port number
alice@myjabberserver.com:1234 secret
Of course, you may also mix the two:
# account with a specific host and port
alice@myjabberserver.com;foo.com:1234 secret
NOTE: for your security, sendxmpp demands that the configuration file
is owned by you and readable only to you (permissions 600).
Ben şu formatı kullandım:
Kullanıcı@server.com:Port Şifre
Aslında bu dosyayı oluşturmadan da bilgileri parametrelerle girerek mesaj göndermek mümkün. Fakat bu durumda kullanıcı ve şifre deşifre olacağından ben güvenlik adına bu şekilde kullanmayı tercih etmiyorum. Zaten program da güvenliği önemsediğini .sendxmpprc dosyasının izinlerini 600 yapmadan çalışmayarak bize gösteriyor. Konfigürasyon dosyasına gerekli bilgileri girdikten sonra hemen dosya izinlerini düzenliyoruz:
chmod 600 ~/.sendxmpprc
Bu ayarlar normalde yeterli fakat Openfire Server kullanıyorsanız şu hata mesajı geliyor.
# echo "Bu bir komut satırı mesajıdır" | sendxmpp -s Konsol mesajı test@abc.local
Error 'AuthSend': error: not-authorized[?]
Yetklendirmede yaşanan bu sorunu çözmek için, /usr/share/perl5/Net/XMPP/Protocol.pm dosyasını açıyoruz:
nano /usr/share/perl5/Net/XMPP/Protocol.pm
Aşağıdaki satırı buluyoruz:
- return $self->AuthSASL(%args);
Başına # (diyez) koyuyoruz ve dosyayı kayıt ediyoruz:
- #return $self->AuthSASL(%args);
Şimdi bir mesaj denemesi yapabiliriz:
echo "Bu bir komut satırı mesajıdır" | sendxmpp -s Konsol mesajı kullanıcı@abc.loca
Hepsi bu kadar.
Şimdi swatch ile log dosyalarını dinlemeye alıp, istediğim durumlara göre swatch'ın aksiyon alarak bana anında mesaj göndermesi için kolları sıvayalım.
Kaynaklar :
[1] http://www.kilrathy.net/sites/xmpp-meldungen-via-script-senden.html
[2] http://manpages.ubuntu.com/manpages/intrepid/man1/sendxmpp.1.html
[3] http://www.djcbsoftware.nl/code/sendxmpp/
14 Eylül 2009
LAMP Server Kurulumu (Debian, Ubuntu)
Linux, Apache, MySql, PHP dörtlüsü ve saz arkadaşları PhpMyAdmin kurulumları için konsol komutu:
# apt-get install apache2 php5 libapache2-mod-php5 php5-gd mysql-server mysql-client php5-mysql phpmyadmin
MySql root şifresi oluşturmak için;
# mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('new-password') WHERE user='root';
mysql> FLUSH PRIVILEGES;
# apt-get install apache2 php5 libapache2-mod-php5 php5-gd mysql-server mysql-client php5-mysql phpmyadmin
MySql root şifresi oluşturmak için;
# mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('new-password') WHERE user='root';
mysql> FLUSH PRIVILEGES;
19 Ağustos 2009
Ubuntu'da Turkcell ile VINN
VINN'ı USB girişine taktığımda Ubuntu 3G modemi hemen tanıdı, bağlantı
sihirbazı çıktı. Adımları ilerleyerek Ubuntu gerekli ayarları yaptı.
Fakat bağlanamadım. İnternetten okuduğum bilgilere göre PIN ve APN
değerlerine baktım. APN'nin "internet" olması gerektiğini biliyordum ve
Ubuntu zaten bu değeri girmişti. Başka bir yerde sorun olacağını
düşündüm ama bulamayınca Windows kurulu bir PC'den bağlanıp ayarlarına
bakınca APN değerinin "mgb" olduğunu gördüm. Ubuntu'da APN değerini
"mgb" olarak değiştirince Ubuntu VINN'lamaya başladı.
sihirbazı çıktı. Adımları ilerleyerek Ubuntu gerekli ayarları yaptı.
Fakat bağlanamadım. İnternetten okuduğum bilgilere göre PIN ve APN
değerlerine baktım. APN'nin "internet" olması gerektiğini biliyordum ve
Ubuntu zaten bu değeri girmişti. Başka bir yerde sorun olacağını
düşündüm ama bulamayınca Windows kurulu bir PC'den bağlanıp ayarlarına
bakınca APN değerinin "mgb" olduğunu gördüm. Ubuntu'da APN değerini
"mgb" olarak değiştirince Ubuntu VINN'lamaya başladı.
13 Temmuz 2009
SME Server konsol yönetim
Lokal ağda e-posta sunucusu olarak SME Server'ı kullanıyorum. Bugüne kadar işini gayet iyi yapan SME server'ımın IP adresini değiştirmem gerekiyordu. Daha önce konsoldan girdiğim bir yönetim aracı vardı ama komutu bir türlü hatırlayamadım. Google'da biraz gezindikten sonra komutu buldum:
# console
İleride tekrar lazım olur diye de buraya not düşeyim dedim.
# console
İleride tekrar lazım olur diye de buraya not düşeyim dedim.
26 Haziran 2009
Ubuntu 9.04'e ince ayar (Cilalanmış Ubuntu)
Ubuntu 9.04'ün default kurulumundan sonra ihtiyaç hissedilebilecek uygulamalar ve eklentiler:
Önce deb http://packages.medibuntu.org/ jaunty free non-free deposunu ekleyelim.
sudo nano /etc/apt/sources.list
Medibuntu deposunun anahtarını kuralım.
sudo apt-get install medibuntu-keyring
Depo listesini güncelleyelim.
sudo apt-get update
Şu paketleri kuralım.
sudo apt-get install ubuntu-restricted-extras sun-java6-bin liferea mplayer non-free-codecs bluefish gparted xine-ui xine-plugin vlc thunderbird filezilla glipper
Önce deb http://packages.medibuntu.org/ jaunty free non-free deposunu ekleyelim.
sudo nano /etc/apt/sources.list
Medibuntu deposunun anahtarını kuralım.
sudo apt-get install medibuntu-keyring
Depo listesini güncelleyelim.
sudo apt-get update
Şu paketleri kuralım.
sudo apt-get install ubuntu-restricted-extras sun-java6-bin liferea mplayer non-free-codecs bluefish gparted xine-ui xine-plugin vlc thunderbird filezilla glipper
20 Mayıs 2009
Sistem sıcaklık bildirimi
Sistemlerin belli bir sıcaklığı geçtiğinde e-posta ile bildirim yapabilmesi için mbmon'dan yararlandım. Önce mbmon'un çeşitli kullanım parametrelerini görelim:
Default 5 saniyede bir çıktı verir. (Sistem 28 derece. Fan hızı 3000)
# mbmon -A
Temp.= 254.0, 28.0, 201.0; Rot.= 3000, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
Temp.= 254.0, 28.0, 201.0; Rot.= 3000, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
...
...
30 saniyede bir çıktı verir.
# mbmon 30 -A
Temp.= 254.0, 28.0, 201.0; Rot.= 3013, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
...
...
Sadece tek bir çıktı verir.
# mbmon -A -c 1
Temp.= 254.0, 28.0, 201.0; Rot.= 2986, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
Çıktının formatı aşağıdaki gibi farklı olması için -r parametresi kullanılır.
# mbmon -A -r
TEMP0 : 254.0
TEMP1 : 28.0
TEMP2 : 201.0
FAN0 : 3000
FAN1 : 0
FAN2 : 0
VC0 : +1.18
VC1 : +1.82
V33 : +3.41
V50P : +6.85
V12P : +11.67
V12N : -0.00
V50N : -1.69
Sadece TEMP1 değerini almak için -T parametresi kullanılır:
# mbmon -A -c 1 -T 2
28.0
Sadece FAN0 değerini almak için -F parametresi kullanılır:
# mbmon -A -c 1 -F 1
3000
Diğer kullanım parametreleri ve ayrıntı için tabi ki:
# mbmon -h
MotherBoard Monitor, ver. 2.05 by YRS.
Usage: mbmon [options...] <seconds for sleep> (default 5 sec)
options:
-V|S|I: access method (using "VIA686 HWM directly"|"SMBus"|"ISA I/O port")
-A: for probing all methods, all chips, and setting an extra sensor.
-d/D: debug mode (any other options except (V|S|I) will be ignored)
-e [0-2]: set extra temperature sensor to temp.[0|1|2] (need -A).
-p chip: chip=winbond|wl784|via686|it87|gl52|lm85|lm80|lm90|lm75
for probing chips
-Y: for Tyan Tiger MP/MPX motherboard
-h: print help message(this) and exit
-f: temperature in Fahrenheit
-c count: repeat <count> times and exit
-P port: run in daemon mode, using given port for clients
-T|F [1-7]: print Temperature|Fanspeed according to following styles
style1: data1\n
style2: data2\n
style3: data3\n
style4: data1\ndata2\n
style5: data1\ndata3\n
style6: data2\ndata3\n
style7: data1\ndata2\ndata3\n
-r: print TAG and Value format
-u: print system uptime
-t: print present time
-n|N: print hostname(long|short style)
-i: print integers in the summary(with -T option)
Şimdi bu bilgiler ışığında yazdığım aşağıdaki gibi bir script belirli zaman aralıklarında çalıştırılırsa, sistem ısındığında e-posta ile bize bildirim yapacaktır.
#!/bin/bash
# mbmon -c 1 : 1 kere cikti almak icin
# -T 2 : sicakligin sadece 2. degeri almak icin
# Cikti tamsayi olmadigi icin awk ile noktadan
# onceki deger alinir.
#Sicaklik derecesine gore bildirim.
#DEGER=`mbmon -A -c 1 -T 2|awk -F. '{print $1}'`
# Fan hizina gore bildirim
DEGER=`mbmon -A -c 1 -F 1`
if [ $DEGER -gt 3850 ]
then
echo "Sistem odasinda sicaklik artisi tespit edildi" | mail -s "Sicaklik YUKSEK" bilgiislem@abckurumu.com.tr
fi
exit
Default 5 saniyede bir çıktı verir. (Sistem 28 derece. Fan hızı 3000)
# mbmon -A
Temp.= 254.0, 28.0, 201.0; Rot.= 3000, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
Temp.= 254.0, 28.0, 201.0; Rot.= 3000, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
...
...
30 saniyede bir çıktı verir.
# mbmon 30 -A
Temp.= 254.0, 28.0, 201.0; Rot.= 3013, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
...
...
Sadece tek bir çıktı verir.
# mbmon -A -c 1
Temp.= 254.0, 28.0, 201.0; Rot.= 2986, 0, 0
Vcore = 1.18, 1.82; Volt. = 3.41, 6.85, 11.67, -0.00, -1.69
Çıktının formatı aşağıdaki gibi farklı olması için -r parametresi kullanılır.
# mbmon -A -r
TEMP0 : 254.0
TEMP1 : 28.0
TEMP2 : 201.0
FAN0 : 3000
FAN1 : 0
FAN2 : 0
VC0 : +1.18
VC1 : +1.82
V33 : +3.41
V50P : +6.85
V12P : +11.67
V12N : -0.00
V50N : -1.69
Sadece TEMP1 değerini almak için -T parametresi kullanılır:
# mbmon -A -c 1 -T 2
28.0
Sadece FAN0 değerini almak için -F parametresi kullanılır:
# mbmon -A -c 1 -F 1
3000
Diğer kullanım parametreleri ve ayrıntı için tabi ki:
# mbmon -h
MotherBoard Monitor, ver. 2.05 by YRS.
Usage: mbmon [options...] <seconds for sleep> (default 5 sec)
options:
-V|S|I: access method (using "VIA686 HWM directly"|"SMBus"|"ISA I/O port")
-A: for probing all methods, all chips, and setting an extra sensor.
-d/D: debug mode (any other options except (V|S|I) will be ignored)
-e [0-2]: set extra temperature sensor to temp.[0|1|2] (need -A).
-p chip: chip=winbond|wl784|via686|it87|gl52|lm85|lm80|lm90|lm75
for probing chips
-Y: for Tyan Tiger MP/MPX motherboard
-h: print help message(this) and exit
-f: temperature in Fahrenheit
-c count: repeat <count> times and exit
-P port: run in daemon mode, using given port for clients
-T|F [1-7]: print Temperature|Fanspeed according to following styles
style1: data1\n
style2: data2\n
style3: data3\n
style4: data1\ndata2\n
style5: data1\ndata3\n
style6: data2\ndata3\n
style7: data1\ndata2\ndata3\n
-r: print TAG and Value format
-u: print system uptime
-t: print present time
-n|N: print hostname(long|short style)
-i: print integers in the summary(with -T option)
Şimdi bu bilgiler ışığında yazdığım aşağıdaki gibi bir script belirli zaman aralıklarında çalıştırılırsa, sistem ısındığında e-posta ile bize bildirim yapacaktır.
#!/bin/bash
# mbmon -c 1 : 1 kere cikti almak icin
# -T 2 : sicakligin sadece 2. degeri almak icin
# Cikti tamsayi olmadigi icin awk ile noktadan
# onceki deger alinir.
#Sicaklik derecesine gore bildirim.
#DEGER=`mbmon -A -c 1 -T 2|awk -F. '{print $1}'`
# Fan hizina gore bildirim
DEGER=`mbmon -A -c 1 -F 1`
if [ $DEGER -gt 3850 ]
then
echo "Sistem odasinda sicaklik artisi tespit edildi" | mail -s "Sicaklik YUKSEK" bilgiislem@abckurumu.com.tr
fi
exit
12 Mayıs 2009
Debian'a MRTG kurulumu
# apt-get install snmpd mrtg apache2
# nano /etc/snmp/snmpd.conf
----------
# sec.name source community
com2sec paranoid default public
#com2sec readonly default public
şöyle değişecek:
# sec.name source community
#com2sec paranoid default public
com2sec readonly default public
--------------
#/etc/init.d/snmpd restart
# mkdir /var/www/mrtg
# cp /etc/mrtg.cfg /etc/mrtg.cfg.yedek
# nano /etc/mrtg.cfg
içini sil ve şunu yapıştır:
WorkDir: /var/www/mrtg
Options[_]: bits,growright
# cfgmaker public@localhost >> /etc/mrtg.cfg
# indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
5 dk. bir çalışacak komut şurada:
# cat /etc/cron.d/mrtg
*/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
Grafikleri 5 dk. beklemeden hemen görmek için :
# env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1
Sayfayı görmek için:
http://mrtg_server/mrtg
10 Mart 2009
Konsolda bash scriptlerini düzenlerken renkleri kullanmak
Konsolda editör olarak nano kullanıyorum. Bash scripler ile boğuşurken komutların, açıklama satırlarının, değişkenlerin, vs. farklı renklerde olması için /etc/nanorc dosyasına şu satırları ekliyorum:
syntax "c-file" ".*\.c$" ".*\.h$"
color red "\<[A-Z_]{2,}\>"
color green "\" "\" "\" "\"
color green "\" "\" "\"
color brightyellow "\" "\" "\" "\" "\" "\"
color brightcyan "#define" "#include" "#ifn*def" "#endif"
color brightcyan "#elif" "#else" "#if"
syntax "sh" ".*\.sh$"
color red "\<[A-Z_]{2,}\>"
color green "\" "\" "\" "\"
color green "\" "\" "\"
color brightyellow "\" "\" "\" "\" "\" "\"
color brightcyan "#define" "#include" "#ifn*def" "#endif"
color brightcyan "#elif" "#else" "#if"
color white "^#.*$"
syntax "nanorc" "[\.]*nanorc$"
color white "^ *(set|unset).*$"
color cyan "^ *(set|unset) (autoindent|backup|const|cut|fill|keypad|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|quotestr|regexp|smooth|speth|speller|suspend|tabsize|tempfile|historylog|view)"
color brightwhite "^ *syntax [^ ]*"
color brightblue "^ *set\>" "^ *unset\>" "^ *syntax\>"
color white "^ *color\>.*"
color yellow "^ *color (bright)?(white|black|red|blue|green|yellow|magenta|cyan)\>"
color magenta "^ *color\>"
color green "^#.*$"
syntax "c-file" ".*\.c$" ".*\.h$"
color red "\<[A-Z_]{2,}\>"
color green "\
color green "\
color brightyellow "\
color brightcyan "#define" "#include" "#ifn*def" "#endif"
color brightcyan "#elif" "#else" "#if"
syntax "sh" ".*\.sh$"
color red "\<[A-Z_]{2,}\>"
color green "\
color green "\
color brightyellow "\
color brightcyan "#define" "#include" "#ifn*def" "#endif"
color brightcyan "#elif" "#else" "#if"
color white "^#.*$"
syntax "nanorc" "[\.]*nanorc$"
color white "^ *(set|unset).*$"
color cyan "^ *(set|unset) (autoindent|backup|const|cut|fill|keypad|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|quotestr|regexp|smooth|speth|speller|suspend|tabsize|tempfile|historylog|view)"
color brightwhite "^ *syntax [^ ]*"
color brightblue "^ *set\>" "^ *unset\>" "^ *syntax\>"
color white "^ *color\>.*"
color yellow "^ *color (bright)?(white|black|red|blue|green|yellow|magenta|cyan)\>"
color magenta "^ *color\>"
color green "^#.*$"
26 Şubat 2009
Nagios e-posta bildirimleri
Kurduğum ve yönettiğim linux proxy&firewall'ı kullanan kurumdan telefon geldi. İnternet susmuş ama MSN'de sorun yokmuş. Daha önce de başıma geldiğinden disklerin dolduğunu tahmin ettim ve temizlemek için sisteme her zamanki gibi ssh ile bağlandım. Evet, tahmin ettiğim gibi disk bölümlerinin biri %100 görünüyordu. Aslında kurduğum sistemlere Nagios'u mutlaka kurarım ve disklerin %90 sınırını aştığında linux sistemimin e-posta ile bildirim yapmasını sağlarım. Bir taraftan diskleri temizlerken nagios loglarına ve e-postalarıma baktım. Nagios aksatmadan (her zamanki gibi) işini yapmış ve 5 gün önce e-posta ile beni uyarmış. E-posta kalabalığında bu bildirimi kaçırmışım. Bunu kaçırmamın sebebini biliyorum; benzer e-postalar farklı sistenlerden de geliyor ve bildirim e-postalarının içeriğinde hangi sistemden geldiğini belirten bir ifade olmadığı için karışıklığa sebep olabiliyor. Bunu nagios ayarlarını fazla kurcalamadan her kurulum yaptığım kurum/şirket için yeni bir gmail hesabı açarak hallediyordum aslında. E-postalar bu hesaplardan geldiği için hangi sistemde sorun var kolay anlaşılabiliyordu. Son zamanlarda 1-2 sistemi tek e-posta hesabına göre ayarlayınca karışıklık oldu böyle. Bende nagios ayarlarına bir bakayım dedim. E-posta içeriğine, hangi sistemden geldiğinin bilgisini koyarsam karışıklık çözülür böylece. Farklı yolu vardır mutlaka ama ben en kolay şu şekilde çözdüm:
/etc/nagios2/commands.cfg
dosyası, e-posta bildirimlerinin komutları olan dosya. İçeriğindeki ilgili bölüm şöyle:
--------------------------------------------------------------------
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'host-notify-by-epager' command definition
define command{
command_name host-notify-by-epager
command_line /usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
}
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
# 'notify-by-epager' command definition
define command{
command_name notify-by-epager
command_line /usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
---------------------------------------------------
Ben de aşağıdaki gibi ekleme yaptım. (Koyu renk olan bölümler)
---------------------------------------------------
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** ABC KURUMU - Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'host-notify-by-epager' command definition
define command{
command_name host-notify-by-epager
command_line /usr/bin/printf "%b" "ABC KURUMU - Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
}
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** ABC KURUMU - Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
# 'notify-by-epager' command definition
define command{
command_name notify-by-epager
command_line /usr/bin/printf "%b" "ABC KURUMU - Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
-----------------------------------------------------
E-posta programımda (Thunderbird) da gerekli filtreleme işlemlerini yaparsam bu tip bildirim e-postalarını kaçırmam artık diye düşünüyorum.
/etc/nagios2/commands.cfg
dosyası, e-posta bildirimlerinin komutları olan dosya. İçeriğindeki ilgili bölüm şöyle:
--------------------------------------------------------------------
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'host-notify-by-epager' command definition
define command{
command_name host-notify-by-epager
command_line /usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
}
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
# 'notify-by-epager' command definition
define command{
command_name notify-by-epager
command_line /usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
---------------------------------------------------
Ben de aşağıdaki gibi ekleme yaptım. (Koyu renk olan bölümler)
---------------------------------------------------
# 'host-notify-by-email' command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b" "***** ABC KURUMU - Nagios*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'host-notify-by-epager' command definition
define command{
command_name host-notify-by-epager
command_line /usr/bin/printf "%b" "ABC KURUMU - Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
}
# 'notify-by-email' command definition
define command{
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** ABC KURUMU - Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
# 'notify-by-epager' command definition
define command{
command_name notify-by-epager
command_line /usr/bin/printf "%b" "ABC KURUMU - Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
-----------------------------------------------------
E-posta programımda (Thunderbird) da gerekli filtreleme işlemlerini yaparsam bu tip bildirim e-postalarını kaçırmam artık diye düşünüyorum.
25 Kasım 2008
Bir siteden resimleri topluca indirmek
Bir resim galerisinden resimleri topluca indirmek için Firefox eklentisi BatchDownload gerçekten güzel bir araç. wget ile dosya/dizin izinlerine takılmıştım. Çözüm ararken bu eklentiyi buldum. El altında olması gereken bir Firefox eklentisi.
08 Mayıs 2008
Online yer imleri
Firefox'un yer imlerini tuttuğu bookmark.html dosyasını her gün yedekleyip, ssh ile her yerden erişebildiğim bir yere kopyalama çabam uzun bir süre önce sona ermişti. Uzun süredir yer imlerime eklediğim linkleri online olarak tutuyorum. Bu işi yapan Firefox eklentisi Delicious Bookmarks. http://del.icio.us/ sitesine gidip bir kullanıcı hesabı oluşturuyorsunuz. Daha sonra bu Delicious Bookmarks eklentisini Firefox'a kullanıcı hesabınız ile kuruyorsunuz. Bundan sonra eklediğiniz her yer imi sitede kullanıcı hesbınızda tutuluyor. Siteye bir tarayıcı ile girip kullanıcı hesabınızdaki yer imlerini görebileceğiniz gibi farklı bilgisayarlarda Firefox'a kurduğunuz bu eklenti ile yer imleriniz son hali ile bilgisayarınıza geliyor.
Thunderbird ve sistem çekmecesi
Thunderbir'ü Linux'da sistem çekmecesinde kullanmak için mozTrayBiff eklentisini kullanmaya başladım. Görev çubuğunda gereksiz yer işgal etmesinden kurtuldum.
HTML sayfaları RSS gibi takip etmek
Sürekli izlemek istediğim html sayfaları var. Özellikle önemli duyuruların olduğu devlet siteleri. Hala RSS'i keşfedememiş bu siteler güncellendiğinde nasıl haberdar olabilirim diye bir araştırma yaptım. Firefox eklentilerinde Update Scanner'ı buldum. Güncellenen HTML sayfalarınından sizi haberdar ediyor. Firefox'un sağ alt köşesinde küçük bir ok simgesi oluşuyor. Bu simge renklendiği zaman anlıyorsunuz ki takip ettiğiniz bir sitede güncelleme yapılmış. Siteye girdiğinizde güncellenen metinleri sarı rekte işaretlenmiş olarak görüyorsunuz. Böylece sürekli takip ettiğiniz siteye girip yeni bir duyuru var mı diye bakmaktan kurtulmuş oluyorsunuz. Şimdilik benim takip ettiğim siteler şunlar:
Genel Sağlık Sigortası Duyuruları
Genel Sağlık Sigortası Medula duyuruları
Önemli duyuruların yapıldığı bu sitelerin RSS'i keşfetmesi dileğiyle...
Genel Sağlık Sigortası Duyuruları
Genel Sağlık Sigortası Medula duyuruları
Önemli duyuruların yapıldığı bu sitelerin RSS'i keşfetmesi dileğiyle...
31 Mart 2008
Debian'dan Oracle servera nasıl bağlanılır?
Bu işi en kolay nasıl yaparım, ayar dosyaları ile fazla boğuşmadan nasıl hallederim diye biraz araştırma yaptım. Burada anlatılanlar 'dan daha kolay bir yöntem bulamadım. Gerçekten de benim için en kolay yöntem diyebilirim. Yapılacak iş şöyle:
Önce gerekli depoyu sources.list'e ekliyoruz.
/etc/apt/sources.list
deb http://oss.oracle.com/debian unstable main non-free
Sonra kurulumu yapıyoruz:
# apt-get install update
# apt-get install oracle-xe-client
/etc/tnsnames.ora dosyasını oluşturup, içine gerekli kodları yazıyoruz. Bu dosyayı networkde oracle servera bağlantı yapan XP bir PC'den de alabilirsiniz.
Örnek tnsnames.ora dosyası:
AYTEKIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = AYTEKIN)
)
)
Artık,
Önce gerekli depoyu sources.list'e ekliyoruz.
/etc/apt/sources.list
deb http://oss.oracle.com/debian unstable main non-free
Sonra kurulumu yapıyoruz:
# apt-get install update
# apt-get install oracle-xe-client
/etc/tnsnames.ora dosyasını oluşturup, içine gerekli kodları yazıyoruz. Bu dosyayı networkde oracle servera bağlantı yapan XP bir PC'den de alabilirsiniz.
Örnek tnsnames.ora dosyası:
AYTEKIN =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = AYTEKIN)
)
)
Artık,
/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/scripts/sqlplus.sh
dosyası ile bağlantı yapılıp, SQL sorgular yapılabilir.19 Mart 2008
Çift Adsl ve Linux Trafik Yönetimi
Başlıkta "çift adsl" ifadesini kullandım ama aslında bir adsl ve bir frame relay hattı olan ağda Linux ile yaptığım trafik yönlendirmesini anlatacağım. Yaptıklarım temelde aynı olduğu için frame relay yerine adsl hattı da olsa sonuç değişmez.
Bir kurumda yaşanan sorun şuydu: normal internet hareketleri için adsl'i kullanırken aynı zamanda bağlı bulundukları bakanlığın frame relay hattını kullanarak bakanlığın sayfalarında veri girişleri yapamıyorlardı. Her iki hat farklı IP gruplarında olduğundan PC'lerin IP ayarlarını sürekli değiştirerek işi çözüyorlardı. Bu durum da bilgi işleme ayrı bir yük getiriyordu tabi. Ayrıca PC'lerin IP'leri sürekli değiştirildiğinden odalardaki yazıcıların paylaşımı ve kullanımında sorunlar oluyordu. Aynı şekilde dosya paylaşımları da...
Çözüm olarak bu trafiğin ortasına bir Linux koyarak tüm ağı aynı IP grubuna aldım. Çıkışları da hedef adrese yada IP'ye göre yönlendirdim. Linux'a, şu şu şu adreslere iletişim frame relay hattından, geri kalan iletişim de adsl hattından yapılacak, dedim. Kullanıcıların sadece tarayıcılarına site adreslerini yada IP'lerini yazması yetti. Gerisini Linux halletti... Ha, tabi bu trafiği de web filtreleme, güvenlik duvarı, dhcp sunucu, trafik sınırlama (bandwith yönetimi) ile de cilalamayı unutmadım.
Teknik olarak bu işi şöyle yaptım:
Önce linux'a 3 adet ethernet kartı takıldı. Lokal, adsl ve frame relay bağlantıları için. Topoloji şekildeki gibi:
/etc/network/interfaces dosyası şu şekilde:
interfaces dosyasında da göründüğü gibi sadece eth0 için gateway tanımı ve eth1 için dns tanımı yaptım.
Bakanlıkta bağlanılan sistemin IP adresleri 10.6.8.0/24 ağındaydı. Bu IP grubu için ağ geçidi olarak router'ın IP adresini atadım.
10.67.1.0/24 ağı için de aynı şeyi yaptım.
route -n çıktısı şöyle:
firewall olarak kullandığım script'de iptables ile trafiği yönlendirdim. Aşağıdaki komutlarda göründüğü gibi 10.6.8.0/24 hedefine gitmek isteyen trafik eth2'ye yönlendiriliyor. Diğer trafik eth1'den çıkıyor.
Bu şekilde istediğim trafiği istediğim ağ arayüzüne yönlendirebilirim. Bu yapı benim işimi gayet iyi gördü.
Bir kurumda yaşanan sorun şuydu: normal internet hareketleri için adsl'i kullanırken aynı zamanda bağlı bulundukları bakanlığın frame relay hattını kullanarak bakanlığın sayfalarında veri girişleri yapamıyorlardı. Her iki hat farklı IP gruplarında olduğundan PC'lerin IP ayarlarını sürekli değiştirerek işi çözüyorlardı. Bu durum da bilgi işleme ayrı bir yük getiriyordu tabi. Ayrıca PC'lerin IP'leri sürekli değiştirildiğinden odalardaki yazıcıların paylaşımı ve kullanımında sorunlar oluyordu. Aynı şekilde dosya paylaşımları da...
Çözüm olarak bu trafiğin ortasına bir Linux koyarak tüm ağı aynı IP grubuna aldım. Çıkışları da hedef adrese yada IP'ye göre yönlendirdim. Linux'a, şu şu şu adreslere iletişim frame relay hattından, geri kalan iletişim de adsl hattından yapılacak, dedim. Kullanıcıların sadece tarayıcılarına site adreslerini yada IP'lerini yazması yetti. Gerisini Linux halletti... Ha, tabi bu trafiği de web filtreleme, güvenlik duvarı, dhcp sunucu, trafik sınırlama (bandwith yönetimi) ile de cilalamayı unutmadım.
Teknik olarak bu işi şöyle yaptım:
Önce linux'a 3 adet ethernet kartı takıldı. Lokal, adsl ve frame relay bağlantıları için. Topoloji şekildeki gibi:
/etc/network/interfaces dosyası şu şekilde:
auto lo eth0 eth1 eth2 iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 10.0.0.10 netmask 255.255.255.0 gateway 10.0.0.2 allow-hotplug eth1 iface eth1 inet static dns-nameservers 10.0.0.2 address 192.168.1.254 netmask 255.255.255.0 allow-hotplug eth2 iface eth2 inet static address 10.67.1.10 netmask 255.255.255.0 |
interfaces dosyasında da göründüğü gibi sadece eth0 için gateway tanımı ve eth1 için dns tanımı yaptım.
Bakanlıkta bağlanılan sistemin IP adresleri 10.6.8.0/24 ağındaydı. Bu IP grubu için ağ geçidi olarak router'ın IP adresini atadım.
# route add -net 10.6.8.0 netmask 255.255.255.0 gw 10.67.1.1 |
10.67.1.0/24 ağı için de aynı şeyi yaptım.
# route add -net 10.67.1.0 netmask 255.255.255.0 gw 10.67.1.1 |
route -n çıktısı şöyle:
Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.6.8.0 10.67.1.1 255.255.255.0 UG 0 0 0 eth2 10.67.1.0 10.67.1.1 255.255.255.0 UG 0 0 0 eth2 10.67.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0 |
firewall olarak kullandığım script'de iptables ile trafiği yönlendirdim. Aşağıdaki komutlarda göründüğü gibi 10.6.8.0/24 hedefine gitmek isteyen trafik eth2'ye yönlendiriliyor. Diğer trafik eth1'den çıkıyor.
iptables -t nat -A POSTROUTING -d 10.6.8.0/24 -o eth2 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE |
Bu şekilde istediğim trafiği istediğim ağ arayüzüne yönlendirebilirim. Bu yapı benim işimi gayet iyi gördü.
14 Mart 2008
squid ve virüs
Debian Linux proxy server nedensiz bir şekilde internet hareketini durdurmaya başladı. /var/log/syslog'a baktım ve:
"WARNING! Your cache is running out of filedescriptors" hata mesajını gördüm. Yaptığım araştırmada /etc/defaults/squid dosyasındaki SQUID_MAXFD değerinin 1024'den 4096'ya çıkarılarak sorunun çözülebileceğini okudum. Yaptım ama olmadı! Bir bug olabileceği düşüncesiyle sistemi kernel dahil güncelledim ama nafile. Log'lara bakarken bir IP'nin www.rusawm.com'a anlamsız bir şekilde trafik yaptığını gördüm. Blok şeklinde satırlarca bu siteye erişim logları access.log dosyasına düşüyordu. Kullanıcının dışında habersiz bir iletişim yapıldığı ortada olduğundan, IP'nin sahibi PC'nin kablosunu çektik. Sorun düzeldi... Ne menem bir virüs ise yaptığı trafik ile squid'in cachelerine zarar veriyormuş. Hani Linux ile masaüstünde virüssüz bir dünya kurmuş durumdayız ama windows PC'lere hizmet veren, onlara efendilik yapan bir Linux'da yer yer virüslerden nasibini alıyor maalesef...
"WARNING! Your cache is running out of filedescriptors" hata mesajını gördüm. Yaptığım araştırmada /etc/defaults/squid dosyasındaki SQUID_MAXFD değerinin 1024'den 4096'ya çıkarılarak sorunun çözülebileceğini okudum. Yaptım ama olmadı! Bir bug olabileceği düşüncesiyle sistemi kernel dahil güncelledim ama nafile. Log'lara bakarken bir IP'nin www.rusawm.com'a anlamsız bir şekilde trafik yaptığını gördüm. Blok şeklinde satırlarca bu siteye erişim logları access.log dosyasına düşüyordu. Kullanıcının dışında habersiz bir iletişim yapıldığı ortada olduğundan, IP'nin sahibi PC'nin kablosunu çektik. Sorun düzeldi... Ne menem bir virüs ise yaptığı trafik ile squid'in cachelerine zarar veriyormuş. Hani Linux ile masaüstünde virüssüz bir dünya kurmuş durumdayız ama windows PC'lere hizmet veren, onlara efendilik yapan bir Linux'da yer yer virüslerden nasibini alıyor maalesef...
29 Şubat 2008
OOXML'e hayır...
Fazla söze gerek yok... Bu linkteki imza kampanyası için yazılan metinde konu ayrıntılı şekilde anlatılmış. Konu açılmışken belirtmek isterim ki; özgür yazılımlar, sadece kullanan bizlerin değil dolaylı yoldan diğer sistemleri kullanan kişilerinde işine yarayan, ve hatta yerli yersiz bizlerle tartışmadan duramayan zat-ı muhteremlerin de hayatını kolaylaştıran nadide eserler. Bunu bir de onlar bilseler...
28 Şubat 2008
ssh bağlantısını garantiye almak
ssh çoğu Linux kullanıcısı için vazgeçilmez araçlardan biri.
Bağlanacağımız PC/server yan taraftaki sistem odasında da olsa, Güney
Afrika'da da olsa açıyoruz ssh ile bir oturum, işimizi yapıp çıkıyoruz.
Uzaktaki makinalara Linux'un 10 kaplan gücündeki konsolu ile
yaptıramayacağımız iş yok "gibi". "Gibi" diyorum çünkü ender de olsa
bazen fiziksel olarak makinanın başında olmamız gerekiyor. Özellikle ağ
ayarları ile uğraşıyorsak. Yanlış bir komut her şeyi mahvedebilir. Dün
akşam böyle hassas bir konu ile uğraşırken ağ ayarlarımı kaybetme
korkusuyla komutları elim titreyerek girdim. Uzak bilgisayardaki
/etc/network/interfaces dosyasını mıncıklarken, route komutu ile
boğuşurken hattı kopartmamak için ayrı bir dikkat harcadım.
Firewall+proxy olarak çalışan makinaya ayrı bir frame relay bağlantısı
yapmak zaten yeterince boğucuydu. Sonra özgürlüğümü geri almak için
şöyle yaptım: Çalışan ve uzaktan bağlanılabilen ayarları geri yükleyecek
bir script yaptım. Bunu da yer yer saat başı, duruma göre aklıma
geldikçe 30-40 dk. ileriye alarak crontab'a attım. Böylece eğer bir
yanlışlık olursa en fazla 40-45dk. içinde tekrar bağlanabilmeyi
garantiye almış oldum. Hem arada bir çay molası vermek için de bahanem
olurdu. Hakikaten işe yaradığını da söylemeliyim çünkü aldığım gazla bir
sefer bağlantıyı kopardım. Panik yapmadan saatime baktım, bekledim ve
zamanı geldiğinde bağlanıp işe devam ettim. İşi garantiye almak güzel de
script'in arada fark etmeden cron'dan çalışması ve yaptığım ayarları
bozması ve benim bunu geç anlamam işin cilvesi ne yazık ki... ;)
Bağlanacağımız PC/server yan taraftaki sistem odasında da olsa, Güney
Afrika'da da olsa açıyoruz ssh ile bir oturum, işimizi yapıp çıkıyoruz.
Uzaktaki makinalara Linux'un 10 kaplan gücündeki konsolu ile
yaptıramayacağımız iş yok "gibi". "Gibi" diyorum çünkü ender de olsa
bazen fiziksel olarak makinanın başında olmamız gerekiyor. Özellikle ağ
ayarları ile uğraşıyorsak. Yanlış bir komut her şeyi mahvedebilir. Dün
akşam böyle hassas bir konu ile uğraşırken ağ ayarlarımı kaybetme
korkusuyla komutları elim titreyerek girdim. Uzak bilgisayardaki
/etc/network/interfaces dosyasını mıncıklarken, route komutu ile
boğuşurken hattı kopartmamak için ayrı bir dikkat harcadım.
Firewall+proxy olarak çalışan makinaya ayrı bir frame relay bağlantısı
yapmak zaten yeterince boğucuydu. Sonra özgürlüğümü geri almak için
şöyle yaptım: Çalışan ve uzaktan bağlanılabilen ayarları geri yükleyecek
bir script yaptım. Bunu da yer yer saat başı, duruma göre aklıma
geldikçe 30-40 dk. ileriye alarak crontab'a attım. Böylece eğer bir
yanlışlık olursa en fazla 40-45dk. içinde tekrar bağlanabilmeyi
garantiye almış oldum. Hem arada bir çay molası vermek için de bahanem
olurdu. Hakikaten işe yaradığını da söylemeliyim çünkü aldığım gazla bir
sefer bağlantıyı kopardım. Panik yapmadan saatime baktım, bekledim ve
zamanı geldiğinde bağlanıp işe devam ettim. İşi garantiye almak güzel de
script'in arada fark etmeden cron'dan çalışması ve yaptığım ayarları
bozması ve benim bunu geç anlamam işin cilvesi ne yazık ki... ;)
01 Şubat 2008
stix.to : Faydalı bir eser
stix.to sitesini az önce keşfettim. İnternette gezdiğiniz sayfalara not bırakmaya yarayan faydalı bir eser... Sadece not değil sesli mesaj da bırakılabiliyor. Bu notlar, mesajlar fazla incelemedim ama sanırım grup mantığında listenizdeki diğer kişilerece de görünebiliyor -ki öyle olmalı zaten-. Şu anda pek kulmayı düşünmüyorum ama işe yarayabilir, kenara not etmekte fayda var.
03 Aralık 2007
swatch logrotate'den sonra log dosyasını izlemezse...
Bir süredir log dosyalarını izlemek için swatch kullanıyorum. swatch'ın bir sonraki gün log dosyalarını izlemediğini fark ettim. Sebebini araştırdığımda logrotate'den sonra eski log dosyasını izlediğini ve yeni dosyayı izlemediğini gördüm. Yani syslog dosyası gece syslog.0 oluyor ve swatch syslog.0'ı izlemeye devam ediyor. Bu sorunu çözmek için logrotate'den sonra swatch'ı restart etmek yetecekti ama nasıl?
swatch'ın start, restart, stop edilebilmesi için bir script yazmak gerekiyordu. Kolları sıvayıp önce şöyle bir script yazdım (/etc/init.d/swatchd dosyasına) :
Sonra da /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna;
satırını ekledim. Böylece gece sysklogd restart olduktan hemen sonra swatch'da restart oluyor ve istediğim log dosyalarının izlenmesine devam ediliyor.
swatch'ın start, restart, stop edilebilmesi için bir script yazmak gerekiyordu. Kolları sıvayıp önce şöyle bir script yazdım (/etc/init.d/swatchd dosyasına) :
#!/bin/sh # Debian Gnu/Linux Shell Script # # swatchd : swatch'in baslatilmasi, durdurulmasi veya tekrar baslatilmasi # icin script. # # Aciklama: logrotate'den sonra swatch log dosyalarini dinlemediginden, # logrotate'den sonra swatch'in restart edilmesi gerekiyor. # /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna # /etc/init.d/swatch restart > /dev/null satiri eklenirse, sysklogd restart olduktan hemen sonra # swatch da restart olacaktir. # # Version: 1.0 03-12-2007 aytekinaygun@gmail.com ps ax | grep swatch > /tmp/swatch.pid PID=`cat /tmp/swatch.pid | grep swatchrc | awk '{print $1;}'` case "$1" in start|"") if [ "$PID" = "" ]; then swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log" echo "swatch baslatildi..." else echo "swatch zaten calisiyor..." fi ;; stop) if [ "$PID" = "" ]; then echo "swatch zaten calismiyor..." else kill -9 $PID echo "swatch durduruldu..." fi ;; restart) if [ "$PID" = "" ]; then swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log" echo "swatch calismiyordu ve baslatildi..." else kill -9 $PID swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log" echo "swatch tekrar baslatildi..." fi ;; *) echo "Kullanim parametreleri : /etc/init.d/swatchd {start|stop|restart}" ;; esac exit 0 |
Sonra da /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna;
/etc/init.d/swatch restart > /dev/null |
satırını ekledim. Böylece gece sysklogd restart olduktan hemen sonra swatch'da restart oluyor ve istediğim log dosyalarının izlenmesine devam ediliyor.
15 Kasım 2007
Thunderbird konu başlığına göre dizilim yapmasın
Bir süredir sıkıntısını çektiğim bir konu... Thunderbird'de e-postaları dizilim (thread) şeklinde gösterip, okuyorum. Özellikle linux listelerindeki iletileri birbirine karıştırmadan, konularına göre takip edebilmek için iyi oluyor. Fakat localde kullandığımız e-posta trafiğinde bu özellik başımın belası oldu. Kullanıcıların konu başlığı seçme kısırlığının da etkisi ile her postaya "yardım", "sorun", vs. gibi standart başlıklıklar vermeleri veya konusuz bırakmaları -ki o zaman konu başlığı "(konusuz)" şeklinde oluyor- ile postalar birbirine girmeye başladı. Thunderbird message-ID dışında aynı konu başlıklarını da aynı dizilimlerde tutuyor. Önceleri önemsemedim ama zamanla posta trafiği ve aynı konu başlıklarının kullanımı arttıkça bu işe bir dur demenin zamanı geldi. Biraz araştırma yaptıktan sonra şu linki buldum. Profil dizinimin altına user.js adında bir dosya oluşturup içine de şunları ekledim:
# Only thread by reference headers, ignore subject user_pref("mail.strict_threading", true);
ve kayıt ettim... Thunderbird'ü tekrar çalıştırdığımda kabuslarım sona erdi.
# Only thread by reference headers, ignore subject user_pref("mail.strict_threading", true);
ve kayıt ettim... Thunderbird'ü tekrar çalıştırdığımda kabuslarım sona erdi.
16 Ekim 2007
Disklerin dolduğunu haber veren script
Bu aralar, kurduğum linux proxy-firwall sistemleri izlemeyi daha kolay hale getirmeye çalışıyorum. Log analiz programları ile haşır-neşirim son zamanlarda. swatch programı ilgimi çekmeye başladı. Program, log dosyalarında belirlediğiniz herhangi bir ifade geçerse isterseniz size e-posta atıyor, isterseniz komut/komutlar çalıştırıp bir iş yaptırılabiliyor. Yani mesela auth.log dosyasında herhangi bir satırda "illegal user" ifadesi geçerse bana e-posta gönder diyorsunuz; swatch, log dosyasını dinlemeye başlıyor ve sisteminize yapılan ssh bağlantı denemesi(saldırısı) olduğunda size e-posta atıyor. Durumdan anında haberdar oluyorsunuz. Senaryolar çoğaltılabilir tabi.... Şu günlükte de uygulama konusunda güzel bilgiler var. Yazanın eline sağlık.
Henüz denemeler yapıp yazılımı test ediyorum. Bu denemelerimde disk dolduğu zaman bana e-posta atmasını sağlayamadım. Fazla da uğraşmadım ve kendi işimi kendim görmeye karar verdim. Hemen şöyle bir script yazdım:
Görüldüğü gibi basit bir 'eğer' kalıbı ile işimi hallettim.
Önce disk bölümlerinin doluluk oranına bakıp bu çıktıda %90 ve üzeri bir ifade var mı ona bakıyoruz. Eğer bu ifade var ise disk bölümlerinin doluluk oranlarının bilgisi ile /var dizininde bulunan dosya ve dizinlerin boyutlarını disk.txt dosyasına yazıp, bu dosyayı e-posta ile gönderiyoruz. Hepsi bu...
Bu scripti crontab'a ekleyip günde bir kez çalıştırmak yeter sanırım.
Henüz denemeler yapıp yazılımı test ediyorum. Bu denemelerimde disk dolduğu zaman bana e-posta atmasını sağlayamadım. Fazla da uğraşmadım ve kendi işimi kendim görmeye karar verdim. Hemen şöyle bir script yazdım:
#!/bin/sh if df -h | egrep "90%|91%|92%|93%|94%|95%|96%|97%|98%|99%|100%" then df -h > disk.txt echo " " >> disk.txt echo " " >> disk.txt du -sh /var/* >> disk.txt mail -s "[Proxy-Hastane] Disk Doluyor!" tirtil@zabazingo.com < disk.txt rm disk.txt fi |
Görüldüğü gibi basit bir 'eğer' kalıbı ile işimi hallettim.
Önce disk bölümlerinin doluluk oranına bakıp bu çıktıda %90 ve üzeri bir ifade var mı ona bakıyoruz. Eğer bu ifade var ise disk bölümlerinin doluluk oranlarının bilgisi ile /var dizininde bulunan dosya ve dizinlerin boyutlarını disk.txt dosyasına yazıp, bu dosyayı e-posta ile gönderiyoruz. Hepsi bu...
Bu scripti crontab'a ekleyip günde bir kez çalıştırmak yeter sanırım.
15 Ekim 2007
Konsoldan e-posta göndermek
Kurduğumuz sistemlerde neler olup bittiğini izlemek için yada belirli aralıklarla yaptırdığımız bir işin (örneğin yedekleme) sağlıklı bir şekilde yapıldığından emin olmak için birtakım çıktıları e-posta ile takip ederiz. Konsoldan e-posta atmak için;
# mail kullanıcı@alanadı.com -s "Konu Başlığı" < /var/log/dosya.log
komutunu kullanmak yeterlidir. Bu komut ile dosya.log dosyası kullanıcı@alanadı.com'a gönderilir. Fakat bu komutu kullanmak için önce bir MTA ayarı yapmak gerekir. Ben Debian'da ön tanımlı olarak gelen exim4'ü kullanıyorum. Eğer kurulu değil ise:
# apt-get install exim4 |
ile kurulumu yapıyoruz. Kullandığım gmail hesabım için ayarları şöyle yapıyorum:
# dpkg-reconfigure exim4-config |
Yapılandırmayı küçük dosyalara bölmek ister misiniz? hayır Posta yapılandırma türü? Posta gönderme akıllı-makine ile; posta alma SMTP/fetchmail ile Sistemin posta adı? localhost.localdomain |
Ayarları kayıt ediyoruz. Yapılan bu ayarlar /etc/exim4/update-exim4.conf.conf dosyasına yazılır. Bu dosyanın içeriği şöyle birşey oluyor.
# nano /etc/exim4/update-exim4.conf.conf |
dc_eximconfig_configtype='smarthost' dc_other_hostnames='localhost.localdomain' dc_local_interfaces='127.0.0.1' dc_readhost='debian' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='smtp.gmail.com::587' CFILEMODE='644' dc_use_split_config='false' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='mail_spool' |
aytekin kullanıcısının gönderdiği postalarda zabazingo@gmail.com adresinin görünmesini istiyorum. Bunun için /etc/email-addresses dosyası şöyle düzenliyoruz.
# nano /etc/email-addresses |
aytekin: zabazingo@gmail.com |
Son olarak kullanıdğımız e-posta adresinin kullanıcı ve şifre bilgilerini girmemiz gerekiyor.
# nano /etc/exim4/passwd.client |
*:zabazingo:şifre |
Ayarlar tamamlandı. Şimdi de exim4'ü yeniden başlatıyoruz.
# /etc/init.d/exim4 restart |
08 Ekim 2007
Dinamik IP'ye hostname atama (dyndns.org güzelliği)
dyndns.org sitesinin çok güzel bir hizmeti var. Dinamik IP'lere hostname tanımlayabiliyorsunuz. 5 tane hostname tanımı ücretsiz yapılabiliyor. Böylece statik IP gerektiren durumlarda gerçekten ilaç gibi geliyor. Evdeki bilgisayarıma ssh ile bağlanmak istediğimde ssh evdeki_bilgisayar.dyndns.org komutu ile direk bağlanıyorum. Kullandığım modemde dyndns.org özelliği var ve gerekli ayarları yaptıktan sonra her IP değiştiğinde modem dyndns.org'da oluşturduğum host bilgisini değiştiriyor. Eğer modemde böyle bir özellik yok ise o zaman bu görevi Linux'a bırakacağız.
Belli aralıklarla IP'yi güncellemek için ubunturehberi.com'da anlatılanları uyguladım. Komut satırından komutu verdiğimde herşey normal ama cron'dan komut çalışmıyor. Betik path'de olmadığı için sorun oluyor. Bende şöyle yaptım. dyndns_update.sh betiğini /usr/sbin/'in altına taşıdım. Betik içinde de değişiklik yapmak gerekiyor. ipcheck komutu olan satırlarda da /usr/sbin/ipcheck .... şeklinde yol tanımladım. Sonuç olarak betiğin son hali şöyle:
crontab'a da şöyle ekliyoruz:
Belli aralıklarla IP'yi güncellemek için ubunturehberi.com'da anlatılanları uyguladım. Komut satırından komutu verdiğimde herşey normal ama cron'dan komut çalışmıyor. Betik path'de olmadığı için sorun oluyor. Bende şöyle yaptım. dyndns_update.sh betiğini /usr/sbin/'in altına taşıdım. Betik içinde de değişiklik yapmak gerekiyor. ipcheck komutu olan satırlarda da /usr/sbin/ipcheck .... şeklinde yol tanımladım. Sonuç olarak betiğin son hali şöyle:
#!/bin/sh
USERNAME=kullanıcı
PASSWORD=şifre
HOSTNAME=xxxxxx.dyndns.org
cd /root/
if [ -f /root/ipcheck.dat ]; then
/usr/sbin/ipcheck -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
else
/usr/sbin/ipcheck --makedat -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
fi
crontab'a da şöyle ekliyoruz:
# crontab -eher saat başı çalışması için eklenecek satır:
00 * * * * /usr/sbin/dyndns_update.sh
05 Ekim 2007
/home'u ayrı bölüme/diskte taşımak
Bu aralar SME Server ile yerel bir e-posta sunucusu kurmaya niyetlendim. Fakat gel gör ki sistemde 2 disk olmasına rağmen hiç bana bişi sormadan tek diske tüm kurulumları yapıp işini bitiriyor. Bu kurulumun ayrıntılarını yazarım sonra. Kurduktan sonra /home'u 2.diske taşıdım.
Kaynak : http://eventualis.org/home-dizinini-tasimak/
Şöyleki:
Önce dizin oluşturup 2.diski buraya bağlıyoruz.
# mkdir /yenihome
# mount -t ext3 /dev/sdb1 /yenihome
/home 'da bulunan tüm dosyaları /yenihome 'a taşıyoruz.
# cd /home
# find . -depth -print0 | cpio --null --sparse -pvd /yenihome/
/home'un yerini değiştiriyoruz.
# umount /yenihome
# mv /home /eskihome
# mv /yenihome /home
...ve bağlıyoruz.
# mount -t ext3 /dev/sdb1 /home
Tabi bu bağlama işini fstab'a da ekliyoruz:
/dev/sdb1 /home ext3 usrquota,grpquota 1 1
Kaynak : http://eventualis.org/home-dizinini-tasimak/
Artık yazmam lazım gelir...
Bu günlüğü açalı uzun zaman oldu. Bir heyecanla açmıştım ama tek tük
yazılardan sonra kaldı öyle. Sildim o yazılarıda zaten. Şimdi tekrar
bişiler karalayım dedim Linux hakkında. Tırmalayıp duruyorum akşama
kadar şu ekranın önünde. Deneyimlerimi paylaşayım dedim bende işte. Öle
işte be ...
yazılardan sonra kaldı öyle. Sildim o yazılarıda zaten. Şimdi tekrar
bişiler karalayım dedim Linux hakkında. Tırmalayıp duruyorum akşama
kadar şu ekranın önünde. Deneyimlerimi paylaşayım dedim bende işte. Öle
işte be ...
Kaydol:
Kayıtlar (Atom)