
cc (xkcd)
Когато в предишното си писание споменах за проблемите покрай 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
Полезно, лесно и удобно!
Като съм започнал с howto like статиите, нека да напиша подобна и за едно от другите неща, които ми се наложи да правя експресно напоследък. А именно ограничаване на достъпа до дадена услуга базирано на времето (час, ден, седмица, месец…). Начини да се направи това има доста, но аз се спрях на този с iptables.
Time модула, обаче не се поддържа по подразбиране и е необходимо пачване на iptables и ядрото с patch-o-matic. Това всъщност не е точно така, посредством xtables в по-новите версии на ядрото и iptables поддръжката на time модула (а и не само) е налична. Но CentOS 5 ползва ядро 2.6.18 и iptables 1.3.5, така че са необходими някои промени. И така ето и основните стъпки, по които трябва да преминем ако имаме желание да филтрираме достъп на базата на времето.
yum install kernel-devel kernel-headers iptables-devel ncurses ncurses-devel rpm-build redhat-rpm-config
cd /usr/local/src/ wget http://ftp.iasi.roedu.net/mirrors/centos.org/5.3/updates/SRPMS/kernel-2.6.18-128.7.1.el5.src.rpm wget http://centos.nano-box.net/5.3/os/SRPMS/iptables-1.3.5-4.el5.src.rpm rpm -ivh kernel-2.6.18-128.7.1.el5.src.rpm rpm -ivh iptables-1.3.5-4.el5.src.rpm
cd /usr/src/redhat/SPECS rpmbuild -bp --target=$(arch) kernel-2.6.spec rpmbuild -bp iptables.spec
cd /usr/src/redhatBUILD/kernel-2.6.18/linux-2.6.18.x86_64/ vim Makefile
където променяме
EXTRAVERSION = -prep EXTRAVERSION = -128.7.1.el5
cd /usr/local/src/ wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20090909.tar.bz2 tar -jxvf patch-o-matic-ng-20090909.tar.bz2
export KERNEL_DIR=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/ export IPTABLES_DIR=/usr/src/redhat/BUILD/iptables-1.3.5/ ./runme --download ./runme time
cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/ cp /boot/config-2.6.18-128.7.1.el5 .config make menuconfig
make modules_prepare make M=net/ipv4/netfilter strip --strip-debug net/ipv4/netfilter/ipt_time.ko cp net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.18-128.7.1.el5/kernel/net/ipv4/netfilter/ chmod a+x /lib/modules/2.6.18-128.7.1.el5/kernel/net/ipv4/netfilter/ipt_time.ko depmod 2.6.18-128.7.1.el5
cd /usr/src/redhat/BUILD/iptables-1.3.5/ make install KERNEL_DIR=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64 BINDIR=/sbin LIBDIR=/lib64 MANDIR=/usr/share/man install
modprobe ipt_time
iptables RULE -m time --timestart TIME --timestop TIME --days DAYS -j ACTION
където:
--timestart TIME : Time start value . Format is 00:00-23:59 (24 hours format) --timestop TIME : Time stop value. --days DAYS : Match only if today is one of the given days. (format: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday)
Допълнителна информация:
http://linux.lcpe.uni-sofia.bg/manuals/openintegra/xfs/RHEL_xfs_RPM.html http://wiki.centos.org/HowTos/BuildingKernelModules http://www.cyberciti.biz/tips/iptables-for-restricting-access-by-time-of-day.html http://www.iptables.org/documentation/HOWTO/netfilter-extensions-HOWTO-2.html
Реших да драсна няколко реда относно този проблем, защото информацията в нета е доста оскъдна. Накратко, 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, но не би трябвало да бъде проблем да се ползват и за други дистрибуции.
cd /usr/src/ wget http://just4nick.net/blog/wp-content/uploads/2009/09/osprey-snd.patch
wget http://linuxtv.org/hg/~tap/bttv/archive/tip.tar.gz tar -zxvf bttv-35ddb77b68f8.tar.gz mv bttv-35ddb77b68f8 v4l-dvb
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
yum -y install kernel-devel kernel-headers redhat-rpm-config rpm-build
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
cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/ vim Makefile
където променяме
EXTRAVERSION = -prep EXTRAVERSION = -128.4.1.el5
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
10.00 a.m. – няма ток в collocation центъра
16.00 p.m. – dmesg | grep sda:
ReiserFS: sda1: warning: vs-13060: reiserfs_update_sd: stat data of object [91527 91528 0x0 SD] (nlink == 1) not found (pos 1) – (очертава се денят да е дълъг)
17.00 p.m.:
umount /dev/sda1
reiserfsck –check /dev/sda1
Checking internal tree..finished
Comparing bitmaps..finished…
Fatal corruptions were found, Semantic pass skipped
1 found corruptions
###########
17.30 p.m.:
reiserfsck –scan-whole-partition –rebuild-tree /dev/sda1 – и стискам палци
17.30 – 23:00 p.m.
три бири в приятна компания :)
едно уиски докато чакам да минем от 80% на 100%
23;10 p.m.
###########
reiserfsck finished at Tue Jun 23 23:09:32 2009
###########
23:15 p.m.:
yum upgrade
00:30 p.m. – welcome to the machine :)