Michal Čihař - Blog Archives for Linux

EPG v DVB česky

Už delší dobu mám k počítači připojený DVB-T přijímač a zhruba stejnou dobu mě štve nedostupnost rozumně fungující aplikace. Program dodaný výrobcem a fungující pod Windows padá naprosto neuvěřitelně, Linuxové alternativy jsou zatím dost ve vývoji. Existuje Klear , což se aplikace přímo pro DVB a Kaffeine , který je multimediálním přehrávačem s přidanými funkcemi pro DVB.

Ani v jednom ovšem nefunguje česky EPG (Electronic Program Guide), tedy zobrazení programu. Když se naskytl volnější víkend, tak jsem se rozhodl s tím něco udělat a tady je výsledek. Klear s těmito patchi už češtinu zvládá bez problémů. Sice ještě pořád zbývá 30 nepodporovaných kódování, ale to ať zkoumá někdo, kdo to může vyzkoušet :-).

PS: Proč není povolena značka ABBR?

Suspend s nvidií a 2.6.14

Kernel 2.6.14 konečně vyřešil můj problém s memory leakem kdesi v ACPI, takže nezbylo než upgradovat :-). Ovšem nvidiacký modul se poté zuřivě bránil suspendu do paměti, přestože to dříve fungovalo.

Samozřejmě řešení je jednoduché, stačí se podívat, jaké eventy se posílají:

 /*
 * There are 4 important states driver can be in:
 * ON     -- driver is working
 * FREEZE -- stop operations and apply whatever policy is applicable to a
 *           suspended driver of that class, freeze queues for block like IDE
 *           does, drop packets for ethernet, etc... stop DMA engine too etc...
 *           so a consistent image can be saved; but do not power any hardware
 *           down.
 * SUSPEND - like FREEZE, but hardware is doing as much powersaving as
 *           possible. Roughly pci D3.
 *
 * Unfortunately, current drivers only recognize numeric values 0 (ON) and 3
 * (SUSPEND).  We'll need to fix the drivers. So yes, putting 3 to all different
 * defines is intentional, and will go away as soon as drivers are fixed.  Also
 * note that typedef is neccessary, we'll probably want to switch to
 *   typedef struct pm_message_t { int event; int flags; } pm_message_t
 * or something similar soon.
 */

A příslušně opravit nvidiácké zdrojáky:

 --- orig/nv/nv.c  2005-07-19 01:58:40.000000000 +0200
+++ mod/nv/nv.c        2005-11-15 15:28:46.500089000 +0100
@@ -3624,12 +3624,13 @@
 
     switch (state)
     {
-        case PM_SUSPEND_MEM:
+        case PM_EVENT_SUSPEND:
+        case PM_EVENT_FREEZE:
             nv_printf(NV_DBG_INFO, "NVRM: ACPI: received suspend event\n");
             status = rm_power_management(nv, 0, NV_PM_ACPI_STANDBY);
             break;
 
-        case PM_SUSPEND_ON:
+        case PM_EVENT_ON:
             nv_printf(NV_DBG_INFO, "NVRM: ACPI: received resume event\n");
             status = rm_power_management(nv, 0, NV_PM_ACPI_RESUME);
             break;

Hrátky se symlinky

Právě se mi podařilo se zamotat ve vlastním chaosu symlinků, tak jsem se vydal trochu zkoumat jejich chování. Proč je pro ls symlink něco jiného než pro cd?

Nejdříve příklad, na kterém si to můžete vyzkoušet:

 mkdir dir1 dir2
touch dir1/file_in_1 dir2/file_in_2
ln -s ../dir1 dir2/d1

Tím vznikla takováto struktura:

 $ ls -lR
.:
total 0
drwxr-xr-x  2 michal michal 22 2005-10-25 22:09 dir1
drwxr-xr-x  2 michal michal 31 2005-10-25 22:09 dir2

./dir1:
total 0
-rw-r--r--  1 michal michal 0 2005-10-25 22:08 file_in_1

./dir2:
total 0
lrwxrwxrwx  1 michal michal 8 2005-10-25 22:09 d1 -> ../dir1/
-rw-r--r--  1 michal michal 0 2005-10-25 22:08 file_in_2

Proč ale z d2 je .. něco jiného pro cd a pro ls?

 dir2/d1$ ls
file_in_1
dir2/d1$ ls ..
dir1  dir2
dir2/d1$ cd ..
dir2$ ls
d1  file_in_2

Jak na ten zápis po napsání koukám, tak mi to připadá spíš jako core dump než zápis do blogu :-).

