Domains Expiration Script

вторник, февруари 22nd, 2011

Понеже ми се събраха доста домейни под моя юрисдикция, някои от които регистрирани преди доста време се огледах за shell script, който проверява за изтичането на даден домейн. Можеше да си играя да пиша и сам, но след като има готови, които вършат работа нямаше нужда. Единственото, което трябваше да се направи е проверка и за .bg домейни. Скриптът, който ползвах за основа може да бъде намерен тук /като цяло cyberciti.biz е чуден блог за unix/linux tips & tricks/

Кодът, който съм добавил е съобразен с output-а, който връща към момента whois.register.bg:

DOMAIN NAME: digsys.bg
requested on: 08/09/1991 00:00:00 EEST
processed from: 08/09/1991 00:00:00 EEST
activated on: 08/09/1991 00:00:00 EEST
expires at: 01/01/2012 00:00:00 EET
registration status: Registered
REGISTRANT:
Digital Systems Ltd.
VARNA, 9000
BULGARIA

И в частност полетата „REGISTRANT“ и „expires at“.

Като към скрипта, аз съм добавил следното:

diff -c check.domain.expired_orig.sh check.domain.expired.sh
*** check.domain.expired_orig.sh        2011-02-22 17:02:27.000000000 +0200
--- check.domain.expired.sh     2011-02-22 20:02:27.000000000 +0200
***************
*** 235,240 ****
--- 235,243 ----
      elif [ "${TLDTYPE}"  == "in" ]; # India
      then
          ${WHOIS} -h "whois.registry.in" "${1}" > ${WHOIS_TMP}
+     elif [ "${TLDTYPE}"  == "bg" ]; # Bulgaria
+     then
+         ${WHOIS} -h "whois.register.bg" "${1}" > ${WHOIS_TMP}
      elif [ "${TLDTYPE}"  == "uk" ]; # United Kingdom
      then
          ${WHOIS} -h "whois.nic.uk" "${1}" > ${WHOIS_TMP}
***************
*** 265,270 ****
--- 268,276 ----
      elif [ "${TLDTYPE}" == "jp" ];
      then
          REGISTRAR=`cat ${WHOIS_TMP} | ${AWK} '/Registrant/ && $2 != ""  { REGISTRAR=substr($2,1,17) } END { print REGISTRAR }'`
+     elif [ "${TLDTYPE}" == "bg" ];
+     then
+         REGISTRAR=`cat ${WHOIS_TMP} | ${AWK} '/REGISTRANT:/ && $0 != ""  { getline; REGISTRAR=substr($0,1,17) } END { print REGISTRAR }'`
      fi
 
      # If the Registrar is NULL, then we didn't get any data
***************
*** 308,313 ****
--- 314,341 ----
                esac
              tday=`echo ${tdomdate} | cut -d'/' -f3`
            DOMAINDATE=`echo $tday-$tmonth-$tyear`
+     elif [ "${TLDTYPE}" == "bg" ]; # for .bg dd/mm/yyyy 05/03/2011
+     then
+             tdomdate=`cat ${WHOIS_TMP} | awk '/expires at/ { print $3 }'`
+             tyear=`echo ${tdomdate} | cut -d'/' -f3`
+             tmon=`echo ${tdomdate} | cut -d'/' -f2`
+                case ${tmon} in
+                      1|01) tmonth=jan ;;
+                      2|02) tmonth=feb ;;
+                      3|03) tmonth=mar ;;
+                      4|04) tmonth=apr ;;
+                      5|05) tmonth=may ;;
+                      6|06) tmonth=jun ;;
+                      7|07) tmonth=jul ;;
+                      8|08) tmonth=aug ;;
+                      9|09) tmonth=sep ;;
+                      10)tmonth=oct ;;
+                      11) tmonth=nov ;;
+                      12) tmonth=dec ;;
+                       *) tmonth=0 ;;
+                 esac
+             tday=`echo ${tdomdate} | cut -d'/' -f1`
+             DOMAINDATE=`echo $tday-$tmonth-$tyear`
      else # .com, .edu, .net and may work with others
            DOMAINDATE=`cat ${WHOIS_TMP} | ${AWK} '/Expiration/ { print $NF }'`
      fi

