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

Нова опция в yum – history

неделя, декември 13th, 2009

Когато в предишното си писание споменах за проблемите покрай PackageKit, за които се шумеше при излизането на Fedora 12, много хора се питаха как никой от хората ползвали Rawhide не е забелязал такава промяна. Отговорът е прост. Никой (в това число и аз) не ползва графични инструменти от подобен род, когато имаш  yum.

Някъде  някой беше казал (за съжаление не си спомням, къде съм го прочел), че всяка себеуважаваща се съвременна дистрибуция трябва да има добър пакетен мениджър. За Redhat дериватите това е yum. Няма да се спирам на историята на проекта, но не мога да не спомена, че е изминат дълъг път от началото, и че постоянно става все по-добър. Разбира се, има и някои минуси (за мен лично, основно свързани с бързината), но след като в миналата версия бе представен yum-presto (delta rpms), то във Fedora 12 и съответната нова версия на yum (3.2.25), вече имаме yum history. Нещо, което предполагам доста администратори а и потребители безспорно ще оценят, и нещо, от което мисля,  че наистина имаше нужда.

Какво се получаваше преди yum history? Инсталираме даден пакет, който има дадени зависимости, които също се инсталират покрай него. По някаква причина решаваме, че нямаме нужда от въпросната програма и я премахваме. Не всички dependencies инсталирани заедно с нея, винаги се премахват обаче. Какво ни дава history?

Дава ни възможността да се върнем една стъпка назад (undo) и да инсталираме или премахнем, това, което сме инсталирали или премахнали преди това. Получи се малка тафтология, но мисля, че с примерите по-долу нещата ще се изяснят. Възможните опции са: yum history info|list|summary|undo|redo|new

Ето ги и примерите:

[root@Pegasus ~]# yum history
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
ID     | Login user             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
6 |  Nick                | 2009-12-13 00:52 | Install        |    1
5 |  Nick                | 2009-12-13 00:48 | Install        |    4
4 |  Nick                | 2009-12-12 12:02 | Install        |    2
3 |  Nick                | 2009-12-12 11:43 | Install        |    8
2 |  Nick                | 2009-12-12 11:29 | Install        |    2
1 |  Nick                | 2009-12-12 11:20 | E, I, U        |   77

Ако искаме да видим точно определена транзакция, то изпълняваме yum history info ID:

[root@Pegasus ~]# yum history info 2
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
Transaction ID : 2
Begin time     : Sat Dec 12 11:29:54 2009
Begin rpmdb    : 1968:ab76e09445bc9332ee617c5c7bf34a9859e04ade
End time       :            11:30:01 2009 (7 seconds)
End rpmdb      : 1970:c33229c535f6633f7b1ee91e1461fb56c9784e64
User           :
Return-Code    : Success
Transaction performed with:
    Installed    rpm-4.7.1-6.fc12.x86_64
    Installed    yum-3.2.25-1.fc12.noarch
    Installed    yum-plugin-fastestmirror-1.1.24-2.fc12.noarch
Packages Altered:
    Install      kmod-nvidia-190.42-1.fc12.8.x86_64
    Dep-Install  kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64

Ако искаме да премахнем промените направени от въпросната транзакция, то изпълняваме yum history undo ID:

[root@Pegasus ~]# yum history undo 2
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
Determining fastest mirrors
 * fedora: fedora.linuxman.biz
 * rpmfusion-free: ftp.upjs.sk
 * rpmfusion-free-updates: ftp.upjs.sk
 * rpmfusion-nonfree: ftp.upjs.sk
 * rpmfusion-nonfree-updates: ftp.upjs.sk
rpmfusion-free-updates                                                                                                                                       | 3.3 kB     00:00
rpmfusion-nonfree-updates                                                                                                                                    | 3.3 kB     00:00
updates                                                                                                                                                      | 4.4 kB     00:00
0 packages excluded due to repository protections
Undoing transaction 2, from Sat Dec 12 11:29:54 2009
    Install      kmod-nvidia-190.42-1.fc12.8.x86_64
    Dep-Install  kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64
Resolving Dependencies
--> Running transaction check
---> Package kmod-nvidia.x86_64 0:190.42-1.fc12.8 set to be erased
---> Package kmod-nvidia-2.6.31.6-166.fc12.x86_64.x86_64 0:190.42-1.fc12.8 set to be erased
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================================================================================================
 Package                                                       Arch                            Version                                     Repository                          Size
====================================================================================================================================================================================
Removing:
 kmod-nvidia                                                   x86_64                          190.42-1.fc12.8                             installed                           0.0
 kmod-nvidia-2.6.31.6-166.fc12.x86_64                          x86_64                          190.42-1.fc12.8                             installed                           11 M
 