Whois v CzFree.Net

Pokud používáte síť postavenou na neveřejných adresách a informace o nich jsou dostupné na nějakém whois serveru, může se hodit mini návod jak to nastavit.

Překvapivě toto je věc, se kterou se počítá a nastavení je jednoduché až triviální, jenom to vymyslet ;-).

 # echo '10\.[0-9]+\.[0-9]+\.[0-9]+ whois.czfree.net' \
> >> /etc/whois.conf
# exit
$ whois 10.23.14.137
%
% Hi! This is CZFree.NET RIPE database
% The objects are in RPSL format.
% use "-help" to get some more usage infomations
%
% request: "10.23.14.137"
% timestamp: Mon,  1 Aug 2005 22:15:04 +0200
%

inetnum:      10.23.0.0/16
admin-c:      ROOT-CZF
changed:      20031018 14:47 RIPE-CZF
changed:       20050111 15:14
name:         Cloud - Praha - Zizkov, Vinohrady
origin:       AS64523
tech-c:       ROOT-CZF
source:       CZF

inetnum:      10.0.0.0/8
admin-c:      RIPE-CZF
changed:       20050331 20:46
changed:      NETDAVE-CZF 20050331 23:40
descr:        CZFree private address space
name:         CZFREE
tech-c:       RIPE-CZF
source:       CZF

Konečně můžu snadno zjistit kde zhruba se daný člověk nachází ;-).

Udev, hotplug a rychlost

Udev používám v podstatě od té doby co se objevil, protože to je jediná cesta jak pro několik usb-storage zařízení dostávat stále stejná jména zařízení. Když člověk používá několik takových věcí, tak opravdu nechce pokaždé přemýšlet, co že je tentokrát to sda.

Hotplug je zase nutný například pro práci s usb zařízeními (např. PTP foťáky), která nemají vlastní ovladač, pod uživatelem a ne jen pod rootem. Kromě podobných věcí, má na starosti také natahování modulů při připojení zařízení.

Tohle všechno funguje celkem bez problémů, ale je potřeba nějak zajistit počáteční inicializaci, to znamená provést tyto akce pro zařízení, které v systému byly před „zapnutím“ hotplugu (tj. zapsáním jména binárky obsluhující hotplug události do /proc/sys/kernel/hotplug). Na to se obvykle používá hromada shellovských skriptů, které jsou součástí hotplugu a vendor distribuce si je příslušně přiohne a případně přejmenuje na coldplug. Toto procházení veškerého hardware samozřejmě nějakou dobu trvá a to je to mnoha lidem na hotplugu vadí.

Všechno se dá samozřejmě urychlit :-). Stačí se podívat co ony skripty dělají a zajistíme, že ve většině případů pro PCI jenom natáhnou potřebné moduly, pro USB se obvykle ještě spouští nějaký skript zajišťující třeba přístupová práva.

Takže pro zbavení se dlouhého startu hotplugu při bootu stačí hned po připojení filesystému zapnout mechanizmus hotplug (např. echo /sbin/udevsend > /proc/sys/kernel/hotplug ) a pak natáhnout moduly pro PCI zařízení (včetně USB hubu). V okamžiku dokončení inicializace USB hubu se vyšlou hotplug eventy a ty již normálně zpacuje hotplug, takže není potřeba procházet USB zařízení. PCI také procházet nemusíme, potože to obvykle není věc, která by se často měnila a vytvořit seznam těch pár modulů co pro PCI zařízení potřebujeme je poměrně snadné.

Nyní již můžeme init skript hotplugu kompletně vyřadit nebo alespoň vypnout natahování pro PCI a USB. Vypnutí jednotlivých částí se v Debianu dělá zapsáním HOTPLUG_RC_substystém=no (např. HOTPLUG_RC_pci=no ) do /etc/default/hotplug .

Tak a tím jsme se zbavili hlavního problému hutplugu :-).

Čtěte dokumentaci

Už delší dobu mě na jednom počítači mutt neustále vítal hláškou:

 Error in .../.mutt/muttrc, line 51: alternates: unknown variable