Готовият скрипт с поддръжка на .bg домейни, може да бъде намерен тук.

Примерен output:

./check.domain.expired.sh -d digsys.bg
Domain                              Registrar         Status   Expires     Days Left
----------------------------------- ----------------- -------- ----------- ---------
digsys.bg                           Digital Systems L Valid    01-jan-2012   313

Може да го ползваме в cronjob, и ако домейна изтича в рамките на месец да получим известяване по email.

./check.domain.expired.sh -a -d example.org  -q -x 30 -e mail@example.net

Има възможност и за подаване на повече от един домейн чрез текстов файл (всеки домейн на нов ред).
Въобще всички възможни опции:

Usage: ./check.domain.expired.sh [ -e email ] [ -x expir_days ] [ -q ] [ -a ] [ -h ]
          {[ -d domain_namee ]} || { -f domainfile}
 
  -a               : Send a warning message through email 
  -d domain        : Domain to analyze (interactive mode)
  -e email address : Email address to send expiration notices
  -f domain file   : File with a list of domains
  -h               : Print this screen
  -s whois server  : Whois sever to query for information
  -q               : Don't print anything on the console
  -x days          : Domain expiration interval (eg. if domain_date < days)

Вероятно по-натам на базата на това, ще направя и скрипт за директна проверка в nagios.

Tron: Legacy – от един различен ъгъл

неделя, декември 19th, 2010

Не успях да се класирам за премиерата, но понеже се бях настроил на Tron вълна днес се отправих към CCS. Още по времето на Avatar, реших че по-добрата 3D технология за моите очи на този етап е RealD, което донякъде определи избора ми. Може би след Нова година, когато предполагам първоначалния интерес е поотминал, ще ида да го видя и в Imax и ще направя сравнение.

Ако все още не сте гледали филма, то се смятайте за предупредени, защото след постера има Спойлери.


Честно казано, когато излезе първият трейлър не бях толкова очарован. Дори (тъй като не познавах оригинала) се чудех на целия шум. Следващите трейлъри обаче ме грабнаха. Може би направих грешка че попрочетох някое друго ревю преди да ида да го гледам и изглежда попаднах в капана на свръхочакванията. За това и останах с впечатлението, че на филма нещо му липсваше, не ме грабна както очаквах. Това съвсем не означава, че не ми е харесал, дори напротив. Визуалните ефекти, както всеки може да предположи дори от трейлърите са изключителни. Саундтрака в допълнение към тях също. Хареса ми и Olivia Wilde (позната като 13 от House M.D.) в едно доста интересно и различно амплоа, в което бих казал че се справи много добре. Но нещото, което ме грабна най-много е използването на няколко реални unix команди. И това е и нещото, за което ще напиша малко повече.

Нека започнем с това, че очевидно и Kevin Flynn, и синът му Sam са фенове на свободния софтуер. Да проникнеш в собствената си компания, за да откраднеш новата версия на операционната система, която трябва да излезе на пазара и да я пуснеш онлайн е доста показателно и същевременно е интересен намек към някои компании :)

Точно в този момент е ѝ първата поява на Unix команда, за съжаление не си спомням, какво точно написа авторът на новата 12-та версия на Flynn OS. След това обаче, когато Sam отива в скривалището на баща си и намира прашасалата му конзола, виждаме следното:

top

клик за по-голям размер