Transaction Summary
====================================================================================================================================================================================
Remove        2 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)
 
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : kmod-nvidia-190.42-1.fc12.8.x86_64                                                                                                                           1/2
  Erasing        : kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64                                                                                                  2/2
 
Removed:
  kmod-nvidia.x86_64 0:190.42-1.fc12.8                                         kmod-nvidia-2.6.31.6-166.fc12.x86_64.x86_64 0:190.42-1.fc12.8
 
Complete!

Ако отново изпълним yum history list, ще видим, че това е създало нова транзакция:

[root@Pegasus ~]# yum history
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
ID     | Login user             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     7 |  Nick                | 2009-12-13 13:05 | Erase          |    2
     6 |  Nick                | 2009-12-13 00:52 | Install        |    1
     5 |  Nick                | 2009-12-13 00:48 | Install        |    4
     4 |  Nick                | 2009-12-12 12:02 | Install        |    2
     3 |  Nick                | 2009-12-12 11:43 | Install        |    8
     2 |  Nick                | 2009-12-12 11:29 | Install        |    2
     1 |  Nick                | 2009-12-12 11:20 | E, I, U        |   77

и ако решим все пак да върнем нещата назад и да инсталираме отново Kmod-nvidia*, то има два начина да го направим – yum history undo 7, или yum history redo 2:

[root@Pegasus ~]# yum history undo 7
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * fedora: fedora.linuxman.biz
 * rpmfusion-free: ftp.upjs.sk
 * rpmfusion-free-updates: ftp.upjs.sk
 * rpmfusion-nonfree: ftp.upjs.sk
 * rpmfusion-nonfree-updates: ftp.upjs.sk
0 packages excluded due to repository protections
Undoing transaction 7, from Sun Dec 13 13:05:43 2009
    Erase        kmod-nvidia-190.42-1.fc12.8.x86_64
    Erase        kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64
Resolving Dependencies
--> Running transaction check
---> Package kmod-nvidia.x86_64 0:190.42-1.fc12.8 set to be updated
---> Package kmod-nvidia-2.6.31.6-166.fc12.x86_64.x86_64 0:190.42-1.fc12.8 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================================================================================================
 Package                                                   Arch                        Version                                 Repository                                      Size
====================================================================================================================================================================================
Installing:
 kmod-nvidia                                               x86_64                      190.42-1.fc12.8                         rpmfusion-nonfree-updates                       29 k
 kmod-nvidia-2.6.31.6-166.fc12.x86_64                      x86_64                      190.42-1.fc12.8                         rpmfusion-nonfree-updates                      2.2 M
 
Transaction Summary
====================================================================================================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)
 
Total download size: 2.3 M
[root@Pegasus ~]# yum history redo 2
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * fedora: fedora.linuxman.biz
 * rpmfusion-free: ftp.upjs.sk
 * rpmfusion-free-updates: ftp.upjs.sk
 * rpmfusion-nonfree: ftp.upjs.sk
 * rpmfusion-nonfree-updates: ftp.upjs.sk
0 packages excluded due to repository protections
Repeating transaction 2, from Sat Dec 12 11:29:54 2009
    Install      kmod-nvidia-190.42-1.fc12.8.x86_64
    Dep-Install  kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64
Resolving Dependencies
--> Running transaction check
---> Package kmod-nvidia.x86_64 0:190.42-1.fc12.8 set to be updated
--> Processing Dependency: kmod-nvidia-2.6.31.6-166.fc12.x86_64 >= 190.42-1.fc12.8 for package: kmod-nvidia-190.42-1.fc12.8.x86_64
--> Running transaction check
---> Package kmod-nvidia-2.6.31.6-166.fc12.x86_64.x86_64 0:190.42-1.fc12.8 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================================================================================================
 Package                                                   Arch                        Version                                 Repository                                      Size
====================================================================================================================================================================================
Installing:
 kmod-nvidia                                               x86_64                      190.42-1.fc12.8                         rpmfusion-nonfree-updates                       29 k
Installing for dependencies:
 kmod-nvidia-2.6.31.6-166.fc12.x86_64                      x86_64                      190.42-1.fc12.8                         rpmfusion-nonfree-updates                      2.2 M
 
Transaction Summary
====================================================================================================================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)
 
Total download size: 2.3 M

Ако искаме повече информация за даден пакет, то може да комбинираме някои от опциите. Да речем yum history summary kmod-nvidia, yum history list kmod-nvidia или yum history info kmod-nvidia ни дават следната информация:

