HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Alkalmazások - Music Player Daemon (MPD)

2008.04.14. 11:41 bagoj ur

A Music Player Daemon úgy gondolom, megérdemel egy külön postot; mivel egy nagyon jól átgondolt technológiáról van szó. Ahogy írtam, kliens-szerver a megvalósítás. A szerver rész a felelős a számok adatbázisának karbantartásáért és a lejátszásért; a kliens pedig a felhasználói felületet adja, és utasítja a szervert a különféle műveletekre. Ez nagy rugalmasságot tesz lehetővé, hiszen a szerver akár másik gépen is lehet, és csak egy TCP kapcsolat szükséges az irányításhoz. Példaként említhetem, hogy egy linuxos gépre rádugtuk az erősítőt+hangfalakat, és a kollégák felrakták a gépükre a klienst; majd ezután mindenki rakosgatta be a kedvenc számait a közösből. Annak, aki Windows alól dolgozott, ott volt a számtalan webes kliens, amilyet még Six is írt...

A lejátszó rész egyébként MP3, OGG, Vorbis, AAC/MP4, FLAC, WAV és Mikmod (MOD, S3M, XM, ...)  fájlokat támogat; valamint MP3 és Vorbis streameket (netrádió), sőt, az icecast segítségével maga is netrádió lehet. Nem kezel viszont borítókat és playlist fájlokat; ez utóbbiak helyett saját playlistet épít fel.

A szokásos, egylépéses telepítés (kell hozzá az universe tároló engedélyezése):
sudo apt-get install mpdAz mpd, mint már mondtam, szerver. Tehát alapértelmezetten nem szereti, ha a sima felhasználó hozzápiszkál a beállításokhoz. Én viszont - feltéve, hogy egyedül én használom a lejátszót, és a gépemen fut a szerver is, kliens is - jó, ha hozzá tudok mocskolni a konfigurációhoz. Ezért a következő jogokat meg szoktam adni magamnak (az esetek nagy százalékában nem kell; egyszer belőjük az mpd-t rootként és kész):
chown bagoj /etc/mpd.confTekintsünk is bele nagy hirtelen a konfigurációba:

# Ezt állítsuk át arra a könyvtárra, hol a zenéink vannak
# (nekem /home/bagoj/Zene):
music_directory        "/var/lib/mpd/music"

# Ez maradhat akár így is, de én valahogy ezt is
# szeretem látni a Zene könyvtár alatt:
playlist_directory      "/var/lib/mpd/playlists"

# Ezeket nem kell bántani, jó helyen vannak:
db_file                    "/var/lib/mpd/tag_cache"
log_file                   "/var/log/mpd/mpd.log"
error_file                 "/var/log/mpd/errors.log"
pid_file                   "/var/run/mpd/pid"

# Ha véletlenül ki lenne kommentezve; adjuk meg,
# mert ennek a fájlnak a segítségével tárolja két
# indítás között, hogy hol is tartott:
state_file                "/var/lib/mpd/state"

port                      "6600"
# ---------------------------------------------------------
# Idáig tartott, amit mindenképpen érdemes átírni.
# A többi opcionális, bár hasznos
# ---------------------------------------------------------

# Ugye nem akarjuk, hogy bárki belecsőrözzön a playlistbe?
# Jelszavazzuk hát le! A "t1tkos" a jelszó, a többi a jogosultság

password         "t1tkos@read,add,control,admin"

# Adhatunk alapértelmezett jogokat, amelyeket jelszó
# nélkül is el lehet érni. Ez elég biztonságos, mert
# számokat hozzáadni nem lehet, csak nézelődni

default_permissions  "read"

# A következő két sorral normalizálhatjuk a zenéinket:
replaygain         "album"  # értéke lehet track is
volume_normalization  "yes"

# Ha az Internetet http proxy-n keresztül érjük el,
http_proxy_host        "cache.isp.hu"
http_proxy_port        "8080"
http_proxy_user        "bagoj"
http_proxy_password "t1tok"

max_connections       "5" # Ha egyedül használod, ide 1 is elég!
connection_timeout   "30"

audio_output { type "shout"
name "Bagoj radioja"
host "localhost"
port "8000"
# a "mount" opció hatására a stremaet itt lehet elérni:
# http://metal.bagoj.hu/mpd.ogg
mount "/mpd.ogg"
# Ha az icecast-nak megadtunk jelszót
password "IceCast_mpd"
quality "5.0"
bitrate "64"
format "44100:16:1"
}

Nem is volt durva, igaz? Lényegében az is elég, ha megadjuk a
music_directory
-t, már akkor is működni fog a cucc.

Hogy poénkodjunk egy kicsit, próbáljuk meg kliens nélkül, kézzel irányítani
az mpd-t!bagoj@metal:~$ telnet localhost 6600
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OK MPD 0.13.0
listall
file: bagoj dicsoito himnusz.ogg
OK
add "bagoj dicsoito himnusz.ogg"
OK
play
OK
Ugye jó játék? Az utolsó OK után megszólal a zene. A leállítási parancs
kiderítése belépő szintű feladat az IQ-teszthez. :-) A teljes parancs
referencia
.

Kliensek

Jó játék, kb. 10 percig. De utána azért jobb, ha valami kliens után
nézünk...

  • Sonata - Amit Evenorbi ajánlott, az nekem is nagyon megtetszett, ezt ajánlom!
  • Pitchfork - ha nem csak a mi kliensünkön szeretnénk hallgatni, hanem emgosztanánk az élményt másokkal is. A vicces rész, hogy az MPD lehet egy gépen, a webes felület egy másikon, és ahhoz kapcsolódnak a felhasználók, ha valamit szeretnének. Egyébként pedig az mpd jól elvan magában is, ha nem zargatják... :-)

A Sonata telepítése a már szokásos apt-get paranccsal történik, a Pitchfork felrakásához feltételezek némi szakértelmet... A többi kliens leírása itt érhető el. A Sonatáról néhány képernyőkép itt.

 

2 komment

Címkék: linux zene hogyan lejátszó alkalmazások mpd music player daemon konfigurálás

Linux alkalmazások - Zene lejátszók

2008.04.13. 19:38 bagoj ur