Очевидно изход от командата top, който показва, че има 2-ма users и uptime от 9 дни (което малкo не се връзва и е една от грешките, във филма, които забелязах), 2GB RAM и 4GB Swap . Изглежда всички приложения са стартирани като root :),спокойно се виждат watchdog и ksoftirqd (който се появява за пръв път в ядро 2.3.15 през 2000г.). Сякаш има и отворен текстов редактор (навява асоциации на vi), Интересно е, че се ползва touch screen. След като позабърсва прахта, Sam използва последователно „whoami„, „uname -a“ и history, след което стартира приложението, което задейства лазера и се озовава в „Мрежата“. Изхода от uname връща Solar OS 4.0.1, с generic kernel, а машината е с i386 процесор (Solar OS 4.0.1 Generic_50203….um4 i386 Unknown.Unknown). Та хората от Sun, които загиват под крилото на Oracle може би трябва да се чувства горди :) Вижда се, че има и два sata диска – sda и sdb, каквито определено е нямало през 80-тте, когато би трябвало да  е произведена въпросната машина. Та така, в общи линии използването на реални unix команди ме зарадва много, но както се вижда не са изпипали всичко в детайли :)

Оценка: 7/10

Снимки: wikip(m)edia, Victor Ruiz @ flickr

Pure-Ftpd и pure-uploadscript

сряда, декември 15th, 2010

Когато опре до пускане на ftp server с virtual users vsftpd не е първи избор, особено ако искаме sql backend. По тази причина, а и заради някои други благини моят избор в такива случаи пада върху pure-ftpd. Една от въпросните благини е pure-uploadscript, която за да не преразкавам, прави следното:

If Pure-FTPd is compiled with –with-uploadscript (default in binary distributions), and if the -o (or –uploadscript) is passed to the server, a named pipe called /var/run/pure-ftpd.upload.pipe is created. You will also notice an important file called /var/run/pure-ftpd.upload.lock, used for locking.
After a successful upload, the file name is written to the pipe.
pure-uploadscript reads this pipe to automatically run any program or script to process the newly uploaded file.

When the upload script is run, the name of the newly uploaded file is the first argument passed to the script (referenced as $1 by most shells) . Some environment variables are also filled by useful info about the file. UPLOAD_SIZE The size of the file, in bytes. UPLOAD_PERMS The permissions, as an octal integer. UPLOAD_UID The numerical UID of the owner. UPLOAD_GID The numerical GID of the owner. UPLOAD_USER The login of the owner. UPLOAD_GROUP The group name the files belongs to. UPLOAD_VUSER The full user name, or the virtual user name (127 chars max) .

Което е нещо доста полезно. Реално не е много трудно да се напише някой скрипт, който би правил същото. Но защо, след като го има имплементирано. Ползвал съм въпросната функция често пъти, например за да се изпрати mail с известие за качени файлове от даден потребител, или пък да се извърши последваща обработка.

Съществува обаче един проблем, който вече на два пъти ме тормози (а и не само мен). Да, като не си записвам нещо, което вече съм debug-нал, се налага да го debug-вам втори път. Именно това и инспирира този ми блог пост. За какво по-точно става дума. Pure-Ftpd по принцип идва без конфигурационен файл, въпреки че има такава опция и тя се ползва активно от дистрибуциите използващи пакетни мениджъри. Това всъщност не е от голямо значение в случая, но го споменавам защото аз по принцип ползвам такава. Първият път когато срещнах проблема, за който ще пиша по-долу всъщност беше под Slackware. Проблемът се проявява, ако човек пропусне ето тази забележка в README файла:

- ‘-o’: Write all uploaded files to ‘/var/run/pure-ftpd.upload.pipe’ so
that the ‘pure-uploadscript’ program can run. Don’t enable that option if
you don’t actually use ‘pure-uploadscript’ otherwise pure-ftpd will hang
waiting for pure-uploadscript to start.

Та хубаво е да се има предвид, че ако pure-ftpd бъде стартиран с ключ „-o“ то  чака pure-uploadscript да бъде стартиран, и ако не го намери, то се получава неприятна изненада. pure-ftpd не се оплаква, дори се вижда като процес, но реално зависва в очакване на pure-uploadscript. Според мен не е лошо това да се добави като коментар и в man-а или пък в секцията засягаща uploadscript в pure-ftpd.conf, въпреки че е изрично описано в README и във FAQ на сайта (ping-нах разработчиците по въпроса).

