Archiwalia w kategorii 'linux'

Rhythmbox i trzeszcząca muzyka

W PLD przez dłuższy czas ludzie skarżyli się na artefakty przy odtwarzaniu muzyki przez Rhythmboksa. Problem rozwiązany został dopiero wczoraj.

Zacznę może od rozwiązania, trzeba zaktualizować pakiet alsa-lib do wersji 1.0.16.

Jeśli kogoś ciekawi przyczyna problemu, to służę informacjami. Rhythmbox do odtwarzania dźwięku używa szkieletu GStreamer. GStreamer odpowiada za dekodowanie strumieni i nakładanie efektów, sam jednak do komunikacji z urządzeniem wyjściowym wykorzystuje jedną z bibliotek audio. Najczęściej używana jest w tym przypadku wspomniana ALSA.

Na każdym styku elementów następuje negocjacja obsługiwanych formatów danych. Rhythmbox przed otwarciem pliku sprawdza, czy GStreamer potrafi go obsłużyć. Następnie tworzony jest łańcuszek elementów GStreamera. Każde dwa elementy w kolejce ustalają między sobą preferowany format przekazywanych danych. Ostatnim elementem w łańcuchu odtwarzania jest odpływ (sink), przekazujący dane do biblioteki ALSA.

Również tutaj odbywa się negocjacja i tu pojawia się problem trzeszczenia. GStreamer od niedawna oferuje wsparcie dla 32-bitowych próbek dźwięku. Zapewnia to większą precyzję przy przetwarzaniu, a w przypadku droższego sprzętu także wyższą jakość dźwięku kierowanego na głośniki. Oczywiście, większość z nas słucha muzyki w formatach kompresowanych i nie usłyszymy raczej różnicy, ale GStreamer robi WłaściwąRzecz™.

Problemem jest jednak ALSA, która również od niedawna zmieniła sposób skalowania próbek w przypadku 16-bitowych kart muzycznych. Do niedawna operacja ta polegała na obcięciu 16 mniej znaczących bitów. Zastąpił go nieco bardziej skomplikowany wzór, który — w przypadku dużej siły sygnału — podatny był na przepełnienie arytmetyczne. Ten właśnie drobny szczegół poprawiono w wersji 1.0.16.

Miłego słuchania muzyki zatem, Rhythmbox jest niewinny ;)

Drodzy deweloperzy dystrybucji…

Nie interesuje mnie, czy bazujecie na jądrze Solarisa, Linuksa, czy może BSD. Jeśli chcecie naprawić jakiś pakiet — bo się nie buduje — droga wolna — lokalne patche są często potrzebne.

Jeżeli zaś chcecie rozbudować program, czy ogólniej zmienić jego działanie, to róbcie to upstream. Gdyby każdy obywatel forknął każdy używany projekt i gdyby nawet wasze dzieci — i nie mówcie mi, że nie macie, bo zawsze możecie mieć (sprawdzić, czy nie ksiądz) — to byśmy żyli w takim burdelu, że wolałbym używać Windowsa.

Winni nie muszą się zgłaszać, bo pewnie nie czytają tego bloga. Podejrzewam też, że nie znają polskiego — tak, jak ja pospołu z autorami nie znam łatek nakładanych lokalnie. Przodują w tym panowie z Ubuntu, trzon peletonu stanowią zaś Novell, Sun i RedHat. Każdy z dużych ma generalnie w dupie, że autor pakietu nigdy nie dowie się ani o błędach, które załatali zainteresowani, ani o oczekiwaniach użytkowników.

Długofalowy efekt jest taki, że w Ubuntu wszystko działa inaczej, niektóre aplikacje mają problemy, które Novell u siebie poprawił trzy lata temu, a użytkownik nie ma się komu poskarżyć, bo przecież autor programu za cudze łaty spowiadał się nie będzie, autor zaś łatek od dwóch lat pracuje pewnie dla innej korporacji. Nie uwierzycie pewnie, ile radości sprawia szukanie łat w repozytoriach innych dystrybucji, kiedy bugzilla danego projektu świeci pustkami.