Jó kis kitérőt tettem a csomagkezelés, a terminálban futó programok (1 2 3 4) és a kernel fordítás irányába, de most visszakanyarodnék oda, amiből eredetileg kiindultam, azaz a különféle linuxos alkalmazások taglalásába.

Erre azért volt szükség, mert régi mániám a kis késleltetéssel elinduló, azaz fürge de a főbb funkciókat már éppen tartalmazó programok után való keresgélés. A legtöbb program fejlesztése ugyanis sosem áll meg, a folyton belekerülő új funkciók nagy része pedig számomra felesleges. Majd meglátjuk, hogy a zenelejátszóknál hogyan is néz ki mindez.

Szokás szerint egy kis agymenéssel kezdem: Vannak ezek a codec-dolgok, amikről már bizonyára sokan hallottak; legfőképpen akkor, hogyha valamilyen típusú fájlt nem tudtak lejátszani. Ekkor jött a (fél)művelt hawer, hogyaszongya "tőccsed le az XY kódeket, azzal nekem minden megy". Ez persze elég gyakran inkább filmek támogatásánál fordul elő; úgyhogy erről talán kicsit később. A lényeg tehát, hogy vannak különféle média formátumok. A zenék, vagy filmek a hang- és képanyagot ezekben a bizonyos formátumokba kódolva tárolják. Ahhoz, hogy megjelenítsük vagy megszólaltassuk a gépen, ismerni kell ezeket a formátumokat, azaz dekódolni kell tudni. A kódolást és dekódolást matematikai alapokon megvalósított algoritmusok végzik - ezeket szokás codec névvel illetni. Ezek a letöltött algoritmus-gyűjtemények szépen beépülnek a programba, vagyis a program használja őket - a végeredmény szempontjából mindegy.

Node mi szükség ezekre a kódolásokra? Nem lenne elég, ha egy az egyben rögzítenénk minden képkockát, minden analóg audio anyagból átalakított bitet? Megtehetnénk. Azonban, mint tudjuk, az átlagos emberi fül érzékenysége ~20 - ~22kHz. A hibamentes digitalizáláshoz legalább kétszeres mintavételezési frekvencia szükséges (Nyquist-Shannon tétel), ezért egy másodperc alatt 44100 mérést kell elvégeznünk. Hogy az analóg jeleket ezután hogyan feleltetjük meg digitális értékeknek (kvantálás), most nem fejteném ki részletesen, mivel csak arra szeretnék rámutatni, hogy másodpercenként rengeteg mérést kell két (vagy több) csatornán elvégezni, majd ezeket a frekvencia-adatokat le kell tárolni ("az adott időpillanatban mennyit rezgett a levegő"). A helypazarlónak tartott WAV is csak az egymás után következő mérések között eltelt különbséget tárolja, nem pedig abszolút értékben a mérés eredményét, így sokkal kisebb értékeket kell tárolni. És így lesz egy percnyi hang kb. 10Mb! El lehet képzelni, hogy a 40Mb-os merevlemezek idejében miért kezdtek el azon gondolkodni, hogy hogyan lehetne hatékonyan tömöríteni a felvett hanganyagot...

És miért nem lehetett csak egy algoritmust kitalálni? Ez az üzletről szól, nem a felhasználókról: Az mpeg1 layer 3 (népszerű nevén mp3) kódoló algoritmus használatáért a Fraunhofer intézet jogdíjat kért (a dekódolóért nem), ezért fejlesztették ki az OGG/Vorbist, mivel az teljesen ingyenes, és minőségben talán jobb is. A Microsoft szeretné a saját médialejátszójához láncolni a többséget, ezért készítették el a WMA-t. És ezek csak a legelterjedtebb (veszteséges) algoritmusok... veszteségmentes például a FLAC.

Amiért süketeltem az egészről: Nem csak, hogy sokféle algoritmus van, de ezeknek sokféle megvalósítása is. A lényeg, a matematika ugyanaz, de ezt sokféleképpen le lehet programozni. Emiatt linux alatt is többféle megvalósítása van még az mp3 formátumnak is: mpg123, mad, azt hiszem a gstreamer is saját... szóval nem egyszerű az eligazodás.

Totem

Mivel lassan közismertté válik, hogy Ubuntut használok, és abban a Totem alapértelmezett, ezért kezdjük ezzel: teljesen szimpla médialejátszó, ami a Windows Media Playert utánozza (természetesen filmeket is lejátszik), és a gstreamer-re bízza a kódolást/dekódolást. Van egy playlist, véletlenszerű és/vagy ismétlődő lejátszó mód és kész. Képes a Windows Media Playerből megismert (szerintem felesleges) vizualizációra, és a böngészőbe is be tud épülni a különféle média lejátszására. Sajnos épp a program kezelése idegesítő: Ha a playlist az aktív (tudok mozogni a "fénygerendával" a számok között), akkor nem lehet előre-hátra pörgetni, lépkedni magában a számban, illetve a hangerőt nem lehet állítani. Érdekes, hogy az előző/következő és a pause működik (b,n,p). Ha a lejátszósáv (ahol az időt mutatja) az aktív, akkor pedig a le/fel gombok a hangerőt változtatják, a jobbra/balra gombok pedig előre-hátra ugranak (de azok sem meghatározott léptékben, hanem először nagyot, aztán kisebbeket). Nagyon idegesítő és nem annyira használható jól. Jó nekem az lenne, hogy jobb-bal mindig a pörgetés lenne, mondjuk 5 sec egy lenyomásra, és nyomva tartva esetleg begyorsulna; míg a fel-le mindig a számok közötti válogatás lenne. A hangerő meg bármi más, mondjuk +/- kombináció.

Rhythmbox