Та ако сме решили да ползваме pure-uploadscript, ще трябва да го стартираме сами, понеже:

For security purposes, the server never launches any external program. It’s why there is a separate daemon, that reads new uploads pushed into a named pipe by the server. Uploads are processed synchronously and sequencially.It’s why on loaded or untrusted servers, it might be a bad idea to use pure-uploadscript with lenghty or cpu-intensive scripts.

като имаме предвид следното:

IMPORTANT: YOU MUST START PURE-FTPD _FIRST_ and _THEN_ START PURE-UPLOADSCRIPT. THE REVERSE ORDER WON’T WORK.

За тази цел на базата на това си спретнах един скрипт, който да добавя в /etc/init.d/, като преди това е важно да се отбележат следните неща:

  • Приоритета на стартиране на pure-uploadscript трябва да е по-висок от този на init скрипта на pure-ftpd
  • „/usr/local/bin/uploadscript.sh“ е скрипт-а, който ще се изпълнява при успешен upload на файл /не се прави проверка, дали uploadscript.sh съществува/
  • не се прави проверка дали pure-uploadscript вече не е стартиран.
#!/bin/sh
#
# Startup script for the pure-ftpd pure-uploadscript
#
# chkconfig: - 90 10
# description: pure-upload script is a nice Pure-FTPD feature regarding \
# uploads. Any external program or script can be automatically called after a \
# successful upload. 
 
### BEGIN INIT INFO
# Provides:
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:
# Default-Stop:
# Short-Description:
# Description:
### END INIT INFO
 
# Source function library.
. /etc/rc.d/init.d/functions
 
exec="/usr/sbin/pure-uploadscript"
prog="pure-uploadscript"
#call an external program or script after successfull upload
callscript="/usr/local/bin/uploadscript.sh"
 
[ -e /etc/sysconfig/$prog ] &amp;&amp; . /etc/sysconfig/$prog
 
lockfile=/var/lock/subsys/$prog
 
start() {
 # Make sure the pure-ftpd is running
if [ ! -e /var/lock/subsys/pure-ftpd ]; then
        echo $"Pure-FTPd is not running - exiting"
        exit 1
fi
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    daemon $exec -B -r $callscript
    retval=$?
    echo
    [ $retval -eq 0 ] &amp;&amp; touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] &amp;&amp; rm -f $lockfile
    return $retval
}
 
restart() {
    stop
    start
}
 
reload() {
    restart
}
 
force_reload() {
    restart
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status &gt; /dev/null 2&gt;&amp;1
}
 
case "$1" in
    start)
        rh_status_q &amp;&amp; exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

Понеже изглежда, че WP-Syntax има собствено мнение относно визуализацията на „&&“ и „>“ то скрипта може да бъде свален и направо от тук.

Fedora 14 (Laughlin)

четвъртък, ноември 25th, 2010

Поради ред причини отново не успях да отразя своевременно появата на новия release на Fedora – 14, с кодово име Laughlin, която се появи на 2-ри ноември.

За пръв път от доста време насам дистрибуцията, не предлага кой знае какви новости за обикновените десктоп потребители, освен libjpeg-turbo, който на теория  води до двукратно увеличение в бързината при зареждането и обработка на изображения.

Има някои  новости за разработчици (нови версии на Python и Perl, включване на D), като за мен най-интересната от тях е работата по gdb.