Postscript: Byliśmy dzisiaj w kinie na trzeciej części Resident Evil. Streszczenie filmu:

  1. Cela
  2. Cube 2
  3. Mad Max
  4. Szklana Pułapka
  5. www.Strach
  6. Mad Max
  7. Ptaki
  8. X-Men
  9. Mission: Impossible
  10. Gwiezdne Wojny
  11. Mad Max
  12. Pitch Black
  13. Liga Niezwykłych Dżentelmenów
  14. Star Trek
  15. X-Men
  16. Cube 2
  17. Matrix

Warto obejrzeć, poważnie. Brakowało mi tylko Generała Daimosa.

Strip #NaN: Lord of the Patents

Lord of the Patents

PLD Th: fixing a vserver

Niniejszy post jest oparty o historię z pola bitwy. Bardzo techniczny i nieszczególnie ciekawy, jeśli ktoś nie używa wymienionych technologii. Być może komuś się przyda.

Awaria

Poszukiwanie przyczyn pozwoliło nam ustalić następujące fakty:

  • W jednej z maszyn wirtualnych ktoś zainstalował pakiety rpm i poldek, a następnie użył ich do instalacji oprogramowania;
  • Maszyna miała cały czas zamontowaną zewnętrzną bazę rpm (prawdopodobnie utils-vserver zdechło i pozostawiło po sobie bałagan, ale o tym później);
  • Wewnętrzny rpm miał inną wersję i w jakiś sposób uszkodził bazę zainstalowanych pakietów;
  • Następujący po nim rpm --rebuilddb bezpowrotnie wyczyścił bazę pakietów maszyny;
  • W międzyczasie miał miejsce upgrade pakietów rpm i poldek w zewnętrznym systemie;

Postanowiliśmy zatem przeinstalować maszynę od nowa, rekonstruując na podstawie działających usług listę niezbędnych pakietów.

Nosem w dół

Dość szybko okazało się, że nie będzie tak łatwo:

ncontext: vc_net_create(): Invalid argument

Tak właśnie kończyło się każde wywołanie narzędzi vrpm i vpoldek. Winnym okazało się wywołanie chbind, a poprawka wygląda tak:

--- /usr/lib/util-vserver/functions~    2007-09-05 16:09:16.967334575 +0200
+++ /usr/lib/util-vserver/functions     2007-09-05 16:10:29.456275993 +0200
@@ -1171,5 +1171,5 @@
     export RPM_FAKE_CHROOT RPM_FAKE_CTX RPM_FAKE_CAP RPM_FAKE_FLAGS

     LD_PRELOAD=$_RPM_FAKE_SO${LD_PRELOAD:+:$LD_PRELOAD} \
-       exec $_CHBIND "${CHBIND_OPTS[@]}" "$@"
+       exec $_CHBIND --nid $RPM_FAKE_CTX "${CHBIND_OPTS[@]}" "$@"
 }

Dość szybko okazało się, że radość jest przedwczesna. O ile vrpm i vpoldek zaczęły działać, to żadne z nich nie potrafiło nic zmienić. Odpytywanie bazy nie przysparzało żadnych trudności, próba instalacji lub usunięcia pakietu kończyły się kolejnym radosnym komunikatem:

error: cannot open Basenames index using db3 - No such file or directory (2)

Winny

Okazało się, że winny jest rpm-4.4.9 w połączeniu z db4.6. Nie miałem okazji sprawdzić, co dokładnie powoduje nieprawidłowe działanie, dość było upewnić się, że działa wersja rpm-4.4.9-1, zbudowana z pakietem db4.5-devel.

Problemem jest fakt, że db4.6 automatycznie konwertuje każdą otwartą bazę do swojego formatu, co oznacza, że po wykonaniu downgrade pakietu rpm zostaniemy z bezużytecznym narzędziem.

Rozwiązanie