Ritmusdoboz barátunk az eddigi legjobb, amivel találkoztam. Ehhez mérten természetesen a fél Gnome szükséges is neki, de ebben még nem csalódtam. Nem csak zenelejátszó, de zenéink listáját is tudja menedzselni. Első indításkor meg kell adni a könyvtárat, amelyben a zenéink vannak, és szépen beindexeli az egészet. Az eredmény egy kereshető adathalmaz, amelyeket szinte tetszés szerint rendezhetünk, új lejátszólistákat hozva létre (melyek lehetnek statikusak, azaz mi dobáljuk bele a számokat, illetve dinamikusak, amikor valamely tulajdonságuk alapján közös playlistbe rendezi őket). Képes letölteni és megjeleníteni az album borítót és dalszöveget. Érdekes, hogy a tag-eket nem képes megváltoztatni a zenékben; csak a saját adatbázisában lehet átírni - ezután jól jelenik meg a rhytmboxban, de más lejátszók ebből nem érzékelnek semmit. Amire még sokat használom, az a netes rádió streamek és a last.fm hallgatás. Mivel szintén a gstreamert használja, képes akár C64 .sid zenék lejátszására is. A számok között képes crossfade-elni, de okos: például egy albumon belül nem crossfade-el. Van lehetőség a számok értékelésére is. Podcast-támogatás, iPod-támogatás is van, természetesen.

Sajnos a Totem hibája (a playlist és a lejátszó rész nincs összekapcsolva megfelelően) itt is megvan.

Amarok

Nem feledkeznék meg a KDE felhasználókról sem, csakhogy ez a program még sosem volt a gépemen és nem is vágyom rá. Állítólag mindent tud, amit ember ki tudott találni zenehallgatással kapcsolatban - a képernyőképei alapján nagyon érett a felhasználói felület. Esetleges bosszantó hibáit nem ismerem... ha valaki tudna segíteni pár szóval, írjon egy kommentet, légyszí!

XMMS

Egykor A Zenelejátszó volt az opensource rendszerekre. Külsejében és használatában a Winamp mintájára készült, sőt annak skinjeit (a 2-es szériáig) tudta is használni.
Egy adott feladatra a tökéletességig csiszolt alkalmazás - plugineken keresztül bármit le tudott játszani, tudott vizualizációt, crossfade-et és még rengeteg hasznos funkciót. Akkoriban még nem volt szükség a zenék menedzselésére; hiszen a szélessávú internetelérés és a p2p akkoriban még ismeretlen volt, tehát nem sok ember dicsekedhetett akkoriban tízezres nagyságrendű mp3-gyűjteménnyel. (Hehe.) Sajnos a fejlesztését abbahagyták (pontosabban a GTK1 kódbázisnál leragadtak, mert számos okból a program átírása GTK2-re lehetetlen feladat volt), és továbbfejlesztése több ágon indult meg; ezek közül most úhy tűnik, az Audacious nevű lesz a befutó.

Zinf

Egykor FreeAmp néven szép kis karriert futott be - használtam is, mivel ez volt az első zenelejátszó program, amely képes volt katalogizálni is a zenéket (legalábbis nekem ez volt az első); de a lejátszók új generációja szépen lemosta a pályáról.

Banshee

Nekem első látásra úgy tűnt, ez egyszerűen egy Mono/GTK# Rhythmbox klón. Nem igazán láttam át a jelentőségét...

Exaile

Lásd, mint előbb. Ennek a sok klónnak talán egyetlen haszna, hogy egymással versenyezve feltehetően jobbnál jobb megvalósítások jönnek létre. Ez egy GTK-s Amarok-klón szeretne lenni, de szerintem ott máris elrontották, hogy Pythonban láttak neki a leprogramozásnak...

Music Player Daemon

Ez talán egy külön postot is megér! Foglalkoztam vele rendesen, még patch-eltem is saját használatra, de aztán nem jött végül össze, amit szerettem volna (legnagyobb részt saját türelmetlenségem miatt), így végül dobtam a projektet. Ettől függetlenül az MPD, mint egy keretrendszer, nagyon jó! A lényege, hogy kliens-szerver a megvalósítás; tehát a lejátszó rész teljesen elszakadt a megjelenítő felülettől, ezek akár külön gépen is lehetnek. Ennek megfelelően számos felület készült hozzá; PHP-től a GTK-ig, és ezek tetszőlegesen cserélhetők, akár lejátszás közben is... ;-)

Kis összehasonlítás

Nézzük, mellik játékos mit tud, mit nem tud:

 TotemRhytmboxAmarokXMMSZinfBansheeExaile!MPD
LejátszólistaXXXXXXXX
Kereshető (intelligens) playlist XX XXXrészben
VizualizációXXXX ? X 
Skinek  XXX  X 
iPod XX  ?X 
Streaming bemenetXX?  XX 
Streaming kimenet XX??? X
Last.FM XX  XX 
Borító, szöveg a netről XX  ?X 
Crossfade XXX?? X
Windows támogatás*  X*(1)X   


EZ az első, hogy ilyen táblázatot rajzoltam, úgyhogy ha kéne még bele fícsör vagy valami nem úgy van, dobjatok egy kommentet, kösz.

*Windows támogatás: Hátha fontos valakinek, hogy ugyanazt a felületet lássa Windows alatt is

*(1) Igazából ez azt akarja jelenteni, hogy a Winamp 1-2 sorozattal tökéletesen kompatibilis.

 

9 komment

Címkék: linux zene kde gnome media ingyenes lejátszó alkalmazások

Kernel fordítás - rendszerbetöltő, egyebek

2008.04.07. 11:05 bagoj ur

Kernel fordítás sorozat: [1] [2] [3]
Mivel olyan csodálatosan zuhog az eső és nem tudok hazamenni, gyorsan kedvem lett folytatni a sorozatot... :-)

Münchausentől Linusig

Bemelegítésképpen akkor az initrd-ről: Ahogyan írtam az első részben, egy linux terjesztés nem tud felkészülni minden egyes igényre, minden típusú gépre amelyre valaha is fel fogják telepíteni. A kernelbe nem lehet mindent beszuszakolni, egyrészt mert nagy és lassú lenne, másrészt mert nem is fér bele minden. (Emlékszem, hogy régen a kernel nem lehetett egy bizonyos méretnél nagyobb; de arra nem emlékszem, mekkora volt az.) De ha például a SCSI támogatást modulba rakjuk, akkor a SCSI vinyóról nem tudja felolvasni a megfelelő modult, hiszen épp az a modul kellene hozzá. Viszont az sem járja, hogy minden SCSI kártya és chipset kódját a kernelbe fordítsuk... a saját hajunknál fogva kellene kirántani magunkat a mocsárból. Erre szolgál az initrd. Először betöltjük az initrd-t, amely áthidalja a problémát - ennek mérete nagyobb lehet, mint egy kernel; egy kis RAMdisk-nek kell elképzelni (mint ahogy az is), amelyen scriptek, szélsőséges esetben akár egy nagyon pici alaprendszer is lehet. Ez elvégzi a szükséges feladatokat (merevlemez init, ilyesmik), majd betölti a "rendes" kernelt.