Този път има доста интересни неща и за системните администратори. За съжаление бе взето решение включването на будещият най-голямо внимание feature, а именно systemd да бъде отложено за следващия release. Чаках го с голям интерес, но ще почакам още малко, не ми се скача на Rawhide, само за да си начеша крастата. Но в общи линии ще преобърне boot процеса с главата надолу. Един от основните разработчици Lennart Poettering започна доста интересна серия от статии в блога си, описващи някои от възможностите на бъдещия заместник на SysV / Upstart. Lennart нашумя и покрай конфронтацията си с Linus Torvalds касаеща предложената алтернатива на добилият напоследък популярност 200 редов patch в linux ядрото. Но да се върна на това какво ново във Fedora. Laughlin включва tool-а virt-v2v, който да подпомогне лесната миграция от Xen към KVM. Освен това Fedora 14 бе достъпна на Amazon EC2 в деня на оповестяването на традиционния release.

За времето от излизането до сега, направих две чисти инсталации, както и два yum upgrade-а от 13 до 14. Всички машини работят без абсолютно никакви проблеми (тук отварям една скоба, но ще се спра на това по-късно). Начините за upgrade остават същите както досега, с тази разлика, че във функционалността на yum е добавена опцията releasever, благодарение на която вече не е нужно да се инсталират / конфигурират новите хранилища, а единствено да се импортне ключа, с който са подписани пакетите:

rpm --import https://fedoraproject.org/static/97A1071F.txt
yum update yum
yum --releasever=14 distro-sync --skip-broken

Естествено преди инсталация или upgrade не е лошо да се хвърли едно око на Common Bugs.

На http://spins.fedoraproject.org могат да бъдат намерени и персонализирани версии на дистрибуцията с инсталиран и преконфигуриран допълнителен софтуер.

И не на последно място, нека спомена че сайтът на дистрибуцията е с чисто нов дизайн.

На края нека спомена и за проблема, който се прояви на една от гореспоменатите машини. Изразяваше се в това, че звукът на flash клипчетата по сайтовете беше неслушаем. Първоначално не му обърнах особено внимание, т.е. не мислех, че може да се дължи на upgrade-а, защото се прояви на само една от машините, но то на две от другите е нямало и как това да стане. Bug-ът засяга 64bit системи. В крайна сметка се оказа, че се дължи на промяна в кода на glibc и некадърно написаният proprietary driver на Adobe. Workaround-а е дело на самия Linus Torvalds.

И нещо за бъдещия наследник, Fedora 15, която трябва да се появи май догодина, ще носи името Lovelock.

Нови BG огледала на Fedora и CentOS

понеделник, септември 13th, 2010

Благодарение на Йордан Георгиев и Телепойнт Fedora се сдоби с ново огледало.  Нещо, от което имаше нужда след като fedora.lcpe.uni-sofia.bg и mirrors.evrocom.net доста отдавна вече не са на линия и една от най-популярните дистрибуции  – Fedora се оказа само с едно огледало в България (fedora.linuxman.biz). В този ред на мисли с радост посрещнах новината за mirror.telepoint.bg. Бяха се сетили да включат и EPEL, а освен това след направено допитване и отправено запитване от мен решиха да включат и RPMFusion. Така че почти няма пакет, който да не може да се инсталира със скоростта, която предлага Peering-a.

Огледалото включва и CentOS, което също е голяма благина за мен, тъй като е дистрибуцията, която основно ползвам за сървърни инсталации. Макар и с две официални огледала на CentOS, актуално е само едно, така че присъствието му на сървъра на telepoint е плюс.

Ето и пълен списък на това, което включва mirror.telepoint.bg на този етап:

Най-лесният начин да се използва огледалото под Fedora и CentOS е да се инсталира съответно yum-plugin-fastestmirror и yum-fastestmirror.

Другата възможност е изрично да се зададе за mirror да се ползва mirror.telepoint.bg в repo файловете, което във fedora.repo изглежда по следния начин:

cat /etc/yum.repos.d/fedora.repo
[fedora]
name=Fedora $releasever - $basearch
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
baseurl=http://mirror.telepoint.bg/fedora/fedora/linux/releases/$releasever/Everything/$basearch/os/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&amp;arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
Stop ACTA