source: errors in .../.mutt/muttrc
Press any key to continue...

Protože to dřív fungovalo, tak jsem si pořád myslel, že je to nějaká chyba a v další verzi bude opravena a byl jsem líný to řešit. Ale pohár trpělivosti přetekl a zadal jsem tu hlášku do Googlu a hned vidím, že si stačilo přečít dokumentaci – /usr/share/doc/mutt/NEWS.Debian.gz:

 Additionaly, alternates is now an option, not a  variable.
 This means that you should change:

 set alternates="foo|bar"

 into

 alternates "foo|bar"

 in your .muttrc file. See muttrc(5) for details.

Jak je to jednoduché :-)

Most useless cat

Tuto cenu pro dnešek vyhrává následující skript, který se mi právě dostal do ruky :-)

 cat ${RPM_SOURCE_DIR}/cross.def | \
        sed "s|<CPP_CPU_SPEC>|$CPP_CPU_SPEC|g" | \
        sed "s|<INSTALL_DIR>|%{install_dir}|g" | \
        sed "s|<TARGET_ARCH>|%{target_arch}|g" | \
        sed "s|<TARGET_CONFIG>|%{target_config}|g" | \
        sed "s|<POSTINCDIR>|${POSTINCDIR}|g" | \
        sed "s|<STDINCDIR>|${STDINCDIR}|g" | \
        cat - > ${RPM_BUILD_DIR}/xc/config/cf/cross.def

Ovladače ipw2100

Tak nějak nechápu vývojový cyklus ovladačů ipw2100 – často to je podle scénáře: dlouho žádná nová verze, pak jedna vyjde, zjistí se že má chyby, tak následuje několik opravných. Jedna taková vlna právě nastává teď, předtím byla na přelomu ledna a února. Nejlepší byl stejně začátek loňského listopadu, klidně i s dvěmi verzemi za den :-).

Nefunkční reboot

Na jednom počítači nefungoval reboot, prostě to akorát napsalo „Restarting system“. Stačilo se podívat do zdrojáků a řešení se objevilo. Je potřeba předat kenelu parametr:

 reboot=b

Pak se použije reboot přes BIOS, který naštěstí funguje dobře :-).

LinuxTag 2005 – sobota

Koukám, že jsem tenhle zápis zapomněl publikovat, tak tedy drobným spožděním :-).

Sobotu jsem věnoval několika zajímavým přednáškám a pgp key signing party.

Meteorology slibovaná bouřka se v noci nekonala (resp. konala, akorát všude okolo, ničila kempy a tak, ale ve městě spadlo jen pár kapek), tak bylo zase celý den horko. Kvůli tomu přesuny mezi výstavní a přednáškovou halou znamenaly vždy mírný teplotní šok, ale pokud se člověk nechtěl ochudit o nové informace, nebyla jiná možnost.

Hned ráno měl zajímavou přednášku Dominik Brodowski o power managementu v Linuxu, v závěru také poradil pět tipů, jak prodloužit výdrž notebooku na baterie, tipy naleznete na jeho webu , třeba se někomu budou hodit.

Další velmi zajímavou věc předvedl Jan Blunck. Představil svojí implementaci union mountu, cože je věc používaná třeba na live distribucích, ale najde jistě uplatnění nejen tam. Tato implementace není (jako všechny ostatní) založena na vytvoření nového filesystému, ale je přímo ve VFS. To je pravděpodobně nejlepší místo, kde takovou věc implementovat, tak se jí snad brzy dočkáme v Linusově stromu (patche už by měly být poslány na LKML).

Jediná větší věc, která mi na programu zbývala, byla pgp key signing party. Kdo nikdy neviděl 120 lidí, jak si ukazujou pasy asi nikdy nepochopí :-). Ale akce byla dokonale zorganizovaná a vše proběhlo hladce. Teď ještě aby lidi klíče opravdu podepsali ;-).

Tak další LinuxTag je za mnou, rozhodně ho hodnotím lépe než předchozí, už jenom kvůli tomu, že jsem se osobně sešel s mnohem více lidmi, se kterými jinak komunikuji jenom mailem. Prostě pokud se chcete setkat s linuxovou komunitou, je dobrý nápad se zúčastit.

Více:

Better, larger and uncut, aneb všechny fotky