Sokan azt mondják, ez az initrd az esetek nagy részében felesleges; kernelt kell fordítani és bele kell rakni a támogatandó meghajtókat. Ezt mondom én is: az Ubuntu gyári kernele természetesen initrd-s, mert fel kell készülnie mindenre; nade mi optimalizálunk, tehát initrd csak végső esetben kell.


Most pedig térjünk vissza a konfiguráláshoz...

Ha kész a konfiguráció


Ha készen vagyunk, akkor már csak a fordítás van hátra (lépjünk ki az <Exit> gombbal):

make && make modules_install
Ekkor elkezd dolgozni a fordító:


HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf -s arch/x86/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/linux/utsrelease.h
  UPD     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-x86
  CC      arch/x86/kernel/asm-offsets.s
  GEN     include/asm-x86/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  HOSTCC  scripts/genksyms/genksyms.o

Stb. stb. Ha nincs hibaüzenet, akkor az elkészült kernelünk a  arch/i386/boot/bzImage relatív útvonalon található. Ezt másoljuk a /boot alá:

cp arch/i386/boot/bzImage /boot/vmlinuz_2.6.24.3bagoj


Majd ezután szerkesszük a rendszerindító fájlt. Feltételezem (ahogy eddig is), hogy Ubuntu gyári rendszerrel, így a grub lemezbetöltővel van dolgunk. Szerkesszük meg ennek a menüjét!

Fontos megjegyzés: Ahhoz, hogy az Ubuntu automatikusan is le tudja generálni a menüt (ha gyári kernelt cserélünk), egy kicsit elbonyolították ezt a menü-fájlt. A lényeg, hogy a "BEGIN AUTOMAGIC KERNELS LIST" elé írjuk, amit írunk. Ez pedig nekem a következő:

# vi /boot/grub/menu.lst

title           Bagoj kernel 2.6.24.3
root            (hd0,0)
kernel          /boot/vmlinuz_2.6.24.3bagoj root=/dev/hda1 ro quiet splash resume=/dev/hda5
quiet


Ezt a kis menüt úgy hoztam össze, hogy lemásoltam az egyik már meglévő kernelét (a fájl végén található), és kicseréltem a szükséges részeket. Nyilván hagyjuk benne a régebbi kernel bejegyzéseket is! Ha valami nem jött össze, akkor azokat kiválasztva be tudjuk tölteni a régi állapotot (Grub visszaszámláláskor ESC, aztán ki kell választani a legutolsó régi kernelt; ez elméletben a második sor lesz ugyebár). Megjegyzés: A "kernel" szócska után először a kernel elérési útját írjuk be; a root= mögé a / partíciónkat. A "resume=/dev/hda5" a hibernálás miatt kell, nekem az a swap partícióm.


Azt mondtam korábban, hogy ezt az sda-hda váltást megoldjuk; de közben rájöttem hogy nem akar sikerülni a dolog. Úgy terveztem, hogy a partíció label-je alapján működni fog (azaz nem a konkrét eszköznevet, hanem a label-t adom meg itt), de szerintem vagy a régi IDE vezérlő kódja nem tart itt, vagy én szúrtam el valamit. Bocsika...

 

Kernelcsomag-gyártás

Ha jól tudom, van egy kernel-package nevű csomag, amelynek segítségével tudunk .deb csomagot készíteni a kernelünkből. Ez akkor jó, ha sok azonos gépet felügyelünk, ilyenkor egy .deb mégiscsak sokkal könnyebben teríthető...

Ekkor a kernel fordítást így végezzük:

apt-get install kernel-package
cd /usr/src/linux
make-kpkg clean
make menuconfig
make-kpkg --revision=2.6.24.20080407 kernel_image

...majd az elkészült .deb csomagot dpkg -i segítségével feltesszük.

Reboot!

Ezek után indítsuk újra a gépet! Ha megáll "Kernel panic" üzenettel és valami VFS-re panaszkodik, akkor három dolog lehet: Nincs meg a merevlemez-támogatás, nincs meg a fájlrendszer-támogatás és végül rossz paramétert adtunk meg a menu.lst-ben. Töltsük vissza a régi kernelt és foglalkozzunk még a témával egy kicsit.

Elképzelhető, hogy ez-az nem fog működni. Nekem például a hibernálás. Nem mintha létfontosságú volna, de mégis. Ezek kiderítése érdekfeszítő agymunka, ne adjátok fel! Én például ott kezdtem, hogy végigolvastam a kernel forrás alatti Documentation/power alatti részeket. :-)


Nézzük, most hány modulom fut:

root@metal:~# lsmod
Module                  Size  Used by
container               4864  0
iptable_filter          3072  0
ip_tables              13000  1 iptable_filter
x_tables               14852  1 ip_tables
sd_mod                 29456  0
lp                     11332  0
loop                   17412  0
usb_storage            72384  0
libusual               18336  1 usb_storage
pcmcia                 39444  0
video                  18960  0
serio_raw               7044  0
ac                      6148  0
thermal                15772  0
uhci_hcd               25484  0
via_agp                10240  1
parport_pc             35236  1
parport                35912  2 lp,parport_pc
via686a                14348  0
yenta_socket           26252  1
rsrc_nonstatic         11392  1 yenta_socket
usbcore               143596  4 usb_storage,libusual,uhci_hcd
evdev                  11776  0
pcspkr                  3072  0


A francba, ez még mindig sok. :-) A boot idő viszont 61%-a a korábbiaknak.

A továbbiakban, ha valakinek van hozzátennivalója, kérdése, azokat megpróbálom összeszedni és esetleg írok belőle még pár postot.

(folyt. köv?)

 

7 komment

Címkék: linux fordítás power boot kernel hibernálás