Jeff, autor rpm pomógł mi cofnąć upgrade:

  1. Instalujemy pakiet db4.6-utils, kopiujemy z niego program db_dump;
  2. Odinstalowujemy db4.6-utils, zachowując sam db4.6;
  3. Instalujemy pakiet db4.5-utils;
  4. Cofamy wersję rpm i instalujemy pakiet poldek zbudowany dla tej wersji rpm;
  5. Wykonujemy:
    cd /var/lib/rpm
    rm __db*
    mv Packages{,.old}
    db_dump_4.6 Packages.old > Packages.dump
    db_load Packages < Packages.dump
    rpm --rebuilddb
  6. Powyższą czynność powtarzamy dla wszystkich katalogów /vservers/.pkg/*/rpm/state, które zdążyły się zaktualizować do nowej wersji, odpowiednio modyfikując pierwszą linię i do ostatniej dopisując --dbpath <sciezka_do_katalogu_state>

Kolejny problem

Ostatnim krokiem było przekonanie narzędzia vpoldek, że instalowane pakiety są dla właściwej architektury. Tutaj rozwiązaniem było dopisanie do każdego pliku /vservers/.pkg/*/rpm/etc/macros linijki:

%_host_os %_os

Voila, wszystko działa, maszyna została przebudowana. Następnym razem postaram się pozbyć irytujących komunikatów LD_PRELOAD.

Licencja, panie

Strasznie mi przykro, że niektórzy to jednak czytać nie potrafią. Zrozumiem, że jedna z drugą doda mają problem z przeliterowaniem wyrazu dłuższego niż kark czy dres, ale żeby programiści nie potrafili czytać własnych licencji?

Trafiłem wczoraj na Undeadly na wątek dotyczący złamania licencji przez deweloperów Linuksa. Podniósł się wielki rumor, kamienie leciały gęsto, do flejma włączyli się przedstawiciele obu obozów, *BSD i Linuksa. Jedni jeździli po nie do końca wolnej licencji GNU, drudzy przypominali sytuację odwrotną, która nie miała miejsca tak znowu dawno temu.

Szkoda, że nikt nie skontaktował się z autorami albo chociaż nie przeczytał diffa. Widać wszyscy zapomnieli, że specjalnie na potrzeby włączenia sterownika — pierwotnie napisanego na potrzeby *BSD — do Linuksa, cały kod został udostępniony na podwójnej licencji BSD/GPLv2. A co oznacza podwójna licencja kodu? Ano to, że można sobie dowolnie wybrać jedną z licencji, która będzie nas obowiązywać. Tak, to znaczy, że w ramach licencji GPL można sobie dowolnie usuwać treść licencji BSD z nagłówków kodu. Tak, nawet jeśli licencja BSD mówi, że nie można jej usuwać, bo rzeczona licencja nie obowiązuje.

Żeby było jeszcze śmieszniej, niemal ukamienowany i żywcem spalony na stosie bezbożnik jest jednym ze współautorów kodu. Jeszcze zabawniejszy jest fakt, że nawet gdyby kod był dostępny tylko na jednej licencji, to w ramach amerykańskiego prawa każdy ze współautorów dzieła ma prawo udostępnić je na dowolnej licencji bez konsultacji z pozostałymi (jedyne ograniczenie dotyczy tego, że nie może zmienić reguł podziału zysków z tego tytułu).

Tak, czytanie to nie jest mocna strona ludzi. Nasz Trybunał Konstytucyjny kolejny raz udowodnił, że wyobraźnia również.

Osobowość konsolowa

Właśnie trafiłem na zabawną notkę na blogu Koke. Krótki skrypt pokazuje, jakie polecenia były najczęściej używane w ostatnim czasie:

history | awk '{print $2}' | awk 'BEGIN {FS="|"} {print $1}' | sort | uniq -c | sort -rn | head -10

Po moich widać, że nie jestem fanem Emacsa:

    294 vim
    126 cvs
     71 ./builder
     64 cd
     55 rpm
     45 ../pld-builder.new/client/make-request.sh
     44 poldek
     38 svn
     31 sudo
     19 ./repackage.sh