[root@Pegasus ~]# yum history summary kmod-nvidia
Loaded plugins: allowdowngrade, fastestmirror, presto, protectbase, refresh-packagekit, security
Login user                 | Time                | Action(s)        | Altered
-------------------------------------------------------------------------------
 Nick                    | Last day            | E, I             |        4
 Nick                    | Last week           | Install          |        2
[root@Pegasus ~]# yum history list kmod-nvidia
Loaded plugins: allowdowngrade, dellsysidplugin2, fastestmirror, presto, protectbase, refresh-packagekit, security
ID     | Login user             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     8 |  Nick                | 2009-12-13 13:11 | Install        |    2
     7 |  Nick                | 2009-12-13 13:05 | Erase         |    2
     2 |  Nick                | 2009-12-12 11:29 | Install        |    2
[root@Pegasus ~]# yum history info kmod-nvidia
Loaded plugins: allowdowngrade, dellsysidplugin2, fastestmirror, presto, protectbase, refresh-packagekit, security
Transaction ID : 8
Begin time     : Sun Dec 13 13:11:52 2009
Begin rpmdb    : 1983:4824469c95865c6b3a6548a690e9fd10f7b8d43a
End time       :            13:11:57 2009 (5 seconds)
End rpmdb      : 1985:dc98b76dd546e9edd76e8b5b8520f5f7a8c7d7c7
User           :  Nick
Return-Code    : Success
Transaction performed with:
    Installed    rpm-4.7.1-6.fc12.x86_64
    Installed    yum-3.2.25-1.fc12.noarch
    Installed    yum-plugin-fastestmirror-1.1.24-2.fc12.noarch
Packages Altered:
    Install      kmod-nvidia-190.42-1.fc12.8.x86_64
    Dep-Install  kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64
-------------------------------------------------------------------------------
Transaction ID : 7
Begin time     : Sun Dec 13 13:05:43 2009
Begin rpmdb    : 1985:dc98b76dd546e9edd76e8b5b8520f5f7a8c7d7c7
End time       :            13:05:54 2009 (11 seconds)
End rpmdb      : 1983:4824469c95865c6b3a6548a690e9fd10f7b8d43a
User           :  Nick
Return-Code    : Success
Transaction performed with:
    Installed    rpm-4.7.1-6.fc12.x86_64
    Installed    yum-3.2.25-1.fc12.noarch
    Installed    yum-plugin-fastestmirror-1.1.24-2.fc12.noarch
Packages Altered:
    Erase        kmod-nvidia-190.42-1.fc12.8.x86_64
    Erase        kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64
-------------------------------------------------------------------------------
Transaction ID : 2
Begin time     : Sat Dec 12 11:29:54 2009
Begin rpmdb    : 1968:ab76e09445bc9332ee617c5c7bf34a9859e04ade
End time       :            11:30:01 2009 (7 seconds)
End rpmdb      : 1970:c33229c535f6633f7b1ee91e1461fb56c9784e64
User           :  Nick
Return-Code    : Success
Transaction performed with:
    Installed    rpm-4.7.1-6.fc12.x86_64
    Installed    yum-3.2.25-1.fc12.noarch
    Installed    yum-plugin-fastestmirror-1.1.24-2.fc12.noarch
Packages Altered:
    Install      kmod-nvidia-190.42-1.fc12.8.x86_64
    Dep-Install  kmod-nvidia-2.6.31.6-166.fc12.x86_64-190.42-1.fc12.8.x86_64

Полезно, лесно и удобно!

Osprey 230 Linux Driver Sound Patch

четвъртък, септември 24th, 2009

Реших да драсна няколко реда относно този проблем, защото информацията в нета е доста оскъдна. Накратко, capture картите на Osprey от серия 230 (и не само те), но в моя случай ставаше дума за такава имат проблем със звука. Те варират от пълната му липса до едно дразнещо бучене, макар и да се чува някакво подобие на звук. По-често срещаният проблем е вторият и причината всъщност е във високият gain. Из мейлинг листите има доста въпроси относно този проблем, но малка част от тях водят до някакво решение.

До ядро 2.6.9 Viewcast са имали собствени драйвери за Linux за своите карти, но в последствие тяхната разработка е била прехвърлена на общността и в частност на хората зад v4l/dvb. Драйверите за v4l поначало са част от linux ядрото. В ядрото идващо с CentOS 5.2, а именно 2.6.18 нужните драйвери за разпознаване и работа на Osprey картите са налице. Това са bttv за video и snd_bt87x за звука. И докато видеото може да се каже че е с перфектно качество, то както вече стана дума не можем да кажем това и за звука. При малко по-усилено търсене могат да се намерят едни стари пачове от 2006-та година, които са решавали проблема посредством btaudio, но на мен те не ми свършиха работа. Patch-ът, който всъщност работи, може да бъде намерен ето тук . (Понеже той не може да бъде видян без регистрация за v4l mail листата, то ще направя и local mirror).