Kernel fordítás - nagy levegő...!

2008.04.06. 23:21 bagoj ur

[1] [2] [3]

A kernel konfigurálás menete

Tegyük fel, hogy még mindig a /usr/src/linux könyvtárban vagyunk. Egy make menuconfig futtatásával egy kis karakteres, fa-szerkezetű menüt kapunk, ahol be tudjuk állítani a szükséges hardver- és feature támogatásokat. Ha egy sor mellett nyilacska "--->" van, akkor annak vannak almenüjei. A következő gombokat lehet használni:

Fel - le billentyű a mozgáshoz, enter a (menüpontba) belépéshez
Szóköz a kiválasztás megváltoztatásához. Általában ekkor a [ ], [*] és [M] között változik a kiválasztás. Kiscsillag jelenti a kernelbe fordított támogatást, 'M' jelenti a modult, ha üres akkor értelemszerűen nem lesz támogatás.
Használható a Y, N és M billentyű is, ha nem akarunk szóközzel váltogatni.
A TAB segítségével tudunk ránavigálni lent az <Exit> és <Help> gombokra. Ez a help nagyon hasznos, hiszen legtöbbször az egysoros megjegyzésből a fene se tudja, hogy miről szól.

Általános jótanácsok


Legalábbis jótanácsnak szánom őket. Nekem eddig bejöttek.

1. Majdnem minden driver választásnál el kell tűnődni a következőkön:
    a) van a gépemben ilyen hardver? Ha igen, akkor nyilván kell. Ilyen a videokártya, hangkártya, hálózati kártya driver, alaplap támogatása, merevlemez-vezérlés stb.

    b) gyakran/folyton használom? Ha igen, akkor kernelbe vele, nem kell modulozni. Például az ext2/3, UDF, VFAT fájlrendszerek a kernelben vannak; az MSDOS, JFFS2 stb. pedig modulban.

    c) lehet-e rá szükségem? Ha otthon ugyan nincs nyomtató, attól még nem biztos hogy sosem lesz a gépre dugva. És izzasztó akkor kernelt fordítani, amikor nyomtatni kéne sürgősen. Szóval a nem elrugaszkodott dolgokat modulba érdemes fordítani - hiszen ezek nem esznek sem memóriát, sem processzort mindaddig, amíg nem használjuk őket.

    d) Ha valami egzotikus dologról van szó, vagy olyan chipsetről, ami nincs a gépben, akkor az nem kell. Majd új hardver beszerzésnél ráér kernelt fordítani.

2. Sok ember vallja azt az elvet, hogy "amiről nem tudom, micsoda, az nem is kell". Ez nem így van ebben az esetben! :-) Ha a rendszer működése szempontjából biztonságosan kihagyható a dolog, akkor a Help-ben ott van, hogy "If unsure, choose 'N'" vagy "If in doubt, say 'N'" vagy valami hasonló. Ha ez nincs ott, mégse tudjuk mi az, akkor az lehet valami fontos, olvassuk végig a helpet.

3. Még egyszer: Ha nem tudod, mi az, olvasd el a helpet! Annál többet senki nem segíthet.

4. A konfigurátor menü segít: Ha valami olyat kapcsolunk be, amihez kell még egy valag másik dolog is, azt automatikusan bekapcsolja; ha modult választunk azok is modulok lesznek, ha kernelbe rakjuk, azok is oda kerülnek. Tehát inkonzisztencia kizárva.

5. Nem egyszerű kitalálni, hogy melyik hardverünkhöz melyik kernel modul van betöltve a gyári kernelnél. Ezeket egy mód van kibogarászni: A /usr/src/linux alatt van egy Documentation könyvtár; ebben keressünk rá a modulok nevére. Így rögtön kiderül, hogy

e100:Intel(R) PRO/100 hálózati kártya
snd_via82xx:Az alaplapi hangkártya
via82cxxx:Déli busz (hi-hi)
fuseUser-szintű fájlrendszer kezelés (kell, és kész! A "Filesystem in Userspace support" alatt van.)

És ne felejtsük el, amikor a múltkor lsmod-ot nyomtunk, senki nem garantálta, hogy minden modul bent volt épp a memóriában, ami kellhet! Például nekem az usb_storage nem volt bent, mivel nem dugtam rá az usb-kulcsomat a gépre...

Kernelbe, ne modulba

Szeretnék még pár szót mesélni a hardver támogatás sajátosságairól, valamint egy-két veszélyesebb pontról, hiszen mint azt tudjuk, az elb_szaas szelleme folyamatosan felettünk lebeg. :-)

Először is az IDE, SCSI és SATA merevlemez-illesztők megvalósítása (nekem) eléggé kusza. Amikor az első SATA-k megjelentek, akkor beleheggesztették valahogy SCSI-ként, aztán elkezdték átlátni a dolgokat, és megírták a libata vezérlőt (amely ma is a SCSI-t igényli). Manapság meg, ahogyan a betöltött libata és ata_generic modulokból lehet látni, már a sima IDE-re is szeretik a libata-t használni. Ezért az én vacak, lassú 2,5"-os IDE vinyóm SCSI-ként látszik, azaz ha nézek egy mount parancsot, akkor /dev/sda1, /dev/sda2 stb. partíciókat látok. Nekem az volt a célom, hogy irtsunk ki mindent, amit csak lehet, viszont arra igencsak figyelni kell, hogy ha nem a libata, hanem az IDE illesztőn keresztül érem el a vinyót, akkor a jelölése megváltozik; /dev/hda1, /dev/hda2 stb-re... rosszul hangzik, mi? Nem gond különben, lesz rá megoldás; csak érdemes tudni. Tehát ha IDE vinyó figyel a gépben, és a kernel konfignál emiatt logikusan az IDE részre fekszünk rá, érhet meglepetés egy "Kernel panic" személyében.

A többiről itt egy kis lista. Tehát amit semmiképpen se vegyetek ki a konfigból, mindig fordítsátok bele, és NE MODULBA:

1. Az első nélkül nem igazán fog semmi elindulni! Hiszen ne felejtsük el, a monitorunk az mégiscsak egy terminál....
"Device Drivers" / "Character devices" / "Virtual terminal"
"Device Drivers" / "Character devices" / "Unix98 PTY support"
Graphics support / "Console display driver support" / "VGA text console"