Howto: Seahorse w PLD

Pakietu Seahorse użytkownikom GNOME przedstawiać chyba nie trzeba. Ignorantom wystarczy powiedzieć, że Seahorse służy do zarządzania poufnymi informacjami. Potrafi edytować sekrety przechowywane w GNOME Keyring, zarządzać kluczami SSH, ale przede wszystkim jest najwygodniejszym interfejsem dla GnuPG, jaki istnieje.

Problem polega na tym, że do wykorzystania pełni jego możliwości trzeba aktywować usługę seahorse-agent, która z kolei musi być uruchomiona przed resztą pulpitu. Do jej działania potrzebne są:

  • seahorse
  • gnupg-agent >= 2.0.5-2

Dalsze kroki wyglądają następująco:

  1. echo "pinentry-program seahorse-agent" > ~/.gnupg/gpg-agent.conf
  2. vim ~/.gnupg/gpg.conf i usuwamy znak komentarza na początku linii use-agent
  3. wylogowujemy się i logujemy ponownie

Od tego momentu o hasło powinien nas prosić już agent Seahorse, oferując czasowe przechowywanie odblokowanych kluczy w pamięci. Bardzo wygodne w przypadku wysyłaniu zleceń na buildery PLD.

Hardware4Linux

Jest sobie taki skromny projekt, którego jedynym zadaniem jest zbieranie informacji o twoich komputerach. Hardware4Linux, bo o nim mowa, to centralna baza informacji o kompatybilności przeróżnego sprzętu z Linuksem.

W tej chwili jest jeszcze na etapie gromadzenia informacji, ale można sobie wyobrazić, że już niedługo może stać się nieocenionym źródłem informacji dla takich projektów, jak HAL, czy poszczególne dystrybucje.

Jeśli używasz Linuksa i masz chwilę czasu, to zachęcam do zbudowania sobie pakietu hwreport i wysłania wyników jego działania na stronę, gdzie następnie można dodatkowo ocenić i skomentować najważniejsze (i potencjalnie sprawiające najwięcej kłopotów) składniki maszyny.

Cała procedura wygląda tak:

  1. Budujemy (lub pobieramy) pakiet hwreport
  2. Z prawami roota wykonujemy hwreport /tmp/report
  3. Zakładamy konto w serwisie
  4. Uploadujemy plik /tmp/report.tar.bz2
  5. Oceniamy wybrane składniki
  6. Cieszymy się z dobrego uczynku i liczymy na sławę, kobiety lub wygraną w totka

Nadchodzi dobre

Z niecierpliwością czekam na kilka wydań:

Ekiga

Ekiga

Nowa wersja — oprócz sensownego interfejsu użytkownika — będzie oferować wsparcie dla większości dostępnych protokołów. W tym zawiera się obsługa protokołu dostępności. Niestety, Skype nadal pozostaje zamknięty i oferuje posiadaczom Linuksa ułamek funkcjonalności.

Banshee

Banshee

Nowa wersja jest jeszcze szybsza we współpracy z dużymi bibliotekami mediów, a interfejs sprawia, że Rhythmbox może się schować i już planować nowe wydanie.

HAL Quirks

Obrazka nie będzie, bo nie ma co pokazywać. Interesuje mnie przede wszystkim projekt naprawienia klawiszy multimedialnych pod Linuksem. Komplet sterowników dla laptopów poszczególnych producentów i pakiet hal-info wystarczą, by wszystkie przyciski na klawiaturach były w końcu dostępne z poziomu GNOME i KDE. Właśnie pracujemy nad Asusami.

Python: libchart 0.0.3

Dziś pojawiła się obiecana potrzeba i tak powstała trzecia wersja biblioteki do generowania wykresów. Tym razem nie wymaga PIL i oparta jest w całości o Cairo, a to oznacza śliczne wygładzanie krawędzi.

python-libchart 0.0.3

Jak poprzednio, do pobrania ze strony projektu.