И така, ако в dmesg, или /var/log/messages виждаме нещо подобно:

bttv: driver version 0.9.18 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 17) at 0000:0b:04.0, irq: 19, latency: 132, mmio: 0xd8000000
bttv0: detected: Osprey-200 [card=88], PCI subsystem ID is 0070:ff01
bttv0: using: Osprey 200/250 [card=88,autodetected]
bttv0: gpio: en=00000000, out=00000000 in=00ffffff [init]
bttv0: osprey eeprom: card=89 'Osprey 210/220/230' serial=5436547
bttv0: osprey eeprom: Changing card type from 88 to 89
bttv0: tuner absent
bttv0: registered device video0
bttv0: registered device vbi0

то картата ни е разпозната, модулът е зареден и можем да я ползваме по предназначение (засега без звук).

Ето и основните стъпки, по които да се ръководи човек сблъскал се с подобен род проблем, като те като цяло са малко redhat specific, но не би трябвало да бъде проблем да се ползват и за други дистрибуции.

  • Сваляваме osprey-snd-patch.
cd /usr/src/
wget http://just4nick.net/blog/wp-content/uploads/2009/09/osprey-snd.patch
  • Сваляме сорс кода на v4l-dvb и го разархивираме.
wget http://linuxtv.org/hg/~tap/bttv/archive/tip.tar.gz
tar -zxvf bttv-35ddb77b68f8.tar.gz
mv bttv-35ddb77b68f8 v4l-dvb
  • Прилагаме patch-a.
patch --dry-run -p1 -d v4l-dvb < osprey-snd.patch

Както се вижда и от самия код ползваме опцията на patch за суха тренировка –dry-run. Така се предпазваме от грешки. Ако всичко е наред, би трябвало да видим нещо от този род:

patching file linux/drivers/media/video/bt8xx/bttv-if.c
patching file linux/drivers/media/video/bt8xx/bttv.h
Hunk #1 succeeded at 302 (offset 1 line).
patching file linux/sound/pci/bt87x.c
Hunk #7 succeeded at 437 (offset 2 lines).
Hunk #9 succeeded at 778 (offset 2 lines).
Hunk #11 succeeded at 984 (offset 2 lines).
Hunk #12 succeeded at 1084 (offset 2 lines).
Hunk #13 succeeded at 1109 (offset 2 lines).

След което можем да пристъпим към същинското прилагане на patch-а с командата:

patch -p1 -d v4l-dvb < osprey-snd.patch
  • Инсталираме kernel-devel, kernel-headers, redhat-rpm-config, rpm-build.
yum -y install kernel-devel kernel-headers redhat-rpm-config rpm-build
  • Сваляме и инсталираме src rpm-a на ядрото.
cd /usr/local/src/
wget ftp://mirror.switch.ch/pool/3/mirror/centos/5.3/updates/SRPMS/kernel-2.6.18-128.4.1.el5.src.rpm
rpm -ivh kernel-2.6.18-128.4.1.el5.src.rpm
  • Билдваме модифицирания код на ядрото.
cd /usr/src/redhat/SPECS
rpmbuild -bp --target=$(arch) kernel-2.6.spec
  • Коригираме Makefile.
cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
vim Makefile

където променяме

EXTRAVERSION = -prep

EXTRAVERSION = -128.4.1.el5
  • Компилираме и инсталираме driver-ите.
cp configs/kernel-2.6.18-x86_64.config .config
make modules_prepare
cd /usr/src/v4l-dvb
make all
make install
make sound-install

Ако всичко мине успешно, то при изпълняването на

ls -la /lib/modules/2.6.18-128.4.1.el5/kernel/sound/pci/snd-bt87x.ko

би трябвало да видим, че модула е налице и е с текуща дата и час.

  • Зареждаме модула.
rmmod snd_bt87x
modprobe snd_bt87x

След което би трябвало да е възможно да коригираме sound capture посресдством alsamixer и да имаме нормално работещ звук.

Допълнителна информация:

http://linux.lcpe.uni-sofia.bg/manuals/openintegra/xfs/RHEL_xfs_RPM.html
http://wiki.centos.org/HowTos/BuildingKernelModules
http://www.google.bg/#hl=bg&q=linux+audio+problem+Osprey+230&meta=&fp=e366587b524c8386
Stop ACTA