2. Igen érdekes húzás, amikor modulba teszi valaki egy fájlrendszer támogatását. Ekkor előáll a helyzet, hogy kéne ismerni a fájlrendszert, amiről betöltené a kernel a fájlrendszer támogatást... szóval mindenképp kernelbe vele (ha nem ext2/3-at használtok, akkor a megfelelő fájlrendszert kell választani. A mount parancs megmutatja, mitek van):

"File systems" / "Second extended fs support"
"File systems" / "Ext3 journalling file system support"

3. Ez már mehet modulba is, de ne hagyjátok ki, különben nem lesz egér támogatás...

"Device Drivers" / "Input device support" / "Mouse interface"

4. Még egyszer gondoljátok át, hogy a fájlrendszer és a merevlemez támogatáshoz mindent bekapcsoltatok-e, és nem modulba. Én ezeket kapcsoltam be, lévén (ahogyan láttuk múltkor) nekem egy elég régi VIA82Cxxx-es lapom van:

"Device Drivers" / "ATA/ATAPI/MFM/RLL support" / "VIA82CXXX chipset support"

Így támogatni fogja a chipsetet.

5. Ja, még láttam egy jópofát. Ahhoz, hogy a kernel be tudja tölteni és futtatni tudja a memóriában a user-szintű programokat, nem árt ehhez sem a támogatás. Mindenképp kernelbe:

"Executable file formats / Emulations" / Kernel support for ELF binaries

6. Ne felejtsétek el a processzorra optimalizálni a kernelt. Ez a "Processor type and features" menüben van, válasszátok ki a megfelelő procit. Ha még ez sem megy, a /proc/cpuinfo fájlba belenézve menni fog. Ha már abban a menüben vagytok, akkor ne felejtsétek beállítani a megfelelő optimalizációt:

"Processor type and features" / "Preemption Model (Voluntary Kernel Preemption (Desktop))"

A következő menüpont alatt beírhatjuk a saját nevünket. A sok szívás után örömmel tölthet el az a tudat mindenkit, hogy az elkészült kernel a nevét viseli, és az uname ki is írja, ezért mindenképp ajánlom beállítani ezt a súlyos optimalizációt. :-) Tetszőleges stringet be lehet írni.

General setup / "Local version - append to kernel release"

Ki kicsoda?

Nincs értelme a menüpontokat egyesével leírni, hiszen ezek folyton változnak. A főbb menüpontokat viszont talán le merem írni:

"General setup  --->"Általános beállítások. A "Prompt for development..." menüpont gyanúsnak tűnhet, de hagyjuk bekapcsolva. A "System V IPC", "POSIX Message Queues" mindenképp kell, RAM filesystem jó ha van (initrd-hez)*
Enable loadable module support  --->Eldönthetjük, hogy akarunk-e monolit kernelt. Mivel egy desktop sok hardverrel kerülhet kapcsolatba, én nem javaslom. Szerver esetén el lehet rajta gondolkodni, hiszen ott a modul betöltés támadási felület lehet. Megfontolandó a "Module unloading" kikapcsolása, szerveren mindenképp.
Enable the block layer  --->Itt az "IO Schedulers" rész az érdekes; az input-output algoritmusokat lehet beállítani. Én - lesz, ami lesz - a deadline-t választottam alapértelmezettnek
Processor type and features  --->Ha nincs több processzoros/magos rendszerünk, kapcsoljuk ki az SMPt (Symmetric multi-processing). Bár elméletben a hyperthread-ből is tudna profitálni, úgy vettem észre hogy a gyakorlatban nem segít semmit. Az MTRR-t viszont kapcsoljuk be!
Power management options  --->Az APM-et (Advanced Power Management) ne használjuk - hacsak nem PII-es a gép, erre nem is nagyon lesz szükség. A "CPU frequency scaling" alatt beállíthatjuk a megfelelő direktívát (aksi idő maximalizálás, teljesítmény maximalizálás, ezek egyértelműek gondolom).
Bus options (PCI etc.)  --->Laptoposok az PCCard-ot állítsák be (itt lehet látni, hogy nekem mit csinált a 'yenta' modul)
Executable file formats / Emulations  --->Az ELF legyen kernelben. Én a másik kettőt azért teszem modulba, hogy alkalomadtán lehessen látni (a betöltött modul meglétéből), hogy nem csak ELF futtatható formátumot futtatott a proci.
Networking  --->Itt vannak a különféle hálózati protokollok támogatásai; az infra, bluetooth, wireless. Lehet válogatni. A "Networking options"-ban, ha valaki nem ért hozzá, hagyja úgy ahogy van.
Device Drivers  --->Hát ez egy húzós kis menüpont. Szedjük össze minden tudásunkat, meg az lspci kimenetét, és vágjunk bele...
Firmware Drivers  --->Nekem innen még sosem kellett semmi...
File systems  --->Az ext2, ext3 mindenképp legyen benne. Nem árt a CD-ROM/DVD fájlrendszerek és a DOS/FAT/NTFS belefordítása sem...
Instrumentation Support  --->Kernel-hekkerek játékszere, én nem használom.
Kernel hacking  --->Itt a "Magic Sysreq"-t érdemes bekapcsolni. Ha nem tudod, mi az, keress rá a neten; igen hasznos.
Security options  --->A különféle biztonságos Linux megvalósítások támogatása: SELinux, AppArmour... én bekapcsoltam, hiszen az Ubuntuban van ennek felhasználótérbeli támogatása is
Cryptographic API  --->Az MD5, SHA1 és egyéb gyakori algoritmust kernelbe szoktam tenni - valamivel táplálni kell az illúzióimat, hogy ezek gyorsabban lefutnak ezután. :-)
Virtualization  --->Ez a KVM (hardver-támogatott) virtualizációról szól, a vmware, virtualbox enélkül is megy, én nem is használom.
Library routines  --->Különféle hálózati protokollok megvalósításához szükséges CRC-algoritmusok. Sokat nem tudok róluk; gondolom a céljük a megbízhatatlan vonalon keresztüli hibafelderítő/javító kód biztosítása. Mivel nem tudom, mi ez, inkább mindent bekapcsolok. :-)


*ezt az initrd-t majd a következőben elmondom.

(folyt. köv.)

1 komment

Címkék: linux fordítás ubuntu kernel rendszerfelügyelet

Kernel fordítás - bevezető

2008.04.03. 10:40 bagoj ur

Kernel fordítás sorozat: [1] [2] [3]

Bevezetőnek szeretném az alábbiakat leszögezni:

1. Nicht besaaren (ne fossál)! Rengeteg helyen olvasom, hogy "hú Te aztán nagyon bátor vagy, hogy kernelt fordítasz" - nem kell rájuk hallgatni. Természetesen úgy kell csinálni, hogy visszaállhass a régebbi kerneledre, ha valami nem jönne össze. Egyébként 2-3 helyen lehet igazán elcseszni, ezt el fogom mondani.
2. Egy linux kernel fordítás bonyolult dolog. Csak általános dolgokat tudok leírni, hiszen nekem nagy valószínűséggel teljesen más hardverem van, mint Neked.
3. Szánd rá az időt! Készülj rá, hogy főleg az első alkalommal nagyon sokat kell majd a helpet olvasgatni, úgyhogy 1-1,5 óra nyugodt időt biztosíts magadnak erre.

Nem tudom, hányan fordítanak kernelt mostanában. Régebben ez teljesen általános teendő volt; hiszen a terjesztések akkor még nem foltozták rommá a linux kerneleket; az ember egyszerűen leszedte a kernel.org-ról a legutolsó patch-et (nyilván nem a teljes kernelt, hiszen akkor még spórolni kellett a sávszélességgel), amely tartalmazta az új fejlesztéseket, hibajavításokat. Mindenki szépen nyomta a vanilla kernellel (tehát egy az egyben azzal, amit a kernel fejlesztők készítenek). A világ azóta sokat változott: a különféle linux terjesztések rengeteg saját fejlesztést, plusz hardver támogatást is beletesznek a vanilla kernelbe, és ennek lefordított, illetve forrás változatát is ők tartják karban. Például egy-egy hibajavítás után nem is léptetik a kernel verzióját, csak a legutolsó számot léptetik eggyel. A kernel lényegében csak egy csomaggá változott, amit mindenki leszed és kész - pedig tulajdonképpen EZ MAGA a linux - hiszen az opensource programok (nagy része) lefordíthatók más POSIX rendszerekre, pl. BSD-re.

Verziószámok

A kernelnek van stabil, illetve számos fejlesztői "ága", változata is. A fejlesztői ágban megy az új feature-ök tesztelése; ebből következően azok lehetnek instabilak. Az esetek 99%-ban nem lesz ezekre szükség (hacsak nem valami nagyon új hardverre van okvetlenül szükség, és emiatt bevállalható akár gyakori fagyás is). A különféle ágak a verziószámokkal vannak jelölve. Most, ahogy ezt írom, a fejlesztői verzió 2.6.25-rc8 (rc = release candidate; kiadás előtti 8-as verzió), a stabil pedig Ubuntun a 2.6.24.3. Jó szeműek felfigyelhetnek rá, hogy a harmadikmásodik szám a verzióban páratlan a fejlesztői esetében, és páros a stabil verzió esetében. Emellett jelenleg a 2.4.x-es kernel ág is aktív; tehát oda is átrakják a fontosabb fejlesztéseket (ún. "backporting", és folyamatosan végzik a hibajavításokat. Nem is boncolgatnám ezt a témát tovább; aki a fejlesztőivel akar foglalkozni, úgyis beleássa magát a témába.

Minek fordítsak kernelt?

Ha elégedett vagy a rendszereddel, és csak használni szeretnéd, akkor nincs szükséged rá. Ha szeretnél többet kihozni a rendszeredből, esetleg szeretnél átesni egy férfiúi beavató szertartáson :-), akkor érdemes belevágni. A disztribúciók kernelei ugyanis természetesen úgy vannak felkészítve, hogy lehetőleg minden gépen, bármely támogatott hardver esetén tudjanak futni (magyarul kellőképpen általánosak). Egy-egy adott gépen negyedannyi dologra sem lesz szükség; ráadásul sok dolgot ki is lehet kapcsolni, ha éppen nekünk olyan nincs (pl. soros/párhuzamos port támogatás, más alaplapi chipsetek). Az eredmény: a kernel kisebb, gyorsabb, és mivel kevesebb feature (kevesebb hibalehetőség) van benne, jó eséllyel megbízhatóbb is lesz.
Ne értsetek félre: sok esetben egy-egy változtatás csak mikromásodperceket jelent. Nade ha a működés során egy ilyen rutin másodpercenként több tízezerszer hívódik meg, akkor az már századmásodpeceket jelent. És másodpercenként nyerni pár századot jelentős gyorsulási érzettel jár. (Tiszta Forma1, nem? :-)) Egy szóval, a lényeg: optimalizáció.

Megjegyzés: az Ubuntuban, ha rákerestek a kernelekre (apt-cache search linux-image), akkor látjátok, hogy van -generic és -server változat. Ez lényegében ugyanaz a kernel, csak másra optimalizálva (desktop, illetve szerver felhasználás). A desktopon a rendszer interaktív válaszideje van maximalizálva, szerveren pedig a háttérfolyamatok. Ezt csak úgy mondom.

Monolit vs. hybrid vs. modularizált

Most meg miről beszélek? A lényeg az, hogy a kernel képes a belefordított kód alapján dolgozni, de képes arra is, hogy futási időben további kernel részeket behúzzon a memóriába és futtasson. Ennek az a lényege, hogy ha nagyon sok szolgáltatásra van szükség, de mindegyikre csak időnként, akkor a kernel karcsúsítása miatt érdemes ún. modulokba fordítani ezeket (megtehetnénk, hogy az összes feature-t belefordítjuk a kernelbe, az eredmény egy sok megabyteos lomha jószág lesz). A kernel tudni fogja, mikor lesz szükség ezekre, és (többé-kevésbé) automatikusan behúzza. A másik fele az, hogy ha egy szolgáltatást gyakran használunk (pl. USB-kütyük), akkor érdemes a kernelbe fordítani, hogy ne teljen azzal is idő, hogy a kernel kitalálja, melyik modul kell és utána betöltse. Ha nincs modul támogatás, minden a kernelből megy, azt nevezik monolitnak, ha minden modulban van, azt modulárisnak. Az igazság sokak szerint valahol félúton van.

Előkészületek


A kernel fordítás is fordítás, következésképpen kell minden hozzá, ami általánosságban a programok fordításához:

root@metal:/~# apt-get install build-essential


A kernel konfigurálása pedig igényli az ncurses függvénykönyvtár fejlesztői változatát (rögtön letőttyük a kernelt is):

root@metal:/~# apt-get install linux-source libncurses5-dev


Ezzel letöltődött a forrás, és a /usr/src alá került be, tömörített formában:

root@metal:/~# cd /usr/src/
root@metal:/usr/src# ls
linux-source-2.6.24.tar.bz2

root@metal:/usr/src# tar -xjvf linux-source-2.6.24.tar.bz2
root@metal:/usr/src# ln -s linux-source-2.6.24 linux


Mielőtt nekivágunk, tájékozódjunk a gépünk hardveréről (persze ha fejből megy minden chipset neve, akkor ezt nyugodtan átugorhatod... ):

root@metal:/~# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia] (rev 05)
00:01.0 PCI bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia AGP]
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 22)
00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 10)
00:07.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 10)
00:07.4 Bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 30)
00:07.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 20)
00:09.0 Ethernet controller: Intel Corporation 82557/8/9 Ethernet Pro 100 (rev 09)
00:09.1 Serial controller: Agere Systems LT WinModem
00:0a.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 01)
01:00.0 VGA compatible controller: Trident Microsystems CyberBlade i1 (rev 6a)


Azt már látjuk, hogy ez egy VIA alaplap, VT82CXX chipsetekkel, egy Intel Ethernet Pro 100 hálókártyával, van egy winmodem (ami nekem nem fog kelleni), PCMCIA kártya vezérlő, és egy őskori, nagy rakás Trident Cyberblade videókártya (asszem, nem ezzel fog menni a forgó-kocka-imbolygó-ablak effekt... :-))))

Lessük meg azt is, hogy milyen kernel modulokat töltött be a mostani kernel:

root@metal:/~# lsmod
Module                  Size  Used by
sbs                    15112  0
sbshc                   7680  1 sbs
container               5632  0
dock                   11280  0
iptable_filter          3840  0
ip_tables              14820  1 iptable_filter
x_tables               16132  1 ip_tables
ipv6                  267780  12
lp                     12324  0
loop                   18948  0
pcmcia                 40876  0
joydev                 13120  0
af_packet              23812  2
snd_via82xx            29464  0
gameport               16008  1 snd_via82xx
snd_ac97_codec        101028  1 snd_via82xx
ac97_bus                3072  1 snd_ac97_codec
snd_pcm_oss            42144  0
snd_mixer_oss          17920  1 snd_pcm_oss
snd_pcm                78596  3 snd_via82xx,snd_ac97_codec,snd_pcm_oss
snd_page_alloc         11400  2 snd_via82xx,snd_pcm
snd_mpu401_uart         9728  1 snd_via82xx
snd_seq_dummy           4868  0
snd_seq_oss            35584  0
snd_seq_midi            9376  0
snd_rawmidi            25760  2 snd_mpu401_uart,snd_seq_midi
video                  20112  0
output                  4736  1 video
snd_seq_midi_event      8320  2 snd_seq_oss,snd_seq_midi
snd_seq                54224  6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event
serio_raw               7940  0
snd_timer              24836  2 snd_pcm,snd_seq
snd_seq_device          9612  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq
battery                14212  0
ac                      6916  0
button                  9232  0
snd                    56996  12 snd_via82xx,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_mpu401_uart,snd_seq_dummy,snd_seq_oss,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
i2c_viapro              9876  0
i2c_core               24832  1 i2c_viapro
shpchp                 34452  0
soundcore               8800  1 snd
yenta_socket           27276  1
rsrc_nonstatic         13696  1 yenta_socket
pcmcia_core            40596  3 pcmcia,yenta_socket,rsrc_nonstatic
via_agp                11136  1
agpgart                34760  1 via_agp
parport_pc             36260  1
parport                37832  2 lp,parport_pc
evdev                  13056  0
pci_hotplug            30880  1 shpchp
irda                  203068  0
via686a                15244  0
crc_ccitt               3072  1 irda
psmouse                40336  0
pcspkr                  4224  0
ext3                  136712  1
jbd                    48404  1 ext3
mbcache                 9600  1 ext3
sg                     36880  0
sr_mod                 17956  0
cdrom                  37408  1 sr_mod
sd_mod                 30720  3
via82cxxx               9348  0 [permanent]
ide_core              113996  1 via82cxxx
pata_acpi               8320  0
floppy                 59588  0
uhci_hcd               27024  0
e100                   37388  0
mii                     6400  1 e100
usbcore               146028  2 uhci_hcd
pata_via               13316  2
ata_generic             8324  0
libata                159344  3 pata_acpi,pata_via,ata_generic
scsi_mod              151436  4 sg,sr_mod,sd_mod,libata
thermal                16796  0
processor              36872  2 thermal
fan                     5636  0
fbcon                  42912  0
tileblit                3456  1 fbcon
font                    9472  1 fbcon
bitblit                 6784  1 fbcon
softcursor              3072  1 bitblit
fuse                   50580  1


Húbmeg, ez rohadt sok...! Nem magyarázom végig, melyik modul micsoda, mert el lehet olvasni majd kernel fordítás közben is, ékes angol nyelven. Az itt felsorolt feature-ökről az új kernel konfigurálása közben el tudjuk dönteni, hogy kellenek-e; de kiemelten figyeljünk rájuk, hiszen valszeg nem véletlenszerűen lettek betöltve. :-)

A kimeneteket másoljuk ki valahová, nagy szükség lesz rá.


(folyt. köv.)

 

6 komment

Címkék: linux fordítás hardver ubuntu kernel rendszerfelügyelet

süti beállítások módosítása