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 ] && . /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 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    stop
    start
}
 
reload() {
    restart
}
 
force_reload() {
    restart
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status > /dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && 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&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch

vlc vuvuzela filter

събота, юни 12th, 2010

Както споменах преди малко в twitter след малко игра с equlizer-a на VLC успях до някаква степен да филтрирам досадния жужащ звук на вувузелите. След малко research в Google намерих едно проучване на South African Medical Journal, в което има следното:

The initial report (1) provided the maximum instantaneous A-weighted sound pressure level (Lmax Fast [dBA]) averaged for 2 recordings during single vuvuzela blasts at 4 distances from the bell of the vuvuzela. This method is in agreement with the recommendation by the World Health Organization (2) for measuring individual sound events. A-weighting was used for all measurements to compensate for the non-linear sensitivity of the human ear, which is differentially sensitive to sound across the frequency spectrum (least sensitive at very high and very low frequencies). A breakdown of the average intensities at individual frequencies across the frequency spectrum is provided in Table I. A characteristically flat frequency spectrum was evident between 250 and 8 000 Hz. The average intensity difference between the individual frequency measurements (Table I) of the 2 recordings at each of the 4 respective distances from the bell of the vuvuzela was 0.6 dB ([ or -]3.2 dB standard deviation)

И за прегледност има и табличка:

 Intensity (dBA)

Frequency             Bell
(Hz)        At ear   opening   1 m    2 m

125            36        62     38     35
250            92       106     82     85
500           103       121    102    101
1 000         106       122    108    100
2 000         101       122    110    101
4 000          97       109    110    102
5 000          93       111    109    100
8 000          87       110    107     98

И така, за тези, които като мен гледат мачовете на стриймове онлайн, а и за тези, които имат equalizer-и на телевизорите си вече има частично решение на проблема с дразнещия звук издаван от вувузелите. Ето как изглежда equalizer-a на моето vlc в момента:

Забележка:
Това безусловно рефлектира и върху коментара на БНТ. Но понеже така или иначе не съм особен фен на Петър Василев и Никола Ибришимов това е приемлив компромис.

Редакция 1:
Подобно нещо, направено с използването на audio филтри в mplayer, или по-точно:

* -af pan command line fix, now outputs the right number of channels
and accepts values < 0 or > 1. Channel order had to be changed.
* -af sinesuppress to remove a sine at a certain frequency

mplayer -af pan=1:0.5:0.5,sinesuppress=233:0.01,sinesuppress=466:0.01,sinesuppress=932:0.01,sinesuppress=1864:0.01,sinesuppress=232:0.01,sinesuppress=465:0.01,sinesuppress=931:0.01,sinesuppress=1863:0.01,sinesuppress=234:0.01,sinesuppress=467:0.01,sinesuppress=933:0.01,sinesuppress=1865:0.01

За MeeGo малко по-подробно

вторник, февруари 16th, 2010

Както по-рано през деня не без ентисуазъм споделих днес се роди MeeGo (всъщност вероятно се е родил по-рано, но днес широката общественост разбра за това).  Вече се появиха както повече информация така и доста коментари около новия проект. Има хора както „подскачащи“ от щастие (до голяма степен и аз май попадам в тази категория), така и такива, които открито зачеркват проекта, дори преди да са му дали шанс (главно hardcore фенове на gtk i .deb).

И така, какво можем да очакваме от MeeGo:

  • версия 1 през второто четиримесечие на 2010.
  • open source проект под крилото на Linux Foundation (точно както Moblin)
  • поддръжка на ARM и x86 (Atom) архитектури
  • MeeGo ще ползва като платформа Moblin, а за UI ще се използва Qt toolkit-a на Maemo
  • въпреки това MeeGo ще поддържа gtk и Clutter
  • за пакетна система ще се използва rpm

Като цяло и двете компании се отказват от някои разработки в името на общото благо. Nokia използва gtk базираното Maemo 5 и Debian-ската пакетна система в N900. Intel от своя страна залага на Gtk и Clutter и rpm пакетна система за Moblin. Вероятно на всеки е ясно защо за основен интерфейс ще се заложи на Qt. Но не всеки ще се сети защо е избран .rpm за сметка на .deb. Отговорът може да се намери в един от коментарите към блоговете на MeeGo и той е, че .rpm е бил избрал заради Linux Standard Base (LSB), a защо може да се види тук. Както споменах полемики обаче не липсват – gtk vs qt, rpm vs deb, та до това, че името било глупаво. Някои хора явно им трябва време да осъзнаят, че плюсовете от цялата работа несъмнено са повече. В крайна сметка получаваме Linux базирана система, с избор от графични интерфейси, която ще поддържа голям брой устройства. Какво повече да иска човек…

Е, аз получавам малко повече – Linux базирана система с любимият ми графичен интерфейс (KDE работят усилено покрай Maemo 6) и пакетен мениджър. Да не говорим, че Fedora 12 поддържаше Moblin. Няма как всичко това да не  ми навява само приятни мисли за бъдещето. Та то си е сбъдване на мечта в напреднала фаза.

Време е за малко линкове:

  • постове в блоговете на две от основните лица стоящи зад Маемо/MeeGo – Quim Gil и Ari Jaaksi (отговарящ за Maemo в Nokia)
  • интересно сравнение на трите проекта може да бъде видяно тук
  • и едно видео по въпроса

Stop ACTA