You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Spis treści<br />
Miesięcznik Linux+ (12 numerów w roku)<br />
jest wydawany przez<br />
Software-Wydawnictwo Sp. z o. o.<br />
Redaktor naczelny: Krzysztof Krawczyk,<br />
krzysiek@lpmagazine.org<br />
Redaktor: Piotr Truszkowski,<br />
piotrt@lpmagazine.org<br />
Producent: Marta Kurpiewska,<br />
marta@software.com.pl<br />
Opracowanie CD/DVD: Krzysztof Krawczyk,<br />
Piotr Truszkowski<br />
Dział reklamy: Tomasz Dalecki,<br />
reklama@software.com.pl,<br />
tel.: (22) 860 18 79<br />
Prenumerata: Marzena Dmowska,<br />
pren@software.com.pl,<br />
tel.: (22) 860 17 67<br />
Projekt graficzny okładki:<br />
Agnieszka Marchocka<br />
Projekt graficzny pisma: Marcin Ziółkowski,<br />
marcin@software.com.pl<br />
Skład: Marcin Ziółkowski,<br />
marcin@software.com.pl<br />
Adres korespondencyjny:<br />
Software-Wydawnictwo Sp. z o. o.,<br />
00-190 Warszawa,<br />
ul. Lewartowskiego 6<br />
e-mail: redakcja@lpmagazine.org,<br />
tel. (22) 860 18 18<br />
Redakcja dokłada wszelkich starań, aby publikowane<br />
w piśmie i na towarzyszących mu nośnikach<br />
informacje i programy były poprawne,<br />
jednakże nie bierze odpowiedzialności za efekty<br />
wykorzystania ich; nie gwarantuje także poprawnego<br />
działania programów shareware,<br />
freeware i public domain. Uszkodzone podczas<br />
wysyłki płyty wymienia dział prenumeraty.<br />
Wszystkie znaki firmowe zawarte w piśmie<br />
są własnością odpowiednich firm i zostały<br />
użyte wyłącznie w celach informacyjnych.<br />
Redakcja używa systemu<br />
automatycznego składu<br />
Druk: Stella Maris<br />
Płyty dołączone do magazynu przetestowano<br />
programem AntiVirenKit firmy G DATA Software<br />
Sp. z o.o.<br />
Za darmo? Pewnie kiepski<br />
Czy to dobrze,<br />
że Linux jest za<br />
darmo (to akurat nie<br />
jest do końca prawdą,<br />
ale tak powszechnie<br />
się uważa)? Czy<br />
całkiem komercyjny<br />
jego charakter, ale<br />
wciąż otwarty, byłby<br />
znacznie lepszy? Na samym początku jego<br />
rozwoju na pewno nie, ale teraz? Możliwe,<br />
że dzięki temu, wbrew pozorom,<br />
Linux szybciej upowszechniłby się wśród<br />
użytkowników komputerów. Często przecież<br />
uważa się, że cena jest równoznaczna<br />
z wartością. Za darmo? Pewnie kiepski.<br />
I co mają powiedzieć producenci oprogramowania<br />
dla Linuksa? Czy świadomość<br />
tego, że tworzą aplikacje dla darmowego<br />
systemu, w którym jest już prawie wszystko,<br />
czego potrzebuje typowy użytkownik,<br />
nie jest zniechęcające? A jeszcze bar-<br />
4<br />
10<br />
14<br />
16<br />
18<br />
Opis<br />
zawartości<br />
płyt CD/DVD<br />
Piotr Truszkowski<br />
Newsy<br />
Krzysztof Krawczyk,<br />
Krzysztof Gawlas<br />
Jądro Linux<br />
Maja Królikowska<br />
Debian<br />
Grzegorz Prokopski<br />
Mandrake<br />
Daniel Koć<br />
dziej, gdy powstaje darmowy odpowiednik<br />
tej aplikacji? Dla mnie byłoby, więc<br />
z tego powodu często “ucieka się” w usługi<br />
(odpłatne rozszerzenie funkcjonalności<br />
programu, odpłatna pomoc techniczna).<br />
Na szczęście, coraz więcej firm opiera<br />
swój biznes właśnie na Linuksie, więc<br />
może nie jest tak źle, a ja, zgodnie z powiedzeniem,<br />
że “darowanemu koniowi<br />
w zęby nie zaglądaj”, powinienem po<br />
prostu wysłać podziękowania autorom<br />
tych wszystkich aplikacji, z których najczęściej<br />
korzystam, i cieszyć się z tego, co<br />
mam. No i może stworzyć coś samemu.<br />
Zapraszam do lektury tego numeru,<br />
z którego będziecie mogli dowiedzieć się,<br />
co nowego w świecie Linuksa i jak można<br />
wykorzystać ten wspaniały system operacyjny.<br />
Krzysztof Krawczyk<br />
Redaktor Naczelny Linux+<br />
W bieżącym numerze :<br />
Aktualności:<br />
kde<br />
linuxfresh<br />
Sprzedaż aktualnych lub archiwalnych<br />
numerów pisma po innej cenie niż<br />
wydrukowana na okładce – bez zgody<br />
wydawcy – jest działaniem na jego<br />
szkodę i skutkuje odpowiedzialnością<br />
sądową.<br />
19<br />
20<br />
22<br />
Aurox<br />
Robert Główczyński<br />
KDE<br />
Paweł Biliński<br />
LinuxFresh<br />
Piotr Machej<br />
opis CD A<br />
2 czerwiec 2004
Spis treści<br />
Temat miesiąca<br />
Multimedia<br />
Multimedia<br />
30 40<br />
Linux w studiu nagrań<br />
Paweł Wolniewicz<br />
Kolejne zastosowania Linuksa stają się<br />
coraz bardziej dostrzegalne. Tak jest<br />
w przypadku multimediów. Już teraz<br />
można z powodzeniem wykorzystywać<br />
nasz system operacyjny w studiu<br />
nagrań. Paweł prezentuje, jaki sprzęt<br />
i oprogramowanie będzie potrzebne<br />
w tym celu, jak je skonfigurować oraz<br />
jak użyć. Skoncentruje się na serwerze<br />
dźwięku JACK oraz aplikacjach MuSE<br />
i Ardour.<br />
Dla początkujących<br />
Serwer DHCP<br />
i algorytm HTB<br />
Piotr Machej<br />
Dla programistów<br />
58<br />
Książka teleadresowa<br />
w Mono<br />
Marek Sawerwain<br />
Recenzje<br />
38<br />
SUSE Linux 9.1<br />
Professional<br />
Piotr Truszkowski<br />
Na naszym linuksowym rynku pojawiła<br />
się nowa gwiazda, a jest nią<br />
SUSE. Przez wiele lat niedostrzegana,<br />
głównie z powodu braku promocji,<br />
teraz staje się kolejną ważną<br />
dystrybucją wykorzystywaną przez polskich<br />
użytkowników. Swoje wrażenia<br />
z nowej wersji (9.1), którą dostaliśmy<br />
od firmy Novell, aktualnego właściciela<br />
tej marki, przedstawi Wam Piotrek.<br />
Wywiad<br />
26<br />
Wywiad z Matthiasem<br />
Ettrichem, założycielem<br />
projektu KDE<br />
Krzysztof Krawczyk,<br />
Paweł Biliński,<br />
Piotr Truszkowski<br />
Nie wszyscy pamiętają, że Kool Desktop<br />
Environment powstał w 1996 roku.<br />
Wtedy to Matthias Ettrich wysłał list,<br />
w którym namawiał ludzi do przyłączenia<br />
się do projektu. Opisał w nim<br />
motywację do rozpoczęcia KDE oraz<br />
jego główne założenia (w tym oparcie<br />
go na bibliotece Qt, udostępnionej<br />
parę tygodni wcześniej publicznie przez<br />
firmę TrollTech). Postanowiliśmy porozmawiać<br />
z nim i zadać mu kilka pytań.<br />
W większości sieci lokalnych podstawowy<br />
serwer usług jest uruchamiany<br />
na Linuksie. To bardzo dobre rozwiązanie,<br />
szczególnie, że pozwala na wygodne<br />
administrowanie taką siecią. Bardzo<br />
pomocny jest wtedy serwer DHCP oraz<br />
podział dostępnego łącza internetowego.<br />
Piotrek, jak zwykle, pokaże Wam,<br />
że przygotowanie odpowiedniej konfiguracji<br />
Linuksa wcale nie jest takie trudne.<br />
Sprzęt<br />
50<br />
Zarządzanie energią<br />
w Linuksie, część pierwsza<br />
Piotr Wolny<br />
Nasze komputery domowe często zostawiamy<br />
włączone przez cały dzień, nawet<br />
gdy na nich w danej chwili nie pracujemy.<br />
To wszystko jednak kosztuje – licznik<br />
energii elektrycznej nie zatrzymuje<br />
się. Pomocne może się wtedy okazać<br />
wykorzystanie mechanizmów zarządzania<br />
energią dostępnych w ACPI. W tym<br />
miesiącu Piotrek pokaże Wam, jak usypiać<br />
procesor, gdy nie jest potrzebny.<br />
Technologia .NET jest coraz bardziej<br />
popularna, a ponieważ Linux nie może<br />
zostawać w tyle, stale rozwijany jest<br />
projekt Mono, będący otwartą implementacją<br />
tego rozwiązania. Język C#<br />
jest bardzo zbliżony do C/C++, więc<br />
warto zapoznać się z jego możliwościami.<br />
W tym miesiącu Marek pokaże Wam,<br />
jak wykorzystać bibliotekę GTK# do stworzenia<br />
własnej książki teleadresowej.<br />
Dla graczy<br />
68<br />
Crimson Fields<br />
Piotr Truszkowski<br />
Czy pamiętacie grę Battle Isle? To<br />
turowa gra strategiczna, bardzo popularna<br />
nie tak dawno temu. Do swojej<br />
dyspozycji otrzymywaliście jednostki<br />
wojskowe i waszym celem było zdobycie<br />
terenu wroga lub obrona własnego.<br />
Na tym pomyśle bazuje gra Crimson<br />
Fields. Piotrek postanowił zbadać, czy<br />
nowa inkarnacja starego przeboju jest<br />
godna polecenia.<br />
www.lpmagazine.org<br />
3
aktualności<br />
opis CD<br />
płyta A<br />
ACPI<br />
Wszystkie potrzebne łatki na jądro<br />
systemowe, które pozwolą w pełni<br />
wykorzystać ACPI pod Linuksem.<br />
Polecamy artykuł w numerze, opisujący,<br />
jak oszczędzać energię pod Linuksem.<br />
Zawarty na płycie zestaw łatek z<br />
pewnością umożliwi Wam to wszystko, o<br />
czym autor pisze w artykule.<br />
http://acpi.sourceforge.net/<br />
Crimson Fields 0.4.2<br />
Gra dla wytrawnych strategów w stylu<br />
legendarnego Battle Isle. Zaplanuj<br />
działania i pokieruj swoimi wojskami<br />
ku zwycięstwu. Ciekawa grafika,<br />
niesamowita grywalność i trochę<br />
nostalgii. Zamieszczony tytuł z pewnością<br />
zadowoli wszystkich fanów Battle<br />
Isle, jak również tych, którzy w grach<br />
widzą inteligentną rozrywkę. Więcej na<br />
temat tej gry w dziale Dla graczy.<br />
http://crimson.seul.org/<br />
Rc.HTB 0.3<br />
Skrypt do artykułu o dzieleniu<br />
pasma internetowego pod Linuksem.<br />
Przydatny każdemu, kto posiada<br />
bądź zamierza posiadać serwer w<br />
sieci firmowej/osiedlowej i chce mieć<br />
kontrolę nad przydzielaniem pasma<br />
internetowego. Autorem skryptu<br />
jest Polak, więc jest on bardzo<br />
dobrze dopasowany do naszych łącz<br />
internetowych. W numerze znajdziecie<br />
także artykuł, który krok po kroku<br />
pozwoli Wam wraz z pomocą<br />
opisanego skryptu zapanować nad<br />
wszelkimi fanami sieci P2P, którzy<br />
dniami i nocami obciążają Sieć.<br />
http://www.rc.htb.prv.pl/<br />
Mono 0.91<br />
Kompletne środowisko<br />
programistyczne, będące otwartym<br />
odpowiednikiem platformy .NET<br />
firmy Microsoft. Mono oferuje prawie<br />
identyczną funkcjonalność swojego<br />
zamkniętego pierwowzoru i proste<br />
tworzenie zaawansowanych aplikacji.<br />
Z pewnością warto się mu przyjrzeć.<br />
W dziale Dla programistów Marek<br />
Sawerwain pokaże Wam, jak napisać<br />
książkę teleadresową w Mono.<br />
http://www.go-mono.org/<br />
Big Bit - Big Bajt<br />
Big Bit - Big Bajt to nowa audycja<br />
komputerowa nadawana w Radio<br />
Warszawa Praga (106,2 FM), a<br />
prowadzona przez Michała Niwickiego.<br />
Ma ona na celu przedstawienie<br />
szerokiemu gronu słuchaczy systemu<br />
Linux i Wolnego Oprogramowania.<br />
Na płycie znajdziecie plik MP3 z<br />
zapisem drugiej audycji, w której gościł<br />
nikt inny jak nasz redaktor naczelny<br />
– Krzysztof Krawczyk. Zapraszamy<br />
do wysłuchania i aktywnego udziału<br />
w kolejnych audycjach. Big Bit - Big<br />
Bajt w Radio Warszawa Praga w każdy<br />
wtorek o 17:30. Do usłyszenia!<br />
http://www.radiowarszawapraga.pl/<br />
Linux+ Live CD<br />
Linux+ Live CD to dystrybucja Linuksa<br />
uruchamiana z płyty CD. Nie wymaga<br />
ona instalacji na dysku twardym i może<br />
działać niezależnie od już zainstalowanego<br />
systemu operacyjnego. Linux+ Live<br />
zawiera programy omówione w naszych<br />
artykułach.<br />
Aby wystartować Linux+ Live CD, wystarczy<br />
w BIOS-ie komputera podać napęd<br />
CD jako podstawowe urządzenie<br />
rozruchowe, włożyć płytkę z naszą dystrybucją<br />
do napędu i ponownie uruchomić<br />
komputer. Po kilku chwilach naszym<br />
oczom ukaże się plansza powitalna. Po<br />
wciśnięciu klawisza [Enter], Linux+ Live<br />
CD zacznie się uruchamiać. System automatycznie<br />
wykryje nasz sprzęt i skonfiguruje<br />
środowisko graficzne. Na Linux+ Live<br />
CD składają się m.in.:<br />
• jądro Linux 2.4.26 z wieloma łatkami<br />
zwiększającymi jego funkcjonalność;<br />
• graficzne środowisko KDE 3.2.1;<br />
• komunikatory internetowe;<br />
• aplikacje multimedialne;<br />
• i wiele innych...<br />
CrossOver Office 3.0 Demo<br />
Nowy użytkownik Linuksa ma czasem<br />
trudności w odnalezieniu się<br />
w nowym środowisku. Pomimo tego, że<br />
dla Linuksa istnieje wiele odpowiedników<br />
programów z Windows, czasami jesteśmy<br />
wręcz zmuszeni używać np. “jedynie<br />
słusznej” przeglądarki Internet<br />
Explorer czy pakietu biurowego Microsoft<br />
Office. Na naszej płycie CD/DVD prezentujemy<br />
Wam demo najnowszej wersji<br />
narzędzia firmy CodeWeavers o nazwie<br />
CrossOver Office. Dzięki temu programowi<br />
na swojej stacji roboczej z Linuksem<br />
uruchomicie m.in.:<br />
• Microsoft Office 97/2000/XP;<br />
• Lotus Notes;<br />
• Microsoft Project i Visio;<br />
• Macromedia Dreamweaver MX<br />
i Flash MX;<br />
• Adobe Photoshop.<br />
Linux+ Live CD<br />
Po starcie systemu pojawi się nam okienko,<br />
które informuje o niemożności zainicjowania<br />
dźwięku. Należy w tym momencie<br />
kliknąć na przycisk OK, następnie<br />
kliknąć na folder Ustawienia systemowe,<br />
wybrać Sound Config, a następnie<br />
Użyj sterowników ALSA.<br />
Linux+ Live CD to wspaniała okazja<br />
do zaprezentowania Linuksa w swoim<br />
środowisku. Mając przy sobie płytkę<br />
z dystrybucją Linuksa, możesz z niej<br />
skorzystać w każdym miejscu, gdzie tylko<br />
masz dostęp do komputera. Dobrej zabawy!<br />
Możliwość instalacji wielu programów<br />
z Windows<br />
Wymienione powyżej programy to tylko<br />
te, które są przez CrossOver Office 3.0 oficjalnie<br />
wspierane. Możemy oczywiście pokusić<br />
się również o uruchomienie aplikacji<br />
spoza tej listy. CrossOver Office to wspaniała<br />
okazja ku temu, aby wykorzystać<br />
Linuksa w miejscach, gdzie musimy skorzystać<br />
z aplikacji przeznaczonych dla Microsoft<br />
Windows. Uruchomione aplikacje<br />
działają szybko i stabilnie. Warto przekonać<br />
się samemu, czy opisywany pakiet<br />
wart jest swojej ceny – $39.95 za wersję<br />
Standard bądź $84.95 za wersję Professional.<br />
Naszym zdaniem warto. Po uruchomieniu<br />
programu pojawi się okienko informujące<br />
o rejestracji. Możemy bez obaw<br />
kliknąć na opcję Register Later.<br />
http://www.codeweavers.com/<br />
6 czerwiec 2004
płyta B<br />
opis CD<br />
PLD Live CD 0.95<br />
P<br />
LD<br />
PLD Live zachwyca rozmachem<br />
to pierwsza całkowicie<br />
polska dystrybucja Linuksa.<br />
PLD Live CD prezentuje<br />
potęgę, która drzemie we<br />
wspomnianym systemie. Dzięki owocnej<br />
współpracy z Havnerem, twórcą PLD<br />
Live CD, otrzymujecie do rąk produkt na<br />
najwyższym światowym poziomie.<br />
Co takiego wyjątkowego jest w tym<br />
systemie? Z pewnością kilka rzeczy.<br />
Przede wszystkim, PLD Live CD jest<br />
wspaniałym przykładem na to, że „Polak<br />
potrafi”. Ponadto, znajdują się w nim najnowsze<br />
wersje programów. Takich nowinek,<br />
jakie posiada PLD Live CD, nie znajdziecie<br />
nigdzie indziej – jądro 2.6.6, KDE<br />
3.2.2, GNOME 2.6.1 to tylko niektóre z<br />
tych elementów, dla których warto sięgnąć<br />
po tę dystrybucję Linuksa. Kolejną<br />
rzeczą godną uwagi jest ogólne „dopieszczenie”<br />
systemu. Wszystko jest logicznie<br />
poukładane, bardzo dobrze złożone, po<br />
prostu dopracowane do ostatniej linijki<br />
kodu. Warto także zwrócić uwagę na<br />
możliwości PLD Live CD – system obsługuje<br />
chyba wszystkie najpopularniejsze (i<br />
mniej popularne) systemy plików, poczynając<br />
od Ext2, poprzez Ext3, ReiserFS,<br />
JFS, XFS, na FAT i NTFS kończąc. Rewelacyjnie<br />
sprawdza się w każdych warunkach.<br />
Nie można również pominąć szybkości<br />
PLD Live CD. Ze wszystkich znanych<br />
mi dystrybucji Live, ta wypada zdecydowanie<br />
najlepiej. Szybkość startu systemu<br />
i jego działania jest imponująca. Na<br />
PLD Live CD składają się m.in.:<br />
• Linux 2.6.6 z poprawną obsługą m.in.<br />
nForce2;<br />
• sterowniki dla kart opartych o chipsety<br />
Nvidia;<br />
• KDE 3.2.2;<br />
• GNOME 2.6.1;<br />
• Beep Media Player 1.0.0-0.pre5.2;<br />
• Blender 2.30;<br />
• Foobillard 3.0a;<br />
• GIMP 2.0.0;<br />
• LinNeighborhood 0.6.5;<br />
• Mozilla 1.6;<br />
• MPlayer 1.0-0.pre4.3;<br />
• OpenOffice.org 1.1.0;<br />
• Qtparted 0.4.2;<br />
• Samba 3.0.2;<br />
• XFree86 4.4.0;<br />
• XMMS 1.2.10.<br />
PLD Live CD to wspaniała okazja ku temu,<br />
aby poznać Linuksa bez potrzeby jego<br />
instalacji na dysku twardym. Do systemu<br />
dołączono ponad 1200 aplikacji, co sprawia,<br />
że jego przeznaczenie jest naprawdę<br />
bardzo uniwersalne. Możemy wykorzystać<br />
go jako system ratunkowy, multimedialny,<br />
pokazowy bądź w jakikolwiek<br />
inny sposób, który sobie wymyślimy.<br />
http://livecd.pld-linux.org/<br />
Nowy GNOME 2.6<br />
Uwaga<br />
System graficzny wystartuje samoczynnie<br />
po uruchomieniu systemu. Jako<br />
nazwę użytkownika (login) wpisujemy<br />
user (dla zwykłego użytkownika)<br />
bądź root (dla administratora). Nie ma<br />
potrzeby wpisywania hasła. Przydatne<br />
jest także wciśnięcie klawisza [F2]<br />
po wystartowaniu komputera z płyty.<br />
Znajdują się tam różne opcje, z którymi<br />
możemy uruchomić PLD Live CD.<br />
www.lpmagazine.org<br />
7
aktualności<br />
opis DVD<br />
płyta A<br />
Windows -> Linux<br />
Specjalnie dla Was zamieściliśmy<br />
instalatory gier z Windows dla Linuksa.<br />
Oznacza to, że posiadając nośnik CD<br />
z którąś z gier wymienionych poniżej<br />
i przeznaczonych dla środowiska<br />
DOS/Windows, będziecie mogli ją<br />
zainstalować i zagrać pod Linuksem!<br />
Oto i one:<br />
– Duke Nukem 3D;<br />
– Freespace;<br />
– Freespace2;<br />
– Kingpin;<br />
– Medal of Honor;<br />
– Neverwinter Nights;<br />
– Rise of the Triad;<br />
– Soul Ride;<br />
– Tactical Ops;<br />
– Unreal;<br />
– Unreal Gold;<br />
– Unreal: Return To Na Pali.<br />
Dobrej zabawy!<br />
http://www.icullus.org/<br />
CrossOver Office 3.0 Demo<br />
Wersja demo oprogramowania,<br />
które pozwala uruchomić niektóre<br />
z aplikacji Windows na Linuksie<br />
(m.in. Microsoft Office, Lotus Notes,<br />
Microsoft Project i Visio, Macromedia<br />
Dreamweaver MX, Flash MX, Adobe<br />
Photoshop).<br />
http://www.codeweavers.com/<br />
Fresh<br />
Aplikacje opisane w dziale<br />
LinuxFresh: Absg 2.7, BasicLinux<br />
3.21, File 4.09, Grip 3.2.0, MPlayer<br />
1.0pre4, ReactOS 0.2.2, W3m 0.5.1,<br />
Allegro 4.1.14, Cupsddk 1.0, Fontforge<br />
20040509, Lftp 3.0.3, Qt 3.3.2,<br />
Rkhunter 1.0.8, Yavr.<br />
KDE<br />
Aplikacje omówione w dziale<br />
KDE: Amarok 1.0beta3, Attach ,<br />
Eventwatcher 0.4.1, Folder Icons,<br />
Kbootsplash 0.3a2, Kiso 0.4.3,<br />
Kmp3burn 0.2.2, KOffice 1.3.1,<br />
Ksetiwatch 3.0.0, Kxdocker 0.3,<br />
Quanta 3.2-be2.<br />
Mono 0.91<br />
Kompletne środowisko<br />
programistyczne, będące otwartym<br />
odpowiednikiem platformy .NET firmy<br />
Microsoft.<br />
http://www.go-mono.org/<br />
ReHMuDi 2.0<br />
Zestaw aplikacji dla dystrybucji<br />
Fedora, które pozwolą uczynić z niej<br />
prawdziwe studio nagrań. Ponad 180<br />
pakietów binarnych, gotowych do<br />
instalacji po wydaniu polecenia (jako<br />
root): ./install.sh. Uwaga! Pakiety<br />
przeznaczone tylko dla dystrybucji<br />
Fedora!<br />
http://www.agnula.org/<br />
4 x Live<br />
Po Waszym ciepłym przyjęciu<br />
drugiego numeru Linux+ DVD,<br />
w którym na pierwszej płycie DVD zamieściliśmy<br />
cztery różne dystrybucje<br />
Live, postanowiliśmy ponownie przygotować<br />
dla Was taką kompilację. Znajdziecie<br />
w niej same perełki, których na<br />
próżno szukać u konkurencji:<br />
• PLD Live CD 0.95;<br />
• Linux+ Live DVD;<br />
• AGNULA/DeMuDi Live 1.1.1;<br />
• SUSE LiveCD 9.1.<br />
PLD Live CD to w pełni polska dystrybucja<br />
Linuksa, prezentująca najnowsze<br />
wersje oprogramowania, takie jak jądro<br />
2.6.6, KDE 3.2.2 czy GNOME 2.6.1.<br />
Bardzo dobrze zaplanowana i wykonana,<br />
mogąca konkurować pod każdym<br />
względem z produkcjami zagranicznymi.<br />
Linux+ Live DVD to nasza dystrybucja<br />
Linuksa, która ma na celu prezentację<br />
większości oprogramowania z artykułów<br />
zamieszczonych w tym numerze<br />
Linux+.<br />
AGNULA/DeMuDi Live to wyjątkowa<br />
dystrybucja Linuksa, przeznaczona<br />
dla muzyków. Zawiera profesjonalne<br />
oprogramowania do tworzenia<br />
i edycji dźwięku. Zaopatrzona w zestaw<br />
łatek na jądro systemowe i oparta<br />
na Debianie, pozwoli każdemu na<br />
stworzenie własnego utworu muzycznego<br />
bądź poddanie edycji już gotowego.<br />
SUSE LiveCD to przedsmak tego, co<br />
stworzyła niemiecka firma SUSE pod<br />
kierownictwem amerykańskiego Novella.<br />
Warta uruchomienia, chociażby<br />
z tego powodu, aby zobaczyć, jak<br />
wygląda komercyjny produkt dla korporacji.<br />
Być może po jej przetestowaniu<br />
ktoś z Was zdecyduje się na zakup<br />
pełnej profesjonalnej wersji pudełkowej?<br />
Cztery dystrybucje Live, a każda<br />
z nich przeznaczona dla innego odbiorcy.<br />
Aby zacząć zabawę z którąkolwiek<br />
z nich, należy wykonać kilka czynności<br />
poprzedzających. Pierwszą z nich<br />
jest ustawienie w BIOS-ie komputera<br />
napędu DVD jako pierwszego urządzenia<br />
startowego. Drugą jest umieszczenie<br />
Aż cztery systemy Live – z którego<br />
skorzystać?<br />
naszej płyty DVD w napędzie i zrestartowanie<br />
komputera. Po kilku chwilach<br />
ukaże się nam plansza powitalna, z której<br />
będziemy mogli wybrać dystrybucję,<br />
z której chcemy skorzystać:<br />
• aby uruchomić PLD Live CD, wciskamy<br />
[Enter] bądź, aby poznać więcej<br />
opcji, klawisz [F2]. Po uruchomieniu<br />
systemu, logujemy się bez hasła jako<br />
user (dla zwykłego użytkownika)<br />
bądź root (dla administratora systemu);<br />
• aby uruchomić Linux+ Live DVD,<br />
wpisujemy aurox i wciskamy [Enter];<br />
• aby uruchomić DeMuDi, wpisujemy<br />
demudi i wciskamy [Enter];<br />
• aby uruchomić SUSE, wpisujemy suse<br />
i wciskamy [Enter].<br />
Dzięki takiemu zróżnicowaniu, każdy<br />
na naszej płycie znajdzie coś dla<br />
siebie. Jest to także wspaniała okazja<br />
ku temu, aby poznać działanie<br />
Linuksa, bądź pokazać go znajomej/<br />
znajomemu bez strachu o ewentualną<br />
utratę danych czy pracochłonność procesu<br />
instalacji i konfiguracji. Dobrej zabawy!<br />
http://livecd.pld-linux.org/<br />
http://www.lpmagazine.org/<br />
http://www.agnula.org/<br />
http://www.suse.com/<br />
8 czerwiec 2004
płyta B<br />
opis DVD<br />
Fedora Core 2 DVD<br />
Firma Red Hat, po zaprzestaniu<br />
udostępniania swojej dystrybucji<br />
Red Hat Linux za darmo<br />
w Internecie, powołała projekt<br />
Fedora. Wraz z udziałem społeczności<br />
Linuksa z całego świata miał on zająć<br />
się tworzeniem dystrybucji, która stałaby<br />
się darmowym następcą Red Hat Linux,<br />
natomiast firma Red Hat skoncentrowała<br />
się na rynku systemów korporacyjnych,<br />
gdzie klient kupując system liczy<br />
na produkt najwyższej klasy. Kolejne<br />
edycje Fedory wydawane są co 4-6 miesięcy,<br />
natomiast Red Hat Linux co 12 miesięcy.<br />
Red Hat bierze z Fedory najlepsze<br />
elementy i wdraża je do Red Hat Linux.<br />
Można więc napisać, że Fedora jest niejako<br />
„poligonem doświadczalnym” Red<br />
Hata, co ma swoje dobre strony (najnowsze<br />
wersje oprogramowania), jak również<br />
złe (nie wszystko może być do końca stabilne).<br />
Niedawno światło dzienne ujrzała<br />
druga edycja Fedory – Fedora Core<br />
2. Niesie ona ze sobą ogromną ilość<br />
nowinek i udoskonaleń w porównaniu<br />
do pierwszej edycji. Dzięki współpracy<br />
naszej redakcji z programistami projektu<br />
Fedora, prezentujemy Wam – jako<br />
pierwsi w Polsce – najnowszą wersję tego<br />
systemu w wersji DVD. W Fedora Core 2<br />
znajdziecie:<br />
• jądro 2.6.5;<br />
• GNOME 2.6.0;<br />
• KDE 3.2.2;<br />
• najnowsze wersje aplikacji...<br />
Nasza edycja DVD zawiera pełną edycję<br />
Fedora Core 2:<br />
• pakiety binarne;<br />
• pakiety źródłowe.<br />
Fedora zyskała sobie uznanie na całym<br />
świecie nie tylko ze względu na swoje<br />
pochodzenie – to po prostu bardzo dobry<br />
system. Rozwijany jest przez tysiące osób<br />
z całego świata. W Internecie jest dostępna<br />
ogromna ilość oprogramowania (pakiety<br />
RPM tworzą użytkownicy dystrybucji).<br />
Dzięki temu, że system można<br />
za darmo pobrać z Internetu (aczkolwiek<br />
ściąganie ponad 4 GB danych nie<br />
należy do najprzyjemniejszych rzeczy),<br />
liczba użytkowników dystrybucji rośnie<br />
Fedora Core 2<br />
z dnia na dzień (w rankingu serwisu<br />
DistroWatch.com, Fedora zajmuje drugie<br />
miejsce, tuż za Mandrake), co wiąże się<br />
z łatwym zdobyciem informacji na nurtujący<br />
nas problem. W Internecie są dostępne<br />
setki forów dyskusyjnych poświeconych<br />
tej dystrybucji, tysiące stron fanów,<br />
kanałów IRC, a na grupach dyskusyjnych<br />
można bez problemu znaleźć pomoc. To<br />
wszystko tworzy społeczność, na wielkość<br />
której projekt Fedora z pewnością<br />
nie ma co narzekać.<br />
Fedora Core 2 to dystrybucja ze<br />
wszech miar godna polecenia. Zaakceptuje<br />
ją zarówno zaawansowany użytkownik<br />
systemu Linux, jak i zupełny nowicjusz.<br />
Pomimo tego, że Fedora nie posiada<br />
takiej ilości najróżniejszych graficznych<br />
konfiguratorów i ułatwień, jakie<br />
może zaoferować chociażby Mandrake,<br />
z obsługą systemu powinien poradzić<br />
sobie każdy. Instalacja odbywa<br />
się w języku angielskim, jednak podczas<br />
jej trwania możemy wybrać język<br />
polski jako domyślny język systemowy.<br />
Po tym zabiegu, system po zainstalowaniu<br />
będzie się z nami porozumiewał<br />
w naszym ojczystym języku. Osoby,<br />
które dopiero zaczynają swoja przygodę<br />
z Linuksem, z pewnością będą szukały<br />
książek, które pomogą im w zapozna-<br />
niu się z Fedorą. Godnym polecenia tytułem<br />
jest w tym momencie książka Radosława<br />
Sokóła „Po prostu Fedora Core 1”.<br />
Pomimo tego, że dotyczy ona pierwszej<br />
edycji dystrybucji, przedstawione w niej<br />
problemy i rozwiązania sprawdzą się<br />
także w Fedora Core 2.<br />
Nie pozostaje mi nic innego, jak<br />
życzyć Ci drogi czytelniku zadowolenia<br />
z tej dytrybucji. W razie jakichkolwiek<br />
problemów zapraszam jednocześnie<br />
na nasze Polskie Forum Linuksowe<br />
(http://www.linux.com.pl/forum/ ), gdzie<br />
z pewnością uzyskasz odpowiedzi na<br />
nurtujące Cię pytania. Fedora posiada<br />
w Polsce ogromną społeczność. Dołącz<br />
do niej i Ty.<br />
Minimalne wymagania<br />
sprzętowe:<br />
• procesor z zegarem taktowanym<br />
minimum 450 MHz;<br />
• minimum 128 MB RAM;<br />
• monitor zgodny ze standardem<br />
VESA;<br />
• napęd DVD;<br />
• od 800 MB do 5 GB wolnej przestrzeni<br />
na dysku twardym.<br />
www.lpmagazine.org<br />
9
aktualności<br />
newsy<br />
News<br />
Linux+ w Radio Warszawa Praga<br />
Ruszyła audycja komputerowa mocno<br />
promująca system operacyjny Linux.<br />
Big Bit - Big Bajt, bo tak się nazywa<br />
program, jest prowadzony na żywo na<br />
antenie Radio Warszawa Praga (106,2<br />
FM), w każdy wtorek o godzinie<br />
17:30. W studiu dyskutują redaktorzy<br />
miesięcznika Linux+: naczelny<br />
- Krzysztof Krawczyk i redaktor<br />
- Piotr Truszkowski. Prowadzi Michał<br />
Niwicki. Do dyskusji są zapraszani<br />
miłośnicy Linuksa – tel. 670 10 00.<br />
Radiostację można odbierać<br />
w Warszawie i okolicach, ale audycja<br />
będzie również dostępna na płytach<br />
dołączanych do miesięcznika Linux+.<br />
http://www.radiowarszawapraga.pl/<br />
Connector Novella na GPL<br />
Firma Novell zapowiedziała wydanie<br />
wersji 2.0 klienta poczty Evolution oraz<br />
zintegrowanie go wraz z projektem<br />
Connector for Microsoft Exchange<br />
Server Exchange, który dodatkowo<br />
zmienił swoją licencję na GNU GPL.<br />
Połączenie to pozwoli użytkownikom<br />
Linuksa zarządzanie pocztą<br />
elektroniczną i danymi w ramach<br />
Evolution oraz na łatwą współpracę<br />
z innymi osobami korzystającymi z<br />
komputerów biurowych z systemem<br />
Windows, połączonych z serwerami<br />
Exchange 2000 lub 2003.<br />
http://www.linux.pl/<br />
?id=news&show=993<br />
Red Hat Linux Desktop<br />
Czyżby firma Red Hat nie tak<br />
do końca odwróciła się od tzw.<br />
desktopów? Niedawno zapowiedziała<br />
udostępnienie specjalnej, biurkowej<br />
wersji swojego Linuksa przeznaczonej<br />
dla firm. Dystrybucja zostanie<br />
nazwana Red Hat Desktop i będzie<br />
osiągalna na zasadzie subskrypcji.<br />
Licencja za roczne użytkowanie RHD<br />
ma wynosić 3,5 tysiąca dolarów w<br />
wersji dla 70 stanowisk pracy, czyli 50<br />
dolarów "za biurko". Dla porównania:<br />
kopia Windows XP kosztuje w Stanach<br />
Zjednoczonych 299 dolarów.<br />
http://newsroom.chip.pl/news_<br />
91497.html<br />
http://news.com.com/2100-7344_3-<br />
5205117.html<br />
Polski odział SCO zamknięty<br />
SCO Group zamknęła z końcem<br />
kwietnia warszawskie biuro firmy<br />
odpowiedzialne za sprzedaż<br />
produktów w Europie Wschodniej.<br />
Dotychczasowy country manager,<br />
Alexander Sirotin, odszedł z firmy<br />
i założył własną – LUXOS (Linux UniX<br />
Operating Systems). Luxos skupi się na<br />
sprzedaży systemów produkcji SUSE<br />
Linux, a obecnie oferuje migrację<br />
z systemów SCO na SUSE.<br />
http://www.computerworld.pl/news/<br />
66266.html<br />
Linux Audio Developers 2004<br />
Na wielkim ekranie jedna z najbardziej<br />
rozbudowanych linuksowych aplikacji audio<br />
– Ardour, a w prawym dolnym rogu jej autor<br />
– Paul Davis<br />
Kompozytor Orm Finnendahl demonstruje<br />
graficzne możliwości programu pd i jego<br />
zastosowanie w trakcie wykonania utworu<br />
na żywo z udziałem muzyków i kilku<br />
komputerów<br />
Komputerowe studia nagrań do niedawna<br />
kojarzyły się z programem<br />
Pro Tools i komputerami Macintosh. Dziś<br />
coraz częściej można w nich spotkać programy<br />
Nuendo i Cubase pracujące pod<br />
systemem Windows. Czy jutro będzie<br />
tam można zobaczyć Linuksa? Odpowiedzi<br />
na to pytanie można było poszukać<br />
podczas konferencji LAD 2004 między 29<br />
kwietnia a 2 maja w Karlsruhe. Tamtejsze<br />
Centrum Sztuki i Mediów (ZKM) gościło<br />
po raz drugi osoby związane z rozwojem<br />
oprogramowania audio działającego<br />
pod systemem Linux. W tym roku do grupy<br />
programistów dołączyli również użytkownicy<br />
– kompozytorzy wykorzystujący<br />
Linuksa w pracy.<br />
Jaroslav Kysela i Takashi Iwai (SuSE<br />
Linux AG), autorzy systemu ALSA (sterowników<br />
dla kart dźwiękowych), przedstawili<br />
jego historię, teraźniejszość i wizję<br />
przyszłości. W serii 2.6 jądra Linuksa<br />
sterowniki ALSA zostały z nim zintegrowane<br />
i wyparły dotychczasowy standard<br />
OSS Free. Wśród bardzo szerokiej listy obsługiwanych<br />
urządzeń znajdują się zarówno<br />
popularne Sound Blastery, jak i profesjonalne<br />
karty M-Audio i RME. Takashi<br />
Iwai odpowiadał na najczęściej zadawane<br />
pytania i wyjaśniał, w jaki sposób należy<br />
zgłaszać problemy związane z użytkowaniem<br />
Alsy.<br />
Najwięcej emocji wzbudzała osoba<br />
Paula Davisa (Linux Audio Systems). Jest<br />
on autorem kilku projektów budzących<br />
wielkie nadzieje. Pierwszy z nich to JACK<br />
Audio Connection Kit. Jest to współpracujący<br />
z ALSA protokół przesyłania strumieni<br />
danych audio pomiędzy odtwarzaczami,<br />
procesorami efektów i instrumentami,<br />
umożliwiający dowolne konfiguracje.<br />
Nawiasem mówiąc, pomysł na<br />
JACK–a powstał w ubiegłym roku, podczas<br />
pierwszej edycji konferencji. Drugi<br />
projekt Paula Davisa to nowość – biblioteka<br />
Fst, umożliwiająca uruchamianie wtyczek<br />
VST/Windows. Dzieje się to bez potrzeby<br />
korzystania z Wine, czego wymaga<br />
np. Vst-server, inna próba rozwiązania<br />
problemu współpracy Linuksa ze standardem<br />
VST. Podczas prezentacji można było<br />
między innymi zobaczyć bezproblemowo<br />
działający pod Linuksem sampler Kontakt<br />
firmy Native Instruments.<br />
Największe dziecko Paula Davisa to<br />
Ardour, zaawansowany system rejestracji<br />
twardodyskowej. Program ten ma<br />
wkrótce doczekać się wersji stabilnej 1.0.<br />
W chwili obecnej obsługuje on nielimitowaną<br />
(poza ograniczeniami sprzętowymi)<br />
liczbę ścieżek audio z wtyczkami efektowymi<br />
w standardzie LADSPA (w przyszłości<br />
również VST) oraz pełną automatykę<br />
miksu i efektów. Po wydaniu wersji stabilnej<br />
Paul planuje dodać do programu obsługę<br />
MIDI. Jego marzeniem jest osiągnięcie<br />
w ciągu następnego roku 95% funkcjonalności<br />
programu Cubase SX.<br />
Fernando Lezcano jest znany społeczności<br />
linuksowej jako osoba sprawująca<br />
pieczę nad Planet CCRMA, potężnym repozytorium<br />
RPM programów muzycznych,<br />
kontrolowanym przez system Apt.<br />
Jest to doskonałe miejsce dla osób nie<br />
bardzo wtajemniczonych w zagadnienia<br />
konfiguracji Linuksa, a pragnących korzystać<br />
z oprogramowania muzycznego pod<br />
tym systemem. Można tu znaleźć m.in.<br />
skompilowane jądra z łatami umożliwiającymi<br />
osiągnięcie minimalnego opóźnie-<br />
10 czerwiec 2004
www.lpmagazine.org<br />
11
aktualności<br />
newsy<br />
News<br />
E-portfel dla Linuksa<br />
E-portfel to program do zarządzania<br />
finansami osobistymi. Aplikacja<br />
pozwala na ewidencję wydatków<br />
i przychodów wraz z opisem<br />
transakcji oraz tworzenie kategorii o<br />
dowolnej głębokości zagnieżdżeń.<br />
Ciekawą funkcją jest możliwość<br />
pobierania historii transakcji z banku<br />
internetowego mBank. Zostały<br />
rozpoczęte prace nad przygotowaniem<br />
wersji na Linuksa. Producent zachęca<br />
do współpracy w testach.<br />
http://www.eportfel.com/linux.php<br />
Patenty na oprogramowanie<br />
10 maja 2004 roku w Sali<br />
Kolumnowej Sejmu RP odbyła się<br />
konferencja dotycząca patentów<br />
na oprogramowanie. Została ona<br />
zorganizowana przez polski oddział<br />
ISOC (Internet SOCiety). Istotnym<br />
elementem konferencji była obecność<br />
Richarda M. Stallmana, założyciela<br />
projektu GNU (GNU is Not Unix).<br />
Ponieważ Urząd Patentowy Unii<br />
Europejskiej chce opatentować<br />
oprogramowanie, tak jak jest to<br />
zrobione w Stanach Zjednoczonych<br />
i Japonii, liczne organizacje, głównie<br />
FFII.org, ISOC.org, The Greens, nie<br />
chcą do tego dopuścić. Prelegenci<br />
zastanawiali się m.in. nad tym,<br />
czy Europa musi naśladować<br />
USA w kwestii patentowania<br />
oprogramowania, porównywali<br />
propozycje legislacyjne Parlamentu<br />
i Rady Europy, mówili o wpływie<br />
patentów na rozwój oprogramowania,<br />
a także gospodarczej racjonalności<br />
wprowadzenia patentów.<br />
Organizatorzy, a także zagraniczni<br />
goście, chcieli, aby 17-18 maja,<br />
podczas głosowania nad tą sprawą,<br />
Polska, tak jak inne kraje UE,<br />
powiedziała stanowcze NIE patentom<br />
na oprogramowanie. W związku<br />
z tym postanowili przygotować<br />
oświadczenie na temat swojego<br />
stanowiska, które dostarczą Rządowi.<br />
http://www.linux.pl/?id=article&katego<br />
ria=12&show=219<br />
http://www.pcworld.pl/news/<br />
66395.html<br />
Opera 7.50<br />
Firma Opera Software ogłosiła<br />
dostępność nowej wersji swojego<br />
flagowego produktu, czyli<br />
przeglądarki WWW Opera 7.50 dla<br />
Windows, Maca, Linuksa, FreeBSD<br />
oraz Solaris. Kolejna edycja oferuje<br />
użytkownikom nowości w postaci<br />
przepisanego klienta poczty, czytnika<br />
grup dyskusyjnych, nowego klienta<br />
sieci IRC, przeprojektowanego<br />
interfejsu użytkownika i wiele,<br />
wiele innych ciekawych rozwiązań.<br />
http://www.opera.com/<br />
nia toru audio i odpowiadające im moduły<br />
ALSA i MidiShare. Fernando zademonstrował<br />
Common Music – Common Lisp<br />
Music – Common Music Notation, pakiet<br />
do syntezy dźwięku, kompozycji algorytmicznej<br />
i notacji muzycznej.<br />
Fons Andrieansen dał się poznać jako<br />
człowiek wyjątkowo wrażliwy na jakość<br />
dźwięku. Podczas odrębnych pokazów<br />
zademonstrował bardzo przekonywającą<br />
symulację komputerową organów kościelnych<br />
oraz LAAA, aplikację do pomiarów<br />
charakterystyk przenoszenia urządzeń<br />
audio (np. kart dźwiękowych).<br />
Ważną rolę w programie konferencji<br />
odegrała muzyka. Podczas czterech koncertów<br />
uczestnicy mieli okazję posłuchać<br />
utworów powstałych z wykorzystaniem<br />
programów linuksowych. Nie były to, jak<br />
ma to często miejsce w przypadku podobnych<br />
imprez, tylko prezentacje możliwości,<br />
ale w znacznej mierze poważne<br />
kompozycje z udziałem “live electronics”.<br />
Szczególnie utwór Ludgera Bruemmera<br />
“Le temps du miroir” na fortepian<br />
i live electronics w wykonaniu Maki Namekawy<br />
(fortepian) i kompozytora (komputer)<br />
mógł przypaść do gustu. Nie bez<br />
znaczenia dla odbioru muzyki były wspaniałe<br />
warunki akustyczne i 8-kanałowa<br />
aparatura nagłaśniająca w sali koncertowej<br />
“Kubus”.<br />
Ciekawy utwór z udziałem żywych<br />
muzyków przedstawił również Orm Finnendahl<br />
(Folkwang-Hochschule Essen).<br />
Następnego dnia można było wgłębić się<br />
w tajniki pracy kompozytora podczas wykładów,<br />
gdy prezentował, często niestandardowe,<br />
użycie programów linuksowych<br />
jako pomoc w kompozycji.<br />
Poza wykładami i koncertami na uwagę<br />
zasługują prezentacje dwóch sponsorów<br />
imprezy (firmy Hartmann i Lionstracs)<br />
instrumentów Neuron i Mediastation,<br />
wykorzystujących Linuksa jako system<br />
operacyjny.<br />
Konferencja Linux Audio Developers<br />
była świetną okazją wymiany doświadczeń<br />
oraz poznania możliwości systemu<br />
Linux w zakresie audio. Temperatura rozmów<br />
i dyskusji pozwala mieć nadzieję na<br />
jeszcze szybszy rozwój tej grupy programów,<br />
a także wzrost popularności systemu<br />
Linux wśród muzyków i realizatorów<br />
dźwięku.<br />
http://www.zkm.de/lad<br />
Xiph.org dołącza do Linuxaudio.org<br />
Dyskusja na zakończenie konferencji<br />
(Fernando Lezcano, Paul Davis, Takashi<br />
Iwai i Andrea Glorioso)<br />
Fundacja Xiph.org dołączyła 10 maja<br />
do konsorcjum Linuxaudio.org, które<br />
w rezultacie posiada już teraz dziewiętnastu<br />
członków (AGNULA, ALSA,<br />
Ardour, Audacity, Boost Hardware, Core<br />
Sound, Dyne:bolic, Fervent Software,<br />
4Front Technologies, GStreamer, JACK,<br />
JAMin, Linux Audio Systems, Lionstracs,<br />
Mandrakesoft, Mirror Image Studios, Plugin.org.uk,<br />
Rosegarden oraz Xiph.Org Foundation).<br />
Linuxaudio.org jest niedochodową<br />
organizacją, zrzeszającą firmy i projekty<br />
Open Source, które wykorzystują Linuksa<br />
i inne Wolne Oprogramowanie<br />
do pracy nad dźwiękiem. Celem utworzonego<br />
w styczniu konsorcjum jest<br />
koordynowanie wspólnych prac jego<br />
członków, współpracę przy promowaniu<br />
Linuksa w zastosowaniach<br />
dźwiękowych oraz centrum kontaktu<br />
dla potencjalnych partnerów biznesowych.<br />
Fundacja Xiph.org spełnia wszystkie<br />
założenia członkowskie, gdyż jest firmą,<br />
która koncentruje się na tworzeniu<br />
multimedialnych kodeków nowej generacji,<br />
nie tylko publicznie dostępnych,<br />
ale także bez ograniczeń licencyjnych.<br />
Najbardziej znane projekty audio,<br />
którymi się aktualnie zajmuje, to<br />
Vorbis (uniwersalne kompresja strumienia<br />
audio), Speex (kompresja<br />
mowy) oraz FLAC (Free Lossless Audio<br />
Codec).<br />
http://www.linuxaudio.org/<br />
12 czerwiec 2004
aktualności<br />
jądro linux<br />
News<br />
Reiser4 i zewnętrzne<br />
atrybuty plików<br />
Reiser4, nowa wersja dość<br />
popularnego systemu plików<br />
z księgowaniem reiserfs, ciągle<br />
jeszcze nie trafiła do oficjalnej serii<br />
jąder Linuksa i pewnie nie stanie<br />
się to prędko. Z tego powodu<br />
niektórzy deweloperzy próbują<br />
rozszerzać istniejącą wersję tak, aby<br />
mogła sprostać dość podstawowym<br />
wymaganiom na system plików.<br />
Takim wymaganiem są przykładowo<br />
„zewnętrzne” atrybuty plików,<br />
wymagane m.in przez ACL (Access<br />
Control Lists) lub SELinux. Hans<br />
Reiser, twórca i główny opiekun<br />
reiserfs i Reiser4, wyraźnie sprzeciwia<br />
się takim doraźnym rozwiązaniom.<br />
To powoduje, że reiserfs jest<br />
i najprawdopodobniej będzie w tyle<br />
w stosunku do innych systemów<br />
plików, aż do chwili, w której zostanie<br />
zastąpiony przez Reiser4.<br />
http://lwn.net/Articles/81696/<br />
Funkcje inline<br />
Kod jądra Linux zawiera pewne<br />
specyficzne konstrukcje, których<br />
zwykle nie używa się przy<br />
programowaniu w C w przestrzeni<br />
użytkownika. Jednym z takich<br />
elementów są funkcje inline,<br />
czyli funkcje rozwijane w miejscu<br />
wywołania. Przesłanką do ich<br />
używania jest wydajność. Nie ma<br />
jednak nic za darmo; jeśli używa<br />
się funkcji inline, to zwiększa się<br />
rozmiar jądra. Okazuje się jednak,<br />
że w niektórych przypadkach<br />
stosowanie funkcji rozwijanych<br />
w miejscu wywołania wcale nie daje<br />
pożądanych efektów, w szczególności,<br />
gdy dana funkcja jest wywoływana<br />
wiele razy w różnych miejscach<br />
w jądrze. Przekonał się o tym Stephen<br />
Hemminger, który wyeliminował<br />
atrybut inline z zestawu funkcji SKB<br />
(socket buffers) i uzyskał w testach<br />
trzyprocentową poprawę wydajności.<br />
http://lwn.net/Articles/81696/<br />
Kolejki POSIX w Linuksie<br />
W połowie kwietnia do oficjalnej<br />
serii jąder Linux trafiło sporo nowych<br />
rzeczy, a wśród nich implementacja<br />
kolejek POSIX przygotowana przez<br />
dwóch Polaków: Michała Wrońskiego<br />
i Krzysztofa Benedyczaka. Kolejki<br />
te są fragmentem IPC, używanym<br />
do wymiany informacji między<br />
procesami. Do tej pory w Linuksie<br />
istniały kolejki komunikatów w tzw.<br />
stylu Systemu V. Nowa implementacja<br />
nie zastępuje starej, lecz po prostu jest<br />
zgodna z innym standardem.<br />
http://www-users.mat.uni.torun.pl/<br />
~wrona/posix_ipc/<br />
Dostrajanie obsługi wymiany<br />
jądrze Linux, w trakcie rozwoju serii<br />
2.5, dodano możliwość ustala-<br />
W<br />
nia parametru swappiness, który mówi,<br />
jak chętnie system ma korzystać z partycji<br />
bądź pliku wymiany. Wartość tego parametru<br />
ustala się poprzez interfejs /proc<br />
w pliku /proc/sys/vm/swappiness i im jest<br />
ona większa, tym częściej możemy spodziewać<br />
się, że system będzie przenosił<br />
niewykorzystywane strony pamięci na<br />
dysk. To, czy częste swapowanie jest pożądane<br />
i korzystne, szczególnie w przypadku<br />
komputerów biurkowych, okazuje<br />
się nie być jednoznaczne. Wielu deweloperom,<br />
np. Rikowi van Rielowi, wydaje<br />
się, że system powinien zrzucać na<br />
dysk jak najmniej pamięci, bo dzięki temu<br />
jest znacznie bardziej interaktywny. Dzięki<br />
unikaniu wymiany między pamięcią<br />
a dyskiem zyskuje się mniejsze opóźnienia.<br />
Andrew Morton argumentuje zaś, że<br />
zrzucanie rzadko używanych stron pamięci<br />
na dysk poprawia działanie systemu<br />
właśnie dlatego, że oczyszcza pamięć<br />
GPL\0<br />
Jeszcze w trakcie prac nad jądrem 2.4 deweloperzy<br />
Linuksa wpadli na pomysł,<br />
aby moduły jądra Linux same jasno określały<br />
zasady ich licencjonowania. W tym<br />
celu wprowadzono makro MODULE_LICEN-<br />
SE. Do tej pory określono pięć rodzajów licencji<br />
uznanych za 'wolne', czyli właściwe<br />
dla modelu rozwijania jądra. Są to: 'GPL',<br />
'GPL v2', 'GPL and additional rights', 'Dual<br />
BSD/GPL' oraz 'Dual MPL/GPL'. Jeśli jakiś<br />
załadowany moduł przedstawia się jako<br />
moduł o innej licencji, to jądro zostaje<br />
uznane za 'napiętnowane' (ang. tainted).<br />
Celem wprowadzenia tej modyfikacji było<br />
umożliwienie łatwej identyfikacji jąder<br />
zawierających fragmenty, których kod źródłowy<br />
nie został uwolniony. Dzięki niej<br />
użytkownik może łatwo wiedzieć, że system,<br />
którego używa, nie jest w pełni wolnym<br />
oprogramowaniem, a deweloperzy jądra<br />
mogą ignorować zgłoszenia o błędach<br />
od osób, które doświadczają problemów z<br />
takimi systemami. Inną zaletą piętnowania<br />
jest ułatwienie konkretnym dostawcom<br />
stosowania własnej polityki odnośnie binarnych<br />
modułów.<br />
Oczywiście, każdy może w MODU-<br />
LE_LICENSE umieścić to, co chce, jednakże<br />
trudno się spodziewać, że ktoś tego nie<br />
zauważy. Nadużycia mogą się zdarzyć, ale<br />
dość łatwo jest je wyśledzić. Carl Daniel<br />
z danych, do których dostęp jest sporadyczny.<br />
Rzeczywiście, czasem może wydłużyć<br />
się czas, po którym jakaś aplikacja,<br />
np. Mozilla, nadaje się do używania,<br />
gdy użytkownik był przez kilka sekund<br />
nieaktywny, ale jest to koszt znacznie<br />
mniejszy niż koszt utrzymania niewykorzystywanych<br />
intensywnie stron w pamięci<br />
maszyny.<br />
Gdyby Andrew Morton nigdy nie miał<br />
nic wspólnego z pierwszą wersją łatki<br />
low-latency, można by pomyśleć, że jego<br />
twierdzenia są dziwne i nieprzemyślane.<br />
Wydaje się jednak, że ponieważ jest<br />
osobą z dużym doświadczeniem w pracy<br />
nad jądrem, to coś w tym musi być. Tym<br />
razem dyskusja dotyczy jedynie łatwo<br />
modyfikowalnego parametru. To, jaka<br />
wartość swappiness jest najlepsza, zależy<br />
od administratora systemu – nie jest decyzją<br />
podjętą za niego przez deweloperów,<br />
ale dzięki dyskusji można dowiedzieć się,<br />
jakie będą tego konsekwencje.<br />
http://kerneltrap.org/node/view/3000<br />
Hailfinger zauważył przykładowo, że<br />
w module dostarczanym przez firmę<br />
Linuxant w MODULE_LICENSE znalazł<br />
się następujący tekst: "GPL\0 for files in the<br />
\"GPL\" directory; for others, only LICENSE<br />
file applies" (GPL\0 dla plików w katalogu<br />
GPL, dla innych stosuje się plik LICENSE).<br />
Takie oznaczenie modułu wygląda na<br />
dość sprytne oszustwo, wykorzystujące tę<br />
właściwość języka C, że każdy napis kończy<br />
się znakiem '\0'. W ten sposób udało<br />
się zmylić makro. Deweloperzy zaczęli<br />
prześcigać się w sposobach uniemożliwiających<br />
podejmowanie takich praktyk.<br />
Niektórzy chcieli z tego zrobić kwestię tylko<br />
i wyłącznie prawną. Do dyskusji włączył<br />
się również przedstawiciel Linuxant<br />
tłumacząc, że takie rozwiązanie to pewne<br />
'obejście' ich problemów. Napisał, że<br />
nie zawsze tak działają i powoływał się na<br />
pewne utrudnienia patentowe.<br />
Niezależnie od tego, czy Linuxant<br />
miał prawo tak zrobić, interesujące jest<br />
to, że taka próba nie umknęła czyjejś<br />
uwadze. Wielu deweloperom zależy na<br />
tym, aby Linux był naprawdę otwarty.<br />
Zależy im na tym nie tylko z powodów<br />
ideologicznych, ale również technicznych<br />
– łatwiej jest opiekować się kodem, w którym<br />
wszystko jest pod kontrolą.<br />
http://kerneltrap.org/node/view/2991<br />
14 czerwiec 2004
kernel@lpmagazine.org<br />
dział prowadzi: Maja Królikowska<br />
Domeny szeregowania<br />
Szeregowanie procesów (ang. scheduling)<br />
jest jednym z najważniejszych<br />
zadań jądra systemu operacyjnego.<br />
W Linuksie bardzo długo funkcjonował<br />
ten sam algorytm szeregowania procesów,<br />
ale został zmieniony dopiero przez<br />
Ingo Molnara w trakcie rozwijania<br />
wersji 2.5. Nowy scheduler w pełni<br />
zastąpił stary, ale w trakcie wydawania<br />
pierwszych testowych wersji serii<br />
2.6 pojawiły się głosy, że nie przystaje<br />
on do nowoczesnych rozwiązań,<br />
takich jak hyperthreading czy<br />
architektura NUMA. Chociaż ostatnio<br />
trochę mniej można przeczytać<br />
na linux-kernel o algorytmie szeregowania,<br />
to grupa hakerów jądra wciąż<br />
nad nim pracuje. Efekty tej pracy<br />
można oglądać w jądrach serii -mm.<br />
Główną ideą, która stoi za przygotowywanymi<br />
właśnie poprawkami algorytmu<br />
szeregowania, jest pojęcie 'domen<br />
szeregowania' (ang. scheduling domains).<br />
Problem z szeregowaniem procesów<br />
dotyczy tylko maszyn z wieloma procesorami<br />
(fizycznymi lub logicznymi)<br />
i polega na tym, że w systemie może<br />
istnieć wiele logicznych procesorów,<br />
dla których wzajemne relacje są różne.<br />
Przykładowo, w przypadku hyperthreadingu<br />
mamy dwa logiczne procesory,<br />
które dzielą między sobą wszystkie<br />
zasoby – pamięć, cache, a tak naprawdę<br />
nawet sam procesor. W przypadku<br />
architektury SMP wszystkie procesory<br />
mają taki sam dostęp do pamięci, ale<br />
mają oddzielne pamięci cache.<br />
W przypadku NUMA dostęp do fragmentów<br />
pamięci nie jest taki sam dla<br />
wszystkich procesorów. W związku<br />
z tym, przenoszenie procesów pomiędzy<br />
procesorami może bardzo<br />
zależeć od tego, w jakiej wzajemnej<br />
relacji one pozostają. Warto tu<br />
zauważyć, że system NUMA można<br />
widzieć jako zestaw architektur SMP,<br />
które z kolei składają się z fizycznych<br />
procesorów, które dzięki hyperthreading<br />
mogą być znowu widziane<br />
jako dwa logiczne. Współczesne architektury<br />
potrzebują zatem często<br />
rozwiązania, które obsłuży wszystkie<br />
trzy przypadki na raz.<br />
Bardzo ważnym zadaniem algorytmu<br />
szeregującego procesy jest wyrównywanie<br />
obciążeń między procesorami.<br />
Jak już wspomniałam, przenoszenie<br />
procesów między procesorami może<br />
różnie kosztować, zależnie od tego,<br />
w jakiej relacji są te dwa procesory. Problem,<br />
który należy rozwiązać, polega na<br />
tym, aby jakoś 'nauczyć' algorytm szeregujący<br />
inteligentnego i jak najmniej kosztownego<br />
wykonywania postawionego<br />
mu zadania. Z tego powodu wymyślono<br />
domeny szeregowania. Taka pojedyncza<br />
domena to zbiór procesorów, które<br />
mają wspólne zasady szeregowania<br />
i których obciążenie może być wyrównywane<br />
z zachowaniem pewnych ustalonych<br />
zasad. Każda domena zawiera<br />
grupy procesorów i traktuje je jak<br />
pojedyncze jednostki. Domeny szeregowania<br />
są hierarchiczne i każda z nich<br />
zawiera pewne dane będące wskazówkami,<br />
w jaki sposób ma się odbywać<br />
szeregowanie w danej domenie. Na każdym<br />
poziomie odbywa się to trochę inaczej:<br />
• Na poziomie procesora z hyperthreadingiem<br />
wyrównywanie obciążenia<br />
odbywa się bardzo często,<br />
nawet jeśli różnice są bardzo małe.<br />
Koszt takiego działania jest żaden,<br />
ponieważ procesory logiczne dzielące<br />
między siebie jeden procesor fizyczny<br />
mają wspólny cache.<br />
• Na poziomie fizycznych procesorów<br />
próby wyrównywania obciążenia<br />
są znacznie rzadsze, a w przypadku,<br />
gdy cały system jest zajęty, są<br />
w ogóle ucinane. Wyrównywanie<br />
obciążenia odbywa się tylko wtedy,<br />
gdy rozłożenie jest naprawdę nierównomierne.<br />
• W przypadku węzłów NUMA próby<br />
wyrównywania są naprawdę rzadkie.<br />
Dzieje się tak ze względu na<br />
koszt przenoszenia procesów między<br />
węzłami NUMA.<br />
Szeregowanie oparte o domeny nie<br />
jest jeszcze do końca gotowe – wymaga<br />
jeszcze trochę szczegółowej pracy.<br />
Można mieć nadzieję, że trafi niedługo<br />
do oficjalnego jądra i że dzięki domenom<br />
szeregowania skończą się kłopoty<br />
z schedulingiem w 2.6.<br />
http://lwn.net/Articles/80601/<br />
Nowości w SATA<br />
Jeff Garzik ogłosił, że sterownik<br />
Serial ATA, rozwijany przez niego od<br />
jakiegoś czasu, został rozszerzony<br />
o obsługę specyfikacji AHCI<br />
(Advanced Host Controller Interface).<br />
Specyfikacja ta jest w pełni otwarta<br />
i jest z nią zgodny chip ICH6 Intela.<br />
Jest to wyjątek na rynku kontrolerów,<br />
ponieważ większość z nich to<br />
rozwiązania objęte umowami typu<br />
NDA. Chociaż jego architektura jest<br />
otwarta, to nie ustępuje w niczym<br />
innym rozwiązaniom. Jeff Garzik<br />
przyznał, że znacznie lepiej pracuje się<br />
ze sprzętem, którego specyfikacja jest<br />
znana i otwarta. Obsługa SATA została<br />
także całkiem niedawno przeniesiona<br />
z jąder 2.6 na jądra 2.4 jako kolejna<br />
z ostatnich nowości w serii 2.4.<br />
http://kerneltrap.org/node/view/2977<br />
http://kerneltrap.org/node/view/2969<br />
Z ketchupem<br />
Jakiś czas temu Matt Mackall<br />
opublikował Kpatchup, narzędzie<br />
automatyzujące ściąganie i łatanie<br />
kodu jądra Linux. Z czasem ten skrypt<br />
napisany w Pythonie zmienił nazwę<br />
na wdzięczniejszą – Ketchup. Skrypt<br />
ściąga sam łatki, których nałożenie jest<br />
niezbędne do uzyskania pożądanego<br />
efektu – wystarczy określić wersję,<br />
która nas interesuje lub po prostu<br />
zażyczyć sobie najnowszej. Działa<br />
zarówno dla jąder serii 2.4, jak i 2.6,<br />
obsługuje też kilka zestawów łatek<br />
(-mm, -tiny, -mjb).<br />
http://kerneltrap.org/node/view/2976<br />
Budzenie procesów<br />
W jądrze systemu operacyjnego czasem<br />
zdarza się, że trzeba poczekać na<br />
to, aby jakaś strona pamięci mogła<br />
być przez niego użyta, np. wtedy,<br />
gdy jest ona przedmiotem operacji<br />
wejścia-wyjścia. Jeszcze we wczesnych<br />
jądrach 2.4 z każdą stroną pamięci<br />
była związana oddzielna kolejka<br />
oczekujących procesów, co, jak<br />
można się domyślić, powodowało<br />
duże zużycie pamięci. Z tego powodu<br />
zmniejszono liczbę tych kolejek<br />
– przy użyciu funkcji mieszającej<br />
przyporządkowano jedną kolejkę wielu<br />
stronom. Według Williama Lee Irvina<br />
rozwiązanie to nie jest doskonałe,<br />
bo zbyt często zdarzają się kolizje<br />
i budzone są procesy, które nie mają<br />
nic wspólnego z daną stroną pamięci,<br />
a tylko trafiły do tej samej kolejki.<br />
Usprawnieniem tego mechanizmu ma<br />
być przygotowana przez niego łata<br />
implementująca filtrowane kolejki.<br />
W tym rozwiązaniu pojedyncze<br />
procesy mogą dostarczyć pewnych<br />
kluczy i na tej podstawie tylko procesy<br />
o danym kluczu będą budzone.<br />
http://lwn.net/Articles/82759/<br />
http://lwn.net/Articles/83506/<br />
www.lpmagazine.org<br />
15
aktualności<br />
debian<br />
News<br />
Pakiety dnia!<br />
Andrew Sweger codziennie publikuje<br />
opisy pakietów, które mają na celu<br />
przybliżenie ludziom ciekawego<br />
oprogramowania dostępnego<br />
w dystrybucji testing Debiana. Do<br />
tej pory zostało opisanych ponad 30<br />
pakietów. Warto poczytać!<br />
http://www.livejournal.com/users/<br />
debaday/<br />
Instalator Debiana<br />
beta 4 i Linux 2.6<br />
Joey Hess wysłał informację, że<br />
debian-installer używający Linuksa<br />
2.6 jest już blisko. W chwili obecnej<br />
są jeszcze pewne problemy z<br />
partycjonowaniem dysków IDE.<br />
Debian installer beta 4 z jądrem<br />
2.6 jest w tej chwili dostępny tylko<br />
dla platformy i386. Nowa beta<br />
jest także przetłumaczona na 35<br />
języków. Uprasza się o instalowanie<br />
i wypełnianie raportów instalacji,<br />
aby pomóc deweloperom ulepszyć<br />
instalator przed wydaniem Sarge.<br />
http://kitenet.net/%7Ejoey/blog/entry/<br />
26-2004-04-14-01-25.html<br />
http://lists.debian.org/debian-develannounce/2004/04/msg00025.html<br />
Nowy katalog /media<br />
Joey Hess ogłosił, że nowa wersja<br />
pakietu base-files zawiera nowy<br />
katalog /media, a usunięto<br />
z niej katalogi /cdrom i /floppy.<br />
Nowe rozwiązanie jest zgodne ze<br />
standardem File System Hierarchy<br />
Standard (FHS). Ponieważ jednak<br />
stare ścieżki są zakodowane<br />
w wielu programach, to rozważa się<br />
utworzenie dowiązań symbolicznych<br />
z /cdrom i /floppy do /media, które<br />
zostałyby usunięte po wydaniu Sarge.<br />
http://lists.debian.org/debian-devel/<br />
2004/04/msg07012.html<br />
Badania nad bezpieczeństwem<br />
GNU/Linuksa<br />
W odpowiedzi na powszechnie<br />
krytykowane badania bezpieczeństwa<br />
GNU/Linuksa (w odniesieniu do...<br />
Windows) Zespoły Bezpieczeństwa<br />
z Mandrake, Red Hata, SUSE i Debiana<br />
wydały wspólne oświadczenie.<br />
Głównym zarzutem jest, iż<br />
pomimo pozornego uwzględnienia<br />
jakościowych różnic między błędami<br />
dotyczącymi bezpieczeństwa, to<br />
w raporcie tak naprawdę wszystkie<br />
błędy potraktowano tak samo,<br />
niezależnie od prawdziwego<br />
niebezpieczeństwa stwarzanego przez<br />
każdy z nich dla użytkowników.<br />
W wyniku tego wypaczenia konkluzje<br />
raportu Forrestera zdają się mieć<br />
ograniczoną rzeczywistą wartość.<br />
http://www.debian.org/News/2004/<br />
20040406<br />
Wolność, Polityka i Sarge (w 2005?)<br />
Te wydarzenia zaskoczyły niemalże<br />
wszystkich. Po poprzednich głosowaniach:<br />
nad wsparciem dla sekcji non-free<br />
i wyborem nowego Lidera Debiana, najwyraźniej<br />
niewielu ludzi miało wystarczająco<br />
dużo samozaparcia, aby dokładnie<br />
przeanalizować drobną z pozoru “poprawkę<br />
edytorską” do Kontraktu Społecznego<br />
Debiana. Poprawka ta została przyjęta<br />
przy bardzo niskiej frekwencji, ale wystarczającej<br />
do ważności głosowania. W<br />
kilka godzin po ogłoszeniu wyników, Menedżer<br />
Wydania, Anthony Towns, wysłał<br />
list z informacją o statusie wydania Sarge<br />
w kontekście właśnie zatwierdzonych poprawek<br />
do Kontraktu Społecznego. W tym<br />
momencie rozpoczęła się burza.<br />
Ujmując to bardzo zwięźle, tzw. “poprawki<br />
edytorskie” praktycznie uniemożliwiają<br />
wydanie Sarge w przeciągu najbliższych<br />
miesięcy. Poprzednio użyte słowo<br />
“oprogramowanie” zostało zastąpione<br />
słowem “komponent” i w związku z tym<br />
Debian nie może zawierać żadnych komponentów,<br />
których licencja nie jest zgodna<br />
z Wytycznymi Dotyczącymi Wolnego<br />
Oprogramowania (DFSG). Poprzednio<br />
użyte słowo “oprogramowanie” pozwalało<br />
na interpretację Kontraktu Społecznego,<br />
która umożliwiałaby umieszczenie<br />
w sekcji main Debiana elementów nie będących<br />
oprogramowaniem, a dostępnych<br />
tylko na licencji niezgodnej z DFSG. Anthony<br />
napisał: “nie wydaje mi się, abym<br />
mógł wciąż usprawiedliwiać wyjątkowe<br />
(pobłażliwe) traktowanie dokumentacji,<br />
firmware czy innego nie-oprogramowania,<br />
gdyż Kontrakt Społeczny został zmieniony<br />
tak, że teraz w jasny sposób dotyczy<br />
on także nie-oprogramowania.”. To<br />
z kolei powoduje szereg praktycznych<br />
problemów:<br />
Bez względu na okoliczności, wszyscy chcą<br />
wydania Sarge jak najszybciej<br />
Anthony Towns omawia prace<br />
nad Debianem<br />
• istotne pakiety, takie jak glibc, nie będą<br />
miały dokumentacji;<br />
• wiele sprzętu nie będzie mogło być<br />
obsługiwane przez Debiana;<br />
• we wszystkich przypadkach firmware<br />
będzie musiało być usunięte z jądra<br />
Linuksa do przestrzeni użytkownika;<br />
• firmware będzie musiało być zawsze<br />
pakietowane oddzielnie od XFree86<br />
i jądra;<br />
• debian-installer będzie musiał zostać<br />
wyposażony w możliwość pobierania<br />
niewolnego firmware z non-free, ale<br />
nie innych części non-free;<br />
• firmware dla sterowników potrzebnych<br />
do startu systemu (np. karty sieciowe)<br />
będzie musiało zostać udostępnione<br />
w sekcji non-free w formie<br />
udebów, a także będzie trzeba stworzyć<br />
niewolne obrazy Instalatora Debiana,<br />
które będą potrzebne ludziom<br />
mających sprzęt wymagający tych sterowników<br />
do startu.<br />
Prace nad rozwiązaniem niektórych<br />
z tych problemów trwają już od dawna,<br />
ale nawet przy zwiększonym zaangażowaniu<br />
ludzi w ich rozwiązanie, nie ma realnej<br />
szansy na wydanie Sarge w najbliższym<br />
czasie.<br />
List Anthonego Townsa rozpoczął<br />
burzliwą dyskusję, w trakcie której okazało<br />
się, że najprawdopodobniej większość<br />
deweloperów nie miała pojęcia o możliwych<br />
konsekwencjach tych, wydawałoby<br />
się, niewielkich zmian. Pojawiły się<br />
też oskarżenia, że pewna grupa deweloperów<br />
przemyciła kontrowersyjną zmianę<br />
w Kontrakcie Społecznym tytułując ją jako<br />
“korektę edytorską”, a także pisząc niejasne<br />
ogłoszenie zmiany, z którego trudno<br />
było wyczytać, jaki dokładnie jest cel<br />
16 czerwiec 2004
debian@lpmagazine.org<br />
dział prowadzi: Grzegorz Prokopski<br />
zmiany i jak dokładnie zmiany wyglądają<br />
(ogłoszenie zawierało jedynie nowy tekst,<br />
a nie porównanie starego i nowego tekstu).<br />
Niektórzy mieli też pretensje do Anthonego,<br />
że powinien był wysłać ten list<br />
wcześniej, przed zakończeniem głosowania,<br />
a wtedy z pewnością wynik byłby inny<br />
(bardzo prawdopodobne, biorąc pod<br />
uwagę wyniki niedawnego głosowania<br />
nad pozostawieniem sekcji non-free). Najwyraźniej<br />
jednak, ani Anthony, ani też autorzy<br />
samej poprawki nie widzieli wcześniej<br />
pełni konsekwencji przyjęcia tych<br />
zmian.<br />
Co ciekawe, dyskusja nie dotyczyła<br />
samej idei poprawki Kontraktu Społecznego,<br />
aby jaśniej wyznaczał on wymagania<br />
dla elementów składających się na<br />
dystrybucję Debiana, ale raczej problemu<br />
bardzo bezpośredniego i istotnego: Sarge<br />
musi być wydany jak najszybciej. Nie<br />
wydaje się, aby ktokolwiek chciał opóźniać<br />
wydanie Sarge do 2005 roku! Wśród<br />
wielu propozycji można było też znaleźć<br />
propozycję samokasującej się zmiany do<br />
Kłopoty z firmware<br />
Kontraktu Społecznego, która pozwoliłaby<br />
wydać Sarge tak, jakby w mocy była<br />
stara wersja Kontraktu Społecznego, a nowa<br />
jego formuła weszłaby w pełni w życie<br />
dopiero po wydaniu Sarge. Co ciekawe,<br />
propozycja ta została wysunięta przez te<br />
same osoby, które zaproponowały “zmiany<br />
edytorskie”, które wywołały to całe<br />
zamieszanie. W istocie, pojawiło się aż<br />
5 niezależnych propozycji, które wkrótce<br />
zostaną poddane pod jedno, wspólne<br />
głosowanie. Byłoby bardzo dziwne, gdyby<br />
deweloperzy Debiana świadomie zdecydowali<br />
się na opcję, która nie umożliwiałaby<br />
szybkiego wydania Sarge.<br />
[Zmiany] http://www.debian.org/vote/<br />
2004/vote_003<br />
[Anthony] http://lists.debian.org/debianvote-0404/msg00074.html<br />
[DFSG] http://www.debian.org/social_<br />
contract<br />
[5Propozycji] http://lists.debian.org/<br />
debian-vote/2004/05/msg00062.html<br />
J<br />
. D. Hood podsumował opinie, w jaki<br />
sposób Debian mógłby obsługiwać binarne<br />
komponenty firmware, dla których<br />
nie ma dostępnych źródeł. Opiekun pakietów<br />
jądra, Herbert Xu, dodał do dyskusji<br />
swój punkt widzenia, wyjaśniając między<br />
innymi, że wolałby wszystkie pakiety<br />
jądra przenieść do sekcji non-free.<br />
Po usunięciu pierwszych binarnych<br />
firmware z jądra, przyszła kolej na sprawdzenie<br />
XFree86 i innego oprogramowania.<br />
Okazuje się, że jeśli Debian będzie<br />
kontynuował usuwanie tego rodzaju<br />
oprogramowania, to np. MGA, Rage 128<br />
czy Radeon DRM nie będą mogły być obsługiwane.<br />
Anthony Towns wyjaśnił też, że problemy<br />
z binarnymi firmware dzielą się na<br />
dwie kategorie: firmware, które jest niewolne<br />
i firmware, które narusza GNU<br />
GPL. Podczas gdy pierwszy rodzaj może<br />
być traktowany łagodniej dla wydania<br />
Sarge, to drugi musi być rozwiązany<br />
jak najszybciej. Nadmienił też, że problemy<br />
te znane są od dwóch lat i żaden<br />
z nich nie jest uważany za krytyczny dla<br />
wydania Sarge.<br />
Idealnym rozwiązaniem problemu<br />
z firmware byłoby wydzielenie go w postaci<br />
pakietów w sekcji non-free i użycie<br />
specjalizowanego programu, aby je załadować.<br />
W większości przypadków wydaje<br />
się to możliwe do zrealizowania,<br />
choć nie zostało to jeszcze zaimplementowane,<br />
głównie dlatego, że Linus uważa<br />
usuwanie firmware z jądra za bardzo<br />
głupi pomysł. Prawdziwe problemy pojawiają<br />
się jednak, gdy załadowanie firmware<br />
jest potrzebne do startu samego systemu.<br />
Aby umożliwić instalację Debiana<br />
na takim sprzęcie, Debian-installer będzie<br />
musiał zostać wyposażony w możliwość<br />
pobierania pakietów z firmware<br />
z sekcji non-free. W każdym przypadku<br />
powinno być jasne, że deweloperzy Debiana<br />
nie chcą utrudniać życia użytkownikom,<br />
a jedynie, zgodnie z umową społeczną,<br />
oddzielić oprogramowanie wolne<br />
od niewolnego.<br />
http://lists.debian.org/debian-devel-0404/<br />
msg00309.html<br />
http://lists.debian.org/debian-devel/2004/<br />
04/msg00405.html<br />
http://blog.bofh.it/id_27<br />
http://lists.debian.org/debian-release/<br />
2004/04/msg00060.html<br />
http://azure.humbug.org.au/%7Eaj/blog/<br />
2004/04/17#2004-04-17-firmware<br />
Licencja ReiserFS 4<br />
Hans Reiser wydał reiser4progs na<br />
licencji GPL z “wyjaśnieniami”, które<br />
powodują, że cały pakiet nadaje się<br />
w najlepszym przypadku do sekcji<br />
non-free. W “wyjaśnieniach” próbuje<br />
on m.in. narzucić interpretację,<br />
że wtyczki i klastrowe systemy<br />
plików zbudowane na tym systemie<br />
plików są pracami wywodzącymi<br />
się (ang. derivative works) z tego<br />
systemu plików. Takie “wyjaśnienia”,<br />
zmieniające zwyczajową interpretację<br />
GPL, prawdopodobnie powodują, że<br />
to oprogramowanie nie jest w ogóle<br />
dystrybuowalne.<br />
http://lists.debian.org/debian-legal/<br />
2004/04/msg00229.html<br />
Debian Progeny 2.0<br />
Jeden z użytkowników Debiana<br />
przetestował wydanie alfa Debiana<br />
Progeny 2.0, którego obrazy CD<br />
zostały niedawno udostępnione.<br />
Wydanie to jest pierwszą<br />
materializacją idei GNU/Linuksa<br />
składanego z komponentów. Każdy<br />
z komponentów, np. XFree86 czy<br />
GNOME 2.4, ma swoje własne<br />
repozytorium APT, co ma na<br />
celu ułatwienie uaktualniania<br />
indywidualnych komponentów.<br />
http://lwn.net/Articles/80473/<br />
Planet Debian i Debian Planet<br />
W serwisie Debian Planet pojawiło<br />
się pytanie postawione przez<br />
autorów tego serwisu, czy w związku<br />
z zaistnieniem i dużą popularnością<br />
Planet Debian (agregatora blogów<br />
ludzi związanych z Debianem,<br />
który na dodatek jest często mylony<br />
z Debian Planet) jest jeszcze miejsce<br />
i zapotrzebowanie na ich serwis?<br />
Czytelnicy niemal jednogłośnie<br />
wypowiedzieli się twierdząco.<br />
http://www.debianplanet.org/<br />
node.php?id=1100<br />
http://www.debianplanet.org/<br />
Czy już czas na GNOME 2.6<br />
w Debian unstable?<br />
Na liście debian-release zastanawiano<br />
się, czy GNOME 2.6 i GTK 2.4 nie<br />
powinny już zostać włączone do<br />
dystrybucji unstable ? Co prawda,<br />
grupa deweloperów opiekująca<br />
się wspólnie pakietami GNOME<br />
nie planuje jeszcze tego kroku, to<br />
same pakiety znajdują się już w<br />
experimental i zostały przetestowane<br />
na dwóch architekturach. Menedżer<br />
wydania odradza jednak pośpiech<br />
w tej sprawie.<br />
http://lists.debian.org/debian-release/<br />
2004/04/msg00082.html<br />
http://lists.debian.org/debian-release/<br />
2004/04/msg00109.html<br />
www.lpmagazine.org<br />
17
tualności<br />
News<br />
aktualności<br />
mandrake<br />
OpenOffice.org 1.1.1 KDE NWF<br />
OpenOffice.org to program<br />
niezależny od platformy, na jakiej jest<br />
uruchamiany, jednak aby upodobnić<br />
go do aktualnego środowiska, powstał<br />
projekt Native Widget Framework.<br />
W ramach NWF powstała między<br />
innymi wersja 1.1.1 z ikonami<br />
zapożyczonymi z KDE i szybko po<br />
ukazaniu się została spakietowana<br />
przez Texstara dla potrzeb<br />
powstającego PCLinuxOS 2k4,<br />
bazującego na Mandrake. Binarny<br />
pakiet RPM z OpenOffice.org 1.1.1<br />
KDE NWF ma wielkość 67,5 MB.<br />
http://thea.hmdnsgroup.com/<br />
pipermail/pclinuxos_<br />
pclinuxonline.com/2004-April/<br />
001673.html<br />
http://ftp.ibiblio.org/pub/Linux/<br />
distributions/contrib/texstar/temp/<br />
X-y dla Mandrake<br />
W podsystemie grafiki dla Linuksa<br />
(X Window System) nastąpiła<br />
ostatnio mała rewolucja: w związku<br />
z długotrwałymi problemami<br />
z rozwojem implementacji XFree86,<br />
zakończonymi zmianą licencji dla<br />
części jej elementów, której nie<br />
zaakceptowała większość ważnych<br />
dystrybucji, nową standardową<br />
implementacją jest X11 autorstwa<br />
X.Org. Najnowsze wydanie, X11R6.7,<br />
jest w dużym stopniu oparty o<br />
XFree86 4.4-RC2 (jeszcze sprzed<br />
zmiany licencji), w związku z tym<br />
przesiadka nie powinna powodować<br />
problemów z dotychczas używanymi<br />
kartami graficznymi. Pakiety RPM<br />
Phoenix z najnowszym X11 oraz<br />
(do wyboru) z XFree86 4.4.0<br />
dla Mandrake można znaleźć<br />
w repozytorium Rapsys. Ponadto,<br />
znajdziemy tam także pakiety<br />
z eksperymentalnym serwerem<br />
X rozwijanym na FreeDesktop.org,<br />
który w przyszłości może zastąpić<br />
obecny serwer w implementacji X11.<br />
http://rapsys.free.fr/<br />
http://hedera.linuxnews.pl/_news/<br />
2004/04/08/_long/2637.html<br />
Pomysły na 10.1<br />
Po wydaniu ostatniej stabilnej wersji<br />
dystrybucji twórcy mają już pomysły<br />
do wprowadzenia w wersji 10.1,<br />
planowanej na jesień tego roku.<br />
Wśród nich znajduje się między<br />
innymi instalacja przez VNC na<br />
wzór Fedory Core, generalne profile<br />
instalacji (np. komputer multimedialny,<br />
laptop, serwer czy cienki klient<br />
sieciowy) czy włączenie do wydania<br />
najświeższego GNOME 2.6. Pełna lista<br />
planowanych zmian jest bardzo długa<br />
i w poszukiwaniu rodzynków warto<br />
przejrzeć ją samodzielnie.<br />
http://qa.mandrakesoft.com/twiki/bin/<br />
view/Main/IdeasForMandrakelinux101<br />
18 czerwiec 2004<br />
mandrake@lpmagazine.org<br />
Czyszczenie luster<br />
Twórcy Mandrake doszli do wniosku,<br />
że trzeba skończyć z partyzantką,<br />
która do tej pory miała miejsce<br />
na serwerach z kopiami lustrzanymi<br />
ich dystrybucji, i zaproponowali nowy,<br />
bardziej spójny układ katalogów.<br />
W tym układzie jest miejsce zarówno na<br />
repozytoria pakietów, jak i gotowe obrazy<br />
ISO z różnymi wersjami Mandrake Linux.<br />
Zmiany te będą miały znaczenie zarówno<br />
dla użytkowników korzystających<br />
z poprawek bezpieczeństwa, jak również<br />
z testowych lub dodatkowych pakietów<br />
dystrybucyjnych.<br />
Zalecana główna ścieżka kopii ma nazwę<br />
Mandrakelinux z trzema głównymi<br />
podkatalogami: devel (wersja rozwojowa),<br />
official (wersja stabilna) i old (stare pakiety).<br />
Aby móc skorzystać z aktualizacji<br />
do wersji 10.0 z polskiego serwera ICM,<br />
należy z konsoli administratora wydać<br />
polecenie:<br />
urpmi.addmedia icm-update10 S<br />
ftp://ftp.icm.edu.pl/ S<br />
pub/Linux/distributions/mandrakelinux/ S<br />
official/updates/10.0/RPMS/<br />
Mandrakelinux 10 Official<br />
Gotowa jest już nie tylko wersja<br />
Official najnowszego Mandrake<br />
Linux 10.0 dla architektur<br />
32-bitowych, ale także dla procesorów<br />
Athlon64 i Opteron, zbudowanych<br />
w technologii 64-bitowej. Ostateczna<br />
wersja składa się z 4 płyt CD<br />
i w wersji 64-bitowej zapewnia przeciętnie<br />
20% szybszą pracę systemu<br />
na nowych procesorach. Producent<br />
podkreśla włączenie do dystrybucji<br />
jądra 2.6, KDE 3.2, narzędzi do łatwej<br />
migracji z Samby 2.x do Samby 3.x,<br />
możliwość uwierzytelniania LDAP i NIS<br />
na serwerach pracujących pod kontrolą<br />
Windows oraz automatyczne włączanie<br />
akceleracji 3D dla modeli kart graficznych<br />
opartych o kości ATI Rage 128/Pro<br />
i Radeon, NVIDIA i Matrox G200/G400/<br />
G500.<br />
Wielką zaletą 64-bitowej architektury<br />
produkcji AMD jest możliwość<br />
jednoczesnego uruchamiania programów<br />
skompilowanych zarówno 32-, jak<br />
i 64-bitowo. Ze względu na wysokie<br />
dział prowadzi: Daniel Koć<br />
Warto także dodać repozytoria pakietów<br />
dodatkowych (urpmi.addmedia<br />
icm-contrib<br />
ftp://ftp.icm.edu.pl/pub/<br />
Linux/distributions/mandrakelinux/<br />
official/10.0/contrib/RPMS) oraz z ograniczeniami<br />
prawnymi, tzw. Penguin Liberation<br />
Front (urpmi.addmedia plf ftp:<br />
//knight.zarb.org/pub/plf/mandrake/<br />
cooker).<br />
Spragnieni nowości mogą przesiąść<br />
się na niestabilną wersję Cooker<br />
(urpmi.addmedia icm-cooker ftp://<br />
f t p.ic m.e d u.pl/ p u b /lin u x /dis tributions/mandrakelinux/devel/cooker/<br />
i586/Mandrake/RPMS/), jednak warto<br />
pamiętać, że to wersja przeznaczona<br />
przede wszystkim do testów.<br />
Dotychczasowe, niedziałające już adresy<br />
repozytoriów, można usunąć przez:<br />
urpmi.removemedia nazwa-starego-repozytorium.<br />
ftp://ftp.icm.edu.pl/pub/Linux/<br />
distributions/mandrakelinux/README<br />
http://www.mandrakeclub.com/<br />
article.php?sid=1891<br />
Znaczek w prawym dolnym rogu wyróżnia<br />
wersję dla nowej generacji procesorów<br />
ceny nowego sprzętu, wersja Mandrake<br />
dla AMD 64 jest obecnie skierowana<br />
głównie na rynek wydajnych serwerów,<br />
jednak jest to przyszłość także dla<br />
rozwiązań typowo domowych i biurowych.<br />
http://www.mandrakesoft.com/<br />
products/10/<br />
http://www.mandrakesoft.com/<br />
products/10/amd64
aktualności<br />
aurox<br />
aurox@lpmagazine.org<br />
dział prowadzi: Robert Główczyński<br />
Nowy Aurox: 9.4<br />
Na początku maja ukazała się druga<br />
wersja testowa Auroksa 9.4. Wersja<br />
finalna będzie dostępna w Linux+ Extra!<br />
już w czerwcu. Jakie zmiany przynosi kolejne<br />
wydanie tej dystrybucji?<br />
Zmianie uległ sposób przygotowania<br />
płyt. Obecnie jest jeden międzynarodowy<br />
zestaw CD (z napisami startowymi<br />
w kilku językach). Nowością jest dodanie<br />
na płytach danych dla menedżera pakietów<br />
Apt: po wydaniu dla każdego CD polecenia<br />
apt-cdrom add i wpisaniu nazwy<br />
płyty, możemy doinstalowywać pakiety<br />
z płyt dystrybucji poleceniem apt install<br />
(będziemy proszeni<br />
o wkładanie odpowiednich płyt).<br />
Uwaga: Apt i graficzna nakładka (Synaptic)<br />
są w Dodaj/Usuń programy w grupie<br />
Popularne narzędzia. Dodawanie informacji<br />
o zawartości płyt możemy wykonać<br />
również w Synapticu (Działania–>Add<br />
CD-ROM).<br />
Pakiet biurowy OpenOffice.org został<br />
uaktualniony do wersji 1.1.1 (pisałem o<br />
tym w poprzednim numerze). Rzuca się<br />
w oczy zmiana stylu ikon (ikony Ximiana,<br />
zgodne stylistycznie z Evolution i lepiej<br />
pasujące do wyglądu aplikacji GNOME).<br />
Ponadto, OOo został skompilowany z łatkami<br />
pozwalającymi na wykorzystanie<br />
pakietu fontconfig (opis czcionek znajduje<br />
się w pliku /etc/fonts/fonts.conf, co pozwala<br />
na ujednolicenie obsługi czcionek<br />
dla wielu aplikacji). Powróciła możliwość<br />
wykorzystania arkusza kalkulacyjnego jako<br />
źródła danych w edytorze OOWriter.<br />
Lepsze są filtry do importu plików z innych<br />
programów (np. poprawiona obsługa<br />
dokumentów MS Word). Tłumaczenia<br />
i słowniki zostały podzielone na pakiety<br />
dodające obsługę poszczególnych języków<br />
(podczas aktualizacji systemu instalowane<br />
są wszystkie języki; podczas nowej<br />
instalacji – tylko wskazane).<br />
Nowe KDE to pakiety z wydań 3.2.1<br />
i 3.2.2, przygotowywane przez zespoły<br />
Auroksa (oznaczane przez aur) i KDE-<br />
RedHat (fdr). Aplikacje w tym wydaniu<br />
środowiska graficznego zostały lepiej zintegrowane,<br />
została poprawiona obsługa<br />
metody 'przeciągnij i upuść'; więcej aplikacji<br />
można osadzać w innych programach<br />
(pojawił się nawet komponent do<br />
osadzania VIM-a w edytorze stron WWW<br />
Quanta).<br />
Synaptic w akcji<br />
Nowością w KDE 3.2 jest Kontact, pakiet<br />
do pracy grupowej i zarządzania informacjami.<br />
Kontact integruje takie narzędzia,<br />
jak KMail, PIM, książka adresowa,<br />
lista nowin pobierana z Internetu i żółte<br />
karteczki, w wygodnym interfejsie (przypominającym<br />
Evolution).<br />
Kolejny nowy program to Kopete, komunikator<br />
internetowy obsługujący wiele<br />
protokołów do pogaduszek sieciowych<br />
(znajduje się w pakiecie kdenetwork).<br />
Programistów ucieszy stabilna wersja<br />
Umbrello, narzędzia do projektowania<br />
aplikacji zgodnie z metodyką UML (pakiet<br />
kdesdk).<br />
Quanta Plus 3.2 zawiera wstępną implementację<br />
VPL (edycja strony w trybie<br />
WYSIWYG oraz w dzielonym oknie<br />
z zsynchronizowaną edycją kodu źródłowego<br />
i WYSIWYG), nowe kreatory, nowy<br />
edytor tabel HTML.<br />
Usprawniona została obsługa komputerów<br />
przenośnych. Nowym narzędziem<br />
jest KWiFiManager, monitorujący i konfigurujący<br />
połączenia bezprzewodowe. Zarządzania<br />
energią odbywa się przez ACPI.<br />
Poprawiona została obsługa danych<br />
PalmPilot (bazy .pdb, konwersja tekstu<br />
na PalmDOC).<br />
W KOffice została poprawiona funkcjonalność<br />
wszystkich składników pakietu.<br />
Zwraca uwagę rozszerzony zestaw<br />
filtrów importu i eksportu: do KWorda<br />
możemy importować pliki PDF, dokumenty<br />
MS Word; poprawiono eksport<br />
do formatu RTF i dodano możliwość zapisu<br />
dokumentów MS Write. Arkusz kalkulacyjny<br />
KSpread ma poprawioną obsługę<br />
plików Gnumerica (arkusz GNO-<br />
ME); dodano możliwość zapisu i odczytu<br />
plików OpenOffice.org Calc. W arkuszu<br />
możemy korzystać z kilkudziesięciu<br />
nowych funkcji.<br />
Aurox Live w czasopismach<br />
Aurox Live 1.4.4, oparty na Auroksie<br />
9.3 i zawierający m.in. sterowniki<br />
do softmodemów Conexant HSF,<br />
SmartLink (PCI i USB) i Intel ICH<br />
oraz wybór aplikacji z Auroksa, został<br />
opublikowany w czeskiej edycji<br />
miesięcznika Linux+.<br />
http://www.softwaremedia.cz/<br />
Mobile Computing<br />
Jarosław Górny, szef dystrybucji<br />
Aurox, wystąpił na konferencji<br />
Mobile Computing 2004 (Warszawa,<br />
5-6 maja 2004). Jarek prezentował<br />
wykorzystanie Auroksa na<br />
komputerze przenośnym. Konferencje<br />
Mobile Computing organizowane są<br />
przez Software-Konferencje.<br />
http://www.software.com.pl/<br />
News<br />
Aurox dla samorządów<br />
Jarosław Górny i Robert Żmijan<br />
(Aurox Core Team) przekonywali do<br />
Auroksa na prezentacji alternatywnych<br />
rozwiązań informatycznych Open<br />
Source, zorganizowanej przez<br />
niezależny gminny wortal Gmina<br />
Celestynów Online i Celestynowskie<br />
Centrum Informacji. Spotkanie odbyło<br />
się 8 maja 2004 r. w Celestynowie<br />
(powiat otwocki) i było przeznaczone<br />
dla przedstawicieli samorządów oraz<br />
zainteresowanych firm. Wystąpił na<br />
nim również Krzysztof Kleszczewski<br />
(projekt LeftHand). Była to pierwsza<br />
prezentacja z planowanej serii.<br />
http://www.malvision.neo.pl/gco/<br />
portal/<br />
Otwórz oczy...<br />
Pod takim hasłem odbyła się<br />
12 maja w Łomży konferencja<br />
prezentująca możliwości zastosowania<br />
oprogramowania Open Source w<br />
edukacji i biznesie. Jarosław Górny<br />
przedstawiał na niej dystrybucję<br />
Aurox. Konferencję zorganizowały<br />
łomżyńskie firmy i instytucje:<br />
Wyższa Szkoła Agrobiznesu,<br />
Ośrodek Doskonalenia Nauczycieli<br />
i "SPEED" s.c.<br />
Narzędzia dla Auroksa<br />
Zespół Auroksa testuje nowe<br />
środowisko do budowania aplikacji.<br />
Nowe pakiety budowane są na<br />
trzech maszynach z wykorzystaniem<br />
narzędzi: distcc oraz ccache. Distcc<br />
pozwala do kompilacji plików<br />
wykorzystać odległe komputery, na<br />
których uruchomiono serwer distccd.<br />
Ccache pozwala wykorzystać dane<br />
z wcześniejszych kompilacji tego<br />
samego kodu, znacznie<br />
przyspieszając przebudowywanie<br />
pakietów z niewielkimi zmianami<br />
(np. z dodanymi łatkami).<br />
http://dag.wieers.com/packages/<br />
http://distcc.samba.org/<br />
http://ccache.samba.org/<br />
www.lpmagazine.org<br />
19
aktualności<br />
kde<br />
News<br />
Ikonki na folderach<br />
Folders with icons to kolejne miłe<br />
rozszerzenie Konquerora. Dodaje<br />
ono do ikonek naszych folderów<br />
w głównym katalogu partycji obrazki<br />
adekwatne do zawartości. Tak więc,<br />
każdy z katalogów, oprócz /proc<br />
i /tmp, będzie oznaczony inną ikoną.<br />
Ten wodotrysk działa na prostej<br />
zasadzie umieszczania plików<br />
z informacjami o ikonie<br />
w poszczególnych katalogach. Mimo,<br />
że taka opcja jest standardowo<br />
dostępna w przeglądarce Konqueror<br />
w KDE 3.2, to na forach można<br />
przeczytać opinię, iż nowo stworzony<br />
dodatek jest ...milszy. Dla ceniących<br />
sobie wygląd i porządek, polecam<br />
pobranie i instalację.<br />
http://www.kde-apps.org/content/<br />
show.php?content=12314<br />
Nowy obserwator logów<br />
Aplikacja EventWatcher, o której<br />
pisałem w jednym z numerów Linux+,<br />
cały czas rozwija się i wzbogaca<br />
o nowe funkcje. Mamy już dostęp<br />
do w miarę zaawansowanej obsługi<br />
logów systemowych i poprawione<br />
wsparcie dla plików RSS/XML<br />
pobieranych z serwisów newsowych.<br />
W nowej wersji mamy również<br />
usprawniony interfejs i jeszcze<br />
prostszą obsługę całości programu.<br />
http://eventwatcher.sourceforge.net/<br />
Załączamy do e-maila<br />
Attach to Email Service Menu<br />
to kolejny mały dodatek do<br />
Konquerora, tym razem jednak<br />
bardziej przydatny. Po jego instalacji,<br />
w menu podręcznym naszej<br />
przeglądarki plików, pojawia się opcja<br />
pozwalająca na dołączenie danego<br />
pliku czy też katalogu do e-maila<br />
oraz uruchomienie z odpowiednimi<br />
opcjami klienta poczty dla KDE<br />
– KMail. Dodatek dostarczany jest<br />
razem z odpowiednim skryptem<br />
w języku Python, którego interpreter<br />
warto mieć zainstalowany w systemie.<br />
http://www.kde-apps.org/content/<br />
show.php?content=11234<br />
Gorące MP3<br />
KMp3Burner to kolejne narzędzie<br />
z serii dla “wygodnickich”. Zasada<br />
działania tego mini-programu jest<br />
prosta. Po wyborze plików MP3 i<br />
dodaniu ich w wybranej kolejności<br />
do projektu, program sam konwertuje<br />
pliki do formatu .wav i nagrywa<br />
płytę audio za pomocą aplikacji K3B.<br />
Autor programu nie stworzył niczego<br />
nowego, a po prostu jeszcze bardziej<br />
ułatwił nam zadanie, jakim jest<br />
nagrywanie płyt audio z plików MP3.<br />
http://www.kde-apps.org/content/<br />
show.php?content=12067<br />
AmaroK<br />
AmaroK (tak brzmi nazwa kolejnego<br />
odtwarzacza plików multimedialnych<br />
dla KDE) został stworzony<br />
z myślą o wyznaczeniu nowego standardu<br />
w dziedzinie prostoty i ergonomii obsługi.<br />
Posiada on wszystkie podstawowe<br />
funkcje, takie jak odtwarzanie plików<br />
MP3, OGG, płyt audio czy też strumieni<br />
prosto z Internetu, jednak - według autorów<br />
- jego najbardziej istotnych cech należy<br />
doszukiwać się gdzie indziej. Gdzie?<br />
Otóż tam, gdzie właśnie zwykły użytkownik<br />
najczęściej trafia, czyli do ...interfejsu.<br />
I to nie tylko interfejsu okna głównego,<br />
ale przede wszystkim listy utworów, czyli<br />
tzw. "playlisty". Dla jednych jest to mało<br />
istotne, ale drudzy docenią np. dopracowaną<br />
obsługę systemu “przeciągnij<br />
i upuść” (ang. drag'n'drop), która<br />
pozwala w bardzo prosty i szybki sposób<br />
utworzyć listę odtwarzania. Oto większość<br />
najważniejszych cech AmaroKa:<br />
• efekty audio, takie jak reverb, echo czy<br />
compressor;<br />
• kompatybilność z takimi formatami<br />
list odtwarzania, jak .m3u czy .pls;<br />
Kolejny KOffice<br />
K<br />
Office, dobrze znany pakiet biurowy,<br />
rozwija się i ma się całkiem dobrze.<br />
Dowodem na to jest wydanie przez<br />
deweloperów projektu nowej, stabilnej<br />
wersji oznaczonej numerkiem 1.3.1. Poprawki<br />
dotyczące stabilności są stałym<br />
punktem przy wypuszczaniu nowej wersji<br />
tego oprogramowania, jednak wspomnę<br />
o tych najważniejszych dla zwykłego<br />
użytkownika:<br />
• zmiana struktury plików .desktop, odpowiedzialnych<br />
głównie za ułożenie<br />
skrótów do poszczególnych aplikacji<br />
KOffice w głównym menu KDE;<br />
• sprawdzanie błędów za pomocą<br />
“spellcheckera” znów działa poprawnie;<br />
• pakiet nie wiesza się już, gdy partycja,<br />
na której zapisujemy dokument, jest<br />
pełna;<br />
• w KSpread poprawiono możliwość<br />
cofania operacji usuwania wielu komórek;<br />
AmaroK<br />
• przyjemne w obsłudze UI (User Interface);<br />
• efekty wizualizacji ładowane za pomocą<br />
wtyczek.<br />
Poza powyżej wymienionymi cechami,<br />
program charakteryzuje się dobrą<br />
stabilnością i szybkością działania.<br />
Warto również wspomnieć o tempie<br />
rozwoju, które w przypadku tego<br />
projektu jest zadziwiająco szybkie.<br />
http://amarok.sourceforge.net/index.php<br />
KOffice 1.3.1<br />
• w filtrze eksportu z KWord do formatu<br />
HTML poprawnie eksportowane są<br />
wszelkie obrazki;<br />
• filtr z KWord do RTF kompiluje się już<br />
na GCC w wersji 3.4.<br />
Polecam wszystkim użytkownikom aktualizację<br />
do nowej wersji, gdyż chociaż nie<br />
wnosi ona nowych funkcji, to zapewnia<br />
dużo większą stabilność.<br />
http://www.koffice.org/<br />
20 czerwiec 2004
kde@lpmagazine.org<br />
dział prowadzi: Paweł Biliński<br />
Odświeżona Quanta+<br />
Deweloperzy najbardziej znanego<br />
edytora HTML dla KDE, a może<br />
nawet dla całego Linuksa, nie próżnują<br />
i nie pozostają do końca wierni swoim<br />
początkowym założeniom, chociażby<br />
sprzed roku czy dwóch. Według założeń,<br />
Quanta miała być jedynie “prostym”<br />
i “łatwym w obsłudze” szybkim edytorem<br />
HTML, obsługiwanym tylko za pomocą<br />
ręcznego wpisywania kodu stron.<br />
Wiele się od tamtego czasu zmieniło.<br />
Prostota i ergonomia interfejsu użytkownika<br />
faktycznie jest elementem nieodłącznym<br />
od czasu wydania pierwszej<br />
wersji Quanty, jednak np. co do szybkości<br />
czy wielkości można mieć spore<br />
zastrzeżenia. Quanta nie jest najszybszym<br />
edytorem, ani nie należy do<br />
najmniej rozbudowanych. Potraktowałbym<br />
jednak tę drugą cechę jako pozytywną.<br />
Przy wydaniu ostatniej stabilnej wersji<br />
odstąpiono w pewnym stopniu od upartego<br />
założenia, jakim było tworzenie edytora<br />
jedynie tekstowego. Dodano moduł WYSI-<br />
WYG, czyli pomagający w tworzeniu stron<br />
za pomocą myszki, bez znajomości języka<br />
HTML czy JavaScript.<br />
Im więcej czasu mija, tym bardziej<br />
Quanta staję się wielkim centrum do edycji<br />
całych serwisów WWW, a nie jedynie prostym<br />
edytorem pojedynczych stron. Wydanie<br />
wersji 3.3 BE2 oznacza dla użytkow-<br />
KDE bliżej MacOSX<br />
Quanta+<br />
nika wiele zmian, których listę przedstawiam<br />
poniżej:<br />
• dodanie kilku nowych aplikacji, wchodzących<br />
w skład pakietu KwebDev:<br />
KImageMapEditor oraz KlinkStatus;<br />
• lepszy, udoskonalony debugger PHP;<br />
• dodanie automatycznego uzupełniania<br />
znaczników CSS;<br />
• zupełnie przebudowany interfejs, który<br />
jest teraz oparty na fundamentach<br />
mechanizmu KMDI, znanego z zastosowania<br />
w KDevelop;<br />
• instalacja tej testowej wersji nie koliduje<br />
z poprzednią, zatem nie istnieje<br />
ryzyko utraty jakichkolwiek danych<br />
czy zmiany ustawień programu.<br />
http://quanta.sourceforge.net/main2.php?<br />
newsfile=qberelease02<br />
KXDocker<br />
Istnieje już wiele dodatków dla KDE,<br />
które pozwalają użytkownikom na<br />
upodobnienie swojego pulpitu do<br />
wyglądu innych systemów operacyjnych.<br />
Jednak takie zabiegi nie kończą<br />
się jedynie na stylach czy ikonach,<br />
gdyż ważne są również dodatki bardzo<br />
charakterystyczne dla tych systemów.<br />
W przypadku MacOSX mamy do<br />
czynienia z wygodnym paskiem dokującym,<br />
który w wersji dla KDE nosi<br />
nazwę KXDocker. Może on z powodzeniem<br />
zastąpić nasz domyślny panel<br />
- Kicker. Za pomocą KXDockera możemy<br />
umieścić na dole swojego ekranu<br />
pasek z listą uruchomionych zadań,<br />
zestawem ikon uruchamiających programy<br />
czy też modułem pomagającym<br />
nam w montowaniu różnych napędów.<br />
Program posiada sporą ilość opcji konfiguracji,<br />
które możemy dostosować<br />
do własnych potrzeb (np. uczynić panel<br />
przezroczystym czy też dodać własne<br />
tło).<br />
http://www.xiaprojects.com/www/<br />
prodotti/kxdocker/main.php<br />
Zmiana “bootsplasha”<br />
Do tej pory zmiana obrazu<br />
pojawiającego w momencie<br />
uruchomienia bootloadera była<br />
możliwa właściwie jedynie dla bardziej<br />
wtajemniczonych użytkowników.<br />
Teraz jednak sporo zmieniło się<br />
w tej dziedzinie, gdyż powstał program<br />
(oczywiście dla KDE), który pozwala<br />
na szybką zmianę “bootsplasha”. Na<br />
stronie KBootSplash jest dostępnych<br />
kilka przykładowych tematów, które<br />
możemy zainstalować jako domyślny<br />
obraz ładowany przed startem<br />
systemu. Aplikacja jest łatwa<br />
w instalacji, więc warto poświęcić<br />
kilka minut dla upiększenia naszego<br />
systemu.<br />
http://kbootsplash.sourceforge.net/<br />
SETI na bieżąco<br />
Dla maniaków aktywnie biorących<br />
udział w poszukiwaniach życia<br />
pozaziemskiego w ramach projektu<br />
SETI@Home powstał programik<br />
o nazwie KSetiWatch. Ułatwia on<br />
osobom wykonanie podstawowego<br />
zadania, jakim jest udostępnienie<br />
mocy obliczeniowej naszego<br />
komputera do celów naukowych.<br />
Na czym polegają te ułatwienia?<br />
KSetiWatch może np. monitorować<br />
pracę z kilku kont jednocześnie,<br />
“dokować” się do zasobnika w KDE,<br />
powiadamiać nas, gdy sygnał staje<br />
się wyraźniejszy oraz automatycznie<br />
startować i zatrzymywać klienta<br />
Seti@Home.<br />
http://ksetiwatch.sourceforge.net/<br />
Polsko, hojny narodzie!<br />
Serwis KDE.pl ujrzał światło dzienne<br />
około 20 maja ubiegłego roku. Od<br />
tamtego czasu przeszedł wiele zmian,<br />
czasem nawet rewolucyjnych. Jednak,<br />
jak wszyscy wiedzą, utrzymanie<br />
domeny .pl w dzisiejszych czasach<br />
z pieniędzy prywatnych nie jest<br />
sprawą tanią, szczególnie jeśli umowę<br />
podpisuje się bezpośrednio z NASK.<br />
Po roku istnienia serwisu pojawił<br />
się problem przedłużenia umowy,<br />
a co za tym idzie – problem<br />
finansowy. Wszystko jednak dobrze<br />
się skończyło, a to przede wszystkim<br />
dzięki uprzejmości serwisów<br />
LinuxNews.pl oraz 7thGuard.net<br />
oraz czytelników tych portali, którzy<br />
widząc ogłoszenia zadeklarowali<br />
wpłaty, czy też nawet już ich dokonali.<br />
W ten sposób<br />
w niecałe 2 dni uzbieraliśmy całą<br />
sumę. Chciałbym podziękować<br />
wszystkim, którzy wpłacili<br />
jakiekolwiek kwoty oraz tym, którzy<br />
tylko zadeklarowali się (po tym, jak<br />
już całą kwotę uzbieraliśmy). Dzięki<br />
wam KDE.pl może nadal istnieć<br />
i rozwijać się.<br />
http://kde.pl/?page=news&id=10<br />
www.lpmagazine.org<br />
21
aktualności<br />
linuxfresh<br />
News<br />
Sentry Firewall<br />
CD-ROM 1.5.0-rc12<br />
Ta dystrybucja Linuksa uruchamiana<br />
z płyty CD przeznaczona jest do dosyć<br />
specyficznych zastosowań. Jak sama<br />
nazwa wskazuje, pomyślana była jako<br />
podstawa taniej i łatwej w utrzymaniu<br />
zapory sieciowej, ale może również<br />
pracować jako ruter, serwer, a nawet<br />
węzeł systemu wykrywania włamań<br />
(IDS – Intrusion Detection System).<br />
Pliki konfiguracyjne mogą być<br />
przechowywane na zabezpieczonej<br />
przed zapisem dyskietce lub<br />
pobierane ze zdalnego serwera.<br />
W tej wersji rozwojowej zmieniono<br />
wersję jądra na 2.4.26-ow1. Oprócz<br />
tego, dodano pakiety Vsftpd 1.2.2,<br />
SUSE Proxy-Suite 1.9.2.2 oraz CUPS,<br />
a pakiet Snort uaktualniono do<br />
wersji 2.1.2. Wprowadzono też szereg<br />
drobniejszych poprawek.<br />
http://freshmeat.net/projects/sentry_<br />
firewall_cd/<br />
CUPS Driver<br />
Development Kit 1.0<br />
Jak wskazuje sama nazwa, jest<br />
to pakiet służący do tworzenia<br />
sterowników drukarek. Składa<br />
się on z zestawu przykładowych<br />
sterowników, kompilatora plików<br />
PPD, jak również z innych narzędzi,<br />
które można wykorzystać do<br />
tworzenia sterowników drukarek dla<br />
systemu CUPS lub innych środowisk<br />
drukowania. Na stronie domowej<br />
projektu umieszczona jest bardzo<br />
szczegółowa dokumentacja. Prowadzi<br />
ona użytkownika od instalacji<br />
pakietu, poprzez podstawy obsługi<br />
poszczególnych narzędzi, aż do<br />
instrukcji dotyczących konstruowania<br />
plików sterowników.<br />
Obecna wersja jest pierwszą stabilną<br />
wersją tego programu.<br />
http://freshmeat.net/projects/cupsddk/<br />
Basic Linux 3.20<br />
Basic Linux to jedna z wielu<br />
minidystrybucji Linuksa. Jej niewielkie<br />
wymagania sprzętowe (procesor 386,<br />
3MB RAM, system DOS) sprawiają,<br />
że świetnie nadaje się nawet dla<br />
starszych modeli komputerów PC.<br />
Dystrybucję tą można wykorzystać<br />
do przeglądania stron WWW, jak<br />
również do korespondencji za<br />
pośrednictwem poczty elektronicznej.<br />
Oprócz tego, w dystrybucji zawarty<br />
jest klient telnet, program wget oraz<br />
klient DHCP. Basic Linux może<br />
również być wykorzystywany jako<br />
terminal X. Aktualna wersja oferuje<br />
lepsze wsparcie dla laptopów<br />
– wprowadzono między innymi<br />
obsługę PCMCIA.<br />
http://freshmeat.net/projects/baslinux/<br />
Grip 3.2.0<br />
Grip pozwala nie tylko na słuchanie muzyki,<br />
ale również na nagrywanie jej na dysk<br />
Posiadacze obszernych kolekcji płyt<br />
CD z muzyką nieraz chcieliby móc<br />
posłuchać sobie własnej składanki. Czasem<br />
też po prostu chcą zachować oryginalną<br />
płytę na półce, aby uchronić ją<br />
przed zniszczeniem. W takich przypadkach<br />
przydaje się program Grip. Pozwala<br />
on na skopiowanie piosenek z płyty<br />
do pliku na dysku. Jeśli zamierzamy<br />
je później nagrać na płytę jako składankę,<br />
to w tej formie (plików wav) powinniśmy<br />
je zostawić. Gdy jednak chcemy<br />
zgromadzić swoją kolekcję muzyki<br />
na dysku, to lepiej od razu zakodować<br />
pliki do formatu MP3 lub Ogg Vorbis.<br />
Dzięki temu na dysku pozostanie<br />
miejsce na inne programy. Grip potrafi<br />
wykonać wszystkie te czynności – "zripować"<br />
wybrane ścieżki na dysk oraz<br />
zakodować je do wybranego formatu.<br />
O ile odczytanie danych potrafi wykonać<br />
samodzielnie (posiada wbudowane<br />
funkcje programu Cdparanoia),<br />
o tyle do kodowania potrzebuje zewnętrznych<br />
programów, takich jak Lame,<br />
L3Enc, BladeEnc, Gogo i inne. Również<br />
do ripowania możemy użyć zewnętrznego<br />
programu (np. Cdda2wav). Program<br />
potrafi automatycznie uzyskiwać informacje<br />
o nagranych na płycie ścieżkach<br />
z baz CDDB dostępnych w Internecie.<br />
Oprócz tego, Grip może też służyć jako<br />
zwykły odtwarzacz muzyki z płyt CD.<br />
Po uruchomieniu programu i włożeniu<br />
płyty CD, program próbuje pobrać<br />
z Internetu dane o piosenkach. Jeśli mu<br />
się to uda, to zamiast napisów Track 1<br />
i podobnych, w opisie zawartości płyty<br />
pojawią się tytuły piosenek. W dolnej<br />
części interfejsu znajdują się przyciski nawigacyjne<br />
przydatne podczas wykorzystywania<br />
Gripa w roli odtwarzacza muzyki.<br />
W razie wątpliwości co do przeznaczenia<br />
przycisku, wystarczy wskazać go<br />
kursorem, a po chwili pojawi się opis jego<br />
funkcji.<br />
Bardziej interesujące są zakładki<br />
znajdujące się w górnej części interfejsu.<br />
Po pierwszym uruchomieniu programu,<br />
najbardziej interesująca jest zakładka<br />
Config. Tutaj należy w kolejnych zakładkach<br />
wskazać ścieżkę do urządzenia<br />
CD-ROM, wybrać program ripujący<br />
oraz wykorzystywany enkoder. Można<br />
też ustawić szereg innych opcji, włączając<br />
w to obsługę znaczników ID3, adresy<br />
serwerów CDDB, jak również możliwość<br />
użycia serwerów pośredniczących<br />
(ang. proxy).<br />
Po ustawieniu tych opcji można przejść<br />
do zakładki Tracks i oddać się słuchaniu<br />
muzyki lub wybrać ścieżki przeznaczone<br />
do nagrania na dysk. Jeśli informacje<br />
o ścieżce są niezadowalające, można je<br />
zmodyfikować samodzielnie, wskazując<br />
konkretną nazwę ścieżki, a następnie<br />
wciskając ikonę ołówka (Toggle disc editor)<br />
umieszczoną w dolnym pasku interfejsu.<br />
Następnie przydatna okaże się zakładka<br />
Rip, w której dostępnych jest kilka<br />
przycisków. Pierwszy z nich (Rip + Encode)<br />
służy do zgrania wybranych ścieżek<br />
i od razu zakodowania ich do wskazanego<br />
formatu. Zależnie od ustawionych<br />
opcji, oryginalne pliki wav zostaną zachowane<br />
lub skasowane. Drugi przycisk (Rip)<br />
powoduje, że program zgrywa ścieżki do<br />
formatu WAV. Katalogi docelowe można<br />
określić w polach Encode file format<br />
i Rip file format umieszczonych odpowiednio<br />
w zakładkach Config–>Encode–>Encoder<br />
i Config–>Rip–>Ripper. Jeśli<br />
w trakcie zgrywania muzyki na dysk<br />
zmienimy zdanie, możemy przerwać ten<br />
proces wciskając przyciski Abort Rip and<br />
Encode lub Abort Ripping Only.<br />
W przypadku wystąpienia problemów<br />
można zapoznać się z przebiegiem<br />
wykonywania poleceń w zakładce Status.<br />
Oprócz tego, zostanie wyświetlone okno<br />
z komunikatem. W zakładce Help można<br />
znaleźć dokładniejsze informacje na temat<br />
konfigurowania i obsługi programu.<br />
Wersja 3.2.0 to pierwsza od ponad roku<br />
wersja stabilna. Wśród wielu wprowadzonych<br />
w tym czasie zmian szczególnie<br />
warto wymienić wsparcie dla GNOME 2<br />
oraz poprawione wsparcie dla innych języków<br />
narodowych (niestety wciąż brakuje<br />
wsparcia dla języka polskiego).<br />
http://freshmeat.net/projects/grip/<br />
22 czerwiec 2004
fresh@lpmagazine.org<br />
dział prowadzi: Piotr Machej<br />
Lftp 3.0.3<br />
Wielu użytkowników Linuksa nie<br />
wyobraża sobie życia bez programów,<br />
którym można wydawać polecenia<br />
z użyciem myszki, ale bardzo często najciekawsze<br />
programy to te działające w konsoli<br />
tekstowej. Jednym z takich programów<br />
jest klient FTP o nazwie Lftp. Program ten<br />
wyróżnia się na tle innych klientów tekstowych.<br />
Wspiera takie protokoły, jak FTP,<br />
HTTP, SFTP i FISH, jak również FTP poprzez<br />
proxy HTTP, HTTPS oraz FTP<br />
po SSL. Dzięki obsłudze wielowątkowości<br />
pozwala na równoczesne wykonywanie<br />
wielu poleceń – część z nich może być<br />
wykonywana w tle. Ponadto, oferuje bardzo<br />
użyteczną funkcję tworzenia lokalnej<br />
kopii wskazanych katalogów. Nie tylko potrafi<br />
wznowić transmisję pliku w przypadku<br />
zerwania połączenia, ale na dodatek jeśli<br />
opuścimy program w trakcie pobierania<br />
pliku, to zakończy jego pobieranie w tle.<br />
Jeśli chcemy, możemy nawet ograniczyć<br />
przepustowość wykorzystywaną przez<br />
Lftp do transferu plików.<br />
Pracę z programem zaczynamy od uruchomienia<br />
go poleceniem lftp. Możemy<br />
od razu podać adres, z jakim ma się połączyć,<br />
np. lftp ftp://sunsite.icm.edu.pl/.<br />
Po zalogowaniu się (domyślnie włączone<br />
jest logowanie anonimowe, lecz można<br />
podać nazwę użytkownika w parametrze -<br />
u) możemy przeglądać katalogi poleceniami:<br />
cd katalog i ls. Do pobierania plików<br />
służą standardowe polecenia get plik (dla<br />
pojedynczego pliku) i mget maska (dla wielu<br />
plików pasujących do maski). Można do<br />
nich dodać opcję -c, która spowoduje kontynuowanie<br />
ściągania plików, których fragmenty<br />
już znajdują się na dysku (reget).<br />
Program Lftp umożliwia równoczesne<br />
połączenie z wieloma serwerami.<br />
Wystarczy po połączeniu z pierwszym<br />
wydać polecenie open ze ścieżką<br />
do drugiego serwera (np. open<br />
http://www.us.kernel.org/pub/linux).<br />
Do przełączania pomiędzy serwerami<br />
służy to samo polecenie open, ale<br />
ze względu na to, że takie przełączanie<br />
jest nieco niewygodne, Lftp oferuje tzw.<br />
sloty. Najprostszą metodą skorzystania<br />
z nich jest wykorzystanie kombinacji<br />
klawiszy [Alt]-[cyfra], gdzie cyfra jest<br />
z zakresu od 0 do 9. Przykładowo, wciskamy<br />
[Alt]+[1] łączymy się (poleceniem<br />
open) z pierwszym serwerem. Następnie<br />
wciskamy [Alt]+[2] i łączymy się<br />
z drugim serwerem. Teraz możemy<br />
Osoby przyzwyczajone do pracy<br />
w powłoce nie będą miały żadnego<br />
problemu z obsługą Lftp<br />
kombinacjami [Alt]+[1] i [Alt]+[2] przełączać<br />
się pomiędzy nimi i wydawać polecenia<br />
każdemu z osobna. Przypomina to<br />
nieco pracę z wirtualnymi konsolami.<br />
Ta funkcja byłaby jednak nieprzydatna,<br />
gdyby nie możliwość pobierania<br />
plików w tle. Wydając polecenie get lub<br />
mget możemy dodać do niego znak &,<br />
który, podobnie jak w powłoce, powoduje<br />
wykonywanie zadania w tle. Spis<br />
takich zadań możemy uzyskać wydając<br />
polecenie jobs.<br />
Warto zapoznać się z przydatną<br />
możliwością ustawiania zadań w kolejki.<br />
Przykładowo, jeśli wysłaliśmy jakieś<br />
zadanie w tło, możemy poleceniem jobs<br />
sprawdzić, jaki numer został mu przypisany<br />
(jest on podany w nawiasach<br />
kwadratowych). Przypuśćmy, że jest to<br />
numer 0. Teraz możemy ustawić go na<br />
początku kolejki poleceniem queue wait<br />
0. Następnie możemy przejść do innego<br />
katalogu (cd katalog) i dodać do<br />
kolejki ściąganie kolejnego pliku poleceniem<br />
queue get plik. W ten sposób możemy<br />
dodawać i inne polecenia, które<br />
będą wykonywane we wskazanej kolejności.<br />
Ważne jest, aby nie dodawać<br />
do kolejki poleceń zmiany katalogu –<br />
Lftp po prostu zapamiętuje, w którym<br />
katalogu zostało wydane polecenie.<br />
To nie wszystkie możliwości tego bardzo<br />
wygodnego i funkcjonalnego klienta<br />
FTP. Więcej informacji można znaleźć<br />
w dokumentacji programu.<br />
W obecnej wersji poprawiono kilka<br />
błędów w FXP i SFTP. Oprócz tego polecenie<br />
cd katalog/ sprawdza teraz, czy<br />
katalog istnieje. Wprowadzono też kilka<br />
innych ulepszeń.<br />
http://freshmeat.net/projects/lftp/<br />
W3m 0.5.1<br />
Ta tekstowa przeglądarka stron<br />
WWW jest ciekawą alternatywą dla<br />
przeglądarki Lynx, a nawet i dla<br />
bardziej rozbudowanego Linksa.<br />
Obsługuje się ją nieco inaczej niż<br />
wspomniane konkurentki. Głównie<br />
dotyczy to przesuwania kursora,<br />
który w W3m przemieszcza się<br />
nie tylko pomiędzy odnośnikami.<br />
Można również skorzystać z pomocy<br />
myszki do wskazywania wybranych<br />
odnośników. Przeglądarka ta świetnie<br />
radzi sobie z renderowaniem tabel<br />
i ramek (te ostatnie konwertuje do<br />
postaci tabel). Oprócz tego, potrafi<br />
wyświetlać rysunki umieszczone na<br />
stronach (chociaż oczywiście nie<br />
wyświetla rysunków użytych jako tło).<br />
Nowa wersja przynosi poprawki kilku<br />
mniejszych błędów.<br />
http://freshmeat.net/projects/w3m/<br />
ReactOS 0.2.2<br />
ReactOS to ciekawy projekt mający<br />
na celu stworzenie systemu<br />
operacyjnego zgodnego z Windows<br />
NT. Bardzo ważne jest, że projekt<br />
rozwijany jest jako Open Source.<br />
Kierowany jest do wszystkich, którzy<br />
lubią pracować w systemie Windows,<br />
ale z jakiegoś powodu (np. ze względu<br />
na licencje) nie do końca są z niego<br />
zadowoleni. Projekt jest wciąż<br />
w bardzo wczesnej fazie rozwoju, lecz<br />
powoli dodawane są nowe funkcje<br />
i możliwości. Projektanci ReactOS<br />
ściśle współpracują z zespołem<br />
pracującym nad Wine. W nowej<br />
wersji została poprawiona stabilność<br />
i kompatybilność. Poprawiony<br />
podsystem graficzny umożliwił<br />
uruchomienie nowych aplikacji,<br />
takich jak edytor tekstu AbiWord czy<br />
przeglądarka grafiki IrfanView.<br />
http://freshmeat.net/projects/reactos/<br />
Qt 3.3.2<br />
Qt to zestaw narzędzi przeznaczony<br />
dla twórców oprogramowania.<br />
Jego wykorzystanie ułatwia proces<br />
tworzenia graficznego interfejsu<br />
użytkownika programu (GUI). Co<br />
więcej, Qt pozwala na tworzenie<br />
aplikacji wieloplatformowych.<br />
Program stworzony z wykorzystaniem<br />
Qt można uruchomić zarówno<br />
w środowisku X Window, Apple<br />
Mac OS X, jak również w rodzinie<br />
systemów Windows. Wystarczy<br />
po prostu skompilować źródła<br />
programu dla docelowej platformy.<br />
W nowej wersji wprowadzono<br />
szereg mniejszych poprawek, jednak<br />
zachowana została zgodność z<br />
poprzednimi wersjami (3.3.1 i 3.3.0),<br />
zarówno w odniesieniu do źródeł, jak<br />
i skompilowanych binariów.<br />
http://freshmeat.net/projects/qt/<br />
www.lpmagazine.org<br />
23
aktualności<br />
linuxfresh<br />
News<br />
Yet Another antiVirus<br />
Recipe 2.1.1<br />
W obecnych czasach prawie każda<br />
skrzynka poczty elektronicznej<br />
narażona jest na otrzymanie robaka<br />
pocztowego. Obok spamu, jest to<br />
największe utrapienie użytkowników<br />
sieci. Yet Another antiVirus Recipe<br />
(YAVR) jest jedną z możliwych metod<br />
zmniejszenia obciążenia skrzynki<br />
pocztowej takimi listami. Jest to<br />
skrypt procmaila, odfiltrowujący listy<br />
spełniające odpowiednie warunki do<br />
osobnego katalogu. W najnowszej<br />
wersji zostały dodane sygnatury<br />
robaków NetSky.R, NetSky.aa, NetSky.Y<br />
i NetSky.X.<br />
http://freshmeat.net/projects/yavr/<br />
Linux LiveCD Router 1.9.3<br />
Wśród dystrybucji Linuksa<br />
instalowanych na ruterach i zaporach<br />
ogniowych szczególną popularnością<br />
cieszą się dystrybucje uruchamiane<br />
z płyty CD. Ich główne zalety to<br />
brak konieczności instalacji oraz fakt,<br />
że nawet jeśli taki system zostanie<br />
spenetrowany, stosunkowo łatwo<br />
przywrócić go ponownie do stanu<br />
używalności. Włamywacz utrzymuje<br />
kontrolę nad systemem jedynie<br />
do restartu systemu, natomiast<br />
administrator może nagrać nową<br />
płytę z dystrybucją zawierającą już<br />
poprawki błędów wykorzystanych<br />
przez włamywacza. Linux LiveCD<br />
Router jest jedną z takich dystrybucji.<br />
Potrafi dzielić zarówno połączenia<br />
typu dialup, jak i DSL, T1, ISDN<br />
i inne. Można go nawet wykorzystać<br />
jako punkt dostępowy używając<br />
większości z popularnych kart<br />
radiowych. W aktualnej wersji między<br />
innymi dodano nowszą wersję<br />
Webmina, jak również kilka modułów<br />
do konfiguracji sieci i zarządzania<br />
rotacją logów.<br />
http://freshmeat.net/projects/cdrouter/<br />
File 4.09<br />
Ten niewielki program służy do<br />
określania typu pliku. Dzięki<br />
niemu możemy sprawdzić, z jakim<br />
plikiem mamy do czynienia. Potrafi<br />
rozpoznawać programy wykonywalne,<br />
wiele formatów graficznych,<br />
dźwiękowych czy tekstowych. Czasem<br />
może nawet podać takie informacje,<br />
jak rozdzielczość obrazu zapisanego<br />
w pliku graficznym, czy częstotliwość<br />
próbkowania w pliku dźwiękowym.<br />
Jest to jeden z tych programów,<br />
które rzadko wykorzystujemy<br />
bezpośrednio, natomiast używanym<br />
przez nas programom nieraz bardzo<br />
się przydaje. Ta wersja zawiera kilka<br />
niewielkich poprawek błędów.<br />
http://freshmeat.net/projects/file/<br />
FontForge 20040425<br />
uroku pulpitu i wygodzie korzystania<br />
z komputera decydują nie tyl-<br />
O<br />
ko grafika i wygodny interfejs, ale również<br />
użyte czcionki. Pomimo olbrzymiego<br />
wyboru fontów dostępnych w różnych<br />
serwisach internetowych, czasem brakuje<br />
takiego, który akurat by nam odpowiadał.<br />
Często bywa też tak, że znajdziemy<br />
śliczną czcionkę, która jednak ma jedną<br />
wadę – nie posiada polskich znaków diakrytycznych.<br />
Jeśli tylko licencja czcionki<br />
na to pozwala, możemy wtedy nieco<br />
ją poprawić i samodzielnie dodać polskie<br />
'ogonki'. Programem, który pomoże<br />
nam w tym, jest FontForge (dawniej znany<br />
pod nazwą PfaEdit) – edytor czcionek.<br />
Jeśli chcemy, to z jego pomocą możemy<br />
nie tylko poprawić gotowy font, ale nawet<br />
stworzyć od zera swój własny.<br />
FontForge pozwala na operacje na<br />
fontach bitmapowych (BDF), jak również<br />
wektorowych (Postscript, TrueType, Open-<br />
Type, SVG i innych). Oprócz tego możliwe<br />
jest dokonywanie konwersji pomiędzy<br />
różnymi formatami.<br />
Tworząc fonty, rysujemy je za pomocą<br />
krzywych. W celu ułatwienia możemy<br />
w tle warsztatu pracy wyświetlić rysunek<br />
litery, którą chcemy stworzyć. Jest to możliwe<br />
dzięki temu, że FontForge pozwala<br />
na pracę w kilku warstwach. Pierwsza<br />
z nich (Foreground layer) zawiera obrys<br />
naszego fontu. Warstwa tła (Background<br />
layer) może zawierać rysunek lub linie<br />
pomocne w rysowaniu czcionki. Ostatnia<br />
warstwa (Guide layer) zawiera linie pomocne<br />
w określaniu rozmiaru czcionki.<br />
Program możemy uruchomić z parametrami<br />
(np. fontforge -new w celu<br />
utworzenia nowej czcionki) lub bez (samo<br />
polecenie fontforge). W tym drugim<br />
przypadku powita nas okno, w którym<br />
możemy wybrać plik czcionki do edycji<br />
lub wcisnąć przycisk New, jeśli chcemy<br />
zacząć pracę od zera.<br />
Główne okno programu składa się<br />
z menu, pod którym wyświetlone są znaki<br />
dostępne w pliku czcionki. Informacje<br />
o czcionce (nazwę, kodowanie) można<br />
ustawić w menu Element –> FontInfo.<br />
Do edycji znaku przechodzimy wciskając<br />
dwukrotnie przyciskiem myszki<br />
na konkretnym znaku. Można też zaznaczyć<br />
znak i wcisnąć klawisze [Ctrl]+[h]. Pojawi<br />
się okno z obrysem znaku oraz okna<br />
narzędzi i warstw. W tym oknie możemy<br />
modyfikować wygląd znaku lub tworzyć<br />
Może nie jest to najładniejsza litera L<br />
z plusem, ale jak na pierwszy raz...<br />
całkiem nowy. Do tworzenia służą nam<br />
przede wszystkim narzędzia Add curve point<br />
(dodaje punkt będący częścią krzywej),<br />
Add corner point (dodaje punkt narożny,<br />
łączący dwie proste) oraz Add tangent point<br />
(najlepiej sprawdzający się jako punkt<br />
łączący krzywą z prostą, pomiędzy punktami<br />
curve i corner). Po stworzeniu ogólnego<br />
zarysu możemy go poprawiać przesuwając<br />
poszczególne punkty, modyfikując<br />
kształt krzywych, a nawet zmieniając<br />
rozmiar i proporcje całego znaku.<br />
Jeśli chcemy skorzystać z gotowego<br />
znaku, można go zaznaczyć i z menu<br />
dostępnego pod prawym przyciskiem<br />
myszki wybrać Copy. Następnie można<br />
wskazać pole, w którym chcemy ten<br />
znak umieścić i wkleić go poleceniem Paste<br />
dostępnym w tym samym menu. Teraz<br />
już można dokonywać modyfikacji<br />
(np. dodawać polskie ogonki). Szczegółowy<br />
tutorial prowadzący krok po kroku<br />
przez tworzenie i modyfikację fontów<br />
znajduje się na stronie domowej programu.<br />
Warto się z nim zapoznać, gdyż zawiera<br />
wiele ciekawych informacji (między<br />
innymi cenne uwagi odnośnie tworzenia<br />
znaków obrysowywanych przez więcej<br />
niż jedną krzywą, jak np. znak O).<br />
Po zakończeniu pracy ze znakami<br />
można wygenerować fonty wybierając pozycję<br />
menu File–>Generate Fonts. Zależnie<br />
od naszych potrzeb, możemy wygenerować<br />
fonty bitmapowe lub wektorowe.<br />
W nowej wersji programu poprawiono<br />
szereg błędów (między innymi<br />
związanych z powiększaniem obrazu<br />
i wklejaniem danych) oraz dodano kilka<br />
nowych funkcji (np. okno dialogowe pozwalające<br />
dokładnie określić lokalizację<br />
elips i prostokątów).<br />
http://freshmeat.net/projects/fontforge/<br />
24 czerwiec 2004
fresh@lpmagazine.org<br />
dział prowadzi: Piotr Machej<br />
Rootkit Hunter 1.0.7<br />
Wygląda na to, że trzeba będzie poprawić<br />
konfigurację SSH<br />
Czasy, gdy z Sieci korzystała jedynie<br />
grupa naukowców, dawno się już<br />
skończyły. Internet łączy teraz ze sobą najdalsze<br />
zakątki świata, a w jego czeluściach<br />
obok zwykłych użytkowników przebywają<br />
różnej maści łobuzy. Oprócz całej<br />
gamy osób określanych mianem scriptkiddies,<br />
których działalność zwykle ogranicza<br />
się do prób włamania do systemów<br />
z wykorzystaniem gotowych sposobów<br />
(a następnie podmiany strony czy skasowania<br />
plików), w Sieci można znaleźć<br />
bardziej wytrawnych włamywaczy. Dla<br />
nich włamanie się do systemu nie jest<br />
celem samym w sobie, lecz dopiero początkiem<br />
drogi. Dlatego też, jeśli chcą<br />
jak najdłużej utrzymać kontrolę nad<br />
skompromitowanym systemem, muszą<br />
ukryć ślady swojej obecności. W tym<br />
celu powstały tzw. rootkity. Są to zestawy<br />
programów zastępujących różne krytyczne<br />
pliki w systemie. Przykładowo, mogą<br />
być podmienione polecenia ls, find, ps,<br />
who, passwd i inne. Dzięki użyciu takiego<br />
rootkitu, wykrycie obecności intruza<br />
w systemie jest znacznie trudniejsze.<br />
Ze względu na konieczność wykrywania<br />
takich ataków, powstały różne<br />
programy mniej lub bardziej skutecznie<br />
wykrywające obecność rootkitów w systemie.<br />
Jednym z nich jest Rootkit Hunter.<br />
Program ten przegląda pliki i cały system<br />
w poszukiwaniu śladów obecności<br />
znanych i nieznanych rootkitów, tylnych<br />
furtek (backdoor) oraz snifferów.<br />
Program Rootkit Hunter należy uruchamiać<br />
z prawami administratora. Po<br />
uruchomieniu programu (jest to właściwie<br />
skrypt powłoki) poleceniem rkhunter,<br />
możemy zapoznać się ze spisem dostępnych<br />
parametrów wywołania. Najczęściej<br />
będziemy wykorzystywać opcję -c<br />
(a więc wywołanie rkhunter -c), która<br />
powoduje wykonanie pełnego skanowania.<br />
Przy pełnym skanowaniu program najpierw<br />
sprawdza, czy nie zostały podmienione<br />
kluczowe pliki wykonywalne. Następnie<br />
stara się wyszukać ślady obecności<br />
rootkitów na dysku. Po każdym etapie<br />
oczekuje na naciśnięcie klawisza [Enter],<br />
aby użytkownik miał możliwość zapoznać<br />
się z wynikami wyszukiwania. Jeśli nie zostaną<br />
znalezione żadne problemy, potwierdzane<br />
jest to wyświetleniem napisu [ OK ].<br />
W następnym etapie system jest sprawdzany<br />
na obecność koni trojańskich, podejrzanych<br />
właściwości kluczowych plików<br />
oraz podmienionych skryptów. Dodatkowo,<br />
sprawdzane są załadowane moduły jądra,<br />
otwarte porty najczęściej wykorzystywane<br />
przez tylne furtki oraz interfejsy sieciowe<br />
(czy przypadkiem nie są ustawione<br />
w tryb promiscuous).<br />
Kolejny etap to sprawdzenie nazwy<br />
komputera oraz zmian w informacjach<br />
o użytkownikach i grupach (jeśli test jest<br />
wykonywany po raz pierwszy, to informacje<br />
te są zapisywane do późniejszego<br />
porównania). Sprawdzane są również<br />
skrypty startowe i historia powłoki.<br />
Następnie katalog /dev jest przeglądany<br />
w poszukiwaniu podejrzanych plików.<br />
Po sprawdzeniu pliku /etc/passwd i konfiguracji<br />
SSH oraz logowania, zostaje wyświetlone<br />
podsumowanie.<br />
Należy pamiętać, że najważniejsze<br />
jest zapobieganie, a nie leczenie. Lepiej<br />
dbać wcześniej o aktualność systemu<br />
i instalować poprawki związane z bezpieczeństwem<br />
niż później po uruchomieniu<br />
programu Rootkit Hunter zobaczyć napis<br />
Found. Niezależnie bowiem od wykrycia<br />
i usunięcia samego rootkitu, konieczne jest<br />
odtworzenie stanu systemu sprzed włamania<br />
(o ile uda się określić jego datę), co<br />
zazwyczaj wiąże się z ponowną instalacją<br />
systemu. Nigdy bowiem nie można mieć<br />
pewności, że rootkit został całkowicie<br />
usunięty. Oczywiście, przed reinstalacją<br />
systemu należy wykonać kopie zapasowe<br />
ważnych danych, przy czym w przypadku<br />
plików binarnych koniecznie należy<br />
sprawdzić ich integralność.<br />
W tej wersji dodano między innymi<br />
wykrywanie IRIX Rootkit oraz URK<br />
(Universal Root Kit). Oprócz tego, poprawiono<br />
wykrywanie rootkitu Suckit<br />
i wprowadzono kilka innych ulepszeń.<br />
http://freshmeat.net/projects/rkhunter/<br />
Advanced Bash Scripting<br />
Guide 2.7<br />
Większość użytkowników Linuksa<br />
wcześniej lub później styka się<br />
z tworzeniem skryptów powłoki,<br />
chociaż w czasach, gdy coraz<br />
więcej osób korzysta z graficznych<br />
interfejsów, umiejętność ta nie jest<br />
już tak powszechna, jak w dobie<br />
wszechobecnego trybu tekstowego.<br />
Jeśli ktoś jednak zainteresuje się<br />
skryptami powłoki, z pewnością<br />
przyda mu się książka Advanced<br />
Bash Scripting Guide. Można ją<br />
czytać od deski do deski, ucząc się na<br />
licznych przykładach. Zawiera nawet<br />
wskazówki dotyczące podstawowych<br />
technik programowania. Ze względu<br />
na swoją objętość (około 556 stron<br />
wydruku), może odstraszyć niektóre<br />
osoby. Nawet im może się jednak<br />
przydać, jeśli będą szukać rozwiązania<br />
konkretnego problemu.<br />
http://freshmeat.net/projects/advanced<br />
bashscriptingguide/<br />
Allegro 4.1.14<br />
Programiści tworzący gry często<br />
korzystają z gotowych bibliotek<br />
zawierających funkcje do obsługi<br />
grafiki, dźwięku czy urządzeń<br />
wejściowych (klawiatura, myszka<br />
czy joystick). Taką biblioteką,<br />
przeznaczoną dla programistów<br />
C/C++ jest Allegro. Oprócz funkcji<br />
wymienionych wcześniej, oferuje<br />
ona także funkcje matematyczne do<br />
operacji zmiennoprzecinkowych,<br />
funkcje do obsługi 3D, zarządzania<br />
plikami, skompresowane pliki<br />
danych, jak również graficzny interfejs<br />
użytkownika.<br />
http://freshmeat.net/projects/allegro/<br />
MPlayer 1.0pre4<br />
Ten popularny program do<br />
odtwarzania filmów powoli zbliża się<br />
do stabilnej wersji 1.0. Obecnie<br />
potrafi obsługiwać większość<br />
popularnych formatów plików<br />
i kodeków zaczynając od MPEG,<br />
poprzez DivX, Windows Media,<br />
Real Audio/Video, Quicktime, aż to<br />
Vivo. Posiada wiele własnych wersji<br />
kodeków, ale może również korzystać<br />
z bibliotek stworzonych z myślą<br />
o Windows. Oprócz odtwarzania<br />
plików z filmami, radzi sobie też<br />
z odtwarzaniem płyt VCD i DVD<br />
(chociaż pod tym względem lepszy<br />
jest konkurencyjny Xine -- MPlayer<br />
jeszcze nie radzi sobie zbyt dobrze<br />
z menu DVD). Jego wielką zaletą jest<br />
możliwość wyświetlania napisów<br />
z plików w wielu różnych formatach,<br />
jak również napisów dołączonych do<br />
filmów DVD.<br />
http://freshmeat.net/projects/mplayer/<br />
www.lpmagazine.org<br />
25
wywiad<br />
Wywiad z Matthiasem<br />
Ettrichem, założycielem<br />
projektu KDE<br />
CD/DVD<br />
Po uruchomieniu dystrybucji<br />
Linux+ Live CD/DVD w systemie<br />
będzie dostępne graficzne<br />
środowisko pracy KDE.<br />
Krzysztof Krawczyk: Czy mógłbyś<br />
przedstawić się naszym Czytelnikom?<br />
Matthias Ettrich: Urodziłem się<br />
w 1972 roku na południu Niemiec,<br />
w pobliżu Sztutgartu. Moim pierwszym<br />
komputerem był Commodore C64, który<br />
kupiłem z braćmi, gdy miałem 12 lat.<br />
Strasznie mi się spodobał, ale później<br />
przestałem interesować się komputerami<br />
(jest znacznie więcej ciekawszych rzeczy,<br />
gdy jest się nastolatkiem) do momentu,<br />
gdy zacząłem studiować informatykę<br />
na uniwersytecie w Tuebingen. Ówczesny<br />
MS-DOS nie nadawał się do niczego<br />
– wydawało mi się, że nic nie zmieniło<br />
się od czasu C64. GNU/Linuksa odkryłem<br />
rok później i od tego momentu komputery<br />
zafascynowały mnie na nowo.<br />
Prywatnie, żyję sobie szczęśliwie<br />
w małym mieszkanku w Oslo, aktualnie<br />
sam. W środku mam fortepian, z którego<br />
dość często korzystam. Gdy stuknęła<br />
mi trzydziestka, powróciło moje zamiłowanie<br />
do muzyki klasycznej. W tej chwili<br />
ćwiczę klasyczną muzykę kameralną,<br />
głównie Beethovena, Mozarta i Hummela,<br />
ale oczywiście także Chopina. Oprócz<br />
tego, staram się skorzystać z norweskiej<br />
przyrody. Z dwoma przyjaciółmi kupiliśmy<br />
starą drewnianą łódkę, zbudowaną<br />
w 1956 roku, mającą 23 stóp długości.<br />
Przez parę ostatnich tygodni (głównie<br />
weekendy) staraliśmy się ją naprawić.<br />
Mamy nadzieję, że będzie można na niej<br />
pływać. W czasie zimy w Norwegii jeździ<br />
się na nartach. Chociaż norweskie zjazdy<br />
są małe w porównaniu z tymi z Alp<br />
i w niewielkim stopniu nasłonecznione,<br />
to jednak świetny śnieżny puch łatwo to<br />
rekompensuje.<br />
Zawodowo, pracuję na stanowisku<br />
Dyrektora ds. Rozwoju Oprogramowania<br />
w firmie Trolltech. Jestem odpowiedzialny<br />
za rozwój biblioteki Qt dla Uniksa, MS<br />
Windows, Macintosha oraz wbudowanego<br />
Linuksa. Dzięki dobrym układom<br />
w firmie, wciąż jestem w stanie osobiście<br />
uczestniczyć w pracach deweloperskich.<br />
KK: A jak rozpoczęła się twoja przygoda<br />
z KDE?<br />
ME: Około 1995 roku stałem się zagorzałym<br />
zwolennikiem oprogramowaniu<br />
GNU i Linuksa. Byłem tak przekonany do<br />
tego systemu, że nie mogłem zrozumieć,<br />
dlaczego koledzy ze studiów, niezależnie<br />
od tego, co studiowali, chcieli używać<br />
Windows 3.1 – brak wielozadaniowości,<br />
16-bitowa przestrzeń adresowa, częste<br />
pady, okropne ikonki i brzydkie fonty.<br />
Tak naprawdę to żaden z nich nie był<br />
w stanie powiedzieć czegoś dobrego na<br />
temat tego systemu. Pomimo wszystkiego,<br />
był on popularny. Najczęściej używaną<br />
aplikacją był Word 2.0 – drogi, niestabilny<br />
i mało funkcjonalny. Studenci<br />
musieli dzielić swoich dokumenty na<br />
mniejsze kawałki, ponieważ ich edytor<br />
nie był w stanie pracować stabilnie<br />
z dokumentami o więcej niż dziesięciu<br />
stronach. Na Linuksie mieliśmy TeX-a<br />
i LaTeX-a, które były proste w użyciu,<br />
tworzyły wspaniałe dokumenty, były<br />
stabilne i za darmo. Dlaczego ktoś nie<br />
chciałby ich używać?<br />
W tamtych czasach Microsoft był jeszcze<br />
daleki od zwycięstwa i nie wierzyłem<br />
w jego sukces. Za brak zainteresowania<br />
Linuksem obwiniałem istniejące oprogramowanie<br />
i jego brak skupienia się<br />
na końcowym użytkowniku. Wtedy właśnie<br />
zacząłem pisać graficzną nakładkę<br />
na LaTeX-a, która stała się później edytorem<br />
tekstu LyX. Chociaż mój program nie<br />
zahamował sukcesu Worda, to okazał się<br />
udanym projektem Wolnego Oprogramowania<br />
z aktywną społecznością dewelo-<br />
26 czerwiec 2004
wywiad z Matthiasem Ettrichem<br />
wywiad<br />
Matthias Ettrich<br />
perów i nauczył mnie, jak wygląda praca<br />
nad takimi projektami od środka.<br />
Ponadto, zauważyłem, że edytor<br />
tekstu sam w sobie nie był wystarczający,<br />
aby przekonać ludzi do rozważenia<br />
GNU/Linuksa jako poważnej alternatywy.<br />
Windows 95 zaczynał zastępować<br />
starszą wersję, a bardziej zaawansowane<br />
aplikacje dla niego stały się standardem.<br />
Nawet małe drobiazgi, takie<br />
jak okno dialogowe wyboru pliku, były<br />
o niebo lepsze niż cokolwiek osiągalnego<br />
w X Window. Technika "przeciągnij<br />
i upuść" była wszędzie, a protokoły sieciowe,<br />
takie jak HTTP, były wbudowane<br />
w system, więc dostępne dla każdej aplikacji.<br />
I, co najgorsze, Windows 95 w zasadzie<br />
nie wyglądał już tak źle. W rzeczywistości<br />
był bardzo zbliżony do Motifa<br />
– wykorzystywał trochę jaśniejszą szarość<br />
(idealny domyślny kolor na tło)<br />
i bardziej złożony efekt przycisku.<br />
Przez kolejne miesiące przeszukiwałem<br />
dostępne oprogramowanie w Linuksie,<br />
aby poprawić istniejącą sytuację. Zbadałem<br />
większość bibliotek graficznych<br />
i robiłem mniejsze poprawki w różnych<br />
menedżerach okien. Szczęśliwie, studiowałem<br />
wtedy informatykę, a w Niemczech<br />
oznaczało to dużo wolnego czasu<br />
i szybkie łącze internetowe.<br />
Ostatecznie, odkryłem bibliotekę Qt,<br />
który była pierwszą, która nie wyglądała<br />
na znacznie gorszą od tego, co działo<br />
się w Windows. Główną przyczyną tego<br />
było to, że Qt była także przeznaczona<br />
dla Windows, więc musiała radzić<br />
sobie z zaawansowanym API Win32.<br />
Tak się podnieciłem jej możliwościami,<br />
że na różne grupy dyskusyjne wysłałem<br />
zaproszenie do współtworzenia projektu.<br />
Martin Konold, którego znałem z projektu<br />
LyX, przygotował parę usług, w tym<br />
miejsce na serwerze FTP i listy dyskusyjne.<br />
Odzew był natychmiastowy i niesłychany,<br />
co oznaczało, że dużo ludzi myślało<br />
o tych samych zagadnieniach i szukało<br />
sposobów na ich realizację. Czas był<br />
jak najbardziej odpowiedni. Parę dni później<br />
mieliśmy ponad 40 programistów na<br />
liście dyskusyjnej, którzy byli poważnie<br />
zainteresowani tematem. Uzgodniliśmy<br />
najważniejsze rzeczy i zaczęliśmy<br />
kodować.<br />
Wtedy biblioteka Qt była tylko moją<br />
sugestią. Istniało sporo zamieszania<br />
wokół tego tematu. Wielu programistów<br />
nie było zadowolonych z jej licencji. Inną<br />
wadą był jej wbudowany wygląd, zbliżony<br />
albo do Windows, albo do Motifa.<br />
Rekompensowane to było intuicyjnym<br />
API, a szybkie napisanie nowego oprogramowania<br />
było tym, czego chcieliśmy<br />
najbardziej.<br />
Pomyśleliśmy, że zajmiemy się kontrowersyjnymi<br />
rzeczami później i czas<br />
pokazał, że mieliśmy rację. Gdy dwa<br />
lata później zacząłem pracę w Trolltech,<br />
moim pierwszym zadaniem, które sam<br />
sobie przydzieliłem, było wprowadzenie<br />
stylów w Qt. Drugim było poprawienie<br />
relacji ze społecznością KDE, co<br />
oznaczało konieczność zmiany licencji<br />
– na początku Open Source, a później<br />
GNU GPL.<br />
KK: A czym teraz przede wszystkim<br />
zajmujesz się w KDE?<br />
ME: Moją główną rolą było rozpocząć<br />
projekt, przedstawić jego wizję<br />
i pomóc w stworzeniu aktywnej społeczności<br />
równych członków o tym samym<br />
celu. KDE nigdy nie było jednoosobowym<br />
przedstawieniem, a nawet nie było<br />
skoncentrowane tylko wokół kilku ludzi.<br />
Fakt, że zawsze brakowało nam dobroczynnego<br />
dyktatora, opisanego w książce<br />
“Katedra i bazar”, prawdopodobnie nie<br />
dawało spokoju takim teoretykom Wolnego<br />
Oprogramowania, jak Eric S. Raymond.<br />
Dzisiaj koncentruję się głównie na<br />
technologii wspierającej KDE, czyli bibliotece<br />
Qt. Moja pozycja w Trolltech umożliwia<br />
mi przeznaczanie na ten cel zarówno<br />
środków finansowych, czyli sponsorowanie<br />
ludzi i wydarzeń, jak również<br />
pewnych zasobów deweloperskich, czyli<br />
pozwalanie moim inżynierom pracować<br />
nad KDE. Oprócz tego, mam dużo wystąpień<br />
i wywiadów, staram się jednoczyć<br />
ludzi i pomagam w organizowaniu takich<br />
wydarzeń, jak zeszłoroczna konferencja<br />
KDE w Nove Hrady.<br />
KK: Ile osób wspiera rozwój KDE/Qt.<br />
Znasz większość z nich?<br />
ME: Wydaje mi się, że aktualnie<br />
mamy więcej niż tysiąc współpracowników,<br />
więc oczywiście nie znam większości<br />
z nich. Nie wydaje mi się, aby ktokolwiek<br />
znał. Poznałem może ze stu na konferencjach<br />
KDE i innych imprezach. Z kilkoma<br />
nawiązałem bliższe kontakty.<br />
KK: Czy trudno było zarządzać<br />
takim projektem, jak KDE? Czy trudno<br />
jest zarządzać rozwojem Qt?<br />
ME: Centralne zarządzanie w projekcie<br />
Wolnego Oprogramowanie jest związane<br />
z koordynowaniem działań rozwojowych,<br />
a nie z mówieniem ludziom,<br />
co mają robić. Piękno rozwoju Wolnego<br />
Oprogramowania, a zarazem jego<br />
największą siłą, jest to, że każdy robi to,<br />
co lubi najbardziej. W końcu mówimy<br />
o ludziach, którzy poświęcają swój wolny<br />
czas, a nie o płatnej sile roboczej. Dzięki<br />
różnorodności ludzi, do każdego zadania<br />
znajdzie się człowiek, który lubi je najbardziej.<br />
Kluczem do sukcesu w każdym<br />
projekcie jest zachęcić wystarczającą<br />
liczbę odpowiednio zróżnicowanych<br />
ludzi i myślę, że w KDE się to udało.<br />
Zarządzanie rozwojem Qt jest zupełnie<br />
innym wyzwaniem. Mamy tutaj na<br />
miejscu zespół 20 pełnoetatowych inżynierów<br />
i wielu współpracowników na<br />
zewnątrz. Zarządzanie taką wysoce kreatywną<br />
płatną siłą jest znacznie trudniejsze,<br />
gdyż nie można po prostu odrzucać<br />
poprawek – twoim zadaniem jest wyszkolić<br />
tych ludzi i znaleźć im takie zadanie,<br />
które będą najbardziej odpowiednie dla<br />
ich indywidualnych zdolności.<br />
KK: Co myślisz o projekcie GNOME?<br />
Czy programiści KDE współpracują<br />
z tymi z GNOME?<br />
ME: Oba projekty są podobne<br />
w tym, że mają dwie, czasem odrębne,<br />
grupy docelowe: użytkowników<br />
i programistów. Porównanie środowiska<br />
programistycznego zostawiłbym raczej<br />
innym – w dużej mierze jest to kwestia<br />
gustu. Ogólnie, oba mają podobne cele<br />
i dzięki powszechnym i wzajemnym<br />
inspiracjom, często podejmuję podobne<br />
decyzje. Jest to związane z tym, że dzisiaj<br />
na prawie każdym poziomie jest nawiązywana<br />
współpraca pomiędzy oboma<br />
www.lpmagazine.org<br />
27
wywiad<br />
Matthias Ettrich i jego przyjaciele z Trolltechu (Tonje Sund i Lars Knoll)<br />
zespołami. Przykładowo, oba zespoły<br />
pracują aktywnie nad inicjatywą freedesktop.org,<br />
aby zbudować wspólną platformę<br />
pod KDE i GNOME, bazującą na<br />
standardzie POSIX.<br />
KK: Jakiej dystrybucji Linuksa używasz<br />
w domu, a jakiej w pracy? I dlaczego?<br />
ME: Osobiście bardzo lubię i używam<br />
SUSE, gdyż jest wygodna, kompletna<br />
i po prostu jestem do niej przyzwyczajony.<br />
Pomaga także, że znam wielu ludzi<br />
z SUSE, odpowiedzialnych za tę dystrybucję.<br />
Używamy również w pracy Debiana.<br />
Biorąc pod uwagę, że mamy administratorów,<br />
którzy zajmują się problemami<br />
technicznymi, jestem raczej niezależny<br />
od dystrybucji, przynajmniej tak długo<br />
jak zawiera Emacsa i GCC.<br />
KK: Czy myślisz, że KDE na Linuksie<br />
jest dobrą alternatywą dla Windows na<br />
stacjach roboczych?<br />
ME: To całkowicie zależy od tego,<br />
kim jestem i co chcesz robić na swoim<br />
komputerze. Dla mnie i wielu innych,<br />
KDE jest dobrym rozwiązaniem i tak jest<br />
już od kilku lat, więc tak – dla mnie to<br />
dobra alternatywa. W istocie, biorąc pod<br />
uwagę mój sposób pracy, to Windows nie<br />
jest dla mnie dobrą alternatywą. Jeżeli<br />
jesteś zadowolony z tego, jak działa Windows,<br />
a szukasz czegoś, co działa w ten<br />
sam sposób, ale jest tańsze, KDE nie jest<br />
rozwiązaniem. To nie jest zastępstwo dla<br />
Windows Microsoftu i nie chcemy, aby<br />
nim było. Chociaż były projekty Wolnego<br />
Oprogramowania, które starały się<br />
sklonować funkcje programu komercyjnego,<br />
a także jego właściwości, KDE<br />
do nich nigdy nie należało. To platforma<br />
zupełnie niezależna, a gdy obiektywnie<br />
porównywać, bardzo zaawansowana.<br />
Zauważ również, że zadowolenie użytkownika<br />
jest tylko pewną częścią równania.<br />
Równie istotne jest zadowolenie programistów.<br />
KDE jest tak samo platformą<br />
dla programistów, jak jest graficznym środowiskiem<br />
pracy. Przyciąganie programistów<br />
jest tak samo ważne jak przyciąganie<br />
użytkowników. Dzisiaj napisanie aplikacji<br />
KDE przyjaznej dla użytkownika<br />
jest łatwiejsze niż pod Windows. Zatem,<br />
jeśli szukasz dobrej platformy deweloperskiej<br />
dla swojej następnej aplikacji, KDE<br />
jest bardzo dobrą alternatywą.<br />
KK: Czy uważasz, żę KDE będzie<br />
kiedyś “doskonałe”. Albo chociaż bliskie<br />
temu?<br />
ME: Oprogramowanie nigdy nie<br />
jest doskonałe z dwóch powodów. Po<br />
pierwsze, zawsze uczysz się nowych<br />
rzeczy podczas tworzenia oprogramowania<br />
i pewne rzeczy chciałbyś później<br />
poprawić. Po drugie, świat zmienia się<br />
i to szybko. Fragment oprogramowania,<br />
który wydawał się doskonały dzisiaj, nie<br />
jest już taki za parę miesięcy, jest przestarzały<br />
za rok i całkowicie nie do wykorzystania<br />
za 3 lata.<br />
KK: Jakie są twoje plany na przyszłość?<br />
Czy zamierzasz bardziej włączać<br />
się w rozwój KDE czy ograniczysz swój<br />
wkład w to środowisko?<br />
ME: Aktualnie koncentruję się na<br />
następnej generacji Qt. Dzisiejsze Qt jest<br />
sprawdzoną technologią, która była opracowywana<br />
przez więcej niż 10 lat, więc<br />
uważamy, że czas najwyższy poprawić<br />
niektóre elementy jej architektury. Duży<br />
zakres urządzeń, na których jest używana,<br />
zaczynając od potężnych stacji roboczych,<br />
a kończąc na małych urządzeniach<br />
wbudowanych, prowadzi nas ku<br />
nowym wyzwaniom. Bardzo ciekawe<br />
jest to, że zarówno te małe wbudowane<br />
aplikacje, jak również duże aplikacje<br />
biurkowe, które wciąż stają się coraz bardziej<br />
skomplikowane, mają jedną cechę<br />
wspólną: wiele zyskałyby korzystając<br />
z bardziej elastycznej, mniejszej i jednocześnie<br />
szybszej biblioteki. Wierzymy, że<br />
możemy coś takiego przygotować.<br />
W rzeczywistości zawsze planuję<br />
poświęcać więcej czasu na zabawę<br />
z KDE, ale kiedy naprawdę się to uda,<br />
tylko czas pokaże. Tak się składa, że<br />
nigdy nie udaje mi go znaleźć.<br />
KK: Dziękuję za rozmowę.<br />
ME: To ja dziękuję. Pozdrawiam<br />
wszystkich użytkowników KDE<br />
w Polsce.<br />
W Internecie:<br />
• Strona domowa projektu KDE:<br />
http://www.kde.org/<br />
• Strona domowa firmy Trolltech:<br />
http://www.trolltech.com/<br />
28 czerwiec 2004
Linux+ 07/2003 Linux+ 08/2003 Linux+ 09/2003<br />
Linux+ 10/2003<br />
Linux+ 11/2003 Linux+ 12/2003 Linux+ 01/2004<br />
Linux+ 02/2004<br />
Numery archiwalne<br />
Prosimy o przesłanie kuponu pocztą lub faksem.<br />
Prosimy w odpowiednim polu zakreślić numery, które Państwo chcą zamówić.<br />
żółte pola – 24 zł za Linux+<br />
białe pola – 15 zł za Linux+<br />
Linux+ 03/2004<br />
(DVD, CD)<br />
Linux+ 04/2004<br />
(DVD, CD)<br />
niebieskie pola – 27.90 zł za Linux+ DVD<br />
czerwone pola – 9,90 zł za Linux+ bez CD<br />
2000<br />
2001<br />
2002<br />
2003<br />
2004<br />
2004<br />
2004<br />
1 2 3 4 5 6 7 8 9 10 11 12<br />
Linux+ 05/2004<br />
(DVD, CD, bez CD)<br />
L+ 05/2004<br />
– rocznik 2000 (12 numerów) – 120 zł<br />
– rocznik 2001 (12 numerów) – 120 zł<br />
– rocznik 2002 (12 numerów) – 150 zł<br />
– rocznik 2003 (12 numerów) – 150 zł<br />
Imię i nazwisko, nazwa firmy ..............................................................................<br />
Dokładny adres: ....................................................................................................<br />
.................................................................................................................................<br />
Wypełnia płatnik VAT. Oświadczam(y), że jestem(śmy) płatnikiem VAT<br />
i upoważniam(y) Software-Wydawnictwo Sp. z o.o. do wystawienia faktury VAT<br />
bez podpisu odbiorcy.<br />
pieczątka i podpis<br />
Software-Wydawnictwo Sp. z o.o.<br />
ul. Lewartowskiego 6, 00-190 Warszawa, Tel.: (22) 860 17 67
multimedia<br />
Linux<br />
w studiu nagrań<br />
Paweł Wolniewicz<br />
CD/DVD<br />
Po uruchomieniu dystrybucji<br />
Linux+ Live CD/DVD będzie<br />
można przetestować działanie<br />
omawianego oprogramowania.<br />
Na płycie DVD<br />
Na płycie DVD znajdują się<br />
wszytkie opisywane programy<br />
w postaci pakietu ReHMuDi 2.0.<br />
Na płycie CD<br />
Na płycie CD znajdują się<br />
niektóre z omawianych<br />
programów.<br />
O autorze<br />
Autor od sześciu lat korzysta<br />
z muzycznego oprogramowania<br />
dla Linuksa. Prowadzi serwis<br />
http://linux-muzyka.ixion.pl/,<br />
który jest poświęcony<br />
edycji dźwięku w Linuksie.<br />
Ostatnie kilka lat rozwoju<br />
Linuksa to czas dojrzewania<br />
i przystosowywania<br />
się do potrzeb różnych<br />
grup użytkowników. Do niedawna<br />
system spod znaku pingwina był kojarzony<br />
głównie z serwerami, a jego wykorzystanie<br />
jako stacji roboczej wydawało<br />
się mało opłacalne. Obecnie stereotyp<br />
ten jest powoli przełamywany, a nowe<br />
oprogramowanie pozwala na stosowanie<br />
Linuksa w wielu różnych miejscach,<br />
np. w studiu nagrań.<br />
Brak sterowników profesjonalnych<br />
kart dźwiękowych oraz dobrych<br />
aplikacji audio sprawiał, że do<br />
niedawna Linux był mało przyjazny<br />
dla muzyków. Obecnie nie ma już<br />
jednak powodu do wstydu. Pojawiają<br />
się pierwsze studia nagrań korzystające<br />
z Linuksa, a rozwój wolnego oprogramowania<br />
dźwiękowego wspierany<br />
jest - między innymi - przez Komisję<br />
Europejską.<br />
W artykule przedstawię metody przystosowywania<br />
Linuksa do potrzeb studia<br />
nagrań. Opiszę również sposoby wykorzystania<br />
kilku popularnych, muzycznych<br />
aplikacji. Spróbujemy, krok po<br />
kroku, skomponować nasze pierwsze<br />
nagranie (?) w Linuksie.<br />
Użytkownicy komercyjnych aplikacji<br />
służących do edycji dźwięku mogą<br />
w pierwszej chwili poczuć się nieswojo.<br />
Linux nie posiada rozbudowanych<br />
i wielofunkcyjnych "kombajnów"<br />
muzycznych. Podczas komponowania<br />
nagrań będziemy korzystać z co<br />
najmniej kilku mniejszych i bardziej<br />
wyspecjalizowanych aplikacji. Zaletą<br />
takiego rozwiązania jest możliwość<br />
dowolnego wyboru zestawu programów<br />
i proste przesyłanie pomiędzy<br />
nimi materiału dźwiękowego. Wadą jest<br />
konieczność instalowania sporej liczby<br />
aplikacji.<br />
Elementy linuksowego<br />
studia nagrań<br />
Zanim rozpoczniemy konfigurowanie systemu,<br />
wymienię jeszcze najważniejsze<br />
elementy studia nagrań bazującego na<br />
Linuksie. Przede wszystkim powinniśmy<br />
pamiętać, że najważniejszy jest zawsze<br />
sprzęt - komputer i karta dźwiękowa,<br />
a także mikrofony, klawiatury MIDI, przetworniki<br />
analogowo-cyfrowe oraz właściwe<br />
okablowanie. Nawet najlepsze oprogramowanie<br />
nie sprawi, że tania karta<br />
Multimedialne<br />
dystrybucje Linuksa<br />
• AGNULA – A GNU/Linux Audio Distribution:<br />
http://www.agnula.org/<br />
• ReHMuDi – stąd można ściągnąć<br />
obrazy płyt instalacyjnych:<br />
http://download.agnula.org/rehmudi/<br />
• Debian Multimedia Distribution –<br />
multimedialna wersja Debiana:<br />
http://www.agnula.org/download/<br />
demudi/demudi_1_0_iso<br />
• AGNULA/DeMuDi Live – dystrybucja<br />
uruchamiana z płyty CD:<br />
http://download.agnula.org/1.1/1.1.1/<br />
demudi-live-cd_1.1.1.iso<br />
• Planet CCRMA – zestaw pakietów<br />
dla systemów Red Hat i Fedora:<br />
http://ccrma-www.stanford.edu/<br />
planetccrma/software/<br />
• Dyne:bolic – uruchamiana z płyty<br />
CD, łatwa w obsłudze dystrybucja<br />
Linuksa przeznaczona dla osób<br />
pracujących z multimediami:<br />
http://dynebolic.org/<br />
• Audioslack – kilkanaście spakietowanych<br />
programów dźwiękowych dla<br />
Slackware:<br />
http://www.audioslack.com/<br />
• Pakiety RPM dla Mandrake – kilkaset<br />
z nich zawiera oprogramowanie<br />
muzyczne:<br />
http://rpm.nyvalls.se/<br />
30 czerwiec 2004
linuksowe studio nagrań<br />
multimedia<br />
Instalacja sterowników<br />
ALSA i łat niskich<br />
opóźnień<br />
Sterowniki ALSA wchodzą w skład<br />
wszystkich popularnych dystrybucji Linuksa.<br />
Systemy bazujące na jądrach 2.6.x<br />
domyślnie wykorzystują moduły ALSA.<br />
Aktualne wersje źródłowe sterowników<br />
można także pobrać ze strony http://<br />
www.alsa-project.org/.<br />
Ręczna instalacja łat niskich opóźnień<br />
jest zadaniem o wysokim stopniu<br />
trudności. Odpowiednio załatane jądro<br />
wchodzi w skład multimedialnych dystrybucji<br />
Linuksa, więc większość użytkowników<br />
uniknie samodzielnej kompilacji<br />
podrasowanego jądra. Łaty dla<br />
jąder 2.4.x można ściągnąć ze strony<br />
http://www.zip.com.au/~akpm/linux/<br />
schedlat.html. Przed ich instalacją warto<br />
zapoznać się z dokumentem Low-Latency<br />
2.4.x with ALSA HOWTO, dostępnym<br />
na stronie http://www.djcj.org/LAU/guide/<br />
Low_latency-Mini-HOWTO.php3.<br />
Jądro łatamy przy pomocy poleceń:<br />
cd /usr/src/linux<br />
patch -p1 < /usr/src/2.4.20-low-S<br />
latency.patch<br />
Pierwsze z nich przenosi nas do katalogu,<br />
w którym znajdują się źródła łatanego<br />
jądra. Program patch służy natomiast do<br />
nałożenia poprawek na jądro. Poprawmy<br />
ścieżkę dostępu tak, aby wskazywała na<br />
rozpakowany plik łaty niskich opóźnień.<br />
Teraz możemy już skonfigurować<br />
jądro systemu, np. poleceniem make<br />
menuconfig. W menu Processor Type and<br />
Features powinniśmy zaznaczyć opcję<br />
Low latency scheduling. Wszystkie pozostałe<br />
funkcje i moduły określamy według<br />
potrzeb, a następnie kompilujemy jądro.<br />
Aby jeszcze bardziej zwiększyć<br />
wydajność systemu, można skorzystać<br />
z łat preemptible (ftp://ftp.kernel.org/pub/<br />
linux/kernel/people/rml/preempt-kernel/).<br />
Dzięki nim priorytetowe procesy będą<br />
obsługiwane natychmiast, bez oczekiwania<br />
w kolejce, co prowadzi do znacznego<br />
zwiększenia opóźnień. Sposób instalacji<br />
jest analogiczny jak we wcześniejszym<br />
przypadku.<br />
Najlepsze efekty daje zastosowanie<br />
obydwu typów łat: niskich opóźnień<br />
i preemptible. Nie zawsze jest to jednak<br />
konieczne. W przypadku wykorzystywania<br />
Linuksa tylko do odtwarzania dźwięku<br />
i prostej edycji plików dźwiękowych,<br />
można poprzestać na standardowym<br />
jądrze, dostarczanym razem z instalowaną<br />
dystrybucją.<br />
dźwiękowa zabrzmi dobrze. Ponieważ<br />
nie będziemy musieli płacić za programy,<br />
zainwestujmy w dobre urządzenia<br />
studyjne.<br />
Sprzęt dobierajmy w zależności od<br />
stylu tworzonej przez nas muzyki i od<br />
rodzaju wykonywanych zadań. Jeśli<br />
zamierzamy nagrywać ścieżki wokalne,<br />
gitarowe lub perkusyjne, to potrzebny<br />
będzie mikrofon. Partie instrumentalne<br />
można zarejestrować przy pomocy klawiatur<br />
MIDI, keyboardów bądź syntezatorów.<br />
Jeśli chcemy zarchiwizować na krążkach<br />
CD kolekcję płyt winylowych lub kaset, to<br />
gramofon bądź magnetofon możemy podłączyć<br />
bezpośrednio do komputera.<br />
Dla celów nagrywania powinniśmy<br />
wykorzystywać sprzęt wyprodukowany<br />
przez firmy o uznanej renomie.<br />
Dobre marki mikrofonów to AKG, Beyerdynamic,<br />
Sennheiser i Shure. Kupując<br />
instrumenty klawiszowe warto wybierać<br />
produkty firm Korg, Kurzweil, Roland<br />
i Yamaha. W każdym przypadku warto<br />
poradzić się osób posiadających interesujące<br />
nas modele instrumentów. Na pewno<br />
pomoże to podczas dokonywania zakupu.<br />
Sporo informacji o sprzęcie studyjnym<br />
można również znaleźć w Internecie, np.<br />
na stronach http://www.sound.pl/.<br />
Metody nagrywania dźwięku, które<br />
opiszę, wymagają użycia mikrofonu oraz<br />
klawiatury MIDI. Można również wykorzystać<br />
dowolne inne źródło dźwięku,<br />
a instrumenty klawiszowe z powodzeniem<br />
zastąpi programowy sekwencer MIDI.<br />
Sterowniki i jądro systemu<br />
Oprócz sprzętu, bardzo ważne są sterowniki<br />
kart dźwiękowych i interfejsów<br />
MIDI. Powinny one pozwalać na pełne<br />
wykorzystanie możliwości posiadanych<br />
urządzeń. W przypadku studia opartego<br />
na Linuksie rozwiązanie jest jedno - sterowniki<br />
ALSA (Advanced Linux Sound<br />
Architecture). W porównaniu z przestarzałą<br />
już technologią OSS/Free, obsługują<br />
one znacznie więcej kart, a ponadto są<br />
bardziej dopracowane. Jest to zauważalne<br />
zwłaszcza w przypadku mniej popularnych<br />
i starszych kart dźwiękowych.<br />
Kwestią równie ważną, co właściwy<br />
dobór sterowników, jest odpowiednia<br />
konfiguracja jądra systemu. Powinno<br />
ono pozwalać urządzeniom i oprogramowaniu<br />
na natychmiastową reakcję na<br />
wydane im polecenia. Parametrem opisującym<br />
tę cechę jest opóźnienie (latencja).<br />
W uproszczeniu stanowi ono czas, jaki<br />
Rysunek 1. Graficzny instalator ReHMuDi<br />
w akcji (właśnie instalowane są programy<br />
dźwiękowe)<br />
upłynie pomiędzy wysłaniem komunikatu<br />
(naciśnięciem klawisza) a pojawieniem<br />
się sygnału w głośnikach. Niskie opóźnienia<br />
są istotne zwłaszcza wtedy, gdy<br />
wykorzystujemy nasz sprzęt komputerowy<br />
podczas występów na żywo.<br />
Do niedawna obsługa niskich opóźnień<br />
była piętą achillesową Linuksa.<br />
Obecnie istnieją odpowiednie łaty<br />
na jądro, możliwe jest też zainstalowanie<br />
prekompilowanych jąder. Warto też<br />
pamiętać, że opóźnienia zależą nie tylko<br />
od jądra systemu, ale w głównej mierze<br />
są wypadkową mocy obliczeniowej procesora<br />
oraz szybkości układów karty<br />
dźwiękowej.<br />
Serwer dźwięku i programy<br />
Przygotowując Linuksa do wykorzystania<br />
w studiu nagrań nie powinniśmy zapomnieć<br />
o zainstalowaniu profesjonalnego<br />
serwera dźwięku. Jest to demon pozwalający<br />
aplikacjom na wzajemne przekazywanie<br />
edytowanego materiału audio.<br />
Standardowo instalowane serwery - aRts<br />
dla KDE i ESD dla GNOME – z pewnością<br />
nam nie wystarczą. Są one przeznaczone<br />
jedynie dla najprostszych zadań: odtwarzania<br />
dźwięku i prezentacji multimedialnych<br />
oraz obsługi gier. Nie nadają się natomiast<br />
do bardziej zaawansowanych zastosowań,<br />
takich jak miksowanie muzyki na<br />
żywo czy praca z programowymi syntezatorami.<br />
Najlepszym wyborem jest JACK<br />
(JACK Audio Manipulation Kit). Bezproblemowo<br />
obsługuje on częstotliwości<br />
próbkowania do 96000 Hz oraz dźwięk<br />
24-bitowy. Ponadto korzysta z niego<br />
coraz więcej aplikacji. Dzięki serwerowi<br />
JACK możemy przesyłać edytowany<br />
materiał dźwiękowy pomiędzy wieloma<br />
wyspecjalizowanymi programa-<br />
www.lpmagazine.org<br />
31
multimedia<br />
nam koniecznie potrzebna. Zalecane ustawienia<br />
można łatwo otrzymać wykonując<br />
z konta administratora polecenie:<br />
/sbin/hdparm -c 3 -d 1 -m 16 -A1 /dev/hda<br />
Jeśli nowe ustawienia okażą się<br />
lepsze, system będzie działał stabilnie<br />
i znikną ewentualne problemy z odtwarzaniem<br />
dźwięku, to wywołanie programu<br />
hdparm umieśćmy w jednym<br />
Podłączanie urządzeń<br />
i instrumentów<br />
do komputera<br />
Ścieżki wokalne, brzmienie gitar, perkusji<br />
i odgłosy natury możemy nagrać<br />
przy pomocy mikrofonów dynamicznych<br />
i pojemnościowych. Do komputera podłączymy<br />
je na trzy sposoby:<br />
Rysunek 2. Konfiguracja serwera JACK w programie Qjackctl<br />
mi, bez obaw o ewentualną utratę jakości<br />
materiału.<br />
Odpowiedni dobór aplikacji, które<br />
posłużą nam do edycji dźwięku, również<br />
odgrywa duże znaczenie. Wiele zależy<br />
od konkretnych zastosowań, do których<br />
chcemy wykorzystać nasze studio.<br />
Dostępne są setki programów dla Linuksa<br />
- służą one do zapisu dźwięku na<br />
dysk, miksowania ścieżek audio, syntezy<br />
dźwięku, obsługi instrumentów MIDI,<br />
korekcji brzmienia i nakładania efektów.<br />
Wybierajmy raczej te aplikacje, które<br />
potrafią wykorzystać serwer JACK.<br />
Oprócz samodzielnych aplikacji służących<br />
do edycji dźwięku, powinniśmy<br />
zainstalować również wtyczki, z których<br />
będziemy mogli korzystać w dowolnym<br />
edytorze audio. Wtyczki są obecnie<br />
bardzo popularne i powszechnie używane.<br />
Dzięki nim nawet prosta aplikacja<br />
może stać się potężnym narzędziem.<br />
Standardem wtyczek właściwym dla<br />
Linuksa jest LADSPA. Obecnie dostępne<br />
jest kilkaset wtyczek w tym formacie.<br />
Oprócz tego, warto skorzystać z wtyczek<br />
VST, znanych użytkownikom systemu<br />
Windows. Można je już uruchomić<br />
także w Linuksie, ale ich instalacja<br />
wciąż jest skomplikowana. Ponadto, nie<br />
wszystkie wtyczki VST działają poprawnie.<br />
Niemniej, warto zainteresować się<br />
tym formatem - w Internecie znajdziemy<br />
setki darmowych wtyczek VST, nierzadko<br />
nadających się nawet do zastosowań profesjonalnych.<br />
Aby poprawić wydajność wykorzystywanego<br />
sprzętu i oprogramowania,<br />
możemy spróbować uruchamiania aplikacji<br />
z konta administratora. Zaletą tego<br />
rozwiązania jest znacznie efektywniejsze<br />
wykorzystanie zasobów przez programy.<br />
Wadą - zagrożenie niestabilnością systemu<br />
oraz problemy z bezpieczeństwem (o ile<br />
nasz komputer jest podłączony do Sieci).<br />
Winowajcą słabej wydajności bywa<br />
również zła konfiguracja dysku twardego.<br />
W tej sytuacji powinien pomóc program<br />
hdparm. Pozwala on na manipulowanie<br />
ustawieniami dysków EIDE, co może niekiedy<br />
doprowadzić do zawieszenia systemu<br />
i uszkodzenia systemu plików. Zanim<br />
rozpoczniemy eksperymenty z programem<br />
hdparm, koniecznie sporządźmy<br />
kopie zapasowe.<br />
Sprawdźmy, jak Linux obsługuje dyski<br />
twarde zainstalowane w systemie:<br />
hdparm /dev/hda<br />
Powinniśmy ujrzeć m.in.:<br />
multcount<br />
IO_support<br />
unmaskirq<br />
using_dma<br />
= 16 (on)<br />
= 1 (32-bit)<br />
= 1 (on)<br />
= 1 (on)<br />
System skonfigurowany w ten sposób<br />
pozwala na transfer 32-bitowy z jednoczesnym<br />
wykorzystaniem 16 sektorów dysku.<br />
Znajomość znaczenia wszystkich<br />
parametrów programu hdparm nie będzie<br />
• do wejścia mikrofonowego – kabel<br />
mikrofonu podpinamy bezpośrednio<br />
do oznaczonego na czerwono wejścia<br />
na karcie dźwiękowej;<br />
• do wejścia liniowego (Line In) – za<br />
pośrednictwem przedwzmacniacza;<br />
• do wejścia S/PDIF – przy pomocy<br />
konwertera analogowo-cyfrowego.<br />
W każdym z tych przypadków wystarczy<br />
posiadać skonfigurowaną ALSA.<br />
Klawiatury, syntezatory i keyboardy<br />
również podłączamy na trzy sposoby:<br />
• do portu MIDI na karcie dźwiękowej –<br />
instrument musi posiadać złącza MIDI<br />
In/Out, ponadto należy skonfigurować<br />
interfejs MIDI komputera (sterowniki<br />
ALSA);<br />
• do portu USB – częste rozwiązanie<br />
w przypadku klawiatur MIDI. W tym<br />
przypadku konieczna będzie instalacja<br />
odpowiednich sterowników. Jest<br />
ona opisana na stronach:<br />
– http://member.nifty.ne.jp/Breeze/<br />
softwares/unix/usbmidi-e.html<br />
– http://www.djcj.org/LAU/guide/<br />
evolution-usb-midi.php<br />
• do portu szeregowego komputera –<br />
instrument musi posiadać złącze<br />
TO HOST. Będzie potrzebna instalacja<br />
sterownika Notemidi: http://<br />
michaelminn.com/linux/notemidi/<br />
README.html.<br />
Do wejścia liniowego karty dźwiękowej<br />
można podłączać wiele urządzeń.<br />
W ten sposób nagrywa się materiał audio<br />
pochodzący z płyt winylowych i kaset. Nie<br />
jest wymagana instalacja dodatkowych<br />
sterowników.<br />
32 czerwiec 2004
linuksowe studio nagrań<br />
multimedia<br />
Rysunek 3. Ardour jest wielośladowym rejestratorem dźwięku<br />
z plików uruchamianych podczas startu<br />
systemu (np. w /etc/rc.d/rc.local).<br />
Multimedialne dystrybucje<br />
Linuksa<br />
Opisane przeze mnie zabiegi konfiguracyjne,<br />
które pozwalają przeobrazić<br />
komputer z Linuksem w studio nagrań,<br />
mogą wydać się dosyć skomplikowane.<br />
W rzeczywistości wszystkie czynności<br />
zajmą nam niecałą godzinę. Nie będzie<br />
potrzebna samodzielna kompilacja jądra,<br />
łat i oprogramowania. Wykorzystamy<br />
multimedialną dystrybucję Linuksa, czyli<br />
zestaw niezbędnych aplikacji oraz odpowiednio<br />
spreparowane jądro - a wszystko<br />
to w postaci binariów.<br />
Obecnie istnieje kilkanaście multimedialnych<br />
dystrybucji. W większości są<br />
to nakładki na istniejące systemy linuksowe.<br />
Użytkownik, który chce skorzystać<br />
z dobrodziejstw muzycznych aplikacji,<br />
powinien zainstalować wybraną<br />
dystrybucję Linuksa, a następnie odpowiadającą<br />
jej dystrybucję multimedialną.<br />
Po wykonaniu tych czynności konieczna<br />
może być jeszcze konfiguracja posiadanych<br />
kart dźwiękowych. W wielu przypadkach<br />
tę pracę wykona za nas Linux.<br />
Rozpoczynając pracę z dźwiękiem,<br />
warto wypróbować multimedialne dystrybucje<br />
uruchamiane z płyty CD. Posiadają<br />
one podstawowy zestaw aplikacji<br />
dźwiękowych i nie wymagają instalowania<br />
czegokolwiek na dysku twardym.<br />
Stanowią one doskonały wybór dla osób<br />
chcących przetestować muzyczne oprogramowanie<br />
dla Linuksa.<br />
Najlepsza multimedialna dystrybucja<br />
uruchamiana z płyty CD to AGNULA/<br />
DeMuDi Live. Oparto ją na systemie<br />
Knoppix, wzbogaconym o najważniejsze<br />
aplikacje dźwiękowe. Druga tego<br />
typu dystrybucja to Dyne:bolic. Jej grupą<br />
docelową są osoby zajmujące się szeroko<br />
pojętymi mediami.<br />
Instalacja ReHMuDi<br />
Jedną z najpopularniejszych multimedialnych<br />
dystrybucji jest ReHMuDi (przeznaczona<br />
dla systemów Red Hat i kompatybilnych).<br />
Stanowi ona część projektu<br />
AGNULA (A GNU/Linux Audio<br />
distribution). Przed jej zainstalowaniem<br />
będziemy musieli ściągnąć (http://<br />
download.agnula.org/rehmudi/ ) odpowiedni<br />
obraz płyty. Zawiera on tylko<br />
pakiety multimedialne - sam system Red<br />
Hat (obecnie Fedora Core) trzeba zainstalować<br />
osobno.<br />
Na potrzeby tego artykułu zainstalowałem<br />
- na istniejącym systemie Aurox<br />
Linux 9.0 - dystrybucję ReHMuDi 2.0.<br />
Dostępny na stronach internetowych projektu<br />
AGNULA obraz płyty CD zawiera<br />
wprawdzie pakiety przeznaczone dla dystrybucji<br />
Fedora Core 1, ale ze względu na<br />
popularność Auroksa w Polsce zdecydowałem<br />
się skorzystać właśnie z tego systemu.<br />
Mimo kilku komunikatów o błędach<br />
(głównie dotyczących wykorzystania<br />
starszej wersji kompilatora gcc) instalacja<br />
jądra systemu i aplikacji zakończyła<br />
się sukcesem.<br />
Jeśli na dysku twardym znajduje się<br />
już Aurox 9.x lub Fedora Core, to możemy<br />
przystąpić do instalacji pakietów ReH-<br />
MuDi 2.0. Włóżmy do napędu płytę CD,<br />
której obraz ściągnęliśmy ze strony domowej<br />
projektu AGNULA. Skrypt instalacyjny<br />
install.sh znajduje się w katalogu<br />
głównym płyty. Po uruchomieniu go<br />
z konta administratora rozpocznie się<br />
kopiowanie niezbędnego oprogramowania.<br />
Chwilę potem pojawi się okno (Rysunek<br />
1), w którym zaznaczymy programy<br />
przeznaczone do zainstalowania.<br />
Proponuję wybrać wszystkie pakiety<br />
- z pewnością skorzystamy z większości<br />
z nich. Po zatwierdzeniu dokonanego<br />
przez nas wyboru, instalator przystąpi do<br />
pracy - może ona potrwać nawet kilkanaście<br />
minut. Błędy, które mogą pojawić się<br />
na tym etapie, wynikają z braku potrzebnych<br />
bibliotek. Niektóre z instalowanych<br />
aplikacji wymagają obecności KDE<br />
i Qt – w przypadku wystąpienia problemów<br />
powinniśmy doinstalować potrzebne<br />
pakiety.<br />
Po zakończeniu instalacji konieczny<br />
jest jeszcze restart komputera. Podczas<br />
ponownego uruchamiania systemu zostanie<br />
załadowane nowe jądro (skrypt instalacyjny<br />
automatycznie aktualizuje bootloadera).<br />
Jeżeli korzystamy z demona<br />
Kudzu, to spróbuje on wykryć posiadane<br />
karty dźwiękowe. Nie zawsze ta operacja<br />
kończy się sukcesem. Nic straconego. Po<br />
uruchomieniu programu Alsaconf zobaczymy<br />
listę kart dźwiękowych obecnych<br />
w systemie. Wystarczy zatwierdzić komunikat<br />
konfiguratora i... karta już działa.<br />
Problemy mogą wystąpić jedynie w przypadku<br />
egzotycznego sprzętu bądź podczas<br />
instalacji kilku kart dźwiękowych.<br />
W tej sytuacji konieczna może być ręczna<br />
edycja pliku /etc/modules.conf.<br />
Serwer JACK<br />
Po zainstalowaniu ReHMuDi 2.0, na<br />
dysku komputera znajdują się już najlepsze<br />
muzyczne aplikacje dla Linuksa.<br />
Ponadto, system jest odpowiednio skonfigurowany<br />
i przystosowany do pracy<br />
z niskimi opóźnieniami. Pozostaje nam<br />
jeszcze uruchomienie serwera JACK.<br />
Możemy to uczynić wprost z linii poleceń:<br />
jackstart -d alsa.<br />
Jeżeli chcemy precyzyjnie określić<br />
parametry pracy serwera (co jest zdecydowanie<br />
zalecane), a wolimy uniknąć<br />
wydawania skomplikowanych komend<br />
z linii poleceń, skorzystajmy z graficznej<br />
nakładki - programu Qjackctl. Nie<br />
wchodzi on w skład dystrybucji ReHMu-<br />
www.lpmagazine.org<br />
33
multimedia<br />
Di - będziemy musieli go ściągnąć (http://<br />
qjackctl.sourceforge.net/ ) i zainstalować<br />
oddzielnie. Kompilacja programu<br />
trwa bardzo krótko i nie powinna sprawić<br />
problemów. Po jej zakończeniu i uruchomieniu<br />
programu, możemy w wygodny<br />
sposób dostosować ustawienia serwera<br />
JACK do naszych potrzeb (przycisk<br />
Setup...). Zmniejszając rozmiar bufora,<br />
możemy znacząco obniżyć opóźnienia.<br />
Pamiętajmy jednak, aby nie przesadzić.<br />
Jeżeli po uruchomieniu serwera w okienku<br />
Status pojawiają się informacje o błędach<br />
xrun, to znaczy, że nasz system nie<br />
jest w stanie pracować z ustalonym przez<br />
użytkownika opóźnieniem. Może to być<br />
efektem małej mocy obliczeniowej komputera<br />
lub błędnej konfiguracji systemu.<br />
Niskie wartości opóźnień są potrzebne<br />
głównie w czasie występów na żywo<br />
oraz podczas nagrywania materiału<br />
dźwiękowego. W innych przypadkach<br />
niski rozmiar bufora spowalnia tylko<br />
pracę systemu operacyjnego, więc nie<br />
warto obniżać standardowych wartości<br />
opóźnień, jeśli w danej chwili zamierzamy<br />
jedynie odtwarzać pliki dźwiękowe.<br />
Nagrywanie dźwięku<br />
Stabilnie działający serwer JACK pozwoli<br />
nam na rozpoczęcie właściwej pracy<br />
z dźwiękiem. Na początek spróbujmy<br />
nagrać ścieżkę audio z dowolnego<br />
zewnętrznego źródła. Jeżeli będzie nim<br />
mikrofon, to powinniśmy wybrać jeden<br />
z kilku możliwych sposobów podłączenia<br />
go do komputera. Na karcie dźwiękowej<br />
znajduje się wejście mikrofonowe<br />
(oznaczone przeważnie kolorem czerwonym),<br />
ale nie gwarantuje ono dobrej<br />
jakości materiału audio. Przyjmuje ono<br />
dane w postaci prądu o niskim napięciu,<br />
w wyniku czego dźwięk jest podatny<br />
na zakłócenia powstające wewnątrz<br />
i w pobliżu komputera. Rozwiązaniem<br />
problemu może być wykorzystanie<br />
przedwzmacniacza mikrofonowego<br />
lub przetwornika analogowo-cyfrowego.<br />
Pierwszy z nich znacznie zmniejszy<br />
zakłócenia powstające na obwodach<br />
karty dźwiękowej, a drugi wyeliminuje je<br />
całkowicie.<br />
Przedwzmacniacz pozwoli nam na<br />
podłączenie mikrofonu wprost do wejścia<br />
liniowego (Line In) karty dźwiękowej,<br />
zazwyczaj oznaczonego kolorem<br />
niebieskim. Przyjmuje ono dane<br />
w postaci napięcia kilkaset razy większego<br />
niż w przypadku wejścia mikrofonowego.<br />
W efekcie możliwe zakłócenia tylko<br />
w niewielkim stopniu zmniejszają odstęp<br />
sygnału od szumu.<br />
Rozwiązaniem idealnym jest wykorzystanie<br />
konwertera analogowo-cyfrowego.<br />
Zamienia on sygnał płynący z mikrofonu<br />
na dane cyfrowe, które nie podlegają<br />
żadnym zakłóceniom wewnątrz komputera.<br />
Jest to rozwiązanie najlepsze, ale nie<br />
zawsze konieczne.<br />
Sam profesjonalny sprzęt nie zagwarantuje<br />
nam dobrych nagrań. Jeśli ustawimy<br />
mikrofon w pobliżu komputera,<br />
to hałas wentylatora lub głośnego<br />
dysku twardego może znacznie obniżyć<br />
jakość rejestrowanego dźwięku. Jakiekolwiek<br />
inne odgłosy dobiegające z otoczenia<br />
również są niepożądane. Przystępując<br />
do nagrywania dźwięku powinniśmy<br />
zadbać o wszystkie szczegóły – tylko<br />
wtedy uzyskamy materiał audio o zadowalającej<br />
jakości.<br />
Instalacja wtyczek VST<br />
Aby skorzystać z wtyczek VST, bardzo<br />
popularnych wśród użytkowników MS<br />
Windows, trzeba zainstalować emulator<br />
Wine (załączony do większości dystrybucji)<br />
oraz programy Vstserver i Ladspavst<br />
(http://www.notam02.no/arkiv/src/).<br />
Wszystkie wtyczki VST, z których<br />
chcemy skorzystać, powinny znajdować się<br />
w jednym katalogu, na który będzie wskazywać<br />
zmienna środowiskowa VST_PATH.<br />
Zdefiniujemy ją w następujący sposób:<br />
export VST_PATH=/home/pawelw/vst<br />
To polecenie warto wpisać do któregoś<br />
z plików wykonywanych podczas uruchamiania<br />
powłoki Bash (np. ~/.bash_profile).<br />
W przeciwnym przypadku będziemy musieli<br />
je wykonywać po każdym uruchomieniu<br />
systemu.<br />
W przeciwieństwie do emulatora Wine,<br />
programy VSTServer i Ladspavst skompilujemy<br />
samodzielnie. Po rozpakowaniu<br />
źródeł pierwszego z nich, otwórzmy plik<br />
makefile. W pierwszej linijce znajdziemy<br />
ścieżkę dostępu do Wine (WINEPATH=/<br />
usr/local). Jeśli to konieczne, to poprawmy<br />
ją, a następnie zapiszmy plik.<br />
Teraz możemy już skompilować VST-<br />
Server. W katalogu ze źródłami wykonajmy<br />
po kolei:<br />
make<br />
make install<br />
Sekwencje instrumentalne możemy<br />
nagrać przy pomocy klawiatur i syntezatorów<br />
MIDI. Istnieją trzy sposoby podłączania<br />
tego typu instrumentów do komputera.<br />
W zależności od rodzaju wyjść<br />
znajdujących się w obudowie urządzeń<br />
MIDI, możemy je podpiąć do portu USB,<br />
szeregowego lub do interfejsu MIDI.<br />
W dwóch pierwszych przypadkach<br />
będzie jeszcze konieczna instalacja odpowiednich<br />
sterowników.<br />
Przykładowe konfiguracje podłączania<br />
urządzeń muzycznych do komputera<br />
są przedstawione w ramce Podłączanie<br />
urządzeń i instrumentów do komputera.<br />
Zasady są takie same dla wszystkich<br />
systemów operacyjnych - jeżeli wcześniej<br />
nagrywaliśmy już materiał muzyczny, to<br />
nie natrafimy na żadne problemy.<br />
Powinniśmy jeszcze pamiętać<br />
o wybraniu w systemie operacyjnym tego<br />
wejścia karty, z którego będzie nagrywa-<br />
Zainstalujemy jeszcze bibliotekę Ladspavst.<br />
Dzięki niej będziemy mogli korzystać z wtyczek<br />
VST tak samo, jak z wtyczek LADSPA.<br />
Kompilacja jest bardzo prosta – wystarczywykonać<br />
make. Otrzymany plik vst.so przekopiujmy<br />
do katalogu, w którym znajdują<br />
się wtyczki LADSPA. W przypadku ReH-<br />
MuDi jest to /usr/lib/ladspa. Pozostało nam<br />
jedynie uruchomić program VSTServer.<br />
Z linii poleceń wykonajmy vstserver &.<br />
W oknie terminala powinniśmy zobaczyć<br />
nazwę i numer wersji aplikacji, a także<br />
informację Waiting for requests. Jeżeli<br />
po uruchomieniu jakiegokolwiek edytora<br />
audio obsługującego wtyczki LADSPA<br />
pojawią się komunikaty o błędach,<br />
to zapewne któraś z zainstalowanych<br />
przez nas wtyczek VST nie jest<br />
obsługiwana w Linuksie. Na początku<br />
najlepiej jest kopiować po jednej wtyczce<br />
– dzięki temu szybko wykryjemy przyczyny<br />
błędów.<br />
Przed zainstalowaniem wtyczek warto<br />
zapoznać się z:<br />
• artykułem Using VST Plugins In Linux:<br />
http://www.djcj.org/LAU/quicktoots/<br />
toots/vst-plugins/<br />
• instalacją wtyczek VST w Linuksie<br />
– polskojęzyczny artykuł:<br />
http://linux-muzyka.ixion.pl/<br />
tekst.php?id=25031<br />
• Linux Vst Compatibility Page – stroną<br />
opisującą działanie konkretnych<br />
wtyczek VST w Linuksie:<br />
http://www.djcj.org/LAU/ladspavst/<br />
34 czerwiec 2004
linuksowe studio nagrań<br />
multimedia<br />
Rysunek 4. Program MusE - sekwencer MIDI dla Linuksa<br />
ny dźwięk. Posłuży nam do tego programowy<br />
mikser. W każdej dystrybucji<br />
Linuksa można znaleźć co najmniej kilka<br />
programów tego typu (np. aumix, xmix,<br />
kmix, gnome-volume-control i inne).<br />
Sprawdźmy, czy urządzenie, z którego<br />
chcemy nagrać dźwięk, jest odpowiednio<br />
zaznaczone (z reguły Record lub Zapis).<br />
Z programowych mikserów z pewnością<br />
przyjdzie nam jeszcze wiele razy<br />
korzystać. Nagrywając dźwięk trzeba<br />
pamiętać o odpowiednim regulowaniu<br />
jego poziomu. Zbyt cichy materiał audio<br />
ma niewielki odstęp sygnału od szumu. Z<br />
kolei nagrywanie dźwięku ze zbyt dużą<br />
głośnością może spowodować przesterowania<br />
i nieprzyjemne trzaski. W obu<br />
tych przypadkach konieczne będzie, po<br />
uprzedniej korekcji poziomu głośności,<br />
powtórzenie nagrania ścieżki. Parametry<br />
dźwięku można również precyzyjnie<br />
dostrajać przy pomocy programu Jamin<br />
(http://jamin.sourceforge.net/ ) – dzięki<br />
niemu ustalimy, między innymi, odpowiednią<br />
charakterystykę częstotliwościową<br />
materiału.<br />
Do nagrywania dźwięku wykorzystać<br />
można Audacity. Program ten był już opisywany<br />
na łamach Linux+. Bardziej profesjonalne<br />
będzie jednak użycie wielośladowego<br />
edytora Ardour. Pozwala on<br />
na nagranie i zmiksowanie wielu ścieżek<br />
o dowolnej liczbie kanałów. Ardour jest<br />
trudniejszy w obsłudze niż Audacity, ale<br />
są to koszty jego znacznie większej funkcjonalności.<br />
Edytor Ardour<br />
Jeśli zainstalowaliśmy ReHMuDi, to<br />
Ardour znajduje się już na dysku twardym.<br />
Po jego uruchomieniu zobaczymy<br />
okno tworzenia nowej sesji. Wystarczy<br />
wpisać nazwę projektu, nad którym<br />
pracę właśnie rozpoczynamy. Ardour<br />
utworzy katalog służący do zapisu nagranego<br />
materiału.<br />
Po utworzeniu sesji można przystąpić<br />
do pracy z programem. W centralnej<br />
części okna widzimy mapę ścieżek – na<br />
razie znajduje się na niej tylko ślad Master.<br />
Utwórzmy na początek ścieżkę, na której<br />
zarejestrujemy za chwilę materiał dźwiękowy.<br />
Po kliknięciu pustego pola poniżej<br />
nagłówka śladu Master otworzy się okno<br />
dodawania ścieżek. Parametry zaproponowane<br />
przez Ardoura można pozostawić<br />
bez zmian. Jeśli jednak chcemy, aby<br />
nagrywany ślad był stereofoniczny (posiadał<br />
dwa kanały), to kliknijmy prawym<br />
klawiszem myszy napis mono. Zostanie<br />
on zastąpiony przez opcję stereo.<br />
Ścieżka jest już utworzona, a mikrofon<br />
lub inne urządzenia podłączone do<br />
karty dźwiękowej i przetestowane, więc<br />
możemy nagrywać. Zaznaczmy nowy<br />
ślad jako przeznaczony do zapisu. Można<br />
to uczynić wciskając przycisk z literą r,<br />
znajdujący się na prawo od nazwy ścieżki.<br />
Na pasku ikon klikamy jeszcze przycisk<br />
nagrywania, a następnie odtwarzania.<br />
Teraz nasz wokalista (gitarzysta, perkusista)<br />
może zacząć działać. Po zakończeniu<br />
nagrywania należy kliknąć ikonę zatrzymania.<br />
W tej chwili powinniśmy zobaczyć<br />
nowy segment audio z wykresem falowym<br />
zarejestrowanego materiału.<br />
Jeżeli żaden dźwięk nie został nagrany,<br />
a wszystkie urządzenia są poprawnie<br />
podłączone, to wina może leżeć po<br />
stronie edytora Ardour. Z menu Windows<br />
wybierzmy Route Parameters.<br />
W oknie, które pojawi się na ekranie<br />
monitora, można określić urządzenia wejściowe<br />
i wyjściowe. Z reguły Ardour automatycznie<br />
wybiera odpowiednie źródło<br />
dźwięku, ale w przypadku korzystania<br />
z kilku programów muzycznych mogą<br />
być konieczne ręczne poprawki. Dobrze<br />
jest więc zapoznać się z opcjami Route<br />
Parameters.<br />
Z listy znajdującej się z lewej strony<br />
okna wybieramy interesującą nas ścieżkę.<br />
Kliknijmy teraz napis INPUTs. W ramce in<br />
1 powinien znajdować się wpis alsa_pcm:<br />
capture_1, a w in 2 – alsa_pcm:capture_2.<br />
Taka konfiguracja pozwoli nam na nagranie<br />
dźwięku z wejścia audio. Jeżeli wpisy<br />
są nieprawidłowe, to urządzenia alsa_pcm<br />
znajdziemy na jednej z zakładek widocznych<br />
z prawej strony okna. Po ich kliknięciu,<br />
Ardour poprawi przypisania ścieżki.<br />
Właściwy wybór wyjścia dźwięku<br />
(OUTPUTs) jest równie ważny. Wybrany<br />
przez nas ślad powinien być przypisany<br />
do ścieżki Master – w pole out_1<br />
wstawmy ardour:master/in 1, a w out 2<br />
– ardour:master/in 2. Należy również<br />
sprawdzić wpisy dla ścieżki Master.<br />
W tym przypadku do pola out 1 przypiszmy<br />
alsa_pcm:playback_1, a do out 2<br />
– alsa_pcm:playback_2. Dzięki prawidłowej<br />
konfiguracji urządzeń wyjścia, usłyszymy<br />
zarejestrowany materiał audio.<br />
Jeśli wszystkie potrzebne ścieżki<br />
zostały już poprawnie nagrane, to<br />
możemy zapisać sesję (Session –> Save).<br />
Aby zmiksować wszystkie ślady do<br />
pojedynczego pliku WAVE, skorzystajmy<br />
z polecenia Export session to audiofile...<br />
z menu Session –> Export. W oknie<br />
zapisu podajmy nazwę pliku wyjściowego<br />
i zaznaczmy ścieżki, które chcemy<br />
uwzględnić w miksie, przypisując je<br />
jednocześnie do odpowiedniego kanału<br />
(w przypadku plików stereofonicznych).<br />
Rysunek 5. Wybór źródła nagrywanego<br />
dźwięku w programie Ardour. Widoczna<br />
konfiguracja spowoduje, że dane audio<br />
będą pobierane z syntezatora<br />
ZynAddSubFX<br />
www.lpmagazine.org<br />
35
multimedia<br />
MIDI i syntezatory<br />
Spróbujmy teraz dograć do naszej kompozycji<br />
jeszcze jedną ścieżkę. Tym razem<br />
zmusimy do współpracy kilka wyspecjalizowanych<br />
aplikacji muzycznych.<br />
W jednej z nich przygotujemy linię melodyczną,<br />
druga posłuży nam za instrument<br />
odtwarzający poszczególne nuty,<br />
a przy pomocy trzeciej dokonamy rejestracji<br />
dźwięku. W ten sposób można<br />
nagrać dobrze brzmiące ścieżki instrumentalne.<br />
Docenią tę metodę osoby nie<br />
posiadające sprzętowego syntezatora lub<br />
chociażby fortepianu.<br />
Linię melodyczną skomponujemy<br />
w programie MusE – sekwencerze MIDI<br />
dla Linuksa. Posiadacze instrumentów<br />
MIDI nie będą mieli z tym żadnych problemów<br />
– wystarczy zagrać tworzoną<br />
partię na klawiaturze, a zostanie ona<br />
zarejestrowana przez MusE. Poszczególne<br />
nuty można również wstawiać bezpośrednio<br />
w sekwencerze, przy pomocy<br />
myszy. Ta metoda jest jednak znacznie<br />
bardziej pracochłonna.<br />
Po uruchomieniu programu MusE<br />
(wchodzi on w skład ReHMuDi), przystąpimy<br />
do tworzenia ścieżki MIDI. Po<br />
lewej stronie okna znajduje się pusta lista<br />
– kliknijmy na niej prawym klawiszem<br />
myszy, a z menu kontekstowego wybierzmy<br />
Add Midi Track. Następnie zaznaczmy<br />
ikonę ołówka (tuż poniżej menu programu)<br />
i w prawej części okna MusE wrysujmy<br />
myszą nowy segment MIDI. Teraz<br />
Rysunek 6. Qjackctl ułatwia przesyłanie dźwięku pomiędzy aplikacjami<br />
Edycja dźwięku<br />
Nagrany materiał wymaga zapewne<br />
poprawek. Konieczne może okazać się<br />
chociażby usunięcie stałej składowej,<br />
normalizacja, poprawa charakterystyki<br />
częstotliwościowej lub inne zabiegi edycyjne.<br />
W poprawianiu brzmienia pomocne<br />
okażą się wtyczki LADSPA.<br />
Powróćmy do okna Route Parameters<br />
Ardoura. Da nam ono dostęp do<br />
wtyczek zainstalowanych w systemie.<br />
Po zaznaczeniu ścieżki przeznaczonej<br />
do edycji i kliknięciu lewym klawiszem<br />
myszy napisu Pre Redirects, otworzy się<br />
menu podręczne. Wybierzmy polecenie<br />
New Plugin.... Przeniesie nas ono do okna<br />
z obszerną listą wtyczek. Jeżeli zainstalowaliśmy<br />
również wtyczki VST, to powinniśmy<br />
je znaleźć na liście.<br />
Ogólny schemat pracy z wtyczkami,<br />
przedstawiony dalej, ma zastosowanie<br />
w większości przypadków. Przede<br />
wszystkim powinniśmy zaznaczyć wtyczkę<br />
(lub wtyczki), z których chcemy skorzystać.<br />
Następnie klikamy Add i OK.<br />
Nazwy wybranych wtyczek pojawią się w<br />
oknie Route Parameters, w sekcji Pre Redirects.<br />
Po zaznaczeniu jednej z wtyczek jej<br />
parametry zostaną wyświetlone w prawej<br />
części okna. Możemy je zmieniać przy<br />
pomocy suwaków. W przypadku wtyczek<br />
VST warto włączyć wyświetlanie interfejsu<br />
(Gui_on_off ). Jest on z reguły bardzo<br />
estetyczny i uprzyjemnia pracę. Zmodyfikowane<br />
parametry możemy zapisać<br />
(Save). Ostatnim krokiem powinno być<br />
uaktywnienie wtyczki. Kliknijmy przycisk<br />
Bypass lub z podręcznego menu Pre Redirects<br />
wybierzmy polecenie Activate All.<br />
Podczas edycji pojedynczych ścieżek<br />
i plików dźwiękowych można wykorzystać<br />
również inne programy obsługujące<br />
wtyczki LADSPA. Aby uzyskać dostęp do<br />
wtyczek w Audacity, wystarczy zaznaczyć<br />
odpowiedni fragment materiału,<br />
a następnie wybrać (z menu Effect–>Plugins)<br />
odpowiednią wtyczkę.<br />
Trudniejsze zadania<br />
Dotychczas opisywałem tylko najprostsze<br />
metody edycji dźwięku. Możliwości<br />
Linuksa są jednak znacznie większe.<br />
Serwer JACK pozwoli nam na łatwe łączenie<br />
co najmniej kilku programów audio.<br />
O ile w przypadku innych systemów<br />
operacyjnych cały proces edycji nagrania<br />
przeprowadzany jest nierzadko z poziomu<br />
jednej aplikacji, o tyle użytkownicy<br />
Linuksa mogą skorzystać z wielu programów.<br />
Materiał audio przesyłany jest<br />
pomiędzy nimi bez utraty jakości.<br />
Inne programy<br />
muzyczne dla Linuksa<br />
Oprócz aplikacji opisanych w artykule,<br />
można wykorzystać kilkadziesiąt innych<br />
programów obsługujących serwer JACK.<br />
Sekwencery MIDI:<br />
• MusE:<br />
http://lmuse.sourceforge.net/<br />
• Rosegarden-4:<br />
http://www.rosegardenmusic.com/<br />
Syntezatory programowe :<br />
• AlsaModularSynth:<br />
http://alsamodular.sourceforge.net/<br />
• gAlan:<br />
http://galan.sourceforge.net/<br />
• Hydrogen:<br />
http://hydrogen.sourceforge.net/<br />
• LegaSynth:<br />
http://www.reduz.com.ar/legasynth/<br />
• Pd:<br />
http://www-crca.ucsd.edu/~msp/<br />
software.html<br />
• ZynAddSubFX:<br />
http://zynaddsubfx.sourceforge.net/<br />
Rejestracja dźwięku:<br />
• Ardour:<br />
http://ardour.org/<br />
• Ecasound:<br />
http://www.eca.cx/ecasound/<br />
• ReZound:<br />
http://rezound.sourceforge.net/<br />
Edytory audio bez obsługi serwera JACK:<br />
• Audacity:<br />
http://audacity.sourceforge.net/<br />
• GLAME:<br />
http://glame.sourceforge.net/<br />
• Gnoise:<br />
http://gnoise.sourceforge.net/<br />
• Sweep:<br />
http://sweep.sourceforge.net/<br />
36 czerwiec 2004
linuksowe studio nagrań<br />
multimedia<br />
kliknijmy go dwukrotnie – otworzy się<br />
okno edytora pianolowego. Pozwoli<br />
nam ono na wstawianie nut dowolnej<br />
długości i wysokości. Aby przejść do<br />
trybu edycji, ponownie zaznaczmy ikonę<br />
ołówka. Możemy już wrysowywać odpowiednie<br />
nuty na siatce edytora. W razie<br />
popełnienia błędu, posłużmy się wirtualną<br />
gumką do mazania, ale poszczególne<br />
nuty możemy również, w razie potrzeby,<br />
przenosić w inne miejsca.<br />
Sporządziliśmy już zapis nutowy<br />
naszego nagrania, a za chwilę będziemy<br />
mogli je usłyszeć. Dźwięk zostanie wygenerowany<br />
przez programowy syntezator.<br />
Przyjmie on komunikaty MIDI, a następnie<br />
odtworzy je przy pomocy brzmienia<br />
zaprogramowanego przez użytkownika.<br />
Syntezatory to mocna strona Linuksa.<br />
Możemy wybierać spośród kilkunastu<br />
doskonałych aplikacji współpracujących<br />
z serwerem JACK. Ja zdecydowałem się<br />
na ZynAddSubFX – syntezator dostępny<br />
również w wersji dla systemu Windows.<br />
Generuje on dźwięk bardzo dobrej jakości,<br />
a zestaw predefiniowanych instrumentów<br />
ułatwi pracę początkującym<br />
użytkownikom.<br />
ZynAddSubFX nie wchodzi w skład<br />
dystrybucji ReHMuDi, więc będziemy<br />
musieli odwiedzić stronę domową projektu<br />
(http://zynaddsubfx.sourceforge.net/ ).<br />
Dostępne są pakiety binarne przeznaczone<br />
dla popularnych dystrybucji Linuksa,<br />
ale kompilacja źródeł jest prosta<br />
(./configure; make; make install) i przebiega<br />
bardzo szybko. ZynAddSubFX<br />
korzysta z serwera JACK, zatem wygenerowany<br />
dźwięk będziemy mogli zarejestrować<br />
w edytorze Ardour.<br />
Posiadamy już wszystkie potrzebne programy,<br />
więc poświęcimy parę chwil na<br />
ich poprawne skonfigurowanie. Sprawdźmy,<br />
czy sekwencer MusE korzysta z serwera<br />
JACK. W oknie, które otworzy się<br />
po wybraniu polecenia Audio System<br />
z menu Config, powinna być zaznaczona<br />
opcja Use JACK.<br />
Po uruchomieniu programu ZynAdd-<br />
SubFX wróćmy jeszcze na chwilę do<br />
MusE. Z menu Config wybierzmy Midi<br />
Ports / Soft Synth. Zobaczymy listę kanałów<br />
MIDI z przypisanymi do nich urządzeniami<br />
odtwarzającymi (przeważnie<br />
jest to None lub nazwa karty dźwiękowej).<br />
Zmienimy ustawienia pierwszego<br />
kanału – z rozwijanej listy wybierzmy<br />
pozycję ZynAddSubFX. Od tej chwili<br />
sekwencer MusE będzie przesyłał komunikaty<br />
MIDI za pośrednictwem serwera<br />
JACK do syntezatora ZynAddSubFX.<br />
Moglibyśmy już teraz odsłuchać<br />
skomponowanej uprzednio sekwencji<br />
MIDI. Nie mamy jednak na razie możliwości<br />
nagrania muzyki. Do jej rejestracji<br />
wykorzystamy dobrze nam znany<br />
edytor Ardour. Przed przystąpieniem do<br />
pracy będziemy musieli poprawić wpisy<br />
w oknie Route Parameters. Ścieżka, która<br />
posłuży nam do zarejestrowania dźwięku,<br />
powinna pobierać dane z syntezatora.<br />
Do jej wejścia (INPUTs) jest już zapewne<br />
przypisany ZynAddSubFX. Jeżeli nie,<br />
to odpowiednie urządzenia znajdziemy<br />
po prawej stronie okna Route Parameters,<br />
na zakładce ZynAddSubFX. Pozostaje<br />
nam tylko je dodać - tak jak zostało to<br />
przedstawione na Rysunku 5.<br />
Teraz możemy już wysłuchać nagrania.<br />
W sekwencerze MusE kliknijmy<br />
ikonę rozpoczynającą odtwarzanie.<br />
Komunikaty MIDI zostaną przekazane<br />
syntezatorowi ZynAddSubFX, który<br />
na ich podstawie wygeneruje gotowe<br />
brzmienia. Dźwięk przekazany zostanie<br />
do programu Ardour, a następnie na<br />
urządzenia wyjściowe karty dźwiękowej.<br />
Nagraną ścieżkę usłyszymy w głośnikach,<br />
a włączenie nagrywania w edytorze<br />
Ardour spowoduje jej zapisanie.<br />
Jeśli podczas odtwarzania nie usłyszeliśmy<br />
żadnego dźwięku, to jest to zapewne<br />
efekt złego przekierowania dźwięku,<br />
który "zagubił się" po drodze. Ponownie<br />
sprawdźmy ustawienia programów<br />
MusE i Ardour. Pomocny okaże się też<br />
Qjackctl. Klikając przycisk Connect uzyskamy<br />
dostęp do okna połączeń poszczególnych<br />
aplikacji. Na zakładce Audio (Rysunek<br />
6) wyjście ZynAddSubFX powinno<br />
być przypisane do wejścia Ardour, a to<br />
z kolei – do karty dźwiękowej (alsa_pcm).<br />
Na zakładce MIDI powinniśmy zobaczyć<br />
jedno połączenie – sekwencera MusE<br />
z klientem ZynAddSubFX. Dzięki Qjackctl<br />
możemy na bieżąco śledzić przypisania<br />
poszczególnych aplikacji i kontrolować<br />
przekazywanie danych audio.<br />
W większości przypadków serwer<br />
JACK poprawnie łączy wszystkie programy<br />
klienckie. W opisanym przeze mnie<br />
przykładzie z reguły wystarczy poprawnie<br />
skonfigurować wyjście MIDI sekwencera<br />
MusE. Wszystkie inne połączenia są<br />
automatycznie tworzone podczas uruchamiania<br />
poszczególnych programów. Jeśli<br />
skorzystamy z większej liczby aplikacji, to<br />
zapewne będziemy musieli ręcznie zdefiniować<br />
poprawną trasę danych dźwiękowych.<br />
W takiej sytuacji docenimy intuicyjność<br />
i prostotę programu Qjackctl.<br />
Jeżeli nie odpowiada nam brzmienie<br />
generowane przez ZynAddSubFX,<br />
to możemy łatwo zmienić parametry<br />
obwiedni, pogłosu i wiele innych. Początkującym<br />
użytkownikom polecam skorzystanie<br />
z szeregu predefiniowanych instrumentów<br />
(pliki *.ins_zyn), instalowanych<br />
razem z programem. Przed nagraniem<br />
wygenerowanych brzmień warto jeszcze<br />
skorygować ustawienia serwera JACK,<br />
aby opóźnienia były jak najmniejsze. Zbyt<br />
długi czas reakcji syntezatora może zakłócić<br />
odtwarzanie sekwencji MIDI.<br />
Podsumowanie<br />
Opisany przeze mnie schemat (MusE -<br />
ZynAddSubFX - Ardour) jest tylko jedną<br />
z wielu możliwości. Z serwera JACK<br />
korzysta kilkadziesiąt świetnych aplikacji<br />
muzycznych. Sposób ich wykorzystania<br />
zależy w głównej mierze od kreatywności<br />
muzyków. Mam nadzieję, że przedstawiony<br />
przeze mnie przykład zachęci<br />
Czytelnika do własnych, twórczych eksperymentów.<br />
Życzę sukcesów w samodzielnej<br />
pracy z muzyką komputerową<br />
i z Linuksem.<br />
W Internecie:<br />
• Sound & MIDI Software For Linux<br />
– najważniejszy anglojęzyczny serwis:<br />
http://linux-sound.org/<br />
• Archiwa listy linux-audio-user:<br />
http://music.columbia.edu/pipermail/<br />
linux-audio-user/<br />
• The Linux Musician – kolejna anglojęzyczna<br />
witryna:<br />
http://www.linuxmusician.com<br />
• The Linux MIDI + Sound Pages – lista<br />
programów muzycznych dla Linuksa:<br />
http://www.xdt.com/ar/linux-snd/<br />
• The Linux Audio Quality HOWTO:<br />
http://www.linuxdj.com/audio/quality/<br />
• The Linux Musician guide to recording<br />
– nagrywanie dźwięku w Linuksie:<br />
http://www.linuxmusician.com/index.<br />
php?option=displaypage&Itemid=51<br />
&op=page&SubMenu=<br />
• Dźwięk i muzyka w Linuksie – polskojęzyczny<br />
serwis poświęcony edycji<br />
dźwięku:<br />
http://linux-muzyka.ixion.pl/<br />
www.lpmagazine.org<br />
37
ecenzje<br />
SuSE Linux 9.1<br />
Professional<br />
Piotr Truszkowski<br />
Gdy otrzymałem do testów<br />
SuSE Linux 9.1 Professional,<br />
mojej radości nie było końca.<br />
Jako użytkownik SuSE od<br />
kilku lat, obecnie używający Gentoo,<br />
bardzo szybko zainstalowałem nową<br />
wersję „kameleona” i szczerze przyznam,<br />
że jest to moim zdaniem najlepsza wersja<br />
tej dystrybucji, jaka kiedykolwiek ujrzała<br />
światło dzienne. Na samym początku<br />
powitała mnie znajoma z poprzednich<br />
edycji plansza, z której mogłem wybrać<br />
m.in. rozdzielczość instalatora czy tryb<br />
instalacji. Po dokonaniu odpowiednich<br />
wyborów, moim oczom ukazał się instalator.<br />
Wygląda naprawdę ładnie, działa<br />
szybko, intuicyjnie i oferuje naprawdę<br />
duże możliwości.<br />
Polski SuSEł<br />
Niestety, mimo pewnych plotek o rzekomej<br />
obsłudze przez instalator języka polskiego,<br />
nic takiego nie zauważyłem. Szkoda.<br />
W samym procesie instalacji nie zmieniło<br />
się wiele. Dużo nowinek możemy natomiast<br />
zauważyć w kwestii oprogramowania.<br />
Testowane SuSE wyposażone jest<br />
m.in. w jądro 2.6.4, KDE 3.2.1, GNOME<br />
2.4.0 i OpenOffice.org 1.1.1. Jako ciekawostkę<br />
– aczkolwiek bardzo miłą dla polskiego<br />
użytkownika – należy wspomnieć<br />
możliwość instalacji polskiego interfejsu<br />
do OpenOffice.org. Jest to z pewnością<br />
coś, czego bardzo brakowało.<br />
Środowiska graficzne<br />
Osoby korzystające ze środowiska<br />
GNOME z pewnością przyzwyczaiły się<br />
do tego, iż w SuSE Linux kwestia GNOME<br />
zawsze była nieco zaniedbywana. Podobnie<br />
jest i tym razem, co nieco dziwi<br />
z uwagi na to, że firma Novell jest również<br />
właścicielem Ximiana, firmy zajmującej<br />
się rozwojem środowiska GNOME<br />
dla środowisk korporacyjnych. SuSE<br />
Linux zawsze ukierunkowane było na<br />
rynek korporacyjny, czemu więc zamiast<br />
ximianowego, ładnego i funkcjonalnego<br />
Rysunek 1. SuSE po uruchomieniu<br />
biurka otrzymujemy coś tak brzydkiego?<br />
Pasjonaci KDE nie będą mieli powodów<br />
do narzekania. Ich ulubione środowisko<br />
graficzne zostało dopracowane<br />
w najdrobniejszych detalach i stanowi<br />
zupełne przeciwieństwo niedopracowanego<br />
GNOME. Osoby posiadające słabszy<br />
sprzęt również znajdą coś dla siebie<br />
– WindowMaker i inne „lekkie” środowiska<br />
graficzne tylko czekają, aby dać im<br />
szansę.<br />
Administracja<br />
Narzędziem administracyjnym w SuSE jest<br />
program YaST. To bardzo dobre i dojrzałe<br />
narzędzie, dzięki któremu mamy pełną<br />
kontrolę nad naszym systemem. Patrząc<br />
przez pryzmat poprzednich wersji SuSE,<br />
nie zaszły w nim żadne rewolucyjne<br />
zmiany. Moduł do auto-instalacji czy lekko<br />
zwiększona funkcjonalność pozostałych<br />
modułów nie są tym, czego można się<br />
spodziewać po nowej wersji systemu.<br />
Plusy<br />
Jądro 2.6.4 sprawuje się znakomicie. Jest<br />
szybkie i bezawaryjne. Najnowsze wersje<br />
aplikacji: KDE 3.2.1 czy OpenOffice.org<br />
1.1.1, to elementy, które ciężko spotkać<br />
w innych dystrybucjach jako standardowe.<br />
Do tego wszystkiego dochodzi stabilność<br />
i innowacyjność, czyli elementy, które<br />
w SuSE zawsze stały bardzo wysoko<br />
w hierarchii ważności przygotowywanego<br />
systemu. Polski OpenOffice.org z pewnością<br />
jest dużym atutem.<br />
Podsumowanie<br />
SuSE Linux 9.1 to system dla każdego.<br />
Zadowoli zarówno weteranów Linuksa,<br />
jak również tych, którzy gdzieś kiedyś<br />
usłyszeli o nim w radiu, przeczytali<br />
w piśmie bądź zobaczyli u kolegi, jednak<br />
boją się, że nie dadzą sobie rady z administracją,<br />
instalacją bądź użytkowaniem.<br />
Wsparcie firmy Novell z pewnością dobrze<br />
rokuje temu systemowi.<br />
38 czerwiec 2004
dla początkujących<br />
Serwer DHCP<br />
i algorytm HTB<br />
Piotr Machej<br />
CD/DVD<br />
Po uruchomieniu dystrybucji<br />
Linux+ Live CD/DVD można<br />
korzystać z programów omawianych<br />
w artykule.<br />
Na płycie CD/DVD<br />
Na płycie CD/DVD znajdują się<br />
pakiety źródłowe i binarne omawianych<br />
programów oraz wszystkie<br />
listingi z artykułu.<br />
O autorze<br />
Autor ukończył studia na kierunku<br />
Informatyka na Politechnice<br />
Opolskiej. Z Linuksem (i ogólnie<br />
systemami uniksowymi) ma<br />
styczność od wielu lat. Obecnie<br />
administruje dwoma sieciami<br />
blokowymi. Wolne chwile dzieli<br />
pomiędzy jazdy konne, pływanie,<br />
czytanie książek, mang i oglądanie<br />
anime. Kontakt z autorem:<br />
autorzy@linux.com.pl.<br />
Osoby administrujące mniejszymi<br />
lub większymi sieciami<br />
lokalnymi na ogół<br />
są skazane na wieczne<br />
skargi kierowane do nich przez użytkowników.<br />
A to sieć nie działa dość<br />
szybko, a to nie wiadomo, jak skonfigurować<br />
komputer po kolejnej reinstalacji<br />
Windows, a to znów nie można<br />
sobie pograć w ulubioną grę sieciową.<br />
Często ci sami użytkownicy chcieliby<br />
móc równocześnie ściągać pliki z<br />
sieci P2P i nadal bez problemu oglądać<br />
strony WWW.<br />
Odpowiednie skonfigurowanie serwera<br />
udostępniającego Internet może<br />
nieco zmniejszyć liczbę skarg użytkowników.<br />
W niniejszym artykule zajmiemy<br />
się dwiema możliwościami ułatwienia<br />
życia administratora. Pierwsza<br />
z nich to skonfigurowanie serwera<br />
DHCP służącego do dynamicznego<br />
przydzielania adresów IP komputerom<br />
podłączonym do naszej sieci lokalnej.<br />
Druga to przydzielenie odpowiedniej<br />
przepustowości łącza do Internetu<br />
poszczególnym użytkownikom<br />
i usługom w taki sposób, aby nie<br />
utrudniali sobie nawzajem korzystania<br />
z Sieci.<br />
Zakładamy, że udostępnianie łącza<br />
internetowego komputerom w sieci<br />
lokalnej jest już skonfigurowane.<br />
W związku z tym, nie będziemy się tym<br />
zajmować. Czytelników zainteresowanych<br />
tym tematem odsyłam do artykułu<br />
Konfiguracja serwera dla sieci osiedlowej,<br />
który pojawił się w numerze<br />
10/2002 Linux+.<br />
Przykład użycia<br />
Pewnego dnia na Gadu-Gadu odezwał<br />
się do mnie znajomy. Ze względu na to,<br />
że swoje łącze do Internetu dzielił na<br />
kilka osób w bloku, uskarżał się ostatnio<br />
na ciągłe problemy. Jeden z użytkowników<br />
często obciążał łącze ściąganiem<br />
filmów do tego stopnia, że inni nawet<br />
nie mogli poczytać sobie stron WWW.<br />
Jakby tego było mało, drugi użytkownik<br />
(wieczny eksperymentator) co jakiś<br />
czas reinstalował sobie system, a później<br />
potrafił około północy dzwonić do<br />
mojego znajomego, żeby ten skonfigurował<br />
mu dostęp do Internetu.<br />
Cóż było robić? Zadałem mu kilka<br />
pytań i dowiedziałem się, że w jego<br />
sieci znajduje się dziesięć komputerów,<br />
z czego jeden (z zainstalowanym Linuksem)<br />
pełni rolę bramki do Internetu. Nie<br />
Rysunek 1. Przy konfiguracji klienta DHCP<br />
w Windows nie trzeba znać żadnych<br />
adresów<br />
40 czerwiec 2004
dhcp i htb<br />
dla początkujących<br />
wszystkie komputery w równym stopniu<br />
korzystają z sieci, gdyż dwóch użytkowników<br />
jest właścicielami odpowiednio<br />
dwóch i trzech komputerów. Jako łącze<br />
do Internetu służy im SDI, a niedługo<br />
mają zamiar zmienić tą usługę na DSL.<br />
Zaproponowałem mu, aby skonfigurował<br />
sobie serwer DHCP, co powinno<br />
wybawić go od nocnych wizyt u eksperymentatora.<br />
Oprócz tego opowiedziałem<br />
mu o możliwościach, jakie oferuje sterowanie<br />
przepływem danych. Ucieszył się,<br />
gdy dowiedział się, że przy odpowiedniej<br />
konfiguracji będzie mógł spokojnie<br />
pograć sobie w Neverwinter Nights<br />
w sieci, nawet gdy znajomy będzie sobie<br />
ściągał filmy i muzykę. Przygotowałem<br />
mu przykładowe pliki, na podstawie których<br />
mógł później rozbudować własną<br />
konfigurację.<br />
Serwer DHCP<br />
Każdy komputer podłączony do Sieci<br />
posiada przyporządkowany numer IP.<br />
Może on być wpisywany ręcznie podczas<br />
konfiguracji połączenia, ale w przypadku<br />
bardziej rozbudowanych sieci lokalnych,<br />
takie rozwiązanie nie jest ekonomiczne.<br />
Jeśli administrator z jakiegoś powodu<br />
będzie chciał zmienić numery części<br />
komputerów, to będzie musiał odwiedzić<br />
każdy z nich i zmieniać numer ręcznie.<br />
To samo może zdarzyć się, gdy użytkownik<br />
zainstaluje u siebie nowy system operacyjny,<br />
a nie będzie potrafił skonfigurować<br />
połączenia sieciowego.<br />
W takich przypadkach przydaje się<br />
DHCP (Dynamic Host Configuration Protocol),<br />
czyli protokół dynamicznej konfiguracji<br />
komputerów. Dzięki niemu użytkownik<br />
komputera nie musi znać numeru<br />
IP, maski podsieci, adresu bramki czy<br />
adresu serwerów DNS – wystarczy, że<br />
zaznaczy u siebie Automatyczne pobieranie<br />
adresu IP, a wszystkie te informacje<br />
zostaną mu przesłane z serwera DHCP.<br />
Jak to działa? Nie zagłębiając się w<br />
szczegóły techniczne, można powiedzieć,<br />
że DHCP funkcjonuje w modelu klientserwer.<br />
W sieci mamy serwer zarządzający<br />
przydzielaniem adresów IP (oraz<br />
pozostałych parametrów konfiguracyjnych)<br />
oraz szereg klientów domagających<br />
się tych informacji. Klient (a więc każdy<br />
komputer w naszej sieci lokalnej poza<br />
serwerem) po uruchomieniu rozgłasza<br />
komunikaty do serwerów DHCP z żądaniem<br />
przesłania mu parametrów konfiguracyjnych.<br />
Gdy taki komunikat dotrze do<br />
Listing 1. Przykład pliku dhcpd.conf<br />
# Opcje globalne<br />
option domain-name "moja.domena.pl";<br />
option domain-name-servers 194.204.159.1, 194.204.152.34;<br />
option subnet-mask 255.255.255.0;<br />
default-lease-time 21600;<br />
max-lease-time 86400;<br />
# Opcje podsieci<br />
subnet 192.168.100.0 netmask 255.255.255.0 {<br />
}<br />
range 192.168.100.2 192.168.100.250;<br />
option broadcast-address 192.168.100.255;<br />
option routers 192.168.100.1;<br />
# Opcje komputerów<br />
host user2 {<br />
}<br />
hardware ethernet 00:32:1F:13:44:F6;<br />
fixed-address 192.168.100.6;<br />
option broadcast-address 192.168.100.255;<br />
option routers 192.168.100.1;<br />
option host-name "user2";<br />
serwera DHCP, sprawdza on właściwą<br />
dla klienta konfigurację i wysyła mu ją<br />
w komunikacie. Jeśli klientowi ona odpowiada<br />
(w sieci może znajdować się kilka<br />
serwerów DHCP, a klient może sobie<br />
wybrać, z którego chce korzystać), odsyła<br />
potwierdzenie do serwera, który zatwierdza<br />
taką konfigurację.<br />
Adresy mogą być przydzielane na<br />
kilka różnych sposobów. Po pierwsze,<br />
każdemu klientowi może być przypisany<br />
stały adres IP (np. na podstawie adresu<br />
MAC karty sieciowej). Po drugie, adres IP<br />
może być przyznany na określony czas<br />
(wydzierżawiony). Taki adres pochodzi<br />
ze specjalnej puli adresów określonej<br />
przez administratora. Wreszcie, po trzecie,<br />
administrator może przypisać komputerowi<br />
stały numer IP (nie jest wtedy<br />
pobierany z DHCP).<br />
Instalacja i uruchamianie<br />
Na początek musimy zainstalować pakiet<br />
dhcpd. Jest on dołączany do większości<br />
dystrybucji, więc nie powinno być problemów<br />
z jego znalezieniem. W przypadku<br />
dystrybucji Aurox 9.3 pakiet ten<br />
(pod nazwą dhcp-3.0pl2-6.16.i386.rpm)<br />
znajduje się na trzeciej płytce instalacyjnej.<br />
Możemy go zainstalować korzystając<br />
z menedżera pakietów lub z linii poleceń<br />
(po zalogowaniu się na konto root montujemy<br />
płytę CD-ROM poleceniem mount<br />
/mnt/cdrom/, a następnie instalujemy<br />
pakiet poleceniem rpm -Uvh /mnt/cdrom/<br />
Aurox/RPMS/dhcp-3.0pl2-6.16.i386.rpm).<br />
Na tym instalacja kończy się. Konfigurację<br />
przeprowadzamy modyfikując<br />
plik /etc/dhcpd.conf.<br />
Po zakończeniu konfiguracji (według<br />
wskazówek umieszczonych poniżej)<br />
należy stworzyć pusty plik /etc/<br />
dhcpd.leases poleceniem touch /etc/<br />
dhcpd.leases. Teraz już możemy uruchomić<br />
demona DHCP poleceniem /usr/<br />
sbin/dhcpd. Możemy ograniczyć jego<br />
działanie do wybranego interfejsu (tak,<br />
aby działał tylko na interfejsie, do którego<br />
jest podłączona sieć lokalna). W takim<br />
przypadku należy uruchomić go poleceniem<br />
/usr/sbin/dhcpd eth0 (w miejsce<br />
eth0 wstawiamy odpowiednią nazwę<br />
interfejsu).<br />
Jeśli wszystko działa prawidłowo,<br />
możemy dodać wywołanie demona<br />
DHCP do skryptów startowych. W przypadku<br />
dystrybucji Aurox można tego<br />
dokonać wydając polecenie ntsysv<br />
i zaznaczając pozycję dhcpd.<br />
W poniższych rozdziałach omówimy<br />
opcje konfiguracyjne umieszczane<br />
w pliku /etc/dhcpd.conf.<br />
Dynamiczne przydzielanie<br />
adresów<br />
Na Listingu 1 jest umieszczony przykładowy<br />
plik /etc/dhcpd.conf. Jest to skrócona<br />
wersja pliku, który mógłby być zasto-<br />
www.lpmagazine.org<br />
41
dla początkujących<br />
Rysunek 2. Po uruchomieniu serwera<br />
DHCP wystarczy polecić Linuksowi<br />
automatyczne pobieranie z niego adresów<br />
sowany w przypadku opisanym w rozdziale<br />
Przykład użycia. Jak widać, jest<br />
podzielony na trzy sekcje.<br />
W sekcji Opcje globalne są zawarte<br />
ustawienia domyślne. Zostaną one<br />
użyte, jeśli nie nadpiszą ich ustawienia<br />
zawarte w blokach subnet lub host<br />
(odpowiednio sekcje Opcje podsieci<br />
i Opcje komputerów) – najważniejsze<br />
są opcje zawarte w sekcji najbardziej<br />
szczegółowej. Jeśli klienta, który<br />
wysłał komunikat z żądaniem przyznania<br />
numeru IP, nie można dopasować<br />
do żadnego z bloków host, to rozpatrywane<br />
są bloki subnet. Jeśli w blokach<br />
tych nie zostały ustawione wszystkie<br />
opcje, to pobrane zostaną one<br />
z bloku nadrzędnego (w kolejności host<br />
-> subnet -> opcje globalne).<br />
Zaczynamy od ustawienia nazwy<br />
domeny (option domain-name) oraz adresów<br />
serwerów DNS (option domain-nameservers).<br />
Jeśli chcemy podać więcej adresów,<br />
oddzielamy je przecinkiem. Następnie<br />
ustawiamy maskę podsieci (option<br />
subnet-mask).<br />
Opcje default-lease-time i max-leasetime<br />
określają odpowiednio domyślny<br />
i maksymalny czas dzierżawy adresu<br />
przyznanego dynamicznie. Czasy te<br />
podane są w sekundach.<br />
Teraz dochodzimy do najciekawszej<br />
części, jaką jest sekcja Opcje podsieci.<br />
Zaczyna się ona od deklaracji podsieci<br />
(subnet) i jej maski (netmask). Wszystkie<br />
opcje dotyczące tej podsieci są zamknięte<br />
pomiędzy nawiasami klamrowymi:<br />
{ i }. Każda podsieć, która będzie obsługiwana,<br />
jak również każda podsieć, do<br />
której jest podłączony serwer DHCP,<br />
musi posiadać jeden blok subnet. Jest<br />
to konieczne nawet w przypadku, gdy<br />
w danej podsieci nie będziemy przypisywać<br />
adresów dynamicznie.<br />
Pierwsza opcja (range) określa zakres<br />
adresów, które mogą być dynamicznie<br />
przyznawane klientom. Adresy te muszą<br />
należeć do tej samej podsieci, co określona<br />
w deklaracji subnet. W jednym bloku<br />
subnet możemy zdefiniować wiele zakresów<br />
adresów – wystarczy użyć kilku<br />
kolejnych linii zawierających opcję range<br />
z podanymi odpowiednimi adresami.<br />
Następnie ustawiamy adres rozgłoszeniowy<br />
(option broadcast-address) dla<br />
naszej podsieci. Ostatnia opcja to wskazanie<br />
rutera (option routers), przez który<br />
klienci mogą łączyć się z Internetem.<br />
Te dwie sekcje w zasadzie wystarczają<br />
do dynamicznego przydzielania adresów.<br />
Jeśli jednak chcemy mieć większą<br />
kontrolę nad tym, jakie adresy otrzymują<br />
poszczególni użytkownicy sieci, powinniśmy<br />
zainteresować się również sekcją<br />
Opcje komputerów.<br />
Statyczne adresy<br />
Często będzie nam zależeć, aby konkretne<br />
komputery posiadały stałe adresy. Tak<br />
musi być w przypadku serwerów usług<br />
(np. DNS, WWW, FTP), które znajdują<br />
się w sieci lokalnej. Może to być również<br />
przydatne w przypadku zwykłych<br />
komputerów podłączonych do sieci.<br />
Dzięki temu można później łatwo zidentyfikować<br />
poszczególne komputery, a ich<br />
numery IP wykorzystać choćby do tworzenia<br />
odpowiednich regułek na zaporze<br />
ogniowej (np. w celu udostępnienia<br />
komuś konkretnego portu lub przeciwnie<br />
– zablokowania niektórych usług).<br />
Takie przypisanie stałych adresów<br />
poszczególnym komputerom w sieci<br />
dokonywane jest w sekcji Opcje komputerów.<br />
Na Listingu 1 w tej sekcji przedstawiony<br />
jest tylko jeden przykładowy<br />
blok host. Zaczyna się on linią host<br />
nazwa_komputera, po której umieszczane<br />
są opcje konfiguracyjne dotyczące tego<br />
komputera, zamknięte pomiędzy nawiasami<br />
klamrowymi: { i }.<br />
Pierwsza opcja w naszym przykładzie<br />
to hardware ethernet. Określa ona adres<br />
MAC karty sieciowej komputera, dla<br />
którego przeznaczone są opcje zawarte<br />
w tym bloku host. W systemie Windows<br />
adres MAC karty sieciowej możemy<br />
sprawdzić uruchamiając polecenie ipcfg.<br />
W przypadku Linuksa wystarczy uruchomić<br />
polecenie /sbin/ifconfig. Możemy<br />
również sprawdzić adresy MAC innych<br />
komputerów podłączonych do sieci, uruchamiając<br />
na ruterze polecenie /sbin/arp<br />
(jednak nie wypisze ono adresów komputerów,<br />
które akurat są wyłączone lub<br />
nie korzystają z sieci).<br />
Opcja fixed-address to serce naszego<br />
statycznego przydziału numeru IP. Jeśli<br />
byśmy jej nie użyli, to komputer otrzymałby<br />
adres z puli określonej w odpowiednim<br />
bloku subnet. Podczas wyszukiwania<br />
bloku host odpowiadającego komputerowi,<br />
który wysłał żądanie, w pierwszej<br />
kolejności rozpatrywane są bloki host<br />
zawierające opcję fixed-address z adresem<br />
pasującym do podsieci, w której<br />
został uruchomiony komputer. Jeśli taki<br />
blok nie zostanie znaleziony, to w następnej<br />
kolejności przeszukiwane są bloki<br />
host nie zawierające opcji fixed-address.<br />
Kolejne dwie opcje (option broadcast-address<br />
i option routers) pozwalają<br />
na przekazanie do komputera odpowiadających<br />
mu adresu rozgłoszeniowego<br />
i adresu rutera. Opcje zawarte w tym<br />
bloku mają pierwszeństwo przed tymi<br />
określonymi w bloku subnet, więc mamy<br />
możliwość wskazania innego rutera<br />
wybranym komputerom. Jeśli jednak są<br />
takie same, możemy po prostu usunąć<br />
te dwie linie z bloku host – w takim<br />
przypadku będą obowiązywać wartości<br />
umieszczone w bloku subnet.<br />
Ostatnia opcja (option host-name)<br />
pozwala na ustawienie odpowiedniej<br />
nazwy komputera.<br />
W analogiczny sposób można utworzyć<br />
bloki host dla pozostałych komputerów<br />
w sieci, zmieniając odpowiednio<br />
nazwę komputera, jego adres MAC oraz<br />
przypisany numer IP.<br />
Dzielenie pasma<br />
Tym, co bardzo irytuje wielu użytkowników<br />
sieci korzystających z Internetu<br />
za pośrednictwem niewielkich sieci<br />
lokalnych (blokowych, osiedlowych),<br />
jest zapychanie łącza przez inne osoby.<br />
Nieraz dochodzi do sytuacji, w której<br />
część użytkowników przejmuje większość<br />
pasma i cieszy się z szybko ściągających<br />
się plików, podczas gdy inni mają<br />
problemy z otwarciem nawet pojedynczej<br />
strony WWW.<br />
Receptą na ten problem jest odpowiednie<br />
sterowanie przepływem danych<br />
(traffic control). Dzięki temu możemy nie<br />
tylko ograniczyć przepustowość wykorzystywaną<br />
przez poszczególnych użytkowników,<br />
ale również zapewnić odpo-<br />
42 czerwiec 2004
dhcp i htb<br />
dla początkujących<br />
ruterze udostępniali konta innym użytkownikom,<br />
to powinniśmy zainteresować<br />
się IMQ (InterMediate Queueing<br />
device), czyli pośrednim urządzeniem<br />
kolejkującym.<br />
Rysunek 3. Przykład statystyk zarządzania przepustowością łącza przez HTB<br />
wiednie parametry łącza dla wybranych<br />
transmisji (np. dla pracy z SSH).<br />
Jak to działa?<br />
Zacznijmy od tego, że każde łącze ma<br />
określoną przepustowość. Łącze w sieci<br />
lokalnej (często jest to Ethernet o przepustowości<br />
10 lub 100 Mbit) jest zazwyczaj<br />
znacznie szybsze od łącza do Internetu<br />
(np. SDI o przepustowości 115Kbit lub<br />
DSL o przepustowości 1Mbit). Nas interesuje,<br />
co dzieje się na styku tych łączy,<br />
czyli tam, gdzie znajduje się nasz ruter.<br />
Dane przesyłane przez użytkowników<br />
przychodzą do rutera przez jeden z<br />
interfejsów (np. ppp0 w przypadku SDI<br />
lub eth0 w przypadku sieci lokalnej).<br />
Następnie podlegają analizie – w uproszczeniu,<br />
ruter ocenia, do jakiego adresata<br />
mają trafić poszczególne pakiety. Znając<br />
adresata, ruter wyznacza adres następnego<br />
rutera i interfejsu, do którego skieruje<br />
dane. Takie dane przeznaczone do<br />
wysłania trafiają do kolejki wyjściowej,<br />
z której są usuwane, gdy tylko interfejs<br />
zdoła je obsłużyć.<br />
Może się zdarzyć, że do kolejki wyjściowej<br />
dane trafiają tak szybko, że interfejs<br />
nie nadąża z wysyłaniem. Jeśli przeciążenie<br />
takie trwa na tyle długo, że<br />
liczba pakietów przeznaczonych do<br />
wysłania przekroczy rozmiary kolejki<br />
wyjściowej, to część pakietów zostanie<br />
zagubiona. O tym, które pakiety zostaną<br />
zagubione, decyduje algorytm obowiązujący<br />
w danej kolejce.<br />
Jak widać z tego opisu, mamy możliwość<br />
kształtowania jedynie ruchu wychodzącego<br />
z rutera. Może się to wydawać<br />
dziwne, jednak jest dosyć naturalne.<br />
Ruter otrzymujący dane z przeciążonego<br />
łącza nie ma możliwości zmniejszenia<br />
tego przeciążenia za pomocą kolejki<br />
– może to zrobić jedynie ruter wysyłający<br />
dane. Powstaje zatem pytanie, jak mamy<br />
ograniczyć przepustowość dla danych<br />
pobieranych z Internetu.<br />
Dokonamy tego w ten sposób, że<br />
nałożymy ograniczenia na interfejs sieci<br />
lokalnej – jeśli ruter będzie wysyłał jakieś<br />
dane z Internetu do jednego z użytkowników<br />
sieci lokalnej, to zadba, aby były<br />
one wysyłane z określoną szybkością.<br />
W ten sam sposób możemy ograniczyć<br />
przepustowość wykorzystywaną<br />
przez użytkowników do wysyłania<br />
danych do Internetu. Tym razem jednak<br />
ograniczenia należy założyć na interfejs<br />
zewnętrzny (np. ppp0).<br />
Do nakładania ograniczeń posłuży<br />
nam program tc (traffic control) z pakietu<br />
iproute2.<br />
Warto zauważyć, że przy takim<br />
modelu możemy kształtować ruch<br />
wychodzący bezpośrednio z rutera,<br />
jednak nie mamy wpływu na szybkość<br />
pobierania danych przez ruter – ruch<br />
kształtujemy na ruterze, a dane przeznaczone<br />
dla niego nie przechodzą przez<br />
żaden interfejs wyjściowy. W większości<br />
przypadków nie jest to jednak niedogodnością.<br />
Gdybyśmy jednak na naszym<br />
Podstawowe wymagania<br />
Przede wszystkim musimy sprawdzić,<br />
czy posiadamy odpowiednią konfigurację.<br />
HTB (wykorzystywany przez nas<br />
algorytm kolejkowania – patrz ramka<br />
Algorytmy kolejkowania) jest włączone<br />
w jądrach od wersji 2.4.20, dlatego<br />
najlepiej korzystać z najnowszych jąder<br />
linii 2.4.x. Można co prawda skorzystać<br />
z wersji wcześniejszej niż 2.4.20, jednak<br />
wymaga to nakładania łaty na jądro. My<br />
nie będziemy sobie utrudniać życia i skorzystamy<br />
z jądra 2.4.20 lub nowszego.<br />
Drugim ważnym elementem jest<br />
pakiet iproute2 (a dokładniej, wchodzący<br />
w jego skład program tc). Najnowsze<br />
wersje tego pakietu nie wymagają już<br />
nakładania łatki HTB, co oszczędza nam<br />
pracy z kompilowaniem źródeł. Użytkownicy<br />
dystrybucji Aurox mogą wykorzystać<br />
pakiety dołączane do dystrybucji<br />
(iproute-2.4.7 z pierwszej płyty instalacyjnej).<br />
To w zasadzie wszystko, co będzie<br />
nam potrzebne. Teraz możemy już sprawdzić,<br />
czy wszystko działa tak, jak powinno.<br />
W tym celu korzystając z uprawnień<br />
administratora (czyli po zalogowaniu na<br />
konto root lub skorzystaniu z polecenia<br />
su -) wydajemy następujące polecenia:<br />
tc qdisc show<br />
tc filter show<br />
tc class show<br />
Na tym etapie nie powinny one zwrócić<br />
żadnego wyniku. Jeśli pojawi się komunikat<br />
błędu zawierający tekst no such<br />
device, to znaczy, że podczas kompilowania<br />
jądra pominęliśmy jakieś istotne<br />
opcje. W przeciwnym przypadku<br />
możemy przejść do właściwej konfiguracji.<br />
Dzielimy według<br />
użytkowników<br />
W rozdziale Przykład użycia opisaliśmy<br />
przykładową konfigurację sieci lokalnej.<br />
Dla przypomnienia, mamy do czynienia<br />
z siecią lokalną złożoną z dziesięciu komputerów.<br />
Jeden z nich pełni rolę bramki<br />
do Internetu. Sieć lokalna (Ethernet) ma<br />
przepustowość 10Mbit, natomiast łącze<br />
www.lpmagazine.org<br />
43
dla początkujących<br />
Algorytmy kolejkowania<br />
O doborze pakietów do wysłania decyduje<br />
algorytm przypisany do danej kolejki<br />
wyjściowej. Domyślnie jest to najprostszy<br />
algorytm FIFO (First In First Out). Przy<br />
jego wykorzystaniu pakiety są wysyłane<br />
w takiej kolejności, w jakiej pojawiły<br />
się w kolejce. To właśnie dlatego użytkownik<br />
uruchamiający duże ilości obciążających<br />
łącze programów potrafi doprowadzić<br />
do sytuacji, gdy korzystanie<br />
z sieci jest dla innych bardzo trudne.<br />
Z tego powodu stworzono inne algorytmy,<br />
z których możemy korzystać. Należą<br />
do nich między innymi TBF (Token Bucket<br />
Filter), PRIO (Simple Priority Queueing)<br />
czy SFQ (Stochastic Fairness Queueing<br />
– sprawiedliwe kolejkowanie). W dalszej<br />
części będziemy korzystać tylko ze sprawiedliwego<br />
kolejkowania SFQ.<br />
Kolejka nie musi wykorzystywać<br />
tylko pojedynczego algorytmu. Może ona<br />
wykorzystywać znacznie bardziej złożony<br />
algorytm, podzielony na klasy, z których<br />
każda ma przyporządkowany inny<br />
algorytm kolejkowania. O tym, które<br />
pakiety przejdą do których klas, decydują<br />
filtry. W ten sposób można rozdzielać<br />
ruch różnego rodzaju, jak również przyporządkowywać<br />
wybranym pakietom<br />
wyższy priorytet. Do takich złożonych<br />
algorytmów kolejkowania należą między<br />
innymi CBQ (Class Based Queueing)<br />
i HTB (Hierarchical Token Bucket). Ponieważ<br />
HTB jest szybsze i dokładniejsze niż<br />
CBQ, właśnie z tego algorytmu będziemy<br />
korzystać.<br />
Do ustawiania algorytmu kolejkowania<br />
(to trochę nieszczęśliwe tłumaczenie<br />
angielskiego queueing discipline – dalej<br />
będziemy zamiennie używać zwrotu dyscyplina<br />
kolejkowania) służy nam polecenie<br />
tc qdisc add z podanymi parametrami.<br />
Analogicznie do tworzenia poszczególnych<br />
klas służy polecenie tc class<br />
add, a do tworzenia filtrów tc filter<br />
add. Przykłady tych poleceń i ich składnia<br />
opisane są w artykule w praktycznych<br />
przykładach.<br />
do Internetu to SDI (o przepustowości<br />
115Kbit). Dwóch użytkowników posiada<br />
więcej niż jeden komputer – jeden z nich<br />
posiada trzy, a drugi dwa komputery.<br />
Aby pozostali użytkownicy sieci nie byli<br />
poszkodowani, łącze dzielimy pomiędzy<br />
użytkowników, a nie komputery (czyli<br />
trzy komputery jednego użytkownika<br />
otrzymają razem taką samą przepustowość,<br />
jak jeden komputer innego).<br />
Na Listingu 2 znajduje się jedno<br />
z możliwych rozwiązań, które można<br />
w tym przypadku zastosować. Omówimy<br />
je teraz krok po kroku.<br />
Zaczynamy od zdefiniowania zmiennych,<br />
dzięki czemu nasz skrypt będzie<br />
później łatwiejszy do modyfikowania.<br />
W sekcji 1) określamy następujące zmienne:<br />
• CALE – przepustowość całego łącza<br />
sieci lokalnej;<br />
• SDI – przepustowość łącza do Internetu;<br />
• ETH_CEIL – maksymalna przepustowość<br />
możliwa do wykorzystania na<br />
transmisję z rutera do komputerów<br />
w sieci lokalnej;<br />
• USER – przepustowość gwarantowana<br />
każdemu z użytkowników (nie<br />
może być większa niż wartość SDI<br />
podzielona przez liczbę użytkowników);<br />
• USER_CEIL – maksymalna przepustowość,<br />
którą może wykorzystać użytkownik,<br />
jeśli nie jest ona zajmowana<br />
przez innych użytkowników;<br />
• INT_LOC – nazwa interfejsu rutera,<br />
do którego podłączona jest sieć lokalna.<br />
Następnie w sekcji 2) określamy zmienne,<br />
w których przechowywane są numery IP<br />
wszystkich komputerów znajdujących się<br />
w sieci lokalnej. Zmienna IP_SERWER<br />
przechowuje numer IP rutera. Pozostałe<br />
zmienne to numery IP komputerów należących<br />
do użytkowników. Nazwy zmiennych<br />
można dobrać według własnych<br />
upodobań. W tym przypadku przyjęto<br />
zasadę, że nazwa składa się z ciągu<br />
IP_USER uzupełnionego o numer użytkownika<br />
(np. IP_USER2). Jeśli użytkownik<br />
posiada więcej komputerów,<br />
to dodatkowo po znaku podkreślenia<br />
jest podany numer kolejny komputera<br />
należącego do tego użytkownika (np.<br />
IP_USER3_2 to drugi komputer użytkownika<br />
numer 3).<br />
Polecenie zawarte w sekcji 3) powoduje,<br />
że usunięte są wszystkie kolejki<br />
i klasy, które mogły być zdefiniowane<br />
na interfejsie $INT_LOC. Przy okazji<br />
warto zaznaczyć, że o ile przy definiowaniu<br />
zmiennych wykorzystywaliśmy same<br />
nazwy, to przy wstawianiu ich wartości w<br />
poleceniach nazwy zmiennych poprzedzamy<br />
znakiem $.<br />
W sekcji 4) określamy, jaka dyscyplina<br />
kolejkowania będzie wykorzystana<br />
do zarządzania ruchem wychodzącym<br />
z sieci lokalnej. W naszym przypadku<br />
wybieramy dyscyplinę HTB. Utworzonemu<br />
obiektowi nadajemy uchwyt<br />
(handle) 1:0.<br />
Następnie w utworzonym obiekcie<br />
tworzymy klasę odpowiedzialną za<br />
przypisanie przepustowości dla całego<br />
łącza do sieci lokalnej. Odpowiada za to<br />
instrukcja umieszczona w sekcji 5). Użyta<br />
tu wartość zmiennej CALE nie powinna<br />
być większa od rzeczywistej przepustowości<br />
sieci.<br />
W sekcji 6) rozdzielamy naszą klasę<br />
na dwie podklasy. Jedna z nich (o rate<br />
i ceil ustawionym na wartość $SDI)<br />
będzie służyć do kolejkowania pakietów<br />
pochodzących z Internetu. Druga<br />
natomiast pozwoli na przesyłanie pakietów<br />
pochodzących bezpośrednio z rutera<br />
do komputerów w sieci lokalnej z maksymalną<br />
szybkością.<br />
Szereg poleceń zawartych w sekcji<br />
7) przydziela poszczególnym użytkownikom<br />
fragmenty pasma przeznaczonego<br />
do ściągania danych z Internetu.<br />
Warto zauważyć, że pasmo jest dzielone<br />
na liczbę użytkowników, a nie komputerów.<br />
Opcją rate przydzielamy im<br />
pasmo gwarantowane. Należy pamiętać,<br />
aby suma wartości opcji rate wykorzystanych<br />
w tej sekcji nie przekroczyła wartości<br />
rate ustalonej dla kolejki nadrzędnej<br />
w sekcji 6). To samo dotyczy opcji ceil. Jeśli<br />
nie chcemy iść na rękę użytkownikom,<br />
a jedynie przydzielić im konkretne pasmo<br />
(czyli jeśli chcemy, aby gwarantowane<br />
pasmo było zarazem maksymalnym), to<br />
możemy zmiennej USER_CEIL przypisać<br />
tę samą wartość, co zmiennej USER.<br />
Czas na ustawienie filtrów, które będą<br />
odpowiadać za kierowanie pakietów do<br />
odpowiednich kolejek. Zaczynamy od<br />
zapewnienia, że pakiety pochodzące<br />
z rutera nie będą podlegały ogranicze-<br />
Rysunek 4. Po skonfigurowaniu<br />
zarządzania przepustowością możemy<br />
spokojnie czytać strony WWW nawet, gdy<br />
kolega uparcie korzysta z KaZaA<br />
44 czerwiec 2004
dhcp i htb<br />
dla początkujących<br />
Listing 2. Przykładowa zawartość pliku rc.htb dla podziału pasma według użytkowników<br />
# 1) określamy przepustowości<br />
CALE=8700kbit<br />
SDI=110kbit<br />
ETH_CEIL=8000kbit<br />
USER=16kbit<br />
USER_CEIL=100kbit<br />
INT_LOC=eth0<br />
# 2) wskazujemy adresy komputerów<br />
IP_SERWER=192.168.100.1<br />
IP_USER1_1=192.168.100.2<br />
IP_USER1_2=192.168.100.3<br />
IP_USER2=192.168.100.6<br />
IP_USER3_1=192.168.100.8<br />
IP_USER4=192.168.100.15<br />
IP_USER5=192.168.100.50<br />
IP_USER3_2=192.168.100.100<br />
IP_USER6=192.168.100.200<br />
IP_USER1_3=192.168.100.205<br />
# 3) usuwamy wszelkie ustawienia qdisc<br />
tc qdisc del root dev $INT_LOC<br />
# 4) dodajemy obiekt qdisc - htb<br />
tc qdisc add dev $INT_LOC root handle 1:0 htb<br />
# 5) tworzymy klasę odpowiadającą całej dostępnej przepustowości sieci lokalnej<br />
tc class add dev $INT_LOC parent 1:0 classid 1:1 htb rate $CALE ceil $CALE<br />
# 6) wydzielamy klasy dla transmisji danych z Internetu i z serwera<br />
tc class add dev $INT_LOC parent 1:1 classid 1:2 htb rate $SDI ceil $SDI<br />
tc class add dev $INT_LOC parent 1:1 classid 1:3 htb rate $ETH_CEIL ceil $ETH_CEIL<br />
# 7) rozdzielamy przepustowość pomiędzy poszczególnych użytkowników<br />
tc class add dev $INT_LOC parent 1:2 classid 1:4 htb rate $USER ceil $USER_CEIL<br />
tc class add dev $INT_LOC parent 1:2 classid 1:5 htb rate $USER ceil $USER_CEIL<br />
...<br />
# 8) ustawiamy filtr oddzielający transmisję z serwera<br />
tc filter add dev $INT_LOC protocol ip preference 1 parent 1:0 u32 match ip srcS<br />
$IP_SERWER flowid 1:3<br />
# 9) ustawiamy filtry oddzielające transmisję do poszczególnych komputerów w sieciS<br />
lokalnej<br />
tc filter add dev $INT_LOC protocol ip preference 2 parent 1:0 u32 match ip dstS<br />
$IP_USER1_1 flowid 1:4<br />
tc filter add dev $INT_LOC protocol ip preference 2 parent 1:0 u32 match ip dstS<br />
...<br />
$IP_USER1_2 flowid 1:4<br />
# 10) ustawiamy sprawiedliwe dzielenie łącza z serwera<br />
tc qdisc add dev $INT_LOC parent 1:3 handle 3:0 sfq perturb 10<br />
# 11) ustawiamy sprawiedliwe dzielenie łączy poszczególnych użytkowników<br />
tc qdisc add dev $INT_LOC parent 1:4 handle 4:0 sfq perturb 10<br />
tc qdisc add dev $INT_LOC parent 1:5 handle 5:0 sfq perturb 10<br />
...<br />
niom nakładanym na łącze internetowe.<br />
Uzyskujemy to dzięki poleceniu zawartemu<br />
w sekcji 8). Warto zwrócić uwagę na<br />
opcję preference 1, dzięki której reguła<br />
ta zostanie rozpatrzona przed umieszczonymi<br />
w kolejnych liniach (posiadającymi<br />
opcję preference 2). Dzieje się tak,<br />
gdyż opcja ta określa priorytet filtru – im<br />
niższy numer, tym wcześniej będzie rozpatrzony<br />
filtr. Do dopasowania pakietów<br />
wykorzystano filtr u32. Numer kolejki,<br />
do której ma być skierowany dopasowany<br />
pakiet, określony jest opcją flowid.<br />
W analogiczny sposób filtrujemy<br />
pakiety przeznaczone dla poszczególnych<br />
komputerów w sieci lokalnej i kierujemy<br />
je do odpowiednich kolejek. Zajmują<br />
się tym polecenia zawarte w sekcji<br />
9). Warto zwrócić uwagę, że zgodnie<br />
z wcześniejszymi założeniami, pakiety<br />
pobierane przez komputery należące do<br />
jednego użytkownika (np. IP_USER1_1<br />
i IP_USER1_2) kierowane są do tej samej<br />
kolejki. Dzięki temu użytkownik nie<br />
otrzymuje dodatkowego pasma tylko<br />
dlatego, że posiada więcej komputerów.<br />
Wykorzystana w tych liniach opcja preference<br />
2 sprawia, że linie te są rozpatrywane<br />
dopiero po linii umieszczonej<br />
w sekcji 8). Gdyby było inaczej, to podczas<br />
pobierania przez użytkownika<br />
danych z rutera (a nie z Internetu) transmisja<br />
odbywałaby się z szybkością przeznaczoną<br />
dla pobierania danych z Internetu.<br />
Ponieważ dysponujemy siecią<br />
o przepustowości 10Mbit, nie miałoby to<br />
większego sensu.<br />
Aby użytkownicy podczas pobierania<br />
danych z rutera wzajemnie sobie<br />
nie przeszkadzali, to do klasy 1:3 opisanej<br />
w sekcji 6) dodamy jeszcze dyscyplinę<br />
kolejkowania SFQ (odpowiednia linia<br />
znajduje się w sekcji 10)). W zasadzie<br />
jest wątpliwe, aby w sieci lokalnej ktoś<br />
tak mocno „przytkał” łącze, żeby było to<br />
konieczne, jednak dodatkowa pojedyncza<br />
linia w skrypcie nie powinna nam<br />
zaszkodzić.<br />
Analogicznie postępujemy w sekcji<br />
11), gdzie przypisujemy dyscyplinę kolejkowania<br />
SFQ do każdej z kolejek przydzielonych<br />
poszczególnym użytkownikom.<br />
Na tym kończy się działanie skryptu.<br />
Możemy go umieścić na przykład w<br />
pliku /etc/rc.d/init.d/rc.htb. Plikowi temu<br />
należy nadać prawa wykonywania (poleceniem<br />
chmod u+x /etc/rc.d/init.d/<br />
rc.htb), a następnie jego wywołanie<br />
możemy umieścić w jednym ze skryptów<br />
startowych. Ważne jest, aby skrypt<br />
ten był wykonywany dopiero po podniesieniu<br />
wszystkich interfejsów.<br />
Równi i równiejsi<br />
No dobrze, mamy sprawiedliwy podział<br />
łącza, ale jedna z użytkowniczek sieci<br />
tak ładnie się do nas uśmiecha, że nie<br />
mamy sumienia traktować jej na równi<br />
z pozostałymi. Czy można w jakiś sposób<br />
uprzyjemnić jej korzystanie z sieci? Oczywiście.<br />
Narzucającą się od razu myślą jest<br />
zwiększenie wartości opcji rate i ceil<br />
w jej kolejce. Dzięki temu miałaby do<br />
www.lpmagazine.org<br />
45
dla początkujących<br />
Listing 3. Przykładowa zawartość pliku rc.htb dla podziału pasma według usług<br />
# 1) określamy przepustowości i interfejsy<br />
SDI=110kbit<br />
WWW=30kbit<br />
FTP=30kbit<br />
INNE=20kbit<br />
INNE_CEIL=40kbit<br />
INT_INT=ppp0<br />
# 2) usuwamy wszelkie ustawienia qdisc<br />
tc qdisc del root dev $INT_INT<br />
# 3) dodajemy obiekt qdisc - htb<br />
tc qdisc add dev $INT_INT root handle 1:0 htb default 4<br />
# 4) tworzymy klasę odpowiadającą całej dostępnej przepustowości sieci lokalnej<br />
tc class add dev $INT_INT parent 1:0 classid 1:1 htb rate $SDI ceil $SDI<br />
# 5) wydzielamy klasy dla transmisji danych z poszczególnych portów<br />
tc class add dev $INT_INT parent 1:1 classid 1:2 htb rate $WWW ceil $SDI<br />
tc class add dev $INT_INT parent 1:1 classid 1:3 htb rate $FTP ceil $FTP<br />
tc class add dev $INT_INT parent 1:1 classid 1:4 htb rate $INNE ceil $INNE_CEIL<br />
# 6) ustawiamy filtry oddzielające transmisję z poszczególnych portów do Internetu<br />
tc filter add dev $INT_INT protocol ip parent 1:0 u32 match ip sport 80 0xffff S<br />
flowid 1:2<br />
tc filter add dev $INT_INT protocol ip parent 1:0 u32 match ip sport 20 0xffff S<br />
flowid 1:3<br />
# 7) ustawiamy sprawiedliwe dzielenie przepustowości poszczególnych usług<br />
tc qdisc add dev $INT_INT parent 1:2 handle 2:0 sfq perturb 10<br />
tc qdisc add dev $INT_INT parent 1:3 handle 3:0 sfq perturb 10<br />
tc qdisc add dev $INT_INT parent 1:4 handle 4:0 sfq perturb 10<br />
dyspozycji większą gwarantowaną przepustowość,<br />
jak również większe łącze<br />
do wykorzystania. To jednak wiąże się<br />
z koniecznością dokonania kolejnych<br />
przeliczeń i dostosowania wartości w<br />
pozostałych kolejkach.<br />
Możemy rozwiązać to inaczej.<br />
Zwykle jest tak, że nie wszyscy użytkownicy<br />
wykorzystują w całości przydzielone<br />
im pasmo. W takim przypadku<br />
jest ono rozdzielane po równo pomiędzy<br />
pozostałych, potrzebujących użytkowników<br />
(aż do wartości opcji ceil). Możemy<br />
sprawić, że dodatkowe pasmo będzie<br />
w pierwszej kolejności przydzielane<br />
wskazanej osobie. Wystarczy w sekcji 7)<br />
w każdej linii dopisać opcję prio LICZBA,<br />
gdzie LICZBA określa priorytet danego<br />
użytkownika. Im LICZBA mniejsza, tym<br />
większy priorytet – użytkownik o najwyższym<br />
priorytecie będzie miał pierwszeństwo<br />
podczas rozdzielania dodatkowego<br />
pasma.<br />
Przypuśćmy, że w liniach z opcjami<br />
classid o wartościach 1:4, 1:5, 1:6 i 1:8<br />
ustawimy opcję prio 2. W linii z classid<br />
1:9 damy prio 1 (to nasza uśmiechnięta<br />
koleżanka), a w linii z classid 1:7 dopiszemy<br />
prio 3 (to znajomy, który nadepnął<br />
nam na odcisk). W takim przypadku,<br />
jeśli nasza koleżanka będzie ściągała<br />
jakiś duży plik z szybkiego serwera,<br />
a dostępne będzie jeszcze wolne pasmo,<br />
to zostanie ono przydzielone właśnie jej.<br />
Dopiero w następnej kolejności będą<br />
obsłużeni pozostali użytkownicy, a na<br />
samym końcu nasz niegrzeczny kolega<br />
z kolejki 1:7.<br />
Dzielimy według usług<br />
Załóżmy, że nasz serwer udostępnia<br />
jakieś usługi. Może to być serwer WWW,<br />
FTP, czy na przykład SSH. Zapewniliśmy<br />
już komfort korzystania z sieci naszym<br />
użytkownikom lokalnym, ale co z użytkownikami<br />
Internetu? Również i o nich<br />
możemy zadbać. Tym razem będziemy<br />
pracować na interfejsie zewnętrznym (w<br />
naszym przykładzie jest to ppp0), gdyż<br />
chcemy kształtować ruch wychodzący<br />
z serwera do Internetu.<br />
W naszym przykładzie dla uproszczenia<br />
założymy, że na serwerze udostępniamy<br />
tylko usługi WWW i FTP.<br />
Pierwszej z nich przypiszemy przepustowość<br />
gwarantowaną 30kbit na sekundę<br />
(z góry ograniczoną tylko przepustowością<br />
SDI), natomiast drugiej zagwarantujemy<br />
taką samą przepustowość (z tą różnicą,<br />
że transfer FTP nie będzie większy<br />
niż te gwarantowane 30kbit na sekundę).<br />
Wszystkie pozostałe transmisje wychodzące<br />
(a więc również i ruch wychodzący<br />
od użytkowników sieci lokalnej) będą<br />
miały zagwarantowane 20kbit na sekundę<br />
z ograniczeniem do maksymalnie<br />
40kbit na sekundę. Dzięki temu wszelkie<br />
programy typu KaZaA nie będą miały<br />
szans zapchać nam łącza wychodzącego.<br />
Na Listingu 3 podane jest przykładowe<br />
rozwiązanie tego problemu. Zawartość<br />
możemy później dopisać do pliku<br />
rc.htb stworzonego w poprzednich rozdziałach,<br />
dzięki czemu jeden skrypt<br />
będzie odpowiadał za kształtowanie<br />
zarówno ruchu wychodzącego, jak<br />
i przychodzącego.<br />
Zaczynamy od zdefiniowania zmiennych<br />
zawierających wartości poszczególnych<br />
przepustowości. Nazwy SDI, WWW,<br />
FTP i INNE mówią same za siebie. Zmienna<br />
INNE_CEIL odpowiada za górne ograniczenie<br />
pasma dla pozostałego (poza<br />
WWW i FTP) ruchu wychodzącego.<br />
W zmiennej INT_INT zawarta jest nazwa<br />
interfejsu rutera, przez który podłączony<br />
jest do Internetu.<br />
W sekcji 2) kasujemy wszystkie ustawienia<br />
dotyczące kształtowania ruchu na<br />
interfejsie $INT_INT. Nie należy się obawiać<br />
wstawienia tej linii w skrypcie po<br />
stworzeniu regułek dla innego interfejsu.<br />
Polecenie to kasuje ustawienia tylko<br />
i wyłącznie na wskazanym interfejsie.<br />
Polecenie zawarte w sekcji 3) powoduje<br />
ustawienie HTB jako dyscypliny<br />
kolejkowania dla ruchu wychodzącego<br />
do Internetu. Warto zauważyć, że<br />
ponownie użyliśmy uchwytu (handle)<br />
1:0. Jest to możliwe, gdyż uchwyty są<br />
numerowane osobno dla każdego interfejsu.<br />
Tak więc uchwyt 1:0 na interfejsie<br />
eth0 nie ma nic wspólnego z uchwytem<br />
1:0 na interfejsie ppp0.<br />
Dodatkową ciekawostką jest użycie<br />
w tej sekcji opcji default. Wskazuje ona<br />
klasę domyślną, czyli taką, do której kierowany<br />
będzie ruch nie obsłużony przez<br />
filtry – jeśli jakieś pakiety nie zostaną<br />
dopasowane w filtrach, to trafią właśnie<br />
do wskazanej tu klasy. Należy jeszcze<br />
wyjaśnić, w jaki sposób wskazywana<br />
jest klasa domyślna. Użyliśmy tutaj<br />
opcji default 4. Ponieważ została ona<br />
użyta w obiekcie o uchwycie 1:0, więc<br />
46 czerwiec 2004
dhcp i htb<br />
dla początkujących<br />
Listing 4. Zawartość przykładowego<br />
pliku /etc/rchtb/htbusers.conf<br />
NewGroup user1<br />
192.168.100.2 user1_1<br />
192.168.100.3 user1_2<br />
192.168.100.205 user1_3<br />
EndGroup<br />
192.168.100.6 user2<br />
NewGroup user3<br />
192.168.100.8 user3_1<br />
192.168.100.100 user3_2<br />
EndGroup<br />
192.168.100.15 user4<br />
192.168.100.50 user5<br />
192.168.100.200 user6<br />
klasą domyślną będzie klasa o uchwycie<br />
1:4 (numer powstaje przez złożenie<br />
uchwytu obiektu i numeru podanego w<br />
opcji default). Klasa ta zdefiniowana jest<br />
w sekcji 5).<br />
Sekcja 4) to znane nam już polecenie<br />
tworzące główną klasę odpowiedzialną<br />
za przypisanie przepustowości gwarantowanej<br />
i maksymalnej całego łącza do<br />
Internetu.<br />
Następnie w sekcji 5) tworzymy podklasy<br />
odpowiadające za kolejkowanie<br />
ruchu odpowiednich usług.<br />
O tym, jakie pakiety znajdą się w<br />
odpowiednich kolejkach, decydują filtry<br />
zdefiniowane w sekcji 6). Objaśnienie<br />
użytej tu konstrukcji filtru znajduje się<br />
na końcu rozdziału Równi i równiejsi.<br />
Ruch wychodzący z portu numer 80<br />
(a więc WWW ) kierowany jest do klasy<br />
1:2, natomiast wychodzący z portu 20<br />
(FTP) do klasy 1:3. Nie ma filtru kierującego<br />
pakiety do klasy 1:4. Za to właśnie<br />
odpowiada opcja default 4 zawarta<br />
w sekcji 3).<br />
Sekcja 7) kończy skrypt ustawiając<br />
na poszczególnych klasach sprawiedliwy<br />
algorytm kolejkowania SFQ.<br />
Konfigurator podziału<br />
pasma<br />
Jeśli nie mamy ochoty na własnoręczne<br />
wyliczenia i wpisywanie kolejnych regułek,<br />
możemy skorzystać z pomocy konfiguratora.<br />
Michał Łukaszek napisał bardzo<br />
użyteczny skrypt rchtb, który można znaleźć<br />
na stronie http://www.rc.htb.prv.pl/.<br />
W chwili pisania artykułu serwis wciąż<br />
jeszcze odczuwał skutki awarii, lecz sam<br />
skrypt (w najbardziej aktualnej wersji<br />
0.3.3) został udostępniony do pobrania.<br />
Instalacja<br />
Po pobraniu pliku na dysk należy rozpakować<br />
go poleceniem tar xvzf rchtb-<br />
0.3.3.tar.gz. W wyniku zostanie utworzony<br />
katalog rchtb/, a w nim umieszczona<br />
zawartość archiwum. Na początku<br />
należy zapoznać się z plikami README<br />
i INSTALL, w których opisany jest sposób<br />
wykorzystania skryptu oraz możliwe problemy.<br />
Najpierw należy zadbać, aby w systemie<br />
znajdowały się następujące narzędzia:<br />
tree, grep, cut, dialog, ls, where<br />
is, cat (w przypadku Auroksa 9.3 znajdują<br />
się one w pakietach tree-1.4b3-<br />
1.i386.rpm, grep-2.5.1-17.4.i386.rpm,<br />
dialog-0.9b-20031002.1.i386.rpm, coreutils-5.0-24.i386.rpm,<br />
util-linux-2.11y-<br />
29.i386.rpm, znajdujących się na pierwszej,<br />
drugiej i czwartej płytce instalacyjnej).<br />
Jeśli któregoś z tych narzędzi brakuje,<br />
to należy doinstalować odpowiedni<br />
pakiet.<br />
Wskazywanie użytkowników<br />
sieci<br />
Następnym krokiem jest przygotowanie<br />
spisu komputerów, pomiędzy które ma<br />
być dzielone pasmo. Umieszczamy go<br />
w pliku /etc/rchtb/htbusers.conf (w tym<br />
celu powinniśmy pracować z uprawnieniami<br />
administratora). Jego zawartość<br />
odpowiadająca naszemu przykładowi<br />
przedstawiona jest na Listingu 4. Jak<br />
widać, jego składnia jest bardzo prosta.<br />
Pojedynczy komputer opisywany jest<br />
jedną linią składającą się z adresu IP<br />
i odpowiadającej mu nazwy symbolicznej.<br />
Nazwa ta może być taka sama, jak<br />
w pliku /etc/hosts. Jeśli kilka komputerów<br />
ma korzystać ze wspólnego pasma,<br />
to należy je przydzielić do jednej grupy.<br />
Robimy to umieszczając ich wpisy<br />
pomiędzy liniami NewGroup NazwaGrupy<br />
i EndGroup. Pamiętajmy, aby w pliku<br />
/etc/rchtb/htbusers.conf nie umieszczać<br />
wpisu odnoszącego się do samego serwera,<br />
na którym będzie realizowane<br />
dzielenie pasma.<br />
Po stworzeniu odpowiednich wpisów<br />
w pliku /etc/rchtb/htbusers.conf pozostaje<br />
nam uruchomienie właściwego skryptu<br />
konfiguratora. Dokonujemy tego przechodząc<br />
do katalogu rchtb/, w którym<br />
wydajemy polecenie ./rchtb_configure.<br />
Parametry łączy<br />
Pierwsze pytanie dotyczy katalogu,<br />
do którego ma zostać skopiowany<br />
plik rchtb_tc dostarczony w pliku<br />
rchtb-0.3.3.tar.gz. Możemy go użyć<br />
jako zamiennika programu tc pochodzącego<br />
z pakietu iproute2. Jest to<br />
szczególnie użyteczne, gdy posiadamy<br />
starszą wersję pakietu iproute2, nie<br />
wspierającą HTB. Program rchtb_tc<br />
został skompilowany z obsługą HTB,<br />
ESFQ oraz WRR. Najlepiej wybrać zalecaną<br />
lokalizację, czyli katalog /usr/<br />
sbin/.<br />
Kolejną decyzją, którą musimy<br />
podjąć, to wskazanie interfejsu sieciowego<br />
wykorzystywanego do łączenia<br />
z Internetem (w naszym przykładzie<br />
jest to interfejs ppp0). Jeśli na spisie<br />
nie ma jakiegoś interfejsu, należy<br />
opuścić program (dwukrotnie wciskając<br />
klawisz [Esc]), a następnie<br />
podnieść interfejs poleceniem ifup<br />
nazwa_interfejsu. Po wykonaniu tej<br />
czynności można od nowa uruchomić<br />
skrypt.<br />
W analogiczny sposób wskazujemy<br />
interfejs służący do połączenia z siecią<br />
lokalną. W naszym przykładzie jest to<br />
eth0.<br />
Czwarte pytanie dotyczy przepustowości<br />
naszego łącza do Internetu.<br />
Mamy do wyboru kilka standardowych<br />
pozycji, między innymi SDI (które<br />
wybralibyśmy w naszym przykładzie),<br />
kablówkę (w wersji 128/128), Neostradę+,<br />
jak również DSL 1Mbit. Jeśli<br />
żaden z proponowanych wyborów nam<br />
nie odpowiada, możemy wskazać pozycję<br />
Inne łącze, po czym zostaniemy<br />
poproszeni o podanie prędkości downloadu<br />
i uploadu w kilobitach na sekundę.<br />
Analogicznie określamy przepustowość<br />
sieci lokalnej, tym razem<br />
w megabitach na sekundę. Do<br />
wyboru mamy Ethernet (10 Mbit), Fast<br />
Ethernet (100 Mbit) oraz Gigabit Ethernet<br />
(1000 Mbit). Oprócz tego możemy<br />
samodzielnie określić przepustowość<br />
wybierając pozycję Inna przepusowość<br />
W opisywanym przykładzie<br />
właściwym wyborem jest Ethernet 10<br />
Mbit.<br />
Następnie otrzymujemy informację,<br />
jakie wartości parametrów przyjęto<br />
dla poszczególnych interfejsów. Warto<br />
zauważyć, że w przypadku łącza internetowego<br />
wartości uploadu i downloadu<br />
zostały automatycznie nieco zmniejszone<br />
w porównaniu do podanych przez nas<br />
parametrów łącza.<br />
www.lpmagazine.org<br />
47
dla początkujących<br />
Rysunek 5. Poprawne wprowadzenie<br />
danych o komputerach w sieci jest bardzo<br />
ważne<br />
Klasy dla użytkowników<br />
W kolejnym oknie zapoznamy się z graficznym<br />
przedstawieniem zawartości<br />
pliku /etc/rchtb/htbusers.conf. Jeśli coś<br />
się nie zgadza, powinniśmy przerwać<br />
działanie skryptu (podwójnym wciśnięciem<br />
klawisza [Esc]) a następnie poprawić<br />
wpisy w pliku.<br />
Następnie należy wybrać algorytm,<br />
który będzie stosowany do zapewnienia,<br />
że użytkownicy nie „przytkają”<br />
sobie przydzielonego im pasma uruchamiając<br />
np. programy P2P. Do wyboru<br />
mamy SFQ i ESFQ. Ze względu na to,<br />
że zastosowanie ESFQ wymaga nakładania<br />
łaty na jądro, zastosujemy SFQ,<br />
które jest domyślnie wspierane w obecnych<br />
jądrach.<br />
Pozostaje nam wskazanie programu<br />
tc, który pozwala na definiowanie reguł<br />
kontroli ruchu. Możemy spokojnie skorzystać<br />
z domyślnego rchtb_tc, dostarczanego<br />
w pakiecie z rchtb.<br />
Ponieważ skrypt tworzy klasę priorytetową,<br />
do której skierowane zostaną<br />
wybrane pakiety (te z TOS ustawionym<br />
na Minimal Delay) i cały ruch ICMP,<br />
możemy dodatkowo określić jeden port<br />
TCP, z którego ruch trafi do tej klasy.<br />
Domyślnie jest to port 22 wykorzystywany<br />
przez usługę SSH -- dzięki temu nawet<br />
przy znacznym obciążeniu łącza korzystanie<br />
z SSH nadal powinno być komfortowe.<br />
W kolejnym oknie wybieramy minimalną<br />
wartość, jaką mają być znakowane<br />
pakiety użytkowników. Jeśli nie stosujemy<br />
jeszcze żadnego znakowania na zaporze<br />
sieciowej (firewall), to możemy pozostawić<br />
domyślną wartość.<br />
Możemy teraz zapoznać się z dotychczasowymi<br />
wyliczeniami. Dowiemy się,<br />
na ile klas zostanie podzielone pasmo,<br />
oraz jaką gwarantowaną przepustowość<br />
ma każda klasa. Na tym etapie wskazujemy<br />
też, czy skrypt ma dodać osobną<br />
klasę na użytek serwera pośredniczącego<br />
Squid. W naszym przykładzie<br />
nie stosujemy Squida, więc wybieramy<br />
opcję brak.<br />
Ruch wychodzący<br />
Czas określić przepustowość gwarantowaną<br />
dla klientów chcących<br />
połączyć się z naszym serwerem z<br />
Internetu. Wartość tą podajemy jako procent<br />
rozmiaru pasma wychodzącego.<br />
Domyślnie jest to 30%. Jeśli nie<br />
zamierzamy uruchamiać na serwerze<br />
żadnych usług (np. WWW, FTP lub<br />
innych), to możemy wpisać 0. W takim<br />
przypadku klienci z zewnątrz nie<br />
będą mieli gwarantowanej przepustowości.<br />
Podobnie jak w przypadku ruchu<br />
przychodzącego, tworzona jest klasa<br />
priorytetowa. Możemy podać jeden<br />
numer portu TCP, do którego ruch będzie<br />
do niej kierowany. Domyślnie jest to port<br />
SSH, o numerze 22.<br />
Wykorzystanie skryptu<br />
Na tym kończą się pytania zadawane<br />
przez konfigurator. W wyniku jego<br />
działania w katalogu rchtb/ready/ zostały<br />
utworzone dwa pliki: rc.htb oraz<br />
fwmarks.htb. Pierwszy z nich zawiera<br />
skrypt odpowiadający za ustawienie<br />
podziału pasma według naszych<br />
wytycznych. Można umieścić go np. w<br />
katalogu /etc/rc.d/init.d/ (poleceniem cp<br />
rc.htb /etc/rc.d/init.d/) lub w innym<br />
katalogu, gdzie przechowujemy skrypty<br />
startowe. Dzielenie pasma uruchamiamy<br />
wydając polecenie /etc/rc.d/init.d/<br />
rc.htb start, natomiast zatrzymujemy<br />
poleceniem /etc/rc.d/init.d/<br />
rc.htb stop. Wywołanie tego skryptu<br />
można dodać do skryptów startowych.<br />
Należy jednak pamiętać, aby uruchamiany<br />
był on dopiero w momencie,<br />
gdy wszystkie interfejsy sieciowe są już<br />
postawione.<br />
Drugi plik, czyli fwmarks.htb, zawiera<br />
regułki iptables służące do znakowania<br />
poszczególnych pakietów. Regułki<br />
te są konieczne do poprawnego funkcjonowania<br />
niektórych filtrów zdefiniowanych<br />
w pliku rc.htb. Również<br />
jego można skopiować do katalogu<br />
/etc/rc.d/init.d/ i uruchamiać poleceniem<br />
/etc/rc.d/init.d/fwmarks.htb<br />
start (do zatrzymania służy parametr<br />
stop).<br />
Zakończenie<br />
W ten sposób dotarliśmy do końca.<br />
Mam nadzieję, że korzystając z powyższych<br />
wskazówek, każdy Czytelnik<br />
będzie w stanie skonfigurować u siebie<br />
podstawowy serwer DHCP oraz kształtować<br />
ruch sieciowy według swoich<br />
potrzeb. Gorąco zachęcam do lektury<br />
materiałów dostępnych w sieci i głębszego<br />
poznawania przedstawionych tu<br />
narzędzi.<br />
W Internecie:<br />
• DHCP mini-HOWTO:<br />
http://www.tldp.org/HOWTO/DHCP/<br />
index.html<br />
• Konfiguracja demona DHCP:<br />
http://www.baseciq.org/linux/dhcp/<br />
• DHCP + ARP:<br />
http://linux.insurgents.net/artykuly/<br />
dhcp_arp.htm<br />
• DHCP – opis protokołu i konfiguracja<br />
serwera pod Linuksem:<br />
http://www.pckurier.pl/archiwum/<br />
art0.asp?ID=707<br />
• Strona domowa HTB:<br />
http://luxik.cdi.cz/~devik/qos/htb/<br />
• Podręcznik użytkownika HTB:<br />
http://luxik.cdi.cz/~devik/qos/htb/<br />
manual/userg.htm<br />
• Opis teorii działania HTB:<br />
http://luxik.cdi.cz/~devik/qos/htb/<br />
manual/theory.htm<br />
• Kilka interesujących dokumentów<br />
o kształtowaniu ruchu:<br />
http://www.docum.org/<br />
• Kształtowanie Ruchu<br />
i Zaawansowany Routing HOWTO:<br />
http://lukasz.bromirski.net/docs/<br />
translations/lartc-pl.html<br />
• Zaawansowany routing IP w Linuksie:<br />
http://echelon.pl/pubs/NET4.pdf<br />
• Sterowanie przepływem danych w<br />
Linuksie:<br />
http://echelon.pl/pubs/NET4_tc.pdf<br />
• HTB – strażnik trafficu:<br />
http://linio.terramail.pl/htb.html<br />
• Kompilacja kernela 2.4.24 z iptables<br />
i iproute2 + HTB:<br />
http://newbie.linux.pl/wydruk.php?<br />
wydruk=170&show=artykul<br />
• HTB w Debianie "Woody"<br />
z Neostradą+:<br />
http://www.debianusers.pl/article.<br />
php?aid=54&top10=1<br />
• Strona domowa skryptu rc.htb:<br />
http://www.rc.htb.prv.pl/<br />
• Skrypty HTB + iptables:<br />
http://endemic.org/htb/<br />
48 czerwiec 2004
sprzęt<br />
Zarządzanie<br />
energią w Linuksie,<br />
część pierwsza<br />
Piotr Wolny<br />
Na płycie CD/DVD<br />
Na płycie CD/DVD znajdują<br />
się pliki źródłowe najnowszych<br />
jąder Linux, jak również łatki na<br />
jądro związane z zarządzaniem<br />
energią.<br />
O autorze<br />
Autor jest politologiem i pracuje<br />
dla www.wzz.org.pl. Linuksem<br />
zajmuje się mniej więcej od<br />
czasów jądra 2.0.20. Kontakt<br />
z autorem: autorzy@linux.com.pl.<br />
Linux od niemal pierwszych<br />
swoich wersji wspiera technologie<br />
zarządzania energią (ang.<br />
power management). Określenie<br />
"zarządzanie energią" może być jednak<br />
nieco mylące, gdyż współcześnie rozwijana<br />
technologia ACPI umożliwia znacznie<br />
więcej niż tylko oszczędzanie energii<br />
elektrycznej. Dzięki wsparciu w Linuksie<br />
dla ACPI możliwy jest również dostęp<br />
z poziomu systemu operacyjnego do konfiguracji<br />
i odczytywania stanu niektórych<br />
urządzeń komputera. W szczególności<br />
dotyczy to stanu zasilania (baterie lub<br />
sieć), poziomu naładowania baterii czy<br />
temperatury procesora. Możliwe jest również<br />
zmniejszenie ilości zużywanej przez<br />
komputer energii elektrycznej poprzez<br />
wprowadzenie go w stan „uśpienia”,<br />
a nawet „hibernacji”, czyli wyłączenia go<br />
w trakcie pracy z nagraniem całej pamięci<br />
na dysku, tak aby było możliwe ponowne<br />
uruchomienie go w tym samym stanie.<br />
Właśnie tymi zagadnieniami zajmiemy się<br />
w tym miesiącu.<br />
ACPI oraz pozostały kod służący „usypianiu”<br />
komputera w Linuksie rozwija się<br />
bardzo szybko. W ostatnich miesiącach<br />
każda wersja jądra zawierała tysiące zmienionych<br />
i dopisanych linii kodu odpowiedzialnego<br />
za tę funkcjonalność. Pomimo<br />
tego, kod ten jest wciąż daleki od doskonałości.<br />
Wielu użytkowników doświadcza<br />
bardzo dziwnych i nieprzewidywalnych<br />
problemów po uaktywnieniu ACPI,<br />
np. z nie działającymi modemami itp.<br />
Z tego powodu twórcy dystrybucji Linuksa<br />
często domyślnie wyłączają obsługę<br />
ACPI w jądrze. Warto również zabawę<br />
z ACPI zaczynać na najnowszej wersji<br />
jądra i to z serii 2.6.x.<br />
Usypianie komputera przydaje się nie<br />
tylko na maszynach zasilanych z baterii.<br />
Na komputerze stacjonarnym jest to dobra<br />
metoda na przyśpieszenie startu systemu<br />
poprzez np. załadowanie obrazu pamięci<br />
z dysku, które trwa znacznie krócej<br />
niż cały proces normalnego startu. Tryb<br />
S4 może się przydać nawet na serwerach<br />
czy ruterach. Dzięki niemu można szybko<br />
wyłączyć komputer z sieci, aby np. włożyć<br />
nowy dysk i uruchomić go w dokładnie<br />
takim samym stanie, jak przed zamknięciem.<br />
Jeśli zrobimy to szybko, możemy<br />
nawet nie zerwać połączeń TCP/IP.<br />
Usypianie w praktyce<br />
Jeśli dysponujemy Linuksem z nowym<br />
jądrem z serii 2.6.x, mamy do wyboru<br />
Rysunek 1. Strona domowa projektu<br />
Swsusp2, dostarczającego łatki na jądra<br />
Linuksa z funkcjonalnością hibernowania<br />
komputera<br />
50 czerwiec 2004
acpi<br />
sprzęt<br />
Hibernacja i usypianie<br />
W teorii, czyli w specyfikacji ACPI, występuje<br />
aż pięć trybów uśpienia komputera:<br />
• S1 - odpowiednik znanego z MS Windows<br />
standby. W tym stanie zasilanie<br />
procesora jest utrzymywane,<br />
jednak procesor nie wykonuje żadnych<br />
instrukcji;<br />
• S2 - aktualnienie używany, w teorii<br />
podobny do S3, jednak z utrzymaniem<br />
zasilania niektórych urządzeń;<br />
• S3 - "Suspend to RAM " - zasilanie<br />
procesora jest odcięte, zasilanie<br />
pamięci ograniczone jest jedynie do<br />
samo-odświeżania, które gwarantuje<br />
utrzymanie jej zawartości. Technicznie<br />
jest to najtrudniejszy do uzyskania<br />
stan, gdyż wymaga współpracy<br />
procesora, chipsetu, urządzeń i ich<br />
sterowników oraz systemu operacyjnego;<br />
• S4 - "Suspend to Disk" - najciekawszy<br />
z tych trybów, równocześnie<br />
działający najstabilniej. W tym<br />
trybie cała zawartość pamięci jest<br />
nagrywana na dysk (na ogół na partycję<br />
swap) i komputer może zostać<br />
zupełnie wyłączony bądź używany<br />
do innych celów (np. możemy uruchomić<br />
inny system operacyjny, pod<br />
warunkiem, że nie korzysta on z tej<br />
samej partycji swap);<br />
• S5 - "Soft Off " - system jest zamykany,<br />
jednak utrzymywane jest zasilanie<br />
niektórych urządzeń, które mogą<br />
spowodować "obudzenie" systemu,<br />
np. karta sieciowa czy kontroler<br />
USB.<br />
trzy implementacje mechanizmu usypiania<br />
komputera.<br />
Starsze rozwiązanie, nazywane<br />
Swsusp przy konfiguracji jądra, znajdziemy<br />
w dziale Power management<br />
options->Software Suspend (Experimental).<br />
Musimy je zaznaczyć, podobnie<br />
jak znajdujące się poniżej opcje ACPI.<br />
Ponadto nie powinniśmy zaznaczać<br />
APM, natomiast koniecznie potrzebujemy<br />
wsparcia w jądrze dla partycji<br />
wymiany.<br />
Nowsze rozwiązanie, nazywane<br />
Pmdisk, znajdziemy również w dziale<br />
Power management options pod nazwą<br />
Suspend-to-disk support. Od starszego różni<br />
się ono m.in. tym, że nie wymaga zaznaczania<br />
opcji ACPI – działa niezależnie od<br />
tego systemu.<br />
W kolejnych wersjach jądra najprawdopodobniej<br />
zostanie tylko jedno z tych<br />
rozwiązań – to, które zostanie lepiej ocenione<br />
przez deweloperów i użytkowników.<br />
Nam nie zaszkodzi zaznaczyć<br />
obydwu z nich i przetestować, aby wybrać<br />
to, które będzie lepiej działać na naszym<br />
sprzęcie.<br />
Pod adresem http://swsusp.sf.net/<br />
możemy znaleźć najbardziej rozwinięte<br />
rozwiązanie, tyle że rozwijanie niezależnie<br />
od jądra, nazywane Swsusp2. Pozwala<br />
ono wyłącznie na używanie trybu "Suspend<br />
to disk", a jego instalacja jest znacznie<br />
trudniejsza, więc przyjrzymy się jej<br />
później.<br />
Swsusp i Pmdisk<br />
Do pierwszych testów "usypiania" komputera<br />
zaopatrzmy się w nowe jądro z serii<br />
2.6.x i skompilujmy je ze wsparciem dla<br />
Software Suspend, Suspend-to-disk support<br />
oraz ACPI.<br />
Przy wyborze opcji dotyczących ACPI<br />
kompiluję wszystkie na stałe, nie jako<br />
moduły. Nie zaszkodzi, jeśli wybierzemy<br />
wszystkie dostępne w tym dziale opcje,<br />
chociaż w przypadku komputerów stacjonarnych<br />
większość z nich raczej nam<br />
się nie przyda. Zawsze warto zaznaczyć<br />
przynajmniej "Button". Przy konfiguracji<br />
jądra nie zaznaczamy opcji dotyczących<br />
APM, gdyż te dwa rozwiązania nie działają<br />
równocześnie.<br />
Poza skompilowanym i zainstalowanym<br />
jądrem będziemy również potrzebować<br />
partycji wymiany (swap) na tyle dużej,<br />
aby zmieściła się na niej cała pamięć używana<br />
przez system operacyjny i aplikacje.<br />
Na ogół przyjmuje się, że wystarczy<br />
do tego celu partycja wymiany o rozmiarze<br />
130% pamięci fizycznej. Jeśli jednak<br />
uruchamiamy bardzo wiele aplikacji równocześnie,<br />
ta wartość może okazać się za<br />
mała.<br />
Po uruchomieniu nowego jądra<br />
sprawdźmy, czy wszystko działa –<br />
w naszym systemie powinien być katalog<br />
/proc/acpi/ oraz plik /sys/power/state. Jeśli<br />
nie mamy /proc/acpi/, sprawdźmy, czy<br />
ACPI zostało uaktywnione w BIOS-ie<br />
komputera. Jeśli jądro przy starcie nic nie<br />
wspomina o ACPI (dmesg | grep -i acpi<br />
nie pokazuje żadnej linii), oznacza to, że<br />
nasze jądro nie zostało skompilowane ze<br />
wsparciem dla ACPI. Możemy również<br />
sprawdzić, czy w lilo.conf lub grub.conf nie<br />
ma linii acpi=off lub acpi=ht - jeśli taki wpis<br />
tam się znajduje, oczywiście usuwamy<br />
go. Zamiast niego możemy wpisać append="acpi=on<br />
apm=off" (jeśli prawidłowo<br />
samodzielnie skonfigurowaliśmy jądro,<br />
nie jest to niezbędne).<br />
Swsusp<br />
Przetestujmy najpierw tradycyjną<br />
metodę usypiania, czyli Swsusp. Testowanie<br />
dobrze jest rozpocząć od trybu<br />
działającego najstabilniej, czyli "suspend<br />
to disk". Pierwszym krokiem musi być<br />
poinformowanie jądra, gdzie jest partycja<br />
wymiany (swap), na którą ma zostać<br />
nagrany zrzut pamięci przy "zasypianiu".<br />
Musimy to zrobić dodając odpowiednią<br />
linię, np. append="resume=/dev/hda9",<br />
do /etc/lilo.conf, np. pod linią określającą<br />
położenie jądra naszego Linuksa. Jeśli<br />
w tej sekcji lilo.conf, opisującej jądro<br />
naszego Linuksa, jest już linia append,<br />
to resume=... dopisujemy do istniejących<br />
opcji, wewnątrz cudzysłowu. Jeśli używamy<br />
GRUB-a, to opcje przekazywane do<br />
jądra znajdują się w tej samej linii, co nazwa<br />
pliku z jądrem. Również wtedy musimy<br />
dopisać odpowiednią opcję, np. "resume=<br />
/dev/hda9". Pamiętajmy oczywiście o zamianie<br />
przykładowego hda9 na właściwe<br />
oznaczenie partycji swap. Po dopisaniu<br />
opcji i uruchomieniu komendy<br />
lilo lub grub, musimy zrestartować<br />
Linuksa.<br />
Nadszedł czas na decydującą próbę<br />
(najlepiej zapiszmy wszystkie ważne<br />
dane) – wydajemy magiczne polecenie<br />
echo 4 >/proc/acpi/sleep. W ten sposób<br />
posłaliśmy komputer spać, a konkretnie<br />
w czwarty tryb uśpienia, ale najpierw<br />
jeszcze przez kilkanaście do kilkudziesięciu<br />
sekund oglądamy komunikaty<br />
o wyłączaniu poszczególnych urządzeń.<br />
Jeśli jakieś urządzenie sprawia problemy,<br />
to właśnie teraz można o tym przeczytać.<br />
Na koniec tego procesu komputer oczy-<br />
Rysunek 2. Strona domowa projektu ACPI<br />
dla Linuksa<br />
www.lpmagazine.org<br />
51
sprzęt<br />
Rysunek 3. Jądra z serii 2.6.x oryginalnie<br />
dostarczają dwie metody usypiania<br />
komputerów, ale po nałożeniu łatek mamy<br />
do wyboru trzy<br />
wiście wyłącza się. Przy ponownym uruchomieniu<br />
trzeba odczekać kilka sekund<br />
na zwykłe uruchomienie BIOS-a, a także<br />
Lilo/GRUB-a, gdzie po wybraniu wcześniej<br />
uśpionego Linuksa musimy zaczekać<br />
jeszcze kilka sekund na uruchomienie<br />
się jądra systemu. Jądro jednak, zamiast<br />
jak zwykle uruchamiać Inita, przystępuje<br />
do odzyskiwania wcześniej nagranego<br />
stanu i po kolejnych 15 sekundach<br />
system jest całkowicie przywrócony. Nie<br />
ma nawet potrzeby zapisywania danych<br />
w edytorze tekstu – wszystko samo<br />
wraca do dokładnie takiego samego<br />
stanu jak przed uśpieniem. W ten sposób<br />
start Linuksa, wraz z KDE, Open-<br />
Office.org i kilkunastoma innymi programami,<br />
zabiera ok. 30 sekund.<br />
Zdarza się jednak, że komputer nie<br />
chce zasnąć (wtedy możemy spróbować<br />
innych rozwiązań, o których dalej) lub<br />
nie chce się obudzić. W tym przypadku<br />
zaś musimy uruchomić jądro z parametrem<br />
noresume. Można to zrobić wpisując<br />
np. linux noresume po znaku zachęty<br />
Lilo (jeśli Lilo uruchamia się z graficznym<br />
menu musimy najpierw nacisnąć klawisz<br />
[Tab]).<br />
Pozostałe stany uśpienia możemy<br />
przetestować podobnie. Komenda cat<br />
/proc/acpi/sleep pokaże nam tryby obsługiwane<br />
przez nasz system, np. S0 S1 S4 S5.<br />
Możemy wydać komendę echo 1 >/proc/<br />
acpi/sleep, aby przejść do trybu S1 itp.<br />
Pmdisk<br />
Niezależnie od tego, czy testy Swsusp przebiegły<br />
pomyślnie, czy też nie, przetestujmy<br />
teraz nowszą metodę usypiania, czyli<br />
Pmdisk. Działa ona identycznie, ale różni<br />
się wydawanymi poleceniami. Zamiast<br />
resume=/dev/hda9 w konfiguracji lilo/GRUB<br />
musimy wpisać pmdisk=/dev/hda9.<br />
Źródła jądra<br />
Centralny punkt rozpowszechniania źródeł<br />
Linuksa znajdziemy pod adresem www.kernel.org.<br />
Zanim zdecydujemy się cokolwiek<br />
stamtąd ściągnąć, znajdźmy jakiś serwer<br />
lustrzany (ang. mirror) bliżej nas. W ten<br />
sposób pomożemy sobie (skracając czas<br />
ściągania<br />
kilkudziesięciomegabajtowego<br />
pliku) oraz administratorom głównego serwera,<br />
zmniejszając na nim obciążenie.<br />
Strona www.kernel.org dobrze nadaje się do<br />
zorientowania, jaka jest najnowsza dostępna<br />
wersja jądra. No i właśnie: którą wybrać?<br />
Na www.kernel.org dostajemy następujący<br />
wybór:<br />
• jądra z serii 2.6.x - oznaczone są jako<br />
„najnowsze stabilne”, ale wybieramy<br />
je tylko, gdy nasza dystrybucja oryginalnie<br />
jest dostarczana z jądrem 2.6.x<br />
(np. Mandrake 10 i nowsze, Fedora<br />
Core 2) lub przynajmniej została przystosowana<br />
do pracy z jądrami z tej serii,<br />
jak np. Mandrake 9. Jeśli już koniecznie<br />
chcemy ściągać jądro ze strony<br />
www.kernel.org, musimy kliknąć na<br />
odnośnik oznaczony literą „F”;<br />
• jądra z serii 2.4.x - są to bardziej stabilne<br />
jądra o nieco mniejszych możliwościach,<br />
które są podstawą budowania<br />
większości dzisiejszych dystrybucji,<br />
np. Aurox Linux 9.4. Podobnie jak wyżej,<br />
w celu ściągnięcia źródeł musimy kliknąć<br />
na „F”;<br />
• jądra z serii 2.2.x oraz 2.0.x - starsze<br />
wersje jąder i nieco przestarzałe, aby<br />
używać je na dzisiejszym sprzęcie;<br />
mogą przydać się jedynie przy „specjalnych”<br />
zastosowaniach, jak. np. budowa<br />
prostego rutera.<br />
Dodatkowo, dla bardziej zaawansowanych<br />
użytkowników, strona www.kernel.org<br />
zapewnia różne łatki (ang. patches) na<br />
źródła jądra, w tym wersje jądra pre, które po<br />
pewnym okresie testów i poprawek stają się<br />
kolejnymi wersjami stabilnymi, wersje snapshot,<br />
zawierające uaktualniany codziennie<br />
zapis pracy deweloperów jądra, oraz łatki<br />
-mm , czyli Andrew Mortona, zawierające<br />
najnowszy i najmniej przetestowany kod.<br />
Zapewne niedługo na www.kernel.org znajdziemy<br />
również jądra z kolejnej serii „eksperymentalnej”,<br />
czyli 2.7.x.<br />
Jeśli decydujemy się na kompilację<br />
jądra po raz pierwszy, najlepiej nie korzystajmy<br />
z www.kernel.org, a użyjmy źródeł<br />
dostarczanych przez naszą dystrybucję.<br />
Są one z reguły nieco zmodyfikowane<br />
w stosunku do oryginalnych, najczęściej<br />
poprzez nałożenie różnych nowych łatek,<br />
które nie były jeszcze „oficjalnie” przyjęte.<br />
Zawierają one również gotowy plik konfiguracyjny,<br />
dostosowany do naszej dystrybucji.<br />
Jest to więc najlepszy wybór dla<br />
początkującego użytkownika. Źródła jądra<br />
znajdziemy wśród pakietów binarnych (!)<br />
naszej dystrybucji. Będzie to pakiet zawierający<br />
w nazwie kernel source, np. kernelsource-2.4.20-20.9.i386.rpm.<br />
Jeśli nasza<br />
dystrybucja zawiera kilka wersji źródeł<br />
jądra, wybieramy tę, której aktualnie używamy<br />
– możemy to sprawdzić poleceniem<br />
cat /proc/version. Wybrany pakiet instalujemy<br />
jak każdy inny, np. poleceniem rpm -i<br />
[nazwa pliku].<br />
Wybór źródeł dostarczanych przez<br />
naszą dystrybucję, oprócz zalet, ma też<br />
swoje wady. Pierwszą z nich jest fakt, iż<br />
z reguły www.kernel.org zawiera nowszą<br />
wersję źródeł niż nasza dystrybucja. Ma<br />
to jednak znaczenie tylko wtedy, gdy ta<br />
nowa wersja przynosi jakieś istotne dla<br />
nas zmiany. Druga wada może ujawnić<br />
się wtedy, gdy jakieś oprogramowanie<br />
wymaga nałożenia łatek na źródła jądra<br />
i ponowną jego kompilację (np. lm_sensors).<br />
Niestety, twórcy różnych programów, które<br />
wymagają „łatania” jądra, z reguły zakładają,<br />
że korzystamy z „oryginalnych” jąder<br />
z www.kernel.org i ich łatki mogą nie nałożyć<br />
się lub nie działać na jądrach zmodyfikowanych<br />
przez twórców różnych dystrybucji.<br />
Jeśli jednak nie zamierzamy w przyszłości<br />
„łatać” naszego jądra, nie będzie<br />
nam to przeszkadzać.<br />
Po zainstalowaniu pakietu ze źródłami<br />
jądra, w systemie znajdziemy katalog<br />
/usr/src/linux, a w nim kilkadziesiąt (w przypadku<br />
jąder 2.4.x) do prawie dwustu (jądra<br />
2.6.x) megabajtów kodu. Jeśli ściągamy plik<br />
z jądrem samodzielnie, powinniśmy umieścić<br />
go w katalogu /usr/src/, rozpakować np. poleceniem<br />
tar jxfvp linux-2.4.26.tar.bz2,<br />
a następnie utworzyć dowiązanie symboliczne<br />
nowopowstałego katalogu do<br />
/usr/src/linux, np. ln -s linux-2.4.26<br />
linux. Źródła jądra możemy umieścić<br />
w innym katalogu, jednakże może to spowodować<br />
problemy w przyszłości, przy kompilacji<br />
niektórych programów, które domyślnie<br />
zakładają, że źródła te znajdują się właśnie<br />
w /usr/src/linux.<br />
52 czerwiec 2004
acpi<br />
sprzęt<br />
Listing 1: Przykładowy skrypt<br />
„usypiający” komputer<br />
#!/bin/sh<br />
rmmod usblp usb-storage hid;<br />
rmmod ohci-hcd;<br />
rmmod usbcore;<br />
# Suspend to RAM<br />
echo -n "mem" > /sys/power/state;<br />
modprobe usbcore;<br />
modprobe ohci-hcd;<br />
modprobe usblp usb-storage hid;<br />
exit 0;<br />
Nie zapomnijmy oczywiście o zrestartowaniu<br />
komputera. Listę wspieranych<br />
trybów uśpienia uzyskamy komendą cat<br />
/sys/power/state – będą to np. standby<br />
mem disk, które są równoważne z odpowiednio<br />
S1, S3 i S4 (jeśli ustawienia BIOSu<br />
komputera nie modyfikują tej zasady).<br />
Magiczne polecenie usypiające naszą<br />
maszynę będzie wyglądało np. tak: echo<br />
-n disk > /sys/power/state. Zwróćmy<br />
uwagę na opcję -n polecenia echo – bez niej<br />
na pewno nie zadziała. Podobnie testujemy<br />
pozostałe dostępne tryby. W przypadku<br />
problemów z uruchomieniem komputera,<br />
zamiast linux noresume po znaku<br />
zachęty LILO, używamy linux pmdisk=off.<br />
Niestety nie wszystkie tryby działają<br />
dobrze na każdym sprzęcie. Na moim<br />
komputerze, gdzie brak już wolnych<br />
slotów PCI ani gniazd USB czy portów szeregowych,<br />
w pełni dobrze działało polecenie<br />
echo -n disk > /sys/power/state,<br />
czyli usypianie "na dysk". Po wydaniu<br />
odpowiedniej komendy, system potrzebuje<br />
ok. 15 sekund na zapisanie swojego<br />
stanu (przy 512 MB pamięci). Po wydaniu<br />
polecenia echo 4 >/proc/acpi/sleep<br />
system "zasypiał" dłużej i zdarzały się problemy<br />
z działaniem myszki po jego obudzeniu.<br />
Po przywróceniu systemu z dysku,<br />
trzeba zawsze poprawić systemowy<br />
czas i datę, ponieważ system "budzi" się<br />
z datą i czasem zapamiętanym przy "zasypianiu".<br />
Aby zsynchronizować czas<br />
systemowy do czasu z zegara na płycie<br />
głównej, wydajemy polecenie hwclock<br />
--hctosys.<br />
Nie działa za to u mnie tryb S3<br />
– "Suspend to RAM". Spowodowane to jest<br />
posiadanym przeze mnie kontrolerem<br />
SATA SiI3112, którego linuksowy sterownik<br />
nie obsługuje "usypiania". Inni użytkownicy<br />
również często zgłaszają problemy<br />
z tym trybem na różnym innym<br />
sprzęcie, w tym na komputerach przenośnych,<br />
jednak mimo to u większości użytkowników<br />
powinien on działać.<br />
Problemy również występują u mnie<br />
z trybem S1. Po komendzie echo -n mem<br />
> /sys/power/state najpierw komputer<br />
co prawda przechodził do niego, jednak<br />
natychmiast budził się. Po zmianie ustawień<br />
w BIOS-ie (wyłączeniu tam zdarzeń<br />
"budzących" komputer), udało się go<br />
uśpić, jednak po przebudzeniu nie działały<br />
prawidłowo klawiatura i myszka<br />
PS/2. Komenda echo 3 >/proc/acpi/sleep<br />
działa dobrze z jednym wyjątkiem – nie<br />
wyłącza monitora. Wszystkie te problemy<br />
dotyczą jednak maszyny wyposażonej<br />
w bardzo wiele różnych kart PCI, niekoniecznie<br />
wykonanych przez renomowanych<br />
producentów.<br />
Swsusp2<br />
Dwa opisane powyżej mechanizmy usypiania<br />
komputera są zawarte w standardowym<br />
jądrze. Trzecie z nich, czyli<br />
swsup2, wymaga nałożenia łatek na źródła<br />
jądra. W zamian za to oferuje znacznie<br />
więcej możliwości. Spośród najważniejszych<br />
trzeba wymienić:<br />
• wygodny plik konfiguracyjny oraz<br />
gotowy zaawansowany skrypt do<br />
usypiania systemu, dzięki którym<br />
możemy ominąć problemy z niekompatybilnym<br />
sprzętem i programami;<br />
• możliwość kompresji "w locie" zapisywanego<br />
obrazu pamięci;<br />
• teoretyczna możliwość zapisywania<br />
obrazu pamięci nie tylko na partycję<br />
wymiany, ale również do pliku<br />
wymiany (swap file) – w momencie<br />
pisania tego artykułu (kwiecień 2004),<br />
obsługa swap file nie działała;<br />
• Swsup2 jest rozwijany również<br />
w wersji dla jąder z serii 2.4.x.<br />
Instalacja Swsusp2 nie jest trudna, gdy<br />
potrafimy samodzielnie skompilować<br />
jądro Linuksa. Można ją przeprowadzić<br />
następująco:<br />
• Ściągamy z http://swsusp.sourceforge.<br />
net/ najnowsze łaty dla jąder 2.6.x.<br />
Gdy pisałem ten artykuł, były to<br />
pliki software-suspend-linux-2.6.2-<br />
rev1-whole.bz2 oraz software-suspendcore-2.0-whole.bz2.<br />
Pierwszy z tych<br />
plików zawiera zmiany specyficzne<br />
dla konkretnej wersji jądra, dlatego<br />
jego nowsze wersje pojawiają się częściej<br />
(choć z pewnym opóźnieniem<br />
w stosunku do samych jąder), drugi<br />
zaś jest uaktualniany rzadziej. Ściągamy<br />
również jądro w tej samej<br />
wersji, którą oznaczona jest pierwsza<br />
z łatek – w tym przypadku 2.6.2.<br />
Instalacja dla jąder z serii 2.4.x wygląda<br />
analogicznie.<br />
• Rozpakowujemy łatki (bunzip2 [nazwa<br />
pliku]) oraz jądro (tar jxfvp linux-<br />
Rysunek 4. W jądrach z serii 2.4.x również znajdziemy obsługę APM oraz ACPI<br />
www.lpmagazine.org<br />
53
sprzęt<br />
Konfiguracja źródeł jądra<br />
Ten etap wielu użytkownikom wydaje się<br />
skomplikowany, choć wcale nie musi taki<br />
być. Konfigurację w praktyce przeprowadzamy<br />
przechodząc do katalogu /usr/src/<br />
linux i wydając jedno z poniższych poleceń:<br />
• make menuconfig - ukaże się nam tekstowe<br />
menu, które do działania wymaga<br />
bibliotek Ncurses (również pakietów<br />
–dev(el)). Jeśli po wydaniu tego polecenia<br />
zobaczymy błąd, musimy doinstalować<br />
te biblioteki z płyty z naszą dystrybucją.<br />
Ta metoda nie wymaga X Window<br />
i możemy ją przeprowadzać również<br />
zdalnie, np. przez ssh.<br />
• make xconfig - ukaże się nam menu<br />
w okienkach X Window. Ta metoda<br />
wymaga zainstalowanych bibliotek<br />
Tcl/Tk (w przypadku jąder 2.4.x) lub<br />
QT (w przypadku jąder 2.6.x). Aby<br />
okienka mogły pojawić się na ekranie<br />
w niektórych dystrybucjach, konieczne<br />
jest wcześniejsze wydanie komendy<br />
xhost + z konta tego użytkownika,<br />
który pracuje w X Window.<br />
• make bconfig - działa tylko w jądrach<br />
z serii 2.6.x i wymaga bibliotek<br />
GNOME.<br />
Niezależnie od tego, który z tych interfejsów<br />
uruchomiliśmy, przy rozpoczęciu swojej<br />
pracy przeczyta on ustawienia zapisane<br />
w pliku o nazwie /usr/src/linux/.config. Dobrze<br />
jest, jeśli plik .config pochodzi z pakietu<br />
z naszej dystrybucji, gdyż wtedy wiadomo na<br />
pewno, że zawiera on prawidłowe ustawienia.<br />
W takim przypadku możemy po uruchomieniu<br />
np. make xconfig skoncentrować<br />
się na wykonaniu tylko tych zmian w konfiguracji<br />
jądra, które są nam teraz potrzebne,<br />
np. włączenia obsługi ACPI.<br />
2.6.2.tar.bz2) i nakładamy łatki.<br />
Ważne, aby w pierwszej kolejności<br />
nałożyć łatkę specyficzną dla wersji<br />
jądra: cd linux-2.6.2; patch -p1<br />
terem.<br />
/proc/acpi/alarm,<br />
aby spowodować obudzenie się komputera<br />
1 maja tego roku, o godzinie trzynastej<br />
jeden. Budzenie powinno działać<br />
z trybów S1, S2 i S3.<br />
Problemy z zaśnięciem<br />
Najtrudniejszym do uzyskania trybem<br />
"uśpienia" komputera jest S3, czyli "Suspend<br />
to RAM". Równocześnie, zwłaszcza<br />
dla posiadaczy komputerów przenośnych,<br />
jest to tryb najbardziej pożądany,<br />
gdyż oferuje on najszybsze<br />
"uśpienie" i przywrócenie systemu.<br />
Dodatkowo, w przypadku "Suspend<br />
to RAM" komputer do zaśnięcia<br />
nie potrzebuje dodatkowej energii,<br />
Kompilacja jądra<br />
To zadanie jest przeznaczone bardziej<br />
dla naszego procesora niż dla nas.<br />
W przypadku jąder z serii 2.4.x wystarczy<br />
polecenie make bzImage (wielkość<br />
liter ma znaczenie!), a po zakończeniu<br />
jego działania – polecenie make modules.<br />
W jądrach z serii 2.6.x wszystko co<br />
potrzebujemy to polecenie make, oczywiście<br />
wydane w katalogu /usr/src/linux.<br />
54 czerwiec 2004
acpi<br />
sprzęt<br />
APM oraz ACPI<br />
Zaawansowane zarządzanie energią,<br />
czyli Advanced Power Management<br />
(APM), to starsza technologia, obecnie<br />
sukcesywnie wypierana przez Advanced<br />
Configuration and Power Interface<br />
(ACPI). APM służyło do oszczędzania<br />
energii elektrycznej przy pomocy szeregu<br />
różnych technik realizowanych na<br />
poziomie sprzętowym, bez udziału systemu<br />
operacyjnego. ACPI działa głównie<br />
na poziomie systemu operacyjnego,<br />
dzięki czemu nie tylko nie dotyczą<br />
go ograniczenia pamięci BIOS-u, ale<br />
również możliwe jest bardziej inteligentne<br />
i uniwersalne zarządzanie energią,<br />
np. aplikacja wyświetlająca prezentację<br />
może przekazać sprzętowi informację,<br />
iż monitor jest potrzebny i nie należy<br />
go wyłączać, czy też system operacyjny<br />
może zdecydować, iż procesor w danym<br />
momencie może zostać spowolniony.<br />
W jądrach Linuksa w serii 2.4.x, jak<br />
i 2.6.x, znajdziemy wsparcie zarówno dla<br />
APM, jak i ACPI. Należy jednak pamiętać,<br />
że te dwa systemy wykluczają się<br />
wzajemnie – w danej chwili możemy<br />
używać tylko jednego z nich.<br />
która w przypadku "Suspend to disk"<br />
jest niezbędna dla nagrania pamięci<br />
na twardy dysk. Ilość pobieranego prądu<br />
w czasie przebywania komputera w „S3”<br />
jest naprawdę znikoma – naładowana<br />
bateria powinna wystarczyć na kilkudniowy<br />
sen.<br />
Nie ma uniwersalnego przepisu gwarantującego<br />
udane przejście z i do trybu<br />
S3 na każdym komputerze. Jeśli bardzo<br />
zależy nam na działaniu tego trybu,<br />
możemy spróbować postąpić w następujący<br />
sposób:<br />
• Wyłączamy wszystkie usługi (demony),<br />
najlepiej przechodząc do "single<br />
mode" poleceniem init 1. Potem odłączamy<br />
zewnętrzny sprzęt i usuwamy<br />
tak wiele modułów jądra, jak to tylko<br />
możliwe. Listę załadowanych modułów<br />
uzyskamy poleceniem lsmod.<br />
Jako pierwsze powinniśmy usuwać<br />
te, które w trzeciej kolumnie raportu<br />
lsmod mają "0", czyli nie są używane<br />
przez inne moduły. Poszczególne<br />
moduły możemy usunąć komendą<br />
modprobe -r [nazwa modułu].<br />
• Próbujemy uśpić system poleceniem<br />
echo -n mem > /sys/power/state<br />
lub echo 3 >/proc/acpi/sleep. Jeśli<br />
żadna z metod nie zadziała, próbujemy<br />
zmieniać ustawienia BIOS-u komputera.<br />
Płyty główne posiadają często<br />
bardzo dziwne opcje dotyczące zarządzania<br />
energią – może okazać się, że to<br />
jest przyczyną problemu. Jeśli nic nie<br />
pomaga, pozostaje nam tylko czekać<br />
na nowe wersje jądra Linuksa – być<br />
może one przyniosą poprawki umożliwiające<br />
działanie "Suspend to RAM".<br />
• Jeśli któraś z powyższych metod prawidłowo<br />
"uśpiła" i przebudziła nasz<br />
komputer, ładujemy kolejne moduły<br />
jądra, uruchamiamy kolejne demony<br />
za każdym razem próbując ponownie<br />
"uśpić" i przebudzić nasz komputer,<br />
aż znajdziemy program lub<br />
sprzęt powodujący problemy. Na<br />
samym końcu próbujemy wykonać<br />
operację usypiania z działającym<br />
systemem X Window. Gdy znajdziemy<br />
feralny problem lub moduł jądra,<br />
możemy napisać sobie skrypt, który<br />
go usunie/wyłączy przed "uśpieniem"<br />
systemu. Bardzo prosty przykład<br />
zamieszczono na Listingu 1.<br />
Skrypt ten usunie moduły jądra<br />
odpowiedzialne za USB, ale po przywróceniu<br />
systemu załaduje je ponownie.<br />
W przypadku problemów z trybem "Suspend<br />
to disk", zarówno gdy korzystamy<br />
z pierwszej metody(Swsusp), jak i drugiej<br />
(Pmdisk), możemy postępować podobnie<br />
jak przy problemach z "Suspend<br />
to RAM". Polecam jednak wypróbowanie<br />
rozwiązania Swsusp2, gdyż jest szybsze<br />
i oferuje znacznie większe możliwości.<br />
Powinno ono również zadziałać<br />
sprawnie na większej gamie sprzętu.<br />
Nie oznacza to oczywiście, że zawsze<br />
funkcjonuje bez problemów. Spośród<br />
najczęstszych problemów trzeba wymienić:<br />
• Jeśli posiadamy kartę graficzną<br />
firmy NVidia, w pliku /etc/<br />
suspend.conf powinniśmy mieć linię<br />
Tabela 1. Porównanie metod „usypiania” Linuksa<br />
swsusp pmdisk swsusp2<br />
Dostępność w jądrze 2.6.x w jądrze 2.6.x łaty na jądra 2.4.x oraz 2.6.x<br />
Aktywacja echo 4 > /proc/acpi/sleep echo -n disk > /sys/power/<br />
state<br />
/usr/local/sbin/hibernate lub<br />
echo > /proc/swsusp/activate<br />
Dezaktywacja noresume pmdisk=off noresume2<br />
Potrzebny argument resume=/dev/hda# pmdisk=/dev/hda# resume2=swap:/dev/hda#<br />
uruchomienia jądra<br />
Wymagania konfiguracji swap<br />
swap<br />
swap<br />
jądra<br />
ACPI<br />
Zalety<br />
+dobrze przetestowane,<br />
standardowe rozwiązanie<br />
+dostępność w standardowym<br />
jądrze<br />
+nowa, wydaje się lepsza,<br />
implementacja<br />
+dostępność<br />
w standardowym jądrze<br />
+szybkie działanie<br />
+znacznie większe możliwości konfiguracyjne<br />
+najlepsza dokumentacja<br />
+wsparcie dla kompresji<br />
+ambitne plany rozwojowe<br />
+najszybsze działanie<br />
Wady<br />
- wymaga ACPI<br />
- relatywnie wolne działanie<br />
- nowe, krótko testowane<br />
rozwiązanie<br />
- służy wyłącznie do suspend to disk<br />
- wymaga nakładania łatek na jądra, które<br />
nie nadążają za nowymi wersjami<br />
www.lpmagazine.org<br />
55
sprzęt<br />
Instalacja jądra<br />
Najpierw instalujemy moduły jądra poleceniem<br />
make modules_install. Zostanie<br />
wtedy utworzony katalog /lib/modules/<br />
[wersja_jądra], np. /lib/modules/2.4.26,<br />
w którym zostaną umieszczone w kilku<br />
podkatalogach wszystkie moduły. Jeśli<br />
kompilujemy jądro w takiej samej wersji,<br />
jak obecnie używane w systemie, katalog<br />
ten już istnienie w systemie, a to niedobrze<br />
– powinniśmy w takiej sytuacji<br />
najpierw usunąć go albo lepiej zmienić<br />
jego nazwę, np. na 2.4.26-bak,<br />
a dopiero po tym wykonać make modules_install.<br />
Jądro po kompilacji znajdziemy<br />
w pliku /usr/src/linux/arch/i386/boot/<br />
bzImage. Plik ten powinniśmy skopiować<br />
do katalogu /boot/. Możemy przy<br />
okazji nadać mu nową nazwę, zwłaszcza<br />
jeśli w katalogu /boot/ jest już plik<br />
bzImage.<br />
Teraz przyszedł czas na najtrudniejszy<br />
element, czyli konfigurację LILO lub<br />
GRUB-a. Jeśli nasza dystrybucja używa<br />
LILO, znajdziemy w niej plik /etc/lilo.conf.<br />
W tym pliku musimy odnaleźć sekcję<br />
odpowiedzialną na uruchamianie naszego<br />
Linuksa. Poszczególne sekcje zaczynają<br />
się od linii image=[plik_ jądra]. Skopiujmy<br />
w tym pliku całą tą sekcję (tak<br />
trudniej o pomyłkę) i w skopiowanym<br />
S W S U SP_ L E AV E _ X _ BE F OR E _<br />
SUSPEND="nvidia" (zamiast "nvidia"<br />
domyślnie jest "no"). W ten sposób<br />
unikniemy problemu ze "znikającą"<br />
akceleracją 3D po obudzeniu komputera.<br />
• W przypadku Debiana czasem musimy<br />
zmodyfikować /etc/suspend.conf usuwając<br />
umountnfs.sh z listy usług uruchamianych<br />
przed i po hibernacji systemu.<br />
• Swsup2 nie wyłączy całkowicie komputera,<br />
jeśli jądro nie ma wkompilowanego<br />
ACPI lub APM. W tym przypadku,<br />
po zakończeniu procesu "usypiania",<br />
należy użyć przycisku na obudowie.<br />
fragmencie dokonajmy następujących<br />
modyfikacji:<br />
• zmieniamy argument w linii image= na<br />
właściwy dla pliku z naszym jądrem,<br />
np. image=/boot/bzImage;<br />
• usuwamy linię initrd=...;<br />
• zmieniamy argument w linii label= na<br />
jakiś inny, np. "moje_dzielo".<br />
Po zapisaniu tych zmian wydajemy z konta<br />
roota polecenie lilo. Jeśli program znajdzie<br />
jakieś błędy w /etc/lilo.conf, poinformuje<br />
o nich rzeczowo i zakończy działanie,<br />
nie uszkadzając sektora startowego.<br />
Gdy wszystko pójdzie dobrze, próbujemy<br />
zrestartować komputer, wybierając w menu<br />
LILO nowe jądro, np. "moje_dzielo". Gdy<br />
wystąpi jakiś problem z nowym jądrem,<br />
zawsze możemy uruchomić komputer<br />
ponownie, wybierając w menu LILO<br />
dotychczas używane jądro.<br />
Konfigurację GRUB-a można przeprowadzić<br />
podobnie jak w przypadku<br />
LILO. Składnia pliku /etc/grub.conf jest co<br />
prawda inna, jednak poszczególne sekcje,<br />
które tutaj zaczynają się od linii title..., również<br />
można skopiować i dokonać zmian<br />
analogicznych jak w przypadku lilo.conf.<br />
Po prostu zamiast label mamy tutaj title,<br />
a zamiast image – kernel.<br />
ne za w miarę stabilne, na wielu komputerach<br />
najlepiej może sprawdzać się starszy<br />
standard, czyli APM.<br />
Jądra Linuksa we wszystkich dystrybucjach<br />
mają obecnie domyślnie włączoną<br />
obsługę APM. Jeśli jednak konfigurujemy<br />
i kompilujemy jądro samodzielnie,<br />
w serii 2.4.x APM znajdziemy w dziale<br />
General setup pod nazwą Advanced Power<br />
Management BIOS support, zaś w serii 2.6.x<br />
w dziale Power Management support.<br />
Wszystkie dodatkowe opcje w dziale<br />
APM służą jedynie do unikania problemów<br />
przy różnym mniej kompatybilnym<br />
sprzęcie i nie musimy ich zaznaczać. APM<br />
również najlepiej jest wkompilować do<br />
jądra „na stałe”.<br />
Usypianie komputera przy pomocy<br />
APM jest o tyle prostsze, że w naszej<br />
dystrybucji powinniśmy znaleźć pakiet<br />
o nazwie apmd, a w nim programy apm<br />
oraz apmd. Przy pomocy pierwszego<br />
z nich możemy w dowolnym momencie<br />
posłać nasz komputer w stan „bez-<br />
Stary dobry APM?<br />
Opisywane powyżej rozwiązania są<br />
w mniejszym lub większym stopniu<br />
oparte na kodzie obsługującym ACPI.<br />
Chociaż działają one na szerokiej gamie<br />
sprzętu i mimo wszystko są już uznawaczynności”<br />
(standby) lub „wstrzymania”<br />
(suspend). Drugi z nich jest demonem, uruchamianym<br />
przy starcie systemu, który<br />
w momencie, gdy następują zdarzenia<br />
związane z zarządzaniem energią<br />
(np. żądanie przejścia w stan suspend lub<br />
zmiana zasilania z sieciowego na bateryjne)<br />
automatycznie wykonuje pewne<br />
akcje.<br />
Aby „uśpić” nasz komputer przy<br />
pomocy APM, możemy wykonać polecenie<br />
apm –standby lub apm –suspend. W tym<br />
momencie demon apmd zapisze stosowną<br />
informację do logów systemowych, zsynchronizuje<br />
twarde dyski, wykona polecenia<br />
zdefiniowane w skryptach w katalogu<br />
/etc/apm/ i dopiero wtedy przeprowadzi<br />
właściwą operację „usypiania”.<br />
Im starszy jest nasz sprzęt, tym większe<br />
szanse powodzenia takiej operacji.<br />
Wiele problemów przy APM sprawia<br />
system X Window, więc warto przed „usypianiem”<br />
przynajmniej przełączyć się na<br />
terminal tekstowy.<br />
Zakończenie<br />
Wstrzymywanie pracy komputera nie jest<br />
tak prostą operacją, jak mogło by się to<br />
wydawać. Biorąc to pod uwagę, nie powinno<br />
nas dziwić, że mamy w Linuksie kilka<br />
niemal całkiem niezależnych rozwiązań,<br />
realizujących to zadanie. Dzięki temu<br />
możemy samodzielnie wybrać to, które<br />
działa u nas najlepiej i jest dla nas najwygodniejsze.<br />
Jak już wspomniałem, szeroko pojęte<br />
zarządzanie energią w Linuksie rozwija<br />
się bardzo szybko. „Usypianie” komputerów<br />
to tylko jedno z wielu jego zastosowań.<br />
W następnym numerze opiszę<br />
między innymi, jak możemy skonfigurować<br />
różne zachowania komputera<br />
w przypadku naciśnięcia przycisków<br />
"Power" i "Sleep", zmieniać częstotliwość<br />
pracy procesora i wiele innych metod<br />
oszczędzania energii.<br />
W Internecie:<br />
• Battery Powered Linux Mini-HOWTO:<br />
http://www.faqs.org/docs/Linux-mini/<br />
Battery-Powered.html<br />
• Software Suspend (2) dla Linuksa:<br />
http://swsusp.sourceforge.net/<br />
• Strona domowa ACPI w Linuksie:<br />
http://acpi.sourceforge.net/<br />
• Informacje o działaniu Linuksa na<br />
notebookach wszystkich firm:<br />
http://www.tuxmobile.org/<br />
56 czerwiec 2004
dla programistów<br />
Książka teleadresowa<br />
w Mono<br />
Marek Sawerwain<br />
Na płycie CD/DVD<br />
Na płycie CD/DVD znajdują się<br />
pliki źródłowe i binarne Mono,<br />
kompletny kod omawianego programu<br />
oraz listingi z artykułu.<br />
O autorze<br />
Autor zajmuje się tworzeniem<br />
oprogramowania dla WIN32<br />
i Linuksa. Zainteresowania: teoria<br />
języków programowania oraz<br />
dobra literatura.<br />
Kontakt z autorem:<br />
autorzy@linux.com.pl.<br />
W<br />
informatyce<br />
wszelkie<br />
proroctwa, jak wiadomo,<br />
są „zabronione”.<br />
Zazwyczaj nie sprawdzają<br />
się, a jak już istotnie dojdą do<br />
skutku, to zazwyczaj na taką skalę,<br />
jakiej wcześniej nikt nie przewidywał.<br />
Jednak na polu języków programowania<br />
nie ma znaczących rewolucji. Od<br />
wielu lat najpopularniejsze języki to<br />
C/C++ czy Pascal (szczególnie w wydaniu<br />
Delphi/Kylix). Wspomnieć należy<br />
inne znane języki należące do kanonu,<br />
takie jak Prolog czy Scheme/Lisp, ale<br />
mają one inne przeznaczenie. Wymienić<br />
też trzeba PHP, Perl oraz Pythona,<br />
bo także cieszą się ogromną popularnością.<br />
Do tego grona z pewnością na<br />
stałe dołączyła także Java. Reprezentuje<br />
ona sobą ważną tendencję, która<br />
już od dłuższego czasu jest popularna,<br />
a mianowicie niezależność<br />
od sprzętu uzyskana dzięki maszynie<br />
wirtualnej (innym przykładem<br />
jest Python, ale także Perl zmierza<br />
w tym kierunku). Zapewnia to znacznie<br />
lepszą przenośność programu napisanego<br />
w Javie, choć trzeba pamiętać<br />
o związanych z tym kosztach. Oferuje<br />
także niezależność od języka programowania,<br />
gdyż ostatecznie można napisać<br />
kompilator innego języka działającego<br />
w ramach określonej maszyny wirtualnej.<br />
Wydaje się, że właśnie niezależność<br />
od sprzętu uzyskiwana po pierwsze<br />
przez maszynę wirtualną oraz niezwykle<br />
bogata biblioteka funkcji/procedur<br />
i obiektów, stanowiąca całą platformę<br />
programową, będzie decydować<br />
o popularności języka. Na tym polu<br />
obecnie mamy dwóch konkurentów:<br />
język Java od Suna oraz język C# (ang.<br />
C-Sharp, czyli w wolnym tłumaczeniu<br />
ostre C) wraz z platformą .NET firmy<br />
Microsoft. Firma Sun po dość długim<br />
czasie ostatecznie zadbała o implementację<br />
swojego języka dla Linuksa, ale<br />
oczekiwanie tego samego od autora C#<br />
i platformy .NET jest, jak każdy się domyśla,<br />
bezcelowe. Pomimo tego Microsoft<br />
zabiegał o ustalenie standardu języka<br />
i platformy, aby mógł stanowić konkurencję<br />
dla Javy. Umożliwiło to powołanie<br />
do życia projektów Open Source,<br />
które maja zapewnić dostarczenie<br />
odpowiednich narzędzi do platformy<br />
.NET oraz języka C#. I tak się stało – istnieją<br />
dwa główne projekty związane<br />
z platformą .NET: Mono oraz DotGNU.<br />
Autorzy pierwszego z nich postawili<br />
sobie za cel stworzenie narzędzi dla<br />
programistów, czyli kompilatora oraz<br />
niezbędny pakiet bibliotek. Autorzy<br />
drugiego projektu chcą dostarczyć całą<br />
kompletną platformę.<br />
W tym artykule zajmiemy się projektem<br />
Mono. Jednym ze sposobów<br />
poznania nowego języka czy platformy<br />
jest napisanie w nim jakiegoś większego<br />
programu. Mono, choć jest młodym<br />
projektem, oferuje już wsparcie<br />
Listing 1. Przysłowiowe „Hello World!”<br />
w C#<br />
using System;<br />
class Example1 {<br />
}<br />
static void Main() {<br />
Console.WriteLine("Hello S<br />
}<br />
World!\n");<br />
58 czerwiec 2004
mono<br />
dla programistów<br />
Kompilacja oraz instalacja<br />
środowiska Mono<br />
Głównymi autorami środowiska Mono<br />
oraz kompilatora są autorzy środowiska<br />
GNOME, dlatego Mono w przypadku<br />
kompilacji wymaga obecności pakietu<br />
pkg-config. Jednak sama kompilacja<br />
i instalacja jest podobna do wielu innych<br />
projektów na licencji GNU, gdzie znajdują<br />
się skrypty Automake i Autoconf, czyli<br />
zamyka się w trzech poleceniach:<br />
./configure –prefix=/opt<br />
make<br />
make install<br />
Rysunek 1. Przeglądarka dokumentacji środowiska Mono<br />
dla baz danych. Wykorzystamy tę<br />
możliwość i program, który zostanie<br />
przedstawiony w tym artykule,<br />
będzie nieskomplikowaną bazą danych<br />
zawierającą spis naszych znajomych,<br />
czyli coś w rodzaju książki telefonicznej.<br />
Coś małego na rozgrzewkę<br />
Nie znajdziemy gotowych pakietów<br />
z Mono w popularnych dystrybucjach<br />
Linuksa. Powód jest prozaiczny – Mono<br />
ciągle znajduje się w fazie rozwoju<br />
i choć można już pisać większe aplikacje,<br />
to aktualna wersja (0.31) wskazuje,<br />
że do „magicznej” wersji 1.0 daleka<br />
droga. Z tego powodu najlepszym<br />
wyborem jest kompilacja ze źródeł,<br />
choć na stronie projektu znajdują<br />
się binaria dla kilku dystrybucji.<br />
Kilka informacji o tym, w jaki sposób<br />
dokonać kompilacji, zawiera ramka<br />
Kompilacja oraz instalacja środowiska<br />
Mono.<br />
Gdy już dysponujemy działającym<br />
środowiskiem Mono, możemy pisać aplikacje.<br />
Listing 1 zawiera przykład programu<br />
wyświetlającego komunikat na<br />
konsoli. Język C# jest wręcz bliźniaczo<br />
podobny do Javy czy do C++, więc każdy<br />
kto zna jeden z tych języków, może<br />
natychmiast rozpocząć tworzenie większych<br />
programów.<br />
Dla osób, które po raz pierwszy<br />
widzą program w C#, zamieszczam<br />
kilka słów komentarza.<br />
Na samym początku za pomocą<br />
słowa using dołączamy definicje używanych<br />
przez nas dodatkowych klas<br />
czy funkcji. Moduł System zawiera<br />
klasy odpowiadające funkcjonalności<br />
klas czy funkcji pochodzących<br />
z plików nagłówkowych stdio.h czy<br />
iostream.h.<br />
Definicja klasy zawiera tylko jedną<br />
metodę Main i koniecznie musi ona zostać<br />
poprzedzona słowem static. Metoda ta<br />
zostaje wywołana jako pierwsza w naszej<br />
aplikacji, czyli jest to odpowiednik funkcji<br />
main z języków C/C++.<br />
Aby wyświetlić komunikat, stosujemy<br />
metodę WriteLine. Metoda ta wyświetla<br />
jedną linię tekstu, po czym przechodzi<br />
na początek następnej linii konsoli.<br />
Po przygotowaniu pliku źródłowego<br />
(jego nazwa jest dowolna, ale stosujemy<br />
rozszerzenie .cs), dokonujemy kompilacji:<br />
mcs Example1.cs<br />
Wynikiem będzie program w postaci<br />
pliku binarnego, ale w formacie EXE,<br />
dokładnie takim samym jak w przypadku<br />
platformy WIN32. Ów „exek” posiada<br />
w sobie „zaszyty” kod pośredni,<br />
ale ponieważ nie jest to plik w formacie<br />
ELF, więc nie jest możliwe jego bezpośrednie<br />
uruchomienie przez Linuksa.<br />
Korzystamy z dodatkowego programu o<br />
nazwie mono:<br />
mono Example1.exe<br />
Nasz program korzysta z bibliotek GTK+,<br />
więc musimy mieć je zainstalowane<br />
w systemie. Może to być wersji 2.2.x<br />
lub najnowsza 2.4.x. Ogólnie kolejność<br />
kompilacji jest następująca: jako pierwszy<br />
kompilujemy specjalny pakiet ICU,<br />
czyli „International Components for Unicode”.<br />
Choć ten pakiet nie jest niezbędny,<br />
to jego obecność jest rekomendowana<br />
przez autorów Mono. Następnie<br />
sam pakiet Mono, po nim kompilator<br />
oraz klasy, czyli pakiet MCS. Po tych<br />
dwóch pakietach mamy już gotowe środowisko<br />
do pracy, jednak ciągle nie są<br />
dostępne widgety GTK+, więc należy<br />
skompilować pakiet Gtk-Sharp. Z punktu<br />
widzenia naszej aplikacji, najważniejsze<br />
biblioteki, do których musimy posiadać<br />
dostęp, to GTK+ oraz LibGlade. Nie jest<br />
nam potrzebne wsparcie dla GNOME<br />
oraz GNOME-DB. Ten ostatni pakiet to<br />
tandem dwóch bibliotek, stanowiący uniwersalny<br />
system dostępu do baz danych<br />
w GNOME, który niestety ciągle nie jest<br />
dopracowany, więc dlatego nie został<br />
użyty w naszej aplikacji. Z pewnością<br />
w przyszłości temat GNOME-DB na<br />
łamach L+ zostanie poruszony. Po instalacji<br />
Gtk-Sharp szczerze polecam kompilację<br />
pakietu Monodoc, szczególnie<br />
osobom, które nie mają dostępu do Internetu.<br />
Monodoc to przeglądarka dokumentacji<br />
bibliotek Mono i oferuje wiele cennych<br />
informacji oraz przykładów stosowania<br />
poszczególnych klas. Do jej kompilacji<br />
trzeba posiadać skompilowaną<br />
Gtk-Sharp z obsługą biblioteki GtkHTML<br />
w wersji 3.0. Na koniec jeszcze<br />
jednak bardzo istotna uwaga. Do kompilacji<br />
programu osobiście stosowałem<br />
Mono i kompilator w wersji 0.31 oraz<br />
bibliotekę Gtk-Sharp w wersji 0.18. Jeśli<br />
stosujemy starsze wersje, to możemy<br />
niestety napotkać kłopoty podczas<br />
kompilacji.<br />
www.lpmagazine.org<br />
59
dla programistów<br />
Przyjmuje ona dwa argumenty: object,<br />
reprezentujący obiekt, z którego pochodzi<br />
zdarzenie, oraz EventArgs, gdzie<br />
zawarte są ewentualne dodatkowe<br />
parametry. Gtk-Sharp rozróżnia różne<br />
typy zdarzeń, dlatego w przypadku<br />
zdarzenia „deleted” posługujemy się<br />
inną klasą, a funkcja odpowiadająca<br />
na zdarzenie ma inny typ w przypadku<br />
drugiego argumentu.<br />
Inaczej przebiega kompilacja programu<br />
opartego o Gtk-Sharp. Wymaga<br />
podania nowych bibliotek, z których<br />
będzie korzystał program. Najlepiej przygotować<br />
prosty skrypt makefile, a przedstawia<br />
się on tak:<br />
all_assemblies=-r glib-sharp.dll -r S<br />
pango-sharp.dll -r atk-sharp.dll -r S<br />
Rysunek 2. Program „Spis osób” – okno przeglądania i edycji danych<br />
Listing 2. Niewielki program w GTK+,<br />
czyli etykieta plus przycisk<br />
Na ekranie zobaczymy oczywiście nasz<br />
komunikat.<br />
Można również zastosować program<br />
mint (interpreter kodu pośredniego), ale<br />
nie oferuje on tak dużej wydajności jak<br />
mono, który stosuje znacznie wydajniejszą<br />
kompilację typu JIT.<br />
GTK+, GNOME i nie tylko<br />
na ostro<br />
Obecnie Mono nie oferuje jeszcze<br />
w pełni gotowej biblioteki do obsługi<br />
aplikacji GUI, działającej np. na poziomie<br />
X Window (ciekawą alternatywą<br />
byłby system działający na poziomie<br />
podsystemu FBcon (konsoli) i istotnie<br />
obsługa FrameBuffera jest planowana<br />
przez autorów). Nie jest gotowy<br />
także system Windows.Forms. Jest to<br />
o tyle istotne, że jego obecność jest<br />
ważna dla bezpośredniego uruchamiania<br />
aplikacji pisanych na oryginalnym<br />
systemie .NET. Istnieje jednak bardzo<br />
dobra alternatywa, a jest nią pakiet<br />
Gtk-Sharp (funkcjonuje on także pod<br />
nazwą Gtk#), czyli wersja biblioteki<br />
GTK+ dla środowiska Mono oraz języka<br />
C#. Pakiet Gtk-Sharp nie ogranicza się<br />
tylko do biblioteki GTK+, ale daje nam<br />
możliwość tworzenia aplikacji dla środowiska<br />
GNOME. Musimy jednak pamiętać<br />
o jednym ważnym szczególe, jeśli planujemy<br />
uruchamiania naszego programu<br />
na platformie WIN32. Biblioteka GTK+<br />
nie sprawia kłopotów pod Windowsami,<br />
ale funkcje GNOME jak dotychczas<br />
nie doczekały się przeniesienia do tego<br />
systemu. Dlatego w naszym programie<br />
zakładamy, że będzie on korzystał tylko<br />
i wyłącznie z funkcji GTK+.<br />
Programy pisane w C# i C przy<br />
wykorzystaniu GTK+ są bardzo do siebie<br />
podobne pomimo różnic pomiędzy<br />
językami. Listing 2 zawiera krótki program<br />
tworzący okno oraz umieszczający<br />
w nim etykietę oraz przycisk, wykorzystując<br />
przy tym pudełko – vbox.<br />
Autorzy Gtk-Sharp skorzystali<br />
z obiektowych możliwości C#, dlatego<br />
do inicjalizacji aplikacji korzystamy<br />
z obiektu Application, wywołując metodę<br />
Init. Po zbudowaniu interfejsu uruchomienie<br />
aplikacji następuje po wywołaniu<br />
linii Application.Run(). Najbardziej<br />
elegancko przedstawia się proces podłączania<br />
zdarzeń. Wykorzystujemy operator<br />
przypisania zdarzenia +=. Przypisanie<br />
funkcji, która zostanie wywołana<br />
w momencie „kliknięcia”, polega na<br />
utworzeniu nowego obiektu EventHandler:<br />
btn_ok.Clicked += new S<br />
EventHandler(On_BtnClick);<br />
Funkcja odpowiadająca na zdarzenie,<br />
czyli On_BtnClick, musi posiadać odpowiednią<br />
postać:<br />
void On_BtnClick (object o, EventArgs a) {<br />
}<br />
Application.Quit ();<br />
using System;<br />
using Gtk;<br />
using Gdk;<br />
class Example1_gtk {<br />
}<br />
static Gtk.Window win = null;<br />
public static void Main(){<br />
}<br />
Application.Init ();<br />
win = new Gtk.Window S<br />
("Pierwszy program!");<br />
win.SetDefaultSize (200, 100);<br />
VBox box = new VBox (false,0);<br />
win.Add (box);<br />
box.Add (new Label("Witaj S<br />
Swiecie!!!"));<br />
Button btn_ok = new Button S<br />
(Stock.Ok);<br />
btn_ok.Clicked += new S<br />
EventHandler(On_BtnClick);<br />
box.Add ( btn_ok );<br />
win.DeleteEvent += new S<br />
DeleteEventHandler (On_Delete);<br />
win.ShowAll ();<br />
Application.Run ();<br />
static void On_Delete S<br />
(object o, DeleteEventArgs a){<br />
}<br />
Application.Quit ();<br />
a.RetVal = true;<br />
static void On_BtnClick S<br />
(object o, EventArgs a){<br />
}<br />
Application.Quit ();<br />
60 czerwiec 2004
mono<br />
dla programistów<br />
gdk-sharp.dll -r gtk-sharp.dll<br />
all:<br />
mcs $(all_assemblies) Example1_gtk.cs<br />
W zmiennej all_assemblies umieszczamy<br />
nazwy potrzebnych bibliotek poprzedzając<br />
każdą parametrem „-r”. Jak widać,<br />
mają one rozszerzenia dll, bowiem<br />
podobnie jak sam program, są to pliki<br />
o formacie zgodnym z platformą WIN32<br />
– nie są to typowe biblioteki dynamiczne<br />
o rozszerzeniu „so”. Wiele cennych informacji<br />
o różnicach oraz przykłady użycia<br />
wielu widgetów GTK+ i GNOME można<br />
odszukać w dokumentacji do Mono i<br />
Gtk-Sharp dostępnej on-line lub lokalnie<br />
dzięki programowi monodoc (Rysunek 1).<br />
Plan aplikacji<br />
Po tym wstępie (czytelnika początkującego<br />
w temacie środowiska Mono<br />
zachęcam do napisania kilku nieskomplikowanych<br />
aplikacji, takich jak<br />
choćby programu proszącego o podanie<br />
dwóch liczb i obliczającego ich sumę)<br />
możemy zastanowić się nad naszym<br />
głównym zadaniem, czyli napisaniem<br />
niewielkiej bazy danych, takiej jak na<br />
Rysunku 2.<br />
W każdym większym programie<br />
warto zastanowić się nad głównymi<br />
zdarzeniami/czynnościami, które<br />
będą występować w aplikacji. Dla naszego<br />
programu będzie ich zaledwie kilka:<br />
interfejsu. Oczywiście jest wiele innych<br />
bardziej formalnych metod prezentowania<br />
architektury, np. diagramy UML, ale<br />
nawet tak luźno podane najważniejsze<br />
zdarzenia oraz ich odniesienie do<br />
innych obiektów pozwoli szybciej napisać<br />
gotowy kod.<br />
Klasa DBOperation<br />
i tworzenie tabeli osoby<br />
Rysunek 3 pokazuje nam najważniejsze<br />
zdarzenia występujące w programie.<br />
Prawie wszystkie są związane z operacjami<br />
na danych. Łatwo wywnioskować, że<br />
zarządzanie bazą danych też warto przeanalizować.<br />
W naszej aplikacji wprowadzimy<br />
dodatkową klasę o nazwie DBOperation<br />
(umieścimy ją w tym samym<br />
pliku, co wspomnianą wcześniej klasę<br />
Simple_db). Jej metody będą realizować<br />
potrzebne czynności, takie jak dodatnie<br />
rekordu czy usunięcie rekordu o wskazanym<br />
identyfikatorze. Zadaniem naszej<br />
klasy będzie również utworzenie bazy<br />
i tabeli.<br />
W tym miejscu trzeba zastanowić<br />
się nad typem bazy danych. Wszystkie<br />
te operacje można zrealizować samodzielnie,<br />
ale lepiej skorzystać z gotowych<br />
systemów. Na potrzeby naszego programu<br />
nie potrzebujemy zbyt wyrafinowanej<br />
bazy danych, choćby dlatego, że<br />
w programie występuje tylko jedna<br />
tabela – osoby, ale korzystanie<br />
z języka SQL ułatwi nam pisanie programu.<br />
Możemy wybierać spośród kilku<br />
darmowych systemów, ale w naszej<br />
sytuacji najlepszym wyborem będzie<br />
• utworzenie nowej bazy;<br />
• otworzenie istniejącej bazy;<br />
• wpisanie (dodanie) nowych danych;<br />
• edycja danych;<br />
• szukanie;<br />
• zamknięcie programu.<br />
Pod każdą z tych czynności mogą kryć<br />
się następne zdarzenia, np. w edycji<br />
danych możemy usunąć rekord, uaktualnić<br />
i w końcu również zamknąć okno,<br />
przez które dokonujemy tych operacji.<br />
Wymienione powyżej są jednak najważniejsze.<br />
Na etapie planowania programu<br />
warto postarać się przygotować diagram,<br />
na którym wymienione zdarzenia będą<br />
powiązane między sobą. Diagram dla<br />
prostej bazy danych został przedstawiony<br />
na Rysunku 3.<br />
Z diagramu wynika, że mamy cztery<br />
główne okna, jednak juz teraz zakładamy,<br />
że napiszemy program, gdzie w<br />
klasie o nazwie Simple_db umieścimy<br />
wszystkie elementy związane z obsługą<br />
Rysunek 3. Schemat zdarzeń w programie „Spis osób”<br />
www.lpmagazine.org<br />
61
dla programistów<br />
Listing 3. Polecenie SQL tworzące<br />
tabelę osoby<br />
create table osoby (<br />
id integer primary key,<br />
imie char(20),<br />
nazwisko char(20),<br />
nr_domu char(5),<br />
nr_mieszkania char(5),<br />
ulica char(25),<br />
dzien_ur integer,<br />
miesiac_ur integer,<br />
rok_ur integer,<br />
telefon_st char(20),<br />
telefon_kom char(20),<br />
uwagi text);<br />
baza Sqlite, która oferuje dostęp do<br />
dużego podzbioru języka SQL, co<br />
znacznie ułatwi nam przygotowanie<br />
odpowiednich zapytań do bazy. Sqlite<br />
posiada jeszcze jedną ważną zaletę<br />
– nie wymaga oddzielnego serwera<br />
danych. Wszystkie tabele są zgromadzone<br />
zawsze w jednym pliku. Dodatkową<br />
zaletą jest fakt, że środowisko Mono<br />
ma gotowe klasy do obsługi tego systemu,<br />
więc nic nie trzeba dodatkowo kompilować<br />
oprócz naturalnie samej bazy.<br />
Tabela 1 zawiera spis metod, które<br />
zawiera klasa. W artykule zwrócimy<br />
szczególną uwagę na to, jak tworzymy<br />
nową bazę danych. Gdy użytkownik<br />
„kliknie” na przycisk „Nowa baza<br />
danych”, to po podaniu nazwy, kod<br />
wykonujący tę operację zamyka się<br />
w czterech liniach:<br />
DBOperation db=new DBOperation();<br />
db.OpenLink();<br />
db.CreateDB(db_file_name);<br />
db.CloseLink();<br />
Metody OpenLink oraz CloseLink w przypadku<br />
bazy Sqlite nie mają typowego<br />
znaczenia, bo w zamierzeniu mają one<br />
odpowiednio: nawiązywać połączenie<br />
z serwerem i je zamykać (Sqlite jest<br />
systemem osadzonym). Cały proces<br />
tworzenia bazy i tabeli zawiera metoda<br />
CreateDB. Zmienna db_file_name to naturalnie<br />
nazwa pliku reprezentującego bazę<br />
danych.<br />
Postać naszej tabeli określa Listing 3.<br />
Jest to nieskomplikowana tabela. Sqlite<br />
oferuje nam jedną cenną właściwość<br />
– jeśli pole posiada nazwę id oraz jego<br />
typ to liczba całkowita oraz dodatkowo<br />
stanowi klucz główny, to takie pole<br />
jest automatycznie numerowane przez<br />
system Sqlite.<br />
Wykonanie jakiejkolwiek operacji na<br />
bazie danych sprowadza się utworzenia<br />
zapytania w SQL i przesłania go do bazy<br />
danych. Proces ten rozpoczynamy od<br />
utworzenia połączenia:<br />
SqliteConnection dbcon=new S<br />
SqliteConnection();<br />
Następnie określamy parametry połączenia<br />
(w naszym przypadku będzie to tylko<br />
ścieżka do pliku z danymi) i nakazujemy<br />
połączenie się z bazą:<br />
dbcon.ConnectionString=”URI=file: S<br />
dbcon.Open();<br />
~/moje_dane.db”;<br />
Jeśli plik nie istnieje, to zostanie utworzony<br />
samoczynnie przez system Sqlite.<br />
Powinniśmy zadbać o obsługę błędów,<br />
jednak jeśli ją pominiemy, to jakikolwiek<br />
błąd będzie generował wyjątek.<br />
Gdy nie przechwycimy wyjątku, to<br />
w efekcie doprowadzi to do zakończenia<br />
pracy programu. I jest to zadanie<br />
dla Czytelnika, aby rozszerzyć program<br />
o poprawną obsługę błędów.<br />
Zakładamy optymistycznie, że błędów<br />
nie będzie, więc możemy w tym miejscu<br />
wykonywać różne operacje na<br />
danych, pamiętając naturalnie, że trzeba<br />
zamknąć połączenie: dbcon.Close();.<br />
Wykonanie zapytania tworzącego<br />
tabelę (Listing 4) polega na utworzeniu<br />
obiektu SqliteCommand wskazania<br />
połączenia (własność Connection) oraz<br />
podania treści zapytania SQL we własności<br />
CommandText. Wykonanie zapytania<br />
zależy od jego typu, bowiem uogólniając,<br />
istnieją dwa podstawowe rodzaje<br />
zapytań. Pierwszy rodzaj daje nam<br />
w wyniku rekordy zawierające jakieś<br />
dane, np. może to być wynik zapytania,<br />
w którym poszukujemy osób, które urodziły<br />
się w określonym miesiącu, choć<br />
wynik zapytania może być pusty. Drugi<br />
typ zapytań (czy raczej poleceń, bo nie<br />
są to już typowe zapytania) nigdy nie<br />
generuje nowych danych i create table<br />
jest przykładem takiego polecenia. Ten<br />
rodzaj poleceń wykonujemy wywołując<br />
metodę ExecuteNonQuery().<br />
W bardzo podobny sposób, jak na<br />
Listingu 4, postępujemy w przypadku<br />
metod: InsertData, UpdateData, Delete-<br />
Record, zmieniając oczywiście treść polecenia<br />
w języku SQL.<br />
Szukanie osób<br />
Wyszukiwanie danych w języku SQL to<br />
domena polecenia select. Jego wynikiem<br />
mogą być rekordy zawierające<br />
poszukiwane przez nas dane. Metody<br />
szukające danych według Tabeli 1 to:<br />
GetOtherData, GetBasicData, Search-<br />
Nazwisko, SearchTelefonSt, Search-<br />
TelefonKom. Wszystkie te metody są<br />
do siebie dość podobne, więc<br />
przedstawię tylko jedną: SearchNazwisko,<br />
odpowiedzialną za szukanie osób<br />
po nazwisku.<br />
Kod źródłowy metody Search-<br />
Nazwisko zawiera Listing 5, który<br />
został skrócony tylko w jednym miejscu.<br />
Zadaniem kodu jest wykonanie<br />
zapytania typu select i odszukanie<br />
osób, których nazwiska są podobne<br />
do nazwiska podanego w argumencie<br />
metody. Z tego powodu w warunku<br />
where mamy słowo kluczowe<br />
like. Odszukany rekord bądź<br />
rekordy zostaną wpisane do obiektu<br />
TreeStore, czyli do zbioru danych<br />
wyświetlanych przez komponent Gtk-<br />
TreeView.<br />
Utworzenie zapytania, podobnie<br />
jak w poprzednim przypadku, gdzie<br />
tworzyliśmy tabelę, rozpoczynamy od<br />
utworzenia obiektu typu SqliteCommand.<br />
Ustalamy połączenie oraz treść<br />
zapytania. Wykonanie zapytania typu<br />
select wymaga utworzenia dodatkowego<br />
obiektu o typie SqliteDataReader.<br />
Następnie wykonujemy zapytanie<br />
wywołując metodę ExecuteReader.<br />
Wyniki działania metody umieszczamy<br />
w utworzonym obiekcie, czyli w zmiennej<br />
reader:<br />
Listing 4. Kod tworzący tabelę osoby<br />
SqliteCommand dbcmd = new S<br />
SqliteCommand();<br />
dbcmd.Connection = dbcon;<br />
dbcmd.CommandText = "create tableS<br />
osoby ("+"id integer primary key,"S<br />
+"imie char(20)," + ...<br />
// dalsza treść polecenia S<br />
tworzącego tabelę<br />
dbcmd.ExecuteNonQuery();<br />
dbcmd.Dispose();<br />
62 czerwiec 2004
mono<br />
dla programistów<br />
SqliteDataReader reader;<br />
reader = dbcmd.ExecuteReader();<br />
Listing 5. Metoda szukająca osoby po podanym nazwisku<br />
Proces odczytywania uzyskanych<br />
danych jest iteracyjny, tzn. wywołujemy<br />
metodę Read obiektu typu SqliteDataReader<br />
tak długo jak zwraca<br />
ona prawdę, co oznacza, że są jeszcze<br />
rekordy do odczytania. Sam odczyt<br />
poszczególnych pól rekordu jest trywialny.<br />
Zmienną reader adresujemy<br />
tak jak tablicę. Przykładowo, pole<br />
imię zostało umieszczone pod indeksem<br />
1, więc odczytanie zawartości<br />
tego pola jest następujące: reader[1].ToString().<br />
Ogólnie, poszczególne<br />
pola są tak indeksowane,<br />
jak zostały wyszczególnione w poleceniu<br />
select. Gdy stosowany jest<br />
znak gwiazdki, to kolejność pól jest<br />
taka sama jak w poleceniu tworzącym<br />
daną tabelę. Musimy jednak zadbać<br />
o wartość null, która występuje, gdy<br />
dane pole jest puste. W takim przypadku,<br />
jak widać na Listing 5, gdy<br />
dane pole jest równe null, do zmiennej<br />
pomocniczej, np. imie, wpisujemy<br />
pusty ciąg znaków. Należy tak postępować,<br />
ponieważ ostatecznie wartości<br />
poszczególnych pól trafiają to obiektu<br />
store wywołaniem store.AppendValues,<br />
gdzie wartości null nie są dopuszczalne,<br />
a aby oznaczyć, że dane pole<br />
nie jest wypełnione, należy podać<br />
pusty ciąg znaków – "".<br />
Tworzymy interfejs<br />
użytkownika<br />
Interfejs naszej aplikacji to, jak widać na<br />
schemacie, cztery główne okna, które<br />
zawierają od kilku do kilkanastu widgetów.<br />
Z tego powodu można utworzyć<br />
ten interfejs samodzielnie z poziomu<br />
kodu. Biblioteka Gtk-Sharp oferuje<br />
jednak nie tylko widgety z biblioteki<br />
GTK+, ale również dostęp do formatek<br />
utworzonych w programie GLADE,<br />
więc interfejs utworzymy korzystając<br />
z tego narzędzia (Rysunek 4). Wszystkie<br />
widgety w oknach zostały rozmieszczone<br />
głównie za pomocą komponentu<br />
GtkFixed zamiast typowych<br />
w aplikacjach GTK/GNOME pudełek<br />
o zmiennych wymiarach. Stosowanie<br />
komponentu GtkFixed<br />
powoduje, że każdy komponent posiada<br />
swoje współrzędne i wymiary,<br />
a zmiana rozmiaru okna nie pociąga<br />
za sobą zmiany wymiarów widgetów.<br />
W końcowym efekcie cały interfejs<br />
tworzymy podobnie jak w programach<br />
Delphi/Kylix.<br />
Identycznie jak w oryginale, funkcje<br />
wczytujące formatki GLADE potrafią<br />
samodzielnie podłączyć sygnały do<br />
poszczególnych widgetów, jeśli tylko<br />
zostały one zadeklarowane podczas<br />
tworzenia interfejsu. Z tego powodu<br />
warto w GLADE do poszczególnych<br />
przycisków zdefiniować funkcje obsługi.<br />
Jeśli na formatce głównej o nazwie<br />
mainwin znajduje się przycisk, którego<br />
zadaniem jest zamknięcie okna<br />
i efekcie całego programu oraz posiada<br />
on podłączony sygnał do funkcji<br />
o nazwie on_Btn_CloseApp_clicked,<br />
to jeśli w klasie, która załaduje formatkę,<br />
znajduje się metoda o takiej samej<br />
nazwie, zostanie ona samoczynnie<br />
podłączona do obsługi zdarzenia.<br />
Dla tego konkretnego przykładu,<br />
treść metody odpowiadająca na<br />
sygnał jest bardzo krótka:<br />
public void on_Btn_CloseApp_clickedS<br />
(System.Object b, EventArgs e){<br />
Application.Quit ();<br />
}<br />
public bool SearchNazwisko(string _nazwisko, TreeStore store){<br />
}<br />
string id="", imie="", nazwisko="", nr_domu="", nr_mieszkania="",<br />
ulica="", dzien_ur="", miesiac_ur="", rok_ur="", telefon_st="",<br />
telefon_kom="";<br />
SqliteCommand dbcmd = new SqliteCommand();<br />
dbcmd.Connection = dbcon;<br />
dbcmd.CommandText = "select * from osoby " + S<br />
SqliteDataReader reader;<br />
reader = dbcmd.ExecuteReader();<br />
while(reader.Read()){<br />
}<br />
"where nazwisko like'" + _nazwisko + "%';";<br />
if(reader[0]!=null) id=reader[0].ToString(); else id="";<br />
if(reader[1]!=null) imie=reader[1].ToString(); else imie="";<br />
// pozostałe instrukcje przepisujące dane<br />
if(reader[10]!=null) telefon_kom=reader[10].ToString(); else telefon_kom="";<br />
store.AppendValues(id,<br />
imie, nazwisko, nr_domu, nr_mieszkania,<br />
ulica, dzien_ur, miesiac_ur, rok_ur,<br />
telefon_st, telefon_kom);<br />
reader.Close();<br />
dbcmd.Dispose();<br />
return true;<br />
Uogólniając, gdy mamy zdefiniowane<br />
sygnały, wystarczy odpowiednio zadeklarować<br />
metody, a podłączenie sygnałów<br />
„zrobi się samo”. Nie jest to jednak<br />
jedyne cenne ułatwienie, które oferuje<br />
nam język C# i biblioteka Gtk-Sharp.<br />
W naszym programie musimy<br />
także uzyskać referencje do poszczególnych<br />
widgetów, np. pól edycyjnych<br />
formatki „Dodaj Dane”, aby przesłać<br />
do bazy danych konkretne informacje,<br />
takie jak imię, nazwisko itd. Odwzorowanie<br />
widgetów z formatki wykorzystuje<br />
atrybuty i jest to element charakterystyczny<br />
dla języka C#, którego nie znajdziemy<br />
w C/C++. Jeśli w naszym programie<br />
zdefiniujemy np. zmienną okna w taki<br />
sposób:<br />
[Glade.Widget] Gtk.Window mainwin;<br />
to podczas operacji ładowania formatki<br />
system dzięki atrybutowi [Glade.Widget]<br />
odnajdzie obiekt reprezentujący widget o<br />
nazwie mainwin i podłączy go do naszej<br />
zmiennej. Uzyskamy w ten sposób referencję<br />
do okna głównego. W ten sposób<br />
odwzorujemy pozostałe potrzebne nam<br />
widgety.<br />
www.lpmagazine.org<br />
63
dla programistów<br />
basic_data_view.AppendColumn S<br />
("ID", new CellRendererText (), "text", 0);<br />
basic_data_view.AppendColumn S<br />
("Imie", new CellRendererText (), text",1);<br />
basic_data_view.AppendColumn S<br />
("Nazwisko", new CellRendererText(),S<br />
"text", 2);<br />
Wczytywanie formatki<br />
Uważny Czytelnik zauważył na Rysunku<br />
4, że wszystkie pięć okien (cztery podstawowe<br />
ze schematu oraz jedno dodatkowe<br />
okno dialogowe typu „About”)<br />
są zdefiniowane w pojedynczym pliku<br />
o rozszerzeniu .glade. Pozostaje problem<br />
wczytania pliku do aplikacji.<br />
Wykorzystamy tutaj tzw. assembly,<br />
czyli coś w rodzaju pliku z zasobami,<br />
które zostaną dołączone do naszego<br />
programu już podczas kompilacji.<br />
Kod ładujący formatki jest bardzo<br />
krótki:<br />
Glade.XML gmainwinxml = null;<br />
...<br />
Rysunek 4. Tworzenie interfejsu w GLADE<br />
gmainwinxml = new Glade.XML (null, S<br />
"mainwin.glade", null, null);<br />
gmainwinxml.Autoconnect(this);<br />
Pierwsza linia to utworzenie obiektu<br />
reprezentującego formatkę. Konstruktor<br />
Glade.XML posiada siedem przeciążonych<br />
wersji. Zastosowana powyżej wersja<br />
w pierwszym argumencie spodziewa<br />
się podania odniesienia do assembly.<br />
Podanie wartość null oznacza korzystanie<br />
z aktualnego assembly dostępnego<br />
dla danej klasy. Następnie podajemy<br />
identyfikator zasobu (w naszym przypadku<br />
jest on taki sam jak plik formatki).<br />
Trzeci argument to nazwa węzła,<br />
od którego chcemy utworzyć komponenty,<br />
czyli możemy w ten sposób wybierać<br />
konkretne okna. Podanie wartości null<br />
oznacza, że interesują nas wszystkie<br />
elementy zdefiniowane w pliku. Czwarty<br />
argument to nazwa dziedziny i domyślną<br />
wartością jest właśnie null.<br />
Po tych dwóch liniach mamy juz załadowane<br />
okna, podłączone sygnały oraz<br />
odwzorowane widgety. Pewną wadą Gtk-<br />
Sharp jest domyślne wyświetlanie wszystkich<br />
okien, ale możemy je ukryć wywołując<br />
metodę Hide, np. addwin.Hide();.<br />
Należy teraz dokończyć proces budowania<br />
interfejsu poprzez zdefiniowanie<br />
elementów list z okien lookwin (okno,<br />
w którym przeglądamy oraz edytujemy<br />
dane) oraz findwin (okno odpowiedzialne<br />
za wyszukiwanie danych). Dla<br />
okna lookwin, gdzie znajduje się lista<br />
o trzech kolumnach, w pierwszej kolejności<br />
określamy tzw. model danych. Polega<br />
to na utworzeniu obiektu TreeStore.<br />
W konstruktorze definiujemy typ poszczególnych<br />
kolumn dla tej listy. Upraszczając<br />
sobie zadanie, załóżmy, że każda z nich<br />
będzie zawiera ciąg znaków:<br />
basic_data_view.Model=new TreeStore<br />
(typeof (string), typeof (string), S<br />
typeof (string));<br />
Następnie nakazujemy wyświetlanie<br />
nagłówków w liście:<br />
basic_data_view.HeadersVisible = true;<br />
Pozostało tylko zdefiniować postać tych<br />
kolumn:<br />
Podobnie postępujemy dla drugiej<br />
listy DataViewFindWin, znajdującej się<br />
w oknie poszukiwania danych, ale tam<br />
mamy znacznie więcej kolumn, gdyż ta<br />
lista wyświetla również inne informacje<br />
o osobach, takie jak numer telefonu,<br />
adres itd.<br />
Cały kod związany z wczytywaniem<br />
formatki i definicją ostatecznego wyglądu<br />
okien jest zawarty w konstruktorze<br />
klasy Simple_db. Takie rozwiązanie<br />
pozwala nam na następujące zdefiniowanie<br />
metody Main, która, co trzeba pamiętać,<br />
jest statyczna, więc tak naprawdę<br />
w momencie uruchomienia naszego<br />
programu nie istnieje jeszcze obiekt<br />
o typie Simple_db. Jego utworzenie<br />
dokonuje się w Main:<br />
static public void Main(){<br />
}<br />
Application.Init();<br />
Simple_db w=new Simple_db();<br />
Application.Run();<br />
Od momentu uruchomienia pętli<br />
głównej, za sterowanie naszą aplikacją<br />
jest już odpowiedzialna biblioteka<br />
GTK+. Ostatnią niewiadomą jest sposób<br />
utworzenia assembly, które będzie<br />
zawierać dane xml naszej formatki.<br />
Dokonujemy tego poleceniem -resource<br />
w momencie kompilacji naszej<br />
aplikacji:<br />
mcs -unsafe $(all_assemblies) S<br />
Simple_db.cs -resource:mainwin.glade<br />
Utworzenie nowej bazy<br />
danych<br />
Zobaczmy, jak wygląda kod tworzenia<br />
nowej bazy, który już omawialiśmy od<br />
strony SQL. Proces ten pokazuje również<br />
Rysunek 5.<br />
Pełny kod metody zawiera Listing 6.<br />
W pierwszej kolejności zmiennej<br />
db_file_name (plik z bazą nadajemy<br />
pustą wartość danych). Następnie tworzymy<br />
nowe okno wyboru i podłączamy<br />
się pod zdarzenia dla przycisków OK<br />
i Zaniechaj. W tych zdarzeniach zmie-<br />
64 czerwiec 2004
mono<br />
dla programistów<br />
Listing 6. Obsługa sygnału dla przycisku „Nowa baza”<br />
public void on_Btn_NewDB_clicked (System.Object b, EventArgs e) {<br />
db_file_name="";<br />
FileSelection fs = new FileSelection ("Proszę podać nazwę nowej bazy:");<br />
file_sel=fs;<br />
fs.OkButton.Clicked += new EventHandler(OnFS_OkButton_Clicked);<br />
fs.CancelButton.Clicked += new EventHandler(OnFS_CancelButton_Clicked);<br />
fs.Run ();<br />
fs.Hide();<br />
Console.WriteLine("after fs.run "+db_file_name);<br />
file_sel=null;<br />
if(db_file_name!=""){<br />
DBOperation db=new DBOperation();<br />
db.OpenLink();<br />
db.CreateDB(db_file_name);<br />
db.CloseLink();<br />
}<br />
}<br />
niamy wartość zmiennej db_file_name<br />
w zależności, co wybrał użytkownik.<br />
Gdy użytkownik naszego programu<br />
wpisze nazwę nowej bazy oraz<br />
wybierze przycisk OK, to w zmiennej<br />
db_file_name znajdzie się nazwa<br />
pliku. Instrukcja if dopuści w takim<br />
przypadku do wykonania się kodu,<br />
który już omówiłem na początku tego<br />
artykułu. W każdym innym przypadku<br />
zmienna db_file_name pozostaje<br />
pusta, więc instrukcja if nie dopuści<br />
do wykonania kodu tworzącego nową<br />
bazę.<br />
Okno edycji i przeglądania<br />
danych<br />
Drugim elementem interfejsu, który<br />
chciałbym pokrótce przedstawić, jest<br />
okno edycji i przeglądania danych (lookwin).<br />
Gdy użytkownik wybierze<br />
odpowiednią opcję z menu bądź kliknie<br />
na przycisk, to zostanie wywołana<br />
metoda on_Btn_EditData_clicked.<br />
Metoda ta została przedstawiona na<br />
Listingu 7.<br />
W pierwszej kolejności sprawdzamy,<br />
czy została wybrana baza danych.<br />
Jeśli nie, to na ekranie zobaczymy<br />
komunikat o tym fakcie. Następnie<br />
wyświetlamy okno na ekranie:<br />
lookwin.Show(). Po tej czynności<br />
wykonujemy bardzo ważną czynność,<br />
a mianowicie otwieramy bazę<br />
danych i metodą GetBasicData<br />
wypełniamy listę (o trzech elementach:<br />
id, imie nazwisko) osobami,<br />
które są zapisane w bazie. Jak widać,<br />
baza po tej operacji zostaje od<br />
razu zamknięta, ale użytkownik<br />
ma już przed sobą okno edycji<br />
danych.<br />
Listing 7. Wyświetlenie okna edycji danych<br />
public void on_Btn_EditData_clicked (System.Object b, EventArgs e){<br />
if(db_file_name=="") {<br />
ShowMsg_DB_Not_Found();<br />
}<br />
else {<br />
lookwin.Show();<br />
DBOperation db=new DBOperation();<br />
db.OpenLink();<br />
db.OpenDB(db_file_name);<br />
db.GetBasicData( (TreeStore)basic_data_view.Model );<br />
db.CloseLink();<br />
}<br />
}<br />
www.lpmagazine.org<br />
65
dla programistów<br />
Tabela 1. Metody klasy DBOperation<br />
Metoda<br />
OpenLink<br />
CreateDB<br />
OpenDB<br />
CreateTable<br />
InsertData<br />
GetOtherData<br />
GetBasicData<br />
UpdateData<br />
DeleteRecord<br />
SearchNazwisko<br />
SearchTelefonSt<br />
SearchTelefonKom<br />
CloseLink<br />
Opis<br />
Z poziomu tego okna możemy<br />
przeglądać zgromadzone dane oraz<br />
nanosić poprawki. Gdy klikniemy<br />
na wiersz listy, to zostanie wywołana<br />
metoda on_basic_data_view_<br />
cursor_changed, co spowoduje, że<br />
w polach edycyjnych obok listy pojawią<br />
się pozostałe dane związane<br />
z wybraną osobą. Do uzupełnienia tych<br />
pól wykorzystujemy metodę<br />
GetOtherData, jednak wcześniej<br />
należy odczytać wartości id, imie<br />
i nazwisko z wiersza, który został<br />
wskazany.<br />
Ta operacja wymaga wbrew pozorom<br />
większej ilości kodu. Na początek tworzymy<br />
trzy zmienne:<br />
GLib.Value v0=new Glib.Value();<br />
GLib.Value v1=new Glib.Value();<br />
GLib.Value v2=new GLib.Value();<br />
Nawiązanie połączenia z bazą danych.<br />
Utworzenie nowe bazy danych (w tym tabeli osoby).<br />
Otwarcie istniejącej bazy danych.<br />
Metoda tworząca tabele osoby.<br />
Dołączenie nowego rekordu do tabeli.<br />
Odczytanie pozostałych informacji o określonej osobie,<br />
np. adresu, numeru telefonu itd.<br />
Pobranie listy imion i nazwisko (oraz numeru id) wszystkich<br />
osób w bazie.<br />
Uaktualnienie informacji o określonej osobie.<br />
Usunięcie rekordu o podanym numerze id.<br />
Odszukanie osoby (osób) o podanym nazwisku.<br />
Odszukanie osoby (osób) o podanym numerze telefonu.<br />
Odszukanie osoby (osób) o podanym numerze telefonu<br />
komórkowego.<br />
Zamknięcie połączenia z bazą danych.<br />
TreePath tp=new TreePath();<br />
TreeViewColumn tvc=new<br />
TreeViewColumn();<br />
Dzięki tym dwóm obiektom możemy<br />
skorzystać z metody GetCursor:<br />
basic_data_view.GetCursor S<br />
(out tp, out tvc);<br />
W zmiennej tp i tvc znajduje się wskazanie<br />
na konkretny wiersz komponentu<br />
basic_data_view. Proces odczytu<br />
wymaga dodatkowych zmiennych, gdyż<br />
GtkTreeView może przedstawiać również<br />
struktury drzewiaste, a nie tylko listy.<br />
Z tego powodu API tego komponentu<br />
jest „nieco” skomplikowane. Ostatecznie,<br />
aby „dobrać się” do potrzebnych danych,<br />
tworzymy iterator i wywołujemy metodę<br />
GetIter:<br />
Dane są zapisane w obiektach Glib.Value,<br />
ale bardzo prosta konwersja spowoduje,<br />
że mamy do czynienia ze zwykłymi łańcuchami<br />
znaków:<br />
id=(string)v0.Val;<br />
imie=(string)v1.Val;<br />
nazwisko=(string)v2.Val;<br />
Teraz już za pomocą GetOtherData<br />
pobieramy dodatkowe dane i przepisujemy<br />
poszczególne pola do widgetów<br />
np. dla numery domu wygląda to<br />
następująco: lk_nr_domu.Text=tmp_lk_<br />
nr_domu;.<br />
Przyszłość Mono<br />
Wydaje się, że środowisko Mono<br />
w przypadku Linuksa ma zapewnioną<br />
przyszłość. Już teraz jest to<br />
pakiet o sporych możliwościach,<br />
choćby dlatego, że oferuje dostęp do<br />
baz danych, tych darmowych, takich<br />
jak Sqlite, Mysql, Firebird, ale również<br />
i komercyjnych, takich jak Oracle czy<br />
DB2. Oferuje też bardzo dobrą<br />
wydajność oraz ułatwia przenoszenie<br />
już skompilowanego oprogramowania<br />
pomiędzy różnymi platformami,<br />
takimi jak Linux, Solaris czy<br />
Win32. Ostatecznie, ułatwia pisanie<br />
aplikacji opartych o GNOME<br />
i GTK+, bowiem zrealizowany projekt<br />
dzięki obiektom jest znacznie<br />
bardziej przejrzysty, a automatyczne<br />
zarządzanie pamięcią zwalnia<br />
nas z pilnowania operacji żmudnego<br />
usuwania widgetów.<br />
Zachęcam do zapoznania się z C#<br />
i Mono, bo z pewnością w przyszłości<br />
będą to liczące się technologie w systemie<br />
Linux.<br />
Potrzebne są nam jeszcze dwa obiekty,<br />
tzw. ścieżka i widok kolumn:<br />
Rysunek 5. Tworzenie nowej bazy<br />
w programie „Spis osób”<br />
TreeIter ti=new TreeIter();<br />
basic_data_view.Model.GetIter S<br />
(out ti, tp);<br />
Teraz już można odczytać dane<br />
z iteratora, pamiętając o tym, że są<br />
one indeksowane podobnie jak tablica<br />
od zera:<br />
basic_data_view.Model.GetValue S<br />
(ti, 0, v0);<br />
basic_data_view.Model.GetValue S<br />
(ti, 1, v1);<br />
basic_data_view.Model.GetValue S<br />
(ti, 2, v2);<br />
W Internecie:<br />
• Strona domowa projektu Mono:<br />
http://www.go-mono.org/<br />
• Polska wersja strony projektu Mono:<br />
http://www.go-mono.pl/<br />
• Strona biblioteki Gtk-Sharp:<br />
http://gtk-sharp.sourceforge.net/<br />
• Strona domowa systemy<br />
baz danych Sqlite:<br />
http://www.hwaci.com/sw/sqlite/<br />
• Strona domowa projektu ICU<br />
polecanego w kompilacji Mono:<br />
http://www-124.ibm.com/icu/<br />
66 czerwiec 2004
dla graczy<br />
Crimson Fields<br />
Piotr Truszkowski<br />
Gier strategicznych na Linuksa<br />
mamy wiele. Są to przeważnie<br />
tytuły, które wykorzystują<br />
zdobycze najnowszych<br />
technologii i wymagają do pracy<br />
ogromnych nakładów pamięci RAM<br />
i bardzo szybkich akceleratorów 3D.<br />
Co jednak mają zrobić Ci użytkownicy<br />
Linuksa, którzy nie posiadają takiego<br />
sprzętu, a chcą dobrze się bawić przy<br />
okazji wytężając swoje szare komórki?<br />
Odpowiedź jest prosta – zainstalować<br />
Crimson Fields.<br />
Omawiany tytuł należy do grona gier<br />
taktycznych. Nie cechuje go wspaniała<br />
grafika i ogromna ilość efektów specjalnych<br />
zasłaniających sens gry i ukrywających<br />
jej płytkość. Za podstawę zabawy<br />
autorzy postawili sobie tzw. „miodność”.<br />
Ci z Was, którzy grali w kultowy już cykl<br />
Battle Isle, poczują się przy Crimson Fields<br />
jak w domu. Te gry mają naprawdę wiele<br />
wspólnego, a autorzy opisywanej gry nie<br />
kryją fascynacji tym leciwym tytułem.<br />
Co więcej, Crimson Fields to niemalże<br />
dokładny klon Battle Isle. Możemy nawet<br />
wykorzystać mapy z oryginalnego tytułu.<br />
Znowu mamy do czynienia z planszą<br />
podzieloną na heksy, na której zmagają się<br />
wrogie oddziały wyposażone w pojazdy<br />
wojskowe najróżniejszego typu. Cała rozgrywka<br />
podzielona jest na tury.<br />
Gramy!<br />
Crimson Fields nie jest grą dla ludzi<br />
potrzebujących szybkiej rozgrywki. Akcja<br />
toczy się powoli – mamy dużo czasu<br />
na obmyślenie naszej strategii działania.<br />
Jeśli ktoś z Was grał w The Settlers czy<br />
wymieniony wcześniej Battle Isle, wie,<br />
o czym piszę. Wybieramy więc jedną<br />
DVD<br />
Po uruchomieniu dystrybucji Linux+ Live<br />
na pulpicie będzie dostępna pozycja do<br />
uruchomienia gry.<br />
Na płycie CD/DVD<br />
Na płycie CD/DVD znajduje się<br />
statyczny pakiet binarny z grą.<br />
Rysunek 1. Armia wroga nie jest zbyt liczna<br />
z 12 map i zaczynamy grę. Nasze zadanie<br />
będzie polegać na zniszczeniu jednostek<br />
wroga i tylko od naszej taktyki oraz<br />
przemyślenia akcji zależy, czy uda się to<br />
zadanie. A myśleć i planować będziemy<br />
musieli naprawdę sporo. Często przeciwnik<br />
dysponuje znacznie lepszym zapleczem<br />
technicznym niż my.<br />
Ogromną zaletą gry jest możliwość<br />
zapisania stanu gry. Bez tej możliwości<br />
perspektywa toczenia bitw, które mogą<br />
potrwać nawet kilka godzin, wydaje się<br />
średnio rozsądnym zajęciem nawet dla<br />
najlepszych strategów.<br />
Audio i wideo<br />
Crimson Fields nie rozpieszcza nas ani<br />
pod względem graficznym ani dźwiękowym.<br />
Można powiedzieć, że oprawa<br />
audiowizualna jest spartańska. Mimo<br />
wszystko jednak, oprawa graficzna jest<br />
czytelna i chyba właśnie o to chodzi. Gra<br />
wygląda najlepiej w średniej rozdzielczości.<br />
Wyższe rozdzielczości powodują, że<br />
rozgrywka staje się mniej czytelna i gra<br />
wyraźnie dostaje efektu „mikroskopu”<br />
– aby zauważyć jakąkolwiek jednostkę,<br />
trzeba naprawdę mocno wytężyć wzrok.<br />
Oprawę audio muszę przemilczeć, ponieważ<br />
prawie w ogóle jej nie ma. O ile<br />
spartańską grafikę można jakoś usprawiedliwić<br />
(chociażby ze względów sentymentalnych),<br />
o tyle spartańskie dźwięki<br />
z pewnością nie są tym, czego spodziewałem<br />
się po tym tytule.<br />
Podsumowanie<br />
Opisywany tytuł z pewnością zadowoli<br />
wytrawnych strategów i fanów serii Battle<br />
Isle. Jego ogromną zaletą jest... wyjątkowość.<br />
Gier tego typu na Linuksa nie ma<br />
zbyt wiele, a te, które są, Crimson Fields<br />
bije na głowę pod niemalże każdym<br />
względem. Dokładając do tego całkiem<br />
dobre AI komputerowego przeciwnika<br />
i klimat, tak rzadko obecny w ówczesnych<br />
produkcjach, można powiedzieć, że Crimson<br />
Fields jest tytułem, nad którym warto<br />
spędzić kilka dni i nocy. Czy poprowadzisz<br />
swoją armię ku chwale?<br />
W Internecie:<br />
●<br />
Strona domowa gry Crimson Fields:<br />
http://crimson.seul.org/<br />
68 czerwiec 2004
warto przeczytać<br />
aktualności<br />
piotrt@lpmagazine.org<br />
dział prowadzi: Piotr Truszkowski<br />
Serwery internetowe Red Hat Linux<br />
Autorzy: Paul G. Sery, Jay Beale<br />
Tłumaczenie: Rafał Szpoton (rozdz. 1 - 9, 19, dod. A - C), Marek Pętlicki (rozdz. 10 - 18)<br />
ISBN: 83-7361-415-X<br />
Tytuł oryginału: Red Hat Linux Internet Server<br />
Format: B5, stron: 536<br />
Data wydania: 03/2004<br />
Cena książki: 59.90 zł<br />
<br />
Hat to bez wątpienia najpopularniejsza dystrybucja Linuksa na świecie. Jest wykorzystywana zarówno<br />
na komputerach klasy desktop, jak i serwerach. Książka „Serwery internetowe Red Hat Linux” omawia<br />
w przystępny sposób aspekty wykorzystania systemu Red Hat Linux w środowisku serwerowym. W książce<br />
przeczytamy m.in. tematy związane z tworzeniem firewalla, uruchamianiem serwera WWW, DNS, poczty,<br />
FTP czy Samby. Dowiemy się również, jak stworzyć system detekcji włamań oraz jak kontrolować to wszystko,<br />
co dzieje się w naszym systemie. Książka z pewnością zadowoli początkujących administratorów sieci,<br />
jak również tych, którzy chcą szybko uruchomić przedstawione serwery bez głębszego zagłębiania się<br />
w arkana systemu.<br />
PC hardware. Almanach. Wydanie III<br />
Autor: Robert Bruce Thompson, Barbara Fritchman Thompsong<br />
Tłumaczenie: Michał Dadan (rozdz. 0 – 3, 14 – 16, 28), Zygmunt Wereszczyński (rozdz. 4 – 12),<br />
Radosław Meryk (rozdz. 13, 17 – 27)<br />
ISBN: 83-7361-342-0<br />
Tytuł oryginału: PC Hardware in a Nutshell, 3rd Edition<br />
Format: B5, stron: 1040<br />
Data wydania: 03/2004<br />
Cena książki: 99.90 zł<br />
Sprzęt komputerowy rozwija się bardzo dynamicznie. Wciąż jesteśmy wręcz zasypywani nowymi kartami<br />
graficznymi, procesorami czy płytami głównymi. Po zakupie nowego sprzętu często pojawia się pytanie, jak<br />
to podłączyć i zainstalować w systemie? Książka „PC hardware. Almanach”, wydana nakładem wydawnictwa<br />
Helion, to kompleksowe omówienie chyba wszystkich aspektów związanych z urządzeniami w komputerach<br />
PC. Co w tym jednak ciekawego dla użytkownika Linuksa? Już na okładce możemy zauważyć,<br />
że opisy dotyczą systemów Windows i Linux. Objaśniono zagadnienia związane z instalacją urządzeń na<br />
popularnych dystrybucjach Linuksa (Red Hat, Fedora, Mandrake). Gorąco polecam ten tytuł każdemu posiadaczowi<br />
komputera PC. To wspaniała biblia wiadomości, przydatna każdemu bez względu na posiadany<br />
system operacyjny.<br />
Bestsellery Merlina<br />
Lista najlepiej sprzedających się książek informatycznych<br />
w sklepie internetowym www.merlin.pl, w miesiącu kwietniu:<br />
1. J2EE. Wzorce projektowe (wydanie 2) – D. Alur, J. Crupi, D. Malks, Helion, 2004<br />
2. ABC grafiki komputerowej – R. Zimek, Ł. Oberlan, Helion, 2004<br />
3. Google dla praktyków – A. Szewczyk, Mikom, 2003<br />
4. Kompresja danych - wprowadzenie – K. Sayood, Read Me, 2002<br />
5. Delphi 7 – M. Cantu, Mikom, 2004<br />
6. Grafika 3D. Modelowanie i rendering od podstaw, Axel Spronger, 2004<br />
7. Notes Anty - hakera: Bezpieczeństwo Windows – M. O’Dea, Translator, 2004<br />
8. Praktyczny kurs Java + CD-ROM – M. Lis, Helion, 2004<br />
9. Organizacja i architektura systemu komputerowego. Projektowanie systemu a jego wydajność – W. Stallings, WNT, 2003<br />
10. ABC komputera 2004 – Z. Dec, R. Konieczny, Edition 2000, 2004<br />
www.lpmagazine.org<br />
69
Zainwestuj w siebie, zainwestuj w swojego pracownika<br />
PRENUMERATA TO NAJLEPSZY WYBÓR<br />
Z A M Ó W I E N I E<br />
Prosimy wypełnić czytelnie i przesłać faksem na numer: (22) 860 17 71 lub listownie na adres Software-Wydawnictwo Sp. z o.o.,<br />
Lewartowskiego 6, 00-190 Warszawa, e-mail: pren@software.com.pl. Przyjmujemy też zamówienia telefoniczne: (22) 860 17 67<br />
Imię i Nazwisko<br />
Stanowisko<br />
ID kontrahenta*<br />
* jeżeli jesteś już klientem firmy Software-Wydawnictwo Sp. z o.o. – wystarczy, że podasz swój numer<br />
ID kontrahenta; jeżeli nie posiadasz takiego numeru, podaj swe dane w tabeli Dane teleadresowe<br />
Upoważniam firmę Software-Wydawnictwo Sp. z o.o. do wystawienia faktury VAT bez podpisu odbiorcy<br />
Pieczęć firmy i podpis<br />
Dane teleadresowe<br />
Nazwa firmy<br />
Dokładny adres<br />
Telefon (wraz z numerem kierunkowym)<br />
Adres e-mail<br />
Faks (wraz z numerem kierunkowym)<br />
Numer NIP firmy<br />
Tytuł pisma<br />
Liczba<br />
kolejnych<br />
numerów<br />
Liczba<br />
zamawianych<br />
prenumerat<br />
Od numeru<br />
pisma<br />
lub miesiąca<br />
Opłata w zł<br />
Aurox<br />
Numery specjalne Linux+ Extra! z dystrybucją Aurox Linux<br />
4<br />
Oferta dla szkół: 99 zł<br />
Oferta standardowa: 119 zł<br />
Linux+<br />
Miesięcznik użytkowników systemów linuksowych<br />
12<br />
*<br />
Linux+ Extra!<br />
Numery specjalne z dystrybucjami Linuksa<br />
8<br />
Oferta dla prenumeratorów Linux+ lub Software 2.0: 198 zł<br />
Oferta standardowa: 232 zł<br />
Linux w szkole<br />
Kwartalnik o stosowaniu Linuksa w edukacji<br />
4 99 zł<br />
W sumie<br />
(liczba prenumerat * cena)<br />
* 180 zł – prenumerata roczna (12 numerów) Linux+ dla studentów i osób prywatnych<br />
* 250 zł – prenumerata roczna (12 numerów) Linux+ dla firm<br />
UWAGA! Nadesłanie zamówienia jest jednocześnie zobowiązaniem do zapłaty!<br />
SOFTWARE-WYDAWNICTWO SP. Z O.O.<br />
ul. Lewartowskiego 6, 00-190 Warszawa, e-mail: pren@software.com.pl