75
Felhaszn´ al´ obar´ at csomagkezel˝ o rendszer kialak´ ıt´ asa Debian alap´ u Linuxokhoz Pfeiffer Szil´ ard (Holczer Szil´ ard) http://pfeifferszilard.hu

Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

Embed Size (px)

DESCRIPTION

A manapság használatos Linux alapú rendszerek (melyek közül a Debian, illetve az ennek alapjain nyugvó UHU-Linux preferáltak a szakdolgozat megírásánál) mindegyike rendelkezik valamely csomagkezelési képességgel, amelyet a következőképpen lehet röviden összefoglalni.A csomagok bináris állományok --az adott rendszernek megfelelő fájlformátummal-- melyeket leginkább a Windows telepítőprogramokhoz lehetne hasonlítani, bár annál sokkal tervezettebbek és szabványosítottabbak. A csomag az általa tárolt programról tartalmaz információkat --úgyis mint név, prioritás, típus, méret, állapot, stb.-- melyek egyfelől a rendszerben betöltött szerepét azonosítják, másfelől csomag állapotáról szolgálnak adatokkal. Ezen információk megjelenítésére, természetesen maga a rendszer is kínál lehetőséget, de a cél jelen esetben éppen az, hogy az átlag felhasználó által is átlátható, kezelhető rendszert hozzunk létre, melynek alapját a következő ötlet képezi.

Citation preview

Page 1: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

Felhasznalobarat csomagkezelo rendszerkialakıtasa Debian alapu Linuxokhoz

Pfeiffer Szilard (Holczer Szilard)http://pfeifferszilard.hu

Page 2: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

I

Tartalomjegyzek1. Bevezetes 1

2. Ismerkedes a csomagokkal 22.1. A csomag tortenete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2. A csomagokrol altalaban . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3. A Debian csomagok 43.1. Csomagformatum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2. Nevkonvenciok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.3. A control fajl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.3.1. Kotelezo mezok . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3.2. Opcionalis mezok . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.4. Csomagkezelo szkriptek . . . . . . . . . . . . . . . . . . . . . . . . . . 73.5. Prioritasi szintek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.6. Virtualis csomagok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.7. Fuggosegi viszonyok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.8. ”Pre-depends” jelentese . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.9. ”Reverse depends” jelentese . . . . . . . . . . . . . . . . . . . . . . . . 103.10. Csomagallapotok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.11. Csomagfrissıtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4. A Debain csomagkezelo eszkozei 124.1. dpkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.2. dselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3. apt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.3.1. Az apt-get parancs . . . . . . . . . . . . . . . . . . . . . . . . . 154.3.2. Az apt-cache parancs . . . . . . . . . . . . . . . . . . . . . . . . 24

5. Az APT cache allomany 285.1. Az APT cache allomany celja . . . . . . . . . . . . . . . . . . . . . . . . 285.2. Az APT cache allomany szerkezete . . . . . . . . . . . . . . . . . . . . . 29

6. Az APT programozasa 316.1. A csomagkezelo programkonyvtar elokeszıtese . . . . . . . . . . . . . . 316.2. Cache allomany eloallıtasa . . . . . . . . . . . . . . . . . . . . . . . . . 316.3. Cache allomany kezelese . . . . . . . . . . . . . . . . . . . . . . . . . . 316.4. Csomagok kezelese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326.5. Vegyes algoritmusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Page 3: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

II

7. Egy csomagkezelo alkalmazas elkeszıtese 347.1. A megvalosıtas altalanos lepesei . . . . . . . . . . . . . . . . . . . . . . 34

7.1.1. Kovetelmenyek meghatarozasa . . . . . . . . . . . . . . . . . . . 347.1.2. Fejlesztoi eszkozok megvalasztasa . . . . . . . . . . . . . . . . . 357.1.3. Csomagkeszıtes . . . . . . . . . . . . . . . . . . . . . . . . . . . 377.1.4. Terjesztes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387.1.5. Menedzseles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387.1.6. Visszajelzesek kezelese . . . . . . . . . . . . . . . . . . . . . . . 38

7.2. A koncepcio felallıtasa . . . . . . . . . . . . . . . . . . . . . . . . . . . 387.2.1. Az alapveto elgondolas . . . . . . . . . . . . . . . . . . . . . . . 387.2.2. A szerkezeti struktura . . . . . . . . . . . . . . . . . . . . . . . 387.2.3. A kereses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.2.4. A szures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.2.5. A felhasznaloi felulet . . . . . . . . . . . . . . . . . . . . . . . . 41

7.3. Amire a felulet epul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417.3.1. Elokeszuleti lepesek . . . . . . . . . . . . . . . . . . . . . . . . 417.3.2. A cache allomany felepıtese . . . . . . . . . . . . . . . . . . . . 417.3.3. A csomagleırok kinyerese . . . . . . . . . . . . . . . . . . . . . 427.3.4. A csomagleırok rendezese . . . . . . . . . . . . . . . . . . . . . 427.3.5. A faszerkezet kialakıtasa . . . . . . . . . . . . . . . . . . . . . . 437.3.6. Kereses a faban . . . . . . . . . . . . . . . . . . . . . . . . . . . 447.3.7. Elemek kiszurese a fabol . . . . . . . . . . . . . . . . . . . . . . 457.3.8. A rendszer frissıtese . . . . . . . . . . . . . . . . . . . . . . . . 46

8. A felhasznaloi felulet 478.1. Feluletfuggetlenul meglevo elemek . . . . . . . . . . . . . . . . . . . . . 47

8.1.1. Menuszerkezet . . . . . . . . . . . . . . . . . . . . . . . . . . . 488.1.2. Fa szerkezetu megjelenıtes . . . . . . . . . . . . . . . . . . . . . 498.1.3. Oszlopok a faban . . . . . . . . . . . . . . . . . . . . . . . . . . 508.1.4. Jelolo sav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508.1.5. Statuszbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

8.2. NCurses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508.3. Gtk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

9. Nemzetkoziseg 53

10. Osszefoglalo 54

11. Summary 55

Page 4: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

III

A. Fuggelek 56A.1. A cache allomany fejlece . . . . . . . . . . . . . . . . . . . . . . . . . . 56A.2. A cache allomany csomagleıroja . . . . . . . . . . . . . . . . . . . . . . 57A.3. A cache allomany archıv allomany leıroja . . . . . . . . . . . . . . . . . 57A.4. A cache allomany verzioszam leıroja . . . . . . . . . . . . . . . . . . . . 58A.5. A cache allomany fuggoseg leıroja . . . . . . . . . . . . . . . . . . . . . 58A.6. A cache allomany fuggoseg leıroja . . . . . . . . . . . . . . . . . . . . . 58

B. Fuggelek 60B.1. A fa elemeinek felepıtese . . . . . . . . . . . . . . . . . . . . . . . . . . 60B.2. A fa elemeinek kezelese . . . . . . . . . . . . . . . . . . . . . . . . . . 61B.3. Elemek kiszurese a fabol . . . . . . . . . . . . . . . . . . . . . . . . . . 62

C. Fuggelek 63C.1. Abra: Grafikus felulet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63C.2. Abra: Karakteres felulet . . . . . . . . . . . . . . . . . . . . . . . . . . 63C.3. Abra: Valtoztatasok ervenyesıtese . . . . . . . . . . . . . . . . . . . . . 64C.4. Abra: Az APT forrasfajl szerkesztese . . . . . . . . . . . . . . . . . . . 64C.5. Abra: Egyszeru kereses . . . . . . . . . . . . . . . . . . . . . . . . . . . 65C.6. Abra: Osszetett kereses . . . . . . . . . . . . . . . . . . . . . . . . . . . 65C.7. Abra: Szures kategoriara . . . . . . . . . . . . . . . . . . . . . . . . . . 66C.8. Abra: Szures szovegre . . . . . . . . . . . . . . . . . . . . . . . . . . . 66C.9. Abra: Megjelenıtendo oszlopok sorrendje . . . . . . . . . . . . . . . . . 67C.10. Abra: Rendezesi elvek . . . . . . . . . . . . . . . . . . . . . . . . . . . 67C.11. Abra: Sugo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68C.12. Abra: Nevjegy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Targymutato 71

Hivatkozasok 71

Page 5: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

1

1. BevezetesA manapsag hasznalatos Linux alapu rendszerek (melyek kozul a Debian, illetve az ennekalapjain nyugvo UHU-Linux preferaltak a szakdolgozat megırasanal) mindegyike rendel-kezik valamely csomagkezelesi kepesseggel, amelyet a kovetkezokeppen lehet rovidenosszefoglalni.

A csomagok binaris allomanyok –az adott rendszernek megfelelo fajlformatummal–melyeket leginkabb a Windows telepıtoprogramokhoz lehetne hasonlıtani, bar annal sok-kal tervezettebbek es szabvanyosıtottabbak. A csomag az altala tarolt programrol tartal-maz informaciokat –ugyis mint nev, prioritas, tıpus, meret, allapot, stb.– melyek egyfelola rendszerben betoltott szerepet azonosıtjak, masfelol csomag allapotarol szolgalnak ada-tokkal. Ezen informaciok megjelenıtesere, termeszetesen maga a rendszer is kınal le-hetoseget, de a cel jelen esetben eppen az, hogy az atlag felhasznalo altal is atlathato,kezelheto rendszert hozzunk letre, melynek alapjat a kovetkezo otlet kepezi.

Page 6: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

2

2. Ismerkedes a csomagokkal

2.1. A csomag torteneteKezdetben vala a tar.gz, vagyis minden programot a felhasznalonak szuksegkeppen lekellett fordıtania, ha azokat hasznalni kıvantak Linux rendszereikben. A Debian keszıtesesoran szuksegesnek lattak, hogy rendszer magaban foglaljon egy csomagkezelo eszkoztis, aminek a dpkg (Debian PacKage Manager) nevet adtak. Igy tehat a hıres ”csomag”kifejezes a GNU/Linux rendszerekbol fakadt, meg mielott a Red Hat megalkotta volna azo ”rpm” (RedHat Package Manager) rendszeret. Am egy uj dilemma hamar megragadta aGNU/Linux rendszerek keszıtoinek gondolatat. Szuksegesnek latszott egy gyors, gyakor-latias es hatekony ut megalkotasa a csomagok telepıtesere, mely egyuttal automatikusankezelne a fuggosegeket, es felugyelne a konfiguracios allomanyokat a frissıtesi folyamatalatt. Ismet a Debian nyitott utat, az APT (Advenced Package Tool) megszuletesevel, megmielott a Conectivaban portoltak volna, vagy akar mas disztribuciok alkalmaztak volna.

2.2. A csomagokrol altalabanAltalanossagban elmondhato, hogy a csomag minden olyan fajlt tartalmaz, mely a kiva-lasztott program, illetve tulajdonsag megvalosıtasahoz szukseges. Alapvetoen ket cso-magfajtat kulonboztetunk meg:

• Binaris csomag, ami futtathato es konfiguracios fajlokat, kezikonyvet, informaciosoldalakat, szerzoi jogi informaciokat es egyeb dokumentumokat tartalmaz. Ezeka fajlok egy Debian-specifikus archivalasi formaban kerulnek terjesztesre, melye-ket a kituntetett .deb kiterjesztessel latnak el. Ezen binaris allomanyok a Debiandpkg nevu eszkozevel tomorıthetoek ki, melyrol reszletesen annak kezikonyvebenolvashatunk.

• Forras csomag, mely all egy .dsc fajlbol, ami a forrascsomag jellemzoit ırja le, vala-mint egy .orig.tar.gz allomanybol, mely a forrasok eredeti, valtoztatas nelkuli, tarformatumu, gzip-el tomorıtett valtozata, es altalaban egy .diff.gz fajlbol, mely-ben a Debian-specifikus valtoztatasok talalhatoak az eredeti forrashoz kepest. Ezencsomagfajta ki- es betomorıtesehez, a dpkg-source eszkoz hasznalhato, melyekrolbovebben szinten azok kezikonyveiben olvashatunk.

A szoftverek –csomagkezelo rendszerrel torteno– telepıtese eseten, fuggosegeket ke-zelunk, melyeket a csomagok karbantartoi allapıtanak meg. Ezen fuggosegek leırasa acontrol fajlban tortenik, melyet minden csomaghoz csatolni kell. Peldakent megemlıthetoaz a csomag, mely a GNU C fordıtot (gcc) tartalmazza, mely fugg a binutils csomagtol,ami az assembler es a linker programokat foglalja magaban. Ha a felhasznalo megprobaljatelepıteni a gcc-t anelkul, hogy binutilst mar korabban telepıtette volna, a csomagkezelo

Page 7: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

3

rendszer (dpkg) hibauzenetet kuld, hogy ez utobbi telepıtese szukseges, es leallıtja a te-lepıtesi folyamatot. Meg kell azonban jegyezni, hogy ez a tulajdonsag felulbıralhato nemikitartassal.

Page 8: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

4

3. A Debian csomagok

3.1. CsomagformatumA Debian csomag –vagy archıv fajl– futtathato allomanyokat, program konyvtarakat, il-letve dokumentaciokat tartalmaz, melyek az adott programhoz kapcsolodnak, illetve an-nak hasznalatat ırjak le. Alapesetben a Debian archıv fajl neve a .deb kiterjesztesselvegzodik.

A Debian csomag belso szerkezetet a deb (5) kezikonyvoldal ırja le. Mivel azon-ban ez a szerkezet allando valtoztatas alatt all, a .deb fajlok kezelesere a dpkg-deb (8)hasznalando.

Egeszen a legujabb (Woody) disztribucioig minden, Debianhoz tartozo archıv allo-many, kezelheto volt szabvanyos UNIX parancsok –ar es tar– segıtsegevel, ha a dpkgparancs nem allt rendelkezesre.

3.2. NevkonvenciokA Debian csomagok elnevezesei a kovetkezo szabalyszeruseget kovetik:

Nev VerzioSzam-DebianAtdolgozasiSzam.deb

ahol a Nev a csomag nevet jeloli. Ellenorzeskent meghatarozhato Debian archıv fajlhoztartozo nev a kovetkezo modszerek egyikevel:

• a ”Packages” fajl vizsgalataval, mely ugyanazon konyvtarban tarolodik, ahonnan acsomagunk is szarmazik. Ez a fajl szakaszokban tartalmazza a csomagok leırasat.Minden szakasz elso bejegyzese a csomag formalis neve.

• a dpkg -info Nev VVV-RRR.deb parancs kiadasaval, ahol VVV a csomag ver-zioszamat, RRR pedig a csomag revızios szamat jelenti. A megjeleno kepernyo,egyebek mellett, tartalmazza az archıv fajlhoz rendelt nevet.

A VVV egy verzioszam, ami fejlesztes folyamataval all osszefuggesben, es nincs rameghatarozott szabvany, bar vannak bevett formulak (”19990513” vagy ”1.3.8pre1”),melyektol termeszetesen el lehet terni.

Az RRR resz a Debian revızios szam, melyet a Debian fejlesztoi (vagy egyeni fel-hasznalok, amennyiben maguknak kıvannak csomagot letrehozni) hataroznak meg. Ez aszam a Debian csomag revızios szintjenek felel meg. Egy ujabb szint altalaban valtozastjelent a Debian MakeFile-ban (debian/rules), a Debian control fajlban (debian/control),a telepıto, illetve eltavolıto szkriptekben (debian/p*), vagy a csomag altal hasznalt konfi-guracios allomanyokban.

Page 9: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

5

3.3. A control fajlEgy ”hello” nevu Debian csomaghoz tartozo control fajl kimenete a kovetkezo:

Package: helloPriority: optionalSection: develInstalled-Size: 45Maintainer: Adam Heath <[email protected]>Architecture: i386Version: 1.3-16Depends: libc6 (>= 2.1)Description: The classic greeting, and a good example TheGNU hello program produces a familiar, friendly greeting.It allows nonprogrammers to use a classic computer sciencetool which would otherwise be unavailable to them. .Seriously, though: this is an example of how to do aDebian package. It is the Debian version of the GNUProject’s ‘hello world’ program (which is itself an examplefor the GNU Project).

3.3.1. Kotelezo mezok

Package: <csomagnev> A csomag nevet adja meg. Ez az a nev amellyel hivatkozha-tunk ra a kulonbozo, csomagkezelo eszkozokben, es altalaban –de nem feltetlenul–egyezik a Debain archıv fajl nevenek elso szakaszaval.

Version: <verzioleıro karakterlanc> A mezo a 3.2 pontban kifejtett verzio-szamokat adja meg.

Description: <rovid leıras> <b}ovebb leıras> Elso sora rovid leırast ad acsomagrol, a tovabbi sorok pedig reszletesebb jellemzest adhatnak annak jelleg-zetessegeirol. A bovebb leıras minden sorat egy szokoz karakter kell, hogy me-gelozze, ures sorok eseten a szokoz utan csupan egy ’.’ allhat.

3.3.2. Opcionalis mezok

Section: <szekcio> Altalanos mezo, mely egyfajta csoportba sorolja a csomagokat,azok kategoriaja alapjan. Peldakent nehany egyszeru csoport: ”utils”, ”net”, ”x11”,”mail”, stb. Ez egyben annak az alkonyvtarnak a neve is, amiben a csomag a DebianFTP szerveren elhelyezkedik.

Priority: <fontossag> A mezo azt adja meg, hogy mennyire fontos ezt a csomagottelepıtenunk. Nehany szoftver, mint peldaul a dselect, illetve a console-apt kepes

Page 10: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

6

ezen mezo alapjan kategorizalni a csomagokat. Debian eseten, a fenti ket mezoertekei nem valaszthatoak szabadon, csak a Policy Manualban leırt ertekeket ve-hetik fel, melyek annak eldontesere hasznalhatok, hogy az adott csomagok milyenfelhasznalasra szantak.

Essential: <yes | no> A mezo altalaban csak akkor szukseges, ha annak erteke yes,mivel az arra utal, hogy a csomag szukseges a rendszer helyes mukodesehez. Adpkg, vagy egyeb mas csomagkezelo eszkoz, nem engedi meg az ilyen bejegyzesselrendelkezo csomagok eltavolıtasat, hacsak nem hasznaljuk valamelyik kenyszerıto(force) opciot.

Architecture: <architektura | all> Az a processzortıpus, amihez a binaris cso-mag fordıtva lett. Az egyszeru architekturak a kovetkezok: i386, m68k, alpha,sparc, powerpc, stb. Az all ertek jelentese, hogy a csomag architektura-fugget-len. Erre megemlıthetok peldakent a shell, illetve perl szkriptek, valamint a doku-mentaciok.

Source: <forras neve> A forrascsomag neve, melybol a binaris verzio szarmazik,felteve ha a ketto kozott elteres van.

Depends: <csomaglista> Azon csomagok listaja, melyeknek mar telepıtve es kon-figuralva kell lenniuk, hogy ezt a csomagok sikeresek telepıthessuk. Amennyibena listaban szereplo csomagok barmelyike nincs telepıtve a rendszeren, a csomag-kezelo nem engedelyezi ennek telepıteset. Mindezek mellett lefuttatja a listabanszereplo csomagok postinst szkriptjet.

Pre-Depends: <csomaglista> Azon csomagok listaja, melyeknek telepıtve, illetvekonfiguralva kell lenniuk, mielott az adott csomag telepıtesebe fognank. Altalabanezt a mezot akkor hasznaljak, ha szukseges nehany csomag meglete a telepıtendocsomag preinst szkriptjenek futtatasahoz.

Recommends: <csomaglista> Olyan csomagok, melyek –kiveteles esetektol eltekintve–egyutt talalhatoak meg a rendszeren az adott csomaggal.

Suggests: <csomaglista> Ezen csomaglista elemei kapcsolodnak a megadott cso-maghoz, novelik annak hasznalhatosagat, de hianyuk nem befolyasolja a csomagmukodokepesseget.

A Depends, Pre-Depends, Recommends es Suggests mezok vagylagos csomagok cso-portjainak listajat tartalmazza. Minden csoport csomagok listajat jelenti, melyek ’|’(pipe) jellel, ezeken belul a csomagok kotojellel vannak elvalasztva egymastol. Mindenegyes elem egy csomagnev, melyet zarojelek kozott allo verzioszam kovethet.

A verzioszamot ’<< jel elozi meg, amennyiben az ettol kesobbi verziok is megfelelnek,es kotojellel elvalasztva a Debian csomag revızios szama kovetheti. Az elfogadott verziok

Page 11: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

7

meghatarozasara ezen tulmenoen a ’>>’, ’<<’, ’>=’, ’<=’ es az ’=’ jelek hasznalatosak,rendre nagyobb, kisebb, nagyobb egyenlo, kisebb egyenlo es egyenlo jelentessel.

Conflicts: <csomaglista> Az utkozo csomagok listaja. Erre az esetre pelda, haa ket csomag azonos nevu allomanyt tartalmaz. A csomagkezelo alkalmazasoknem engedelyezik utkozo csomagok egyideju jelenletet a rendszerben. Egymassalutkozesben levo csomagok Conflicts mezoinek mindegyikeben szerepel a masikcsomag.

Replaces: <csomaglista> Azon csomagok listaja, melyek fajljait ezen csomag le-csereli. Arra hasznalhato, hogy engedelyezzuk a csomag szamara, hogy mas, martelepıtett csomagok fajljait ırja felul. Altalaban a Conflicts mezovel egyutt szokashasznalni, a tobbi csomag eltavolıtasanak kikenyszerıtesere, ha a csomagoknak van-nak azonos allomanyaik.

Provides: <csomaglista> Azon virtualis csomagok listaja, melyeket ez a csomagnyujt. Altalaban abban az esetben hasznalatos, ha tobb csomag kulon-kulon isnyujthat egy adott szolgaltatast. Peldakent emlıthetoek a gcc es az g++ csomagokmelyek mindketten, nyujtjak a c-comiler nevu csomagot, melytol mas csomagokis fugghetnek. Ez megoldast jelent arra, hogy a fuggo csomagoknak ne kelljen is-merniuk a fuggosegben szereplo osszes csomag nevet, es ne kellejen a azokat pipejellel elvalasztva felsorolniuk.

A Conflicts, Replaces es Provides mezok vesszovel, vagy whitespace-el elvalasztottlistajat tartalmazzak. A Conflicts mezo vesszoi logikai vagy muveletkent is ertelmezheto-ek.

3.4. Csomagkezelo szkriptekA Debian maintenance szkriptek, olyan futtathato allomanyok, melyek –funkciojuktolfuggoen– a csomag telepıtese elott, illetve utan hajtodnak vegre. Ezen allomanyok –acontrol nevu fajlal egyutt– a Debian archıv fajl reszet kepezik. Az egyes fajlok a kovet-kezok:

preinst Ez a szkript az elott fut le, mielott a csomag kitomorıtese megtortenne, az ottartalmazo Debian archıv allomanybol (.deb). Nehany szkript leallıtja a hozzakapcsolodo szolgaltatasokat, mıg azok telepıtese vagy frissıtese be nem fejezodik,vagyis amıg a ’postinst’ szkript futtatasa sikeresen le nem zarul.

postinst Ez a szkript tipikusan a csomag kulonbozo konfiguraciojat vegzi el, miutan azmar ki lett csomagolva az ot tartalmazo Debian archıv allomanybol. A ’postinst’szkript gyakorta tesz fel kerdeseket a felhasznalonak, illetve figyelmezteti ot, haalapertelmezeseket fogad el, hogy terjen vissza es konfiguralja ujra a csomagot,

Page 12: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

8

ha a helyzet bizonytalan. Nehany ’postinst’ szkript, miutan a csomag telepıtese,vagy frissıtese befejezodott, parancsokat hajt vegre szolgaltatasok indıtasa, illetveujraindıtasa erdekeben.

prerm Ez a szkript a csomaghoz kapcsolodo minden szolgaltatast leallıt, mivel az elottfut le, mielott a csomaghoz tartozo allomanyok eltavolıtasa megkezdodne.

postrm A szkript altalaban csomaghoz kotodo hivatkozasokat modosıt, illetve a csomagaltal letrehozott allomanyokat torol.

Jelenleg az osszes fentiekben megemlıtett control fajl a /var/lib/dpkg/info konyv-tarban talalhato. A minden fajl neve azon csomag nevevel kezdodik, melyhez tartozik,es pont utan a fent emlıtett szkriptnevekkel, mint kiterjesztesekkel, zarulnak. A cso-magnev.list nevu allomany az osszes, a csomagnevvel hivatkozott, csomaghoz tartozoallomanyt tartalmazza, annak eleresi utjaval egyutt.

3.5. Prioritasi szintekA disztribucio karbantartoi minden egyes Debian csomaghoz ugynevezett fontossagi szin-tet rendelnek hozza, melyek a kovetkezoek lehetnek:

Required prioritasi szinttel rendelkezo csomag feltetlenul szukseges a rendszer mukode-sehez. Ez a csoport foglalja magaban mindazokat a csomagokat, melyek a rendszerhibainak kezelesere, javıtasara hasznalhatok.

Ezeket a csomagokat nem javallott eltavolıtani, mivel ez esetben a rendszer tel-jesen hasznalhatatlanna valhat, es nem leszunk kepesek a dpkg segıtsegevel rend-szerunket helyreallıtani. Maga a rendszer csak a required prioritasu csomagok meg-lete eseten lehet, hogy gyakorlatilag hasznalhatatlan, de mukodokepes, es rendel-kezesre all minden olyan eszkoz, mellyel bootolhatunk, illetve tovabbi csomagokattelepıthetunk.

Important prioritasi szintu csomagok az osszes Unix alapu rendszerben jelen vannak.Egyeb csomagok melyek nelkul a rendszer nem fut, vagy nem hasznalhato megfe-leloen. Ez a szint meg mindıg nem foglalja magaban az Emacs, X11, TEX, vagymas, ezekhez hasonloan nagy meretu alkalmazasokat. Az important csomagokcsupan a rendszer csupasz infrastrukturajat alkotjak.

Standard csomagok szabvany szerint leteznek minden Linux rendszerben, melyek meg-lehetosen kicsi, de nem tulzottan korlatozott karakteres modu csomagokat foglalnakmagukban.

Ezek azok a csomagok, melyek alapertelmezes szerint telepıtesre kerulnek, ha afelhasznalo nem valaszt semmi egyebet. Ez a csoport meg mindig nem tartalmaz

Page 13: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

9

nagy meretu programokat, de mar reszet kepezi peldaul az Emacs es a TEX, illetveLATEX azon reszei, melyek kepesek mukodni grafikus felulet nelkul.

Optoinal szinten mar minden olyan csomag telepıtheto, melyek esszeruen elvarhatoak,es nem tamasztanak kulonleges kovetelmenyeket. Tartalmaz grafikus szervert, ateljes TEX disztribuciot, valamint sok egyeb hasznos alkalmazast.

Extra prioritassal rendelkezo csomagok gyakorta utkoznek mas, magasabb prioritasi osz-talyba tartozo csomagokkal, es csak akkor hasznosak szamunkra, ha tisztaban va-gyunk vele mire is valok igazaban. Altalaban van olyan kovetelmeny, mely nemteszi lehetove, hogy optional prioritasukent soroljuk be oket.

3.6. Virtualis csomagokA virtualis csomag olyan altalanos elnevezes, melyet csomagok egyes csoportjaira alkal-mazunk, melyek alapvetoen hasonlo szolgaltatast nyujtanak. Peldakent a tin es a trn prog-ram emlıtheto meg, melyek mindegyike hırek olvasasra szolgal, es barmelyikuk kepeskielegıteni egy olyan csomag fuggosegeit, melynek hırolvaso programra van szuksegemukodesehez. Eppen ezert, ezek mindegyike nyujtja a news-reader nevu virtualis csoma-got.

Hasonlokeppen az exim es a sendmail programok, melyek mail-transport-agent vir-tualis csomagot nyujthatjak. Az olyan csomagok, melyek fuggenek az emlıtett virtualiscsomagtol, telepıthetok abban az esetben, ha a virtualis csomagot ado csomagok kozulbarmelyik telepıtve van, hiszen fuggoseguket mar egyetlen meglevo csomag is kielegıti.

Abban az esetben, ha tobb csomag is nyujthat egy virtualis csomagot, a Debian le-hetoseget ad egy preferalt csomag kivalasztasara. Ezt az update-alternatives pa-ranccsal tehetjuk meg.

3.7. Fuggosegi viszonyokA Debian csomagkezelesi mechanizmusa egy sor csomagfuggesi viszonyt deklaral, me-lyek segıtsegevel erzekelhetove valik, hogy melyik az a szint ahol A program meg Bprogram megletetol fuggetlenul uzemeltetheto.

• A csomag fugg (depends) B csomagtol, ha B-nek telepıtve kell lennie ahhoz, hogy Afuthasson. Nemely esetben A nem csupan B-tol, hanem annak valamely verziojatolfugg. Ilyenkor altalaban egy also hatart adnak meg, ami azt jelenti, hogy A csomagtelepıtesehez B-nek a megadott, vagy annal frissebb verzioval kell rendelkeznie.

• A csomag abban az esetben javasolja (recommends) B-t, ha a csomag karbantartojaugy ıteli meg, hogy a legtobb felhasznalo nem kıvanja hasznalni A-t, azon szolgal-tatasok nelkul melyeket B nyujt.

Page 14: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

10

• A csomag tanacsolja (suggests) B-t, ha B olyan allomanyokat tartalmaz, melyekkapcsolodnak (es altalaban javıtjak) A mukodesehez.

• A utkozik (conflicts) B-vel, amennyiben A nem mukodokepes, ha B telepıtve vana rendszeren. Leggyakrabban az az eset all fenn, hogy A olyan fajlokat tartalmaz,melyek verziojukat tekintve tulhaladjak a B-ben meglevoket.

• A csereli (replaces) B-t, ha a B altal letrehozott fajlok torlodnek, vagy felulırodnakA telepıtese eseten.

• A akkor tartalmazza B-t, ha A, B minden allomanyat, es funkciojat magaban fog-lalja. Ez a megoldas lehetoseget nyujt, hogy a felhasznalok lemezteruletet ta-karıtsanak meg azzal, hogy csak a szamukra valoban szukseges csomagot telepıtik.

3.8. ”Pre-depends” jelenteseA ”pre-depends” egy kulonleges fuggoseget jelent. Egy kozonseges csomag eseten, adpkg kicsomagolja annak archıv allomanyat, fuggetlenul attol, hogy fuggosegei kozottszereplo csomagok jelen vannak-e a rendszerben vagy sem. A kicsomagolas itt azt jelenti,hogy a dpkg kibontja a fajlokat az archıv allomanybol, melyeket a rendszerbe telepıtenikıvan, majd a helyukre teszi oket.

Abban az esetben azonban, ha vannak olyan csomagok, melyektol fugg az eppen te-lepıtendo csomag, es azok nincsenek telepıtve a rendszerben, akkor a dpkg visszautasıtjaa csomag telepıteset a configure szkript futtatasakor. Vannak azonban olyan csomagok is,melyek eseten a kicsomagolast is megtagadja a dpkg mindaddig, amıg annak fuggosegeinem kerulnek telepıtesre. Ezeket a fuggosegeket nevezzuk ”pre-depends”-nek.

3.9. ”Reverse depends” jelenteseEz a fuggosegi viszony nem mas, mint a korabban mar emlıtett –ugymond normal–fuggosegi viszony megfordıtasa. Vagyis itt azok a csomagok szerepelnek, melyeknek”normal” fuggosegei kozott a reverse depends bejegyzest tartalmazo csomag neve sze-repel. Maskepp megfogalmazva, azon csomagok, melyek nem nelkulozhetik a szobanforgo csomagot, ami egyuttal azt is jelenti, hogy az adott csomag eltavolıtasakor, annakfordıtott fuggosegben szereplo csomagokat is torolni kell.

Page 15: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

11

3.10. CsomagallapotokA csomagok allapotjelzoi azt fejezik ki, hogy a felhasznalo mit kıvan tenni a csomaggal.Ezek a kovetkezo ertekeket vehetik fel:

ismeretlen (unknown) A felhasznalo meg soha nem jelezte mit kıvan tenni a csomaggal.

telepıtendo (install) A felhasznalo a csomag telepıteset, illetve frissıteset szeretne veg-rehajtani.

eltavolıtando (remove) A felhasznalo csak a csomagot akarja torolni, de annak meglevokonfiguracios allomanyait nem.

torlendo (purge) A felhasznalo el kıvanja tavolıtani a csomagot, annak konfiguraciosallomanyaival egyutt.

felfuggesztendo (hold) A felhasznalo a csomagot ki akarja vonni a tovabbi feldolgozasalol, ami akkor hasznos, ha meg akarjuk orizni csomagunk allapotat, vagy jelenlegiverziojat.

3.11. CsomagfrissıtesA Debian egyik legnagyobb erdeme, hogy kovetkezetes es biztonsagos frissıtesi eljarastnyujt, valamint mindent elkovet annak erdekeben, hogy korabbi kiadasokrol valo atallasminel zokkenomentesebb legyen. A csomagok minden olyan esetben ertesıtik a fel-hasznalot, ha valamely fontos kozlemenyuk tamad a frissıtesi folyamat kozben, es gya-korta megoldassal is szolgalnak a felmerulo problemara.

Page 16: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

12

4. A Debain csomagkezelo eszkozei

4.1. dpkgA dpkg egy kozepes bonyolultsagi szintu alkalmazas, mely Debian csomagok telepıtesere,letrehozasara, eltavolıtasara, es kezelesere alkalmas. Elsodlegesen megis a dselect nevuprogram hasznalatos, ami tulajdonkeppen a dpkg felhasznalobarat felhasznaloi felulete. Adpkg csak parancssori parametereken keresztul vezerelheto, melyek magukban foglaljak akıvant cselekmenyt, illetve annak opcioit. Az elobbiek hatarozzak meg, hogy dpkg milyenmuveletet fog elvegezni az adott csomagon, az utobbiak pedig azt, hogy ez mikepp fogmegtortenni a kulonbozo esetekben, melyek az esemeny soran eloadodhatnak. Nehany afontosabb opciok kozul:

dpkg --helpAz opciok leırasanak megjelenıtese.

dpkg --info fajlnevA control fajl (illetve egyeb informaciok) megjelenıtese egy adott csomagrol.

dpkg --install fajlnevCsomag telepıtese, beleertve a kicsomagolast es a konfiguralast is.

dpkg --unpack fajlnevCsomag kibontasa, konfiguralas nelkul, a Debian archıv allomanybol. Megjegy-zendo, ezt a muvelet kovetoen csomagunk meg nem hasznalhato, mivel nehanyallomany meg kulon testreszabast is igenyel. Ez a parancs eltavolıtja a programmar korabban telepıtett verzioit, es lefuttatja a csomaghoz tartozo preinst szkriptet.

dpkg --configure csomagnevKorabban kitomorıtett csomag konfiguralasa. Egyebek kozott, ez a parancs fut-tatja le a csomaghoz tartozo postinst szkriptet, valamint frissıti a conffiles reszbenfelsorolt allomanyokat. Ebben az esetben a dpkg parameterekent nem az archıvallomany nevet, hanem a csomag nevet kell megadni.

dpkg --fsys-tarfile fajlnevA Debian archıv fajl altal tartalmazott fajlrendszer megjelenıtese tar allomanykent.

dpkg dpkg --remove csomagnevCsomag eltavolıtasa (a konfiguracios allomanyok megorzesevel).

dpkg dpkg --purge csomagnevCsomag eltavolıtasa (annak konfiguracios allomanyaival egyutt).

Page 17: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

13

dpkg --list csomagnevA parameterkent megadott sztring (illetve regularis kifejezes) altal meghatarozottcsomag(ok) telepıtettsegi allapotanak kilistazasa.

4.2. dselectA dselect az elsodleges felhasznaloi felulet, csomagok menedzselesere Debian alapurendszerekben. Ez egy menu-vezerelt alkalmazas, melynek kivaltkepp csomagok elsotelepıtesenel, valamint nagyobb volumenu frissıtesek lebonyolıtasanal van jelentosege. Aprogram alkalmazasaval lehetosegunk nyılik:

• Frissıteni az elerheto csomagok verzioit tartalmazo listat.

• Megtekinteni a telepıtett, illetve a telepıtheto csomagok allapotat.

• Csomagokat kivalasztani, fuggosegeiket kezelni.

• Uj csomagokat telepıteni, a meglevoket frissebb verziora cserelni.

A dselect gyakorlatilag a dpkg feluletekent uzemel, mely –mint azt mar emlıtettuk–egy alacsony szintu Debian csomagkezelo eszkoz. Az alkalmazas egy teljes-kepernyoscsomagkezelesi es szelekcios rendszer, mely egyuttal a fuggosegeket es a csomagok ko-zott fennallo konfliktusokat is kezeli.

Csak ha adminisztratori joggal futtatjuk a programot, telepıthetunk, frissıthetunk, il-letve torolhetunk csomagokat. Alapesetben a dselectet parameterek nelkul hasznaljuk,mivel indıtaskor egy interaktıv menu jelenik meg, mely a felhasznalo altal vegrehajthatomuveleteket tartalmazza.

Amennyiben ezen muveletek valamelyiket megadjuk parameterkent, akkor az indıtasutan azonnal megkezdodik. Jonehany parancssori parameter all rendelkezesre, hogy modosıtsuka dselect kornyezetet, illetve, hogy tovabbi informaciokat jelenıtsunk meg a programrol.A fomenu a kovetkezoket tartalmazza:

Access Method

Itt kulonbozo beallıtasok adhatok meg arra vonatkozolag, honnan szerezze be aprogram az elerheto csomagok verzioinak listajat, illetve magukat a csomagokat.Ezeket a beallıtasokat a program eltarolja, ezert a kesobbi indıtasok eseten nem kellujra konfiguralnunk. A forrasok az alabbiak lehetnek:

cdromTelepıtes a Debian altal terjesztett mediumrol, melyeket .iso allomanykentis elerhetunk a legkulonbozobb anonymous ftp szerverekrol. A lemeznek nemkell szuksegkeppen mountolva lennie a fajlrendszerbe.

Page 18: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

14

nsfTelepıtes olyan NFS szerverrol, melynek nem kell a felmountolva lennie.

hard diskTelepıtes merevlemez partıciojarol, ahol a partıcio nem feltetlenul resze afajlrendszerunknek.

mountedGyakorlatilag egy megadott konyvtarbol torteno telepıtes.

floppy Lemezes telepıtes, melynek eseten legalabb egy lemeznek a csomagleırofajlt kell tartalmaznia, a tobbinek pedig magukat a csomagokat.

aptEz az eljaras egyesıti magaban az elobb felsoroltak legtobbjet. Itt a forrasunklehet helyi fajlrendszer, ftp, valamint http URL. Tamogatott a csomagok ren-dezett telepıtese, fuggosegkezeles, egyidejuleg tobb forras megadasa, ahol ahalozaton keresztul torteno eleresnel proxy szervert is megadhatunk. A kife-jezetten ajanlott beszerzesi eljaras az apt.

Minden adathordozon szuksegkepp lenni kell Packages.gz allomanynak, mindendisztribucios teruletre, melyek altalaban a main, contrib, non-free neveket viselik.Lemezes telepıtesnel a kulon csomagleıro allomanyok kulon floppyn helyezkednekel.

UpdateAz elerheto csomagok adatbazisanak frissıtese, ami jelenti a csomagleıro allomanybeszerzeset –a beallıtott metodus szerint– valamint a dpkg adatbazisanak frissıteset.Altalanosan elmondhato, hogy a leıro fajl Packages, vagy Packages.gz nevu al-lomanykent talaljuk a forraskent megadott helyen.

SelectA csomagok vizsgalata, erdemi kezelese. Ezt a menut kivalasztva a felhasznaloegy listat tekinthet meg minden a rendszerben telepıtett, illetve elerheto csomagrol.Adminisztratori joggal futtatva interaktıv modon valtoztathato a csomagok allapotais. A dselect megallapıtja valtoztatasaink hatasat, a valasztottaktol fuggo, illetveazokkal konfliktusokban levo csomagokra. Amennyiben ellentmondas, vagy hibasfuggoseget fedez fel, akkor a felhasznalo errol egy figyelmezteto kepernyon ertesul,ahol a fuggo, vagy ellentmondasban levo csomagok listaja jelenik meg, amelybenminden csomag mellett lathato a csomag megjelenıtesenek oka. Itt a felhasznaloelfogadhatja vagy, felulbıralhatja, a dselect altal nyujtott javaslatot, vagy akar visszais terhet a valtoztatasok elotti allapothoz, beleertve azokat is, amelyek a feloldatlanfuggosegeket, vagy konfliktusokat hoztak letre.

Page 19: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

15

InstallA beallıtott hozzaferesi eljaras (access method) segıtsegevel megszerzi a telepı-tendo, illetve frissıtendo csomagokat, majd a dpkg-nak atadva, vegrehajtja raj-tuk a kıvant akciot. A hozzaferesi eljarastol fuggoen a torlesre kijelolt csoma-gok eltavolıtasra kerulnek, illetve letolthetok telepıtes elott, ha arra szukseg van.Amennyiben hiba merul fel, altalaban celravezeto a telepıtes megismetlese. Alegtobb esetben ez azt eredmenyezi, hogy a problema megszunik. Ellenkezo eset-ben, vagyis ha a gond allandosul, el kell melyednunk a korulmenyek es az okokvizsgalataban. Mindemellett, ha arra gyanakszunk, hogy a fennallo problema prog-ramhibabol adodik, azt jelezhetjuk a Debian fele.

ConfigKonfiguralja a mar korabban telepıtett, de nem teljesen beallıtott csomagokat.

RemoveTorli, vagy kiırtja az erre kijelolt csomagokat.

QuitKilepes a programbol.

4.3. aptAz Advenced Package Tools, vagy rovidebb neven az APT, parancssori parameterekkelvezerelt csomagkezelo rendszer, ami tulajdonkeppen elotet programja a dpkg-nak. Igazannagy elonye kenyelmessegeben, illetve naprakeszsegeben rejlik, hiszen, a vele kezde-menyezett muveletek eseten a fuggosegi, illetve –a legkulonbozobb forrasokbol torteno–archıv allomany beszerzesi problemak megoldasanak terhet leveszi a vallunkrol.

A naprakeszseg itt az up-to-date frissıtest jelenti, azaz hogy a mar telepıtett cso-magjainkat, egyszerre, alap APT parancsok kiadasaval, egyszeruen es zokkenomentesen,cserelhetjuk le az elerheto legfrissebb verziora. Talan ebben rejlik a Debian alapu rend-szerek egyik legnagyobb elonye. Mindemellett az APT nem csupan programcsomag,hanem fejlesztoi eszkoz, mely tovabbi alkalmazasok fejleszteset teszi lehetove fuggveny-konyvtarain keresztul.

4.3.1. Az apt-get parancs

Ez a parancs hasznalatos leggyakrabban, mivel vele vegezhetjuk el a legaltalanosabb, cso-magokhoz fuzodo muveleteket, ugy is mint; telepıtes, torles, frissıtes, stb. Itt jegyeznemmeg, hogy az alabbi, az APT programcsomag mukodesenek szemleltetesere kozreadottpeldak az UHU-Linux 1.0-rc3 verziojabol szarmaznak.

update A csomagkezelo rendszer egy sajat adatbazisban koveti nyomon, mely cso-magok kerultek mar telepıtesre, melyek nem, illetve melyek azok, amik rendelkezesre

Page 20: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

16

allnak a kulonbozo mediumokon. Az apt-get arra hasznalja fel ezt az adatbazist, hogymegallapıtsa mikepp kell a felhasznalo altal igenyelt programot telepıteni, valamint mi-lyen egyeb csomagok telepıtese szukseges meg a program megfelelo mukodesehez. Ezaz opcio tehat az adatbazis frissıtesere szolgal, vagyis a csomag listajat tartalmazo archıvallomanyokat keres az /etc/apt/sources.list allomanyban megadott tarolokon, esezekbol az informaciokbol epıti ujra a sajat adatbazisat. Mindenkepp hasznos ezen pa-rancs rendszeres idokozonkenti kiadasa annak erdekeben, hogy rendszerunk ertesuljon azesetleges csomag- es biztonsagi frissıtesekrol.

uhulinux:$ apt-get updateGet:1 ftp://ftp.uhulinux.hu ./ Packages [114kB]Hit ftp://ftp.uhulinux.hu ./ ReleaseFetched 114kB in 1s (83.0kB/s)Reading Package Lists... DoneBuilding Dependency Tree... Done

A Get: sorszama az /etc/apt/sources.list allomanyban megadott ervenyes be-jegyzesekkel azonos, es azok sorrendjeben is kerul meghıvasra, illetve megjelenıtesre.

install Miutan az elozo parancsot kiadtuk, minden keszen all a kıvant csomag telepıte-sehez. Az APT megkeresi adatbazisaban a kert csomag legfrissebb verziojahoz tartozocsomagleırot, majd a hozza tartozo sources.list bejegyzes alapjan, mediumtol fuggoenbeszerzi az archıv allomanyt. Abban az esetben, ha a csomagnak fuggosegei is vannak,az APT megvizsgalja ezeket, es telepıti a tovabbi szukseges csomagokat is.

uhulinux:˜$ apt-get install nautilusReading Package Lists... DoneBuilding Dependency Tree... DoneThe following extra packages will be installed:bonobo libmedusa0 libnautilus0The following NEW packages will be installed:bonobo libmedusa0 libnautilus0 nautilus0 packages upgraded, 4 newly installed, 0 to remove and 1not upgraded.Need to get 8329kB of archives. After unpacking 17.2MB willbe used.Do you want to continue? [Y/n]

A nautilus fugg a fent felsorolt csomagoktol, ezert az APT azok telepıteset is megkezdi.Amennyiben megadtuk volna oket az apt-get parancs parameterekent a nautilus mogott,a program nem kerdezne ra telepıtesi szandekunkra kulon, vagyis az APT csak akkor kermegerosıtest a felhasznalotol, ha olyan csomagot kell telepıtenie, amit nem adtunk meg

Page 21: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

17

kozvetlenul.

Az alabbi opciok esetenkent hasznosak lehetnek:

Sugo

-h, --help Megjelenıti a sugot.

Csak letoltes

-d, --download-only A meghatarozott csomagok archıv allomanyai nem kerul-nek sem kicsomagolasra, sem telepıtesre, csupan letoltodnek az APT archıvkonyvtara ala (/var/cache/apt/archives).

Page 22: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

18

Helyreallıtas

-f, --fix-broken Megkıserli az olyan rendszer javıtasat, melyben a fuggose-gi viszonyok nem oldhatok fel maradektalanul. Ez az opcio az install, il-letve remove parancsokkal egyutt hasznalva, lehetove teszi barmely csomagkihagyasat, annak erdekeben, hogy a teljes folyamat levezetheto legyen. (Ne-mely esetben az APT elso futtatasakor is szukseges lehet ennek az opcionak amegadasara.) Az APT maga nem engedi meg, hogy fel nem oldott fuggosegeklegyenek jelen a rendszerben, ami egyuttal azt is jelent, hogy a fuggosegi szer-kezet esetleges hibai eseten, szukseg lehet a manualis beavatkozasra.

Hianyzo csomagok mellozese

-m, --fix-missing Abban az esetben ha a csomagok nem tolthetok le, vagy ha aletoltest kovetoen az integritas vizsgalat meghiusul (vagyis az archıv allomanyhibas), a csomagkezelo visszatartott allapotura jeloli oket, ami azt jelenti,hogy annak feloldasaig a csomag nem frissul, annak ellenere sem, hogy ujabbverzio elerheto.

Szimulacio

-s, --simulate Semmilyen valtoztatas nem hajtodik vegre, csupan szimulaljuka parancs vegrehajtasat.

Automatikus igenlo valasz a feltett kerdesekre

-y, -yes, --assume-yes Minden, a csomagok telepıtese/eltavolıtasa kozben fel-merulo kerdesre a rendszer automatikusan igenlo valaszt ad, ezzel megszun-tetve a muvelet interaktivitasat. Amennyiben egy nem kıvanatos esemenykovetkezne be, vagyis egy visszatartott csomag megvaltoztatasat, vagy egyalapveto csomag torleset kellene az APT-nek vegrehajtani, a futas megsza-kad.

A frissıtett csomagok listaja

-u, --show-upgraded Listat ır ki a rendszerben megtalalhato es mar frissıtettcsomagokrol.

Telepıtes es torles egy sorban Lehetoseg van egy soron belul megadni torlendo, illetvetelepıtendo csomagokat is, ugy, hogy az eltavolıtani kıvant csomagok neve utan kozvet-lenul ’-’ jelet gepelunk.

uhulinux:˜$ apt-get install nautilus gnome-panel-Reading Package Lists... Done

Page 23: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

19

Building Dependency Tree...Done The following extra packages will be installed: bonobolibmedusa0 libnautilus0The following packages will be REMOVED:gnome-applets gnome-panel gnome-panel-data gnome-sessionThe following NEW packages will be installed:bonobo libmedusa0 libnautilus0 nautilus0 packages upgraded, 4 newly installed, 4 to remove and 1not upgraded.Need to get 8329kB of archives. After unpacking 2594kB willbe used.Do you want to continue? [Y/n]

Ujratelepıtes Ha valamely modon egy csomag meghibasodik, vagy ha csupan azt sze-retnenk, hogy csomagunk, illetve azok allomanyai felulırodjanak az elerheto legujabbverzioeval, a --reinstall opciot kell hasznalnunk, mely az alabbihoz hasonlo kimene-tet produkal:

uhulinux:˜$ apt-get --reinstall install gdmReading Package Lists... DoneBuilding Dependency Tree... Done0 packages upgraded, 0 newly installed, 1 reinstalled, 0 toremove and 1 not upgraded.Need to get 0B/182kB of archives. After unpacking 0B willbe used.Do you want to continue? [Y/n]

Telepıtes megadott disztribuciobol es verzioszammal Amennyiben az altalunk hasz-nalt APT verzioszama magasabb mint 0.5.3 (ami a szakdolgozat keszıtesekor 0.5.5), akkorlehetosegunk van a telepıteni kıvant csomag verziojanak, illetve disztribuciojanak kozvet-len megadasara, a kovetkezokeppen:

apt-get install csomagnev=verzioapt-get install csomagnev/disztribucio

Remove A torles a telepıtessel megegyezo menetu, de ellentetes folyamat, ezert aztanszintaktikaja is azonos:

uhulinux:˜$ apt-get remove gnome-panelReading Package Lists... DoneBuilding Dependency Tree... DoneThe following packages will be REMOVED:

Page 24: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

20

gnome-applets gnome-panel gnome-panel-data gnome-session0 packages upgraded, 0 newly installed, 4 to remove and 1not upgraded.Need to get 0B of archives. After unpacking 14.6MB will befreed.Do you want to continue? [Y/n]

Mint az a fenti peldabol latszik –eppen ugy mint telepıtesnel– az APT kezeli helyettunka torlendo csomag fuggosegeit, ami jelen esetben azt jelenti, hogy a megadott csomagtolfuggo csomagok is torlodnek, es ennek elkerulesere nincs is semmilyen mod, ha az APT-thasznaljuk. Megjegyzendo, hogy a fenti esetben, ha a csomaghoz tartoznak konfiguraciosallomanyok, azok sertetlenul megmaradnak a rendszerben.

Teljes torles Amennyiben azt kıvanjuk, hogy a csomaghoz tartozo osszes allomany,beleertve a konfiguracios fajlokat is torlodjek, a -purge opciot kell hasznalnunk, melynela kimeneten a csomagnevek mellett ’*’ karakterek jelzik, hogy a csomaghoz tartozo min-den allomany torlesre kerul.

uhulinux:˜$ apt-get --purge remove gnome-panel ReadingPackage Lists... Done Building Dependency Tree... Done Thefollowing packages will be REMOVED: gnome-applets*gnome-panel* gnome-panel-data* gnome-session* 0 packagesupgraded, 0 newly installed, 4 to remove and 1 not upgraded.Need to get 0B of archives. After unpacking 14.6MB will befreed. Do you want to continue? [Y/n]

Torles es telepıtes egy sorban A telepıtesnel kifejtettekhez hasonloan, a remove parancseseten is lehetosegunk van egy soron belul telepıteni es torolni, azzal a kulonbseggel, hogyebben az esetben nem ’-’, hanem ’+’ jelet kell tennunk a telepıtendo, es nem a torlendocsomag neve utan.

uhulinux:˜$ apt-get --purge remove gnome-panel nautilus+Reading Package Lists... DoneBuilding Dependency Tree... DoneThe following extra packages will be installed: bonobolibmedusa0 libnautilus0 nautilusThe following packages will be REMOVED:gnome-applets* gnome-panel* gnome-panel-data* gnome-session*The following NEW packages will be installed:bonobo libmedusa0 libnautilus0 nautilus0 packages upgraded, 4 newly installed, 4 to remove and 1not upgraded.

Page 25: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

21

Need to get 8329kB of archives. After unpacking 2594kB willbe used.Do you want to continue? [Y/n]

Upgrade A parancs a rendszerben jelenleg telepıtett osszes csomag egyideju frissıtesereszolgal. Mint minden korabbi esetben, itt is a legfrissebb verziora tortenik a frissıtes, es acsomagok elerhetosegeben az /etc/apt/sources.list allomany a meghatarozo. A marjelenleg is az elerheto legfrissebb verzioval rendelkezo csomagok is frissulnek, azonbansemmi esetre sem torlodnek olyan csomagok, melyek telepıtve vannak a rendszerben, il-letve nem telepıtodnek olyanok melyek eddig ne lettek volna installalva. Az olyan csoma-gok, melyek nem frissıthetoek anelkul, hogy mas csomagok statuszat ne modosıtanank,jelenlegi allapotukban maradnak. A parancs kiadasa elott mindenkepp futtatnunk kell azupdate parancsot is, hogy az apt-get megtudja, hogy a frissıtendo csomagok mely verziojaall rendelkezesre. A parancs csak akkor hasznalhato ha a korabbival azonos disztribucioraakarunk frissıteni, ellenkezo esetben a dist-upgrade parancsot kell hasznalnunk, amirol akovetkezo fejezetben szolunk.

uhulinux:˜$ apt-get upgradeReading Package Lists... DoneBuilding Dependency Tree...Done The following packages have been kept backcpp gcc liloThe following packages will be upgradedadduser ae apt autoconf debhelper dpkg-dev esoundesound-common ftp indent ipchains isapnptoolslibaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbitprocps psmisc29 packages upgraded, 0 newly installed, 0 to remove and 3not upgraded.Need to get 5055B/5055kB of archives. After unpacking1161kB will be used.Do you want to continue? [Y/n]

A folyamat itt is rendkıvul egyszeru. Ha a kiadott parancs kimeneten, megjelenik, hogycsomagok visszatartasra kerultek (kept back), ez azt jeleni, hogy a rendszerben a jelen-leg telepıtettnel csak regebbi verzioju all rendelkezesre a megadott forrasokon, ezert arendszer a fuggosegek integritasanak megorzese erdekeben, ezen csomagok frissıteseta verzioszam egyezeseig felfuggeszti, vagyis statuszat ”keep”-re allıtja. paragraphDist-upgrade A parancs teszi lehetove a kulonbozo Debian disztribuciok kozotti valtast. Megkell jegyezni azonban, hogy az APT mindig a legujabb verzioju csomagot telepıti, ezert

Page 26: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

22

ovatosan kell bannunk ezzel a paranccsal, hiszen hiaba is probalnank atterni egy olyandisztribuciora, mely a jelenleginel regebbi csomagokat tartalmaz, hisz ezzel csak azternenk el, hogy a frissıtesnek megadottnal ujabb csomagjaink allapotat a rendszer vissza-tartottra (keep) allıtana. Itt jegyzendo meg, hogy amennyiben az APT forrasokat tartal-mazo allomanyban tobb forras is szerepel, onnan mindig az valasztodik ki, amelyik altaljelolt forrason, az adott csomagbol a legfrissebb verzio erheto el.

Page 27: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

23

uhulinux:˜$ apt-get dist-upgradeReading Package Lists... DoneBuilding Dependency Tree... DoneCalculating Upgrade... DoneThe following NEW packages will be installed:cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtimelibopenldap1 libpcre2 logrotate mailxThe following packages have been kept backliloThe following packages will be upgradedadduser ae apt autoconf cpp debhelper dpkg-dev esoundesound-common ftp gcc indent ipchains isapnptoolslibaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbitprocps psmisc31 packages upgraded, 10 newly installed, 0 to remove and 1not upgraded.Need to get 0B/7098kB of archives. After unpacking 3118kBwill be used.Do you want to continue? [Y/n]

Source A parancs segıtsegevel, a sources.list allomanyban deb-src tıpussal bejegyzettforrasokrol - mivel ezen csomagok a binarisaktol elkulonıtve kerulnek tarolasra –forras-csomagokat tolthetunk le az aktualis konyvtarba, abban az esetben ha nincs, vagy ha a--download-only opciot adjuk meg, illetve egyuttal binaris csomagot - azaz .deb ki-terjesztesu allomanyt– hozhatunk letre, a dpkg-buildpackage programmal, amennyiben a--compile opciot hasznaljuk. Nem szabad megfeledkeznunk arrol, hogy ez a csomagnem feltetlenul ugyanaz, mint amit az install paranccsal telepıtenenk. Megjegyzendomeg, hogy a folyamat soran 3 allomany toltodik le, egyazon nevvel, de kulonbozo kiter-jesztesekkel, melyek kozul az orig.tar.gz tartalmazza magat a forrast, es a .dsc segıtennek, egy csomagnev-verzioszam nevu konyvtarba torteno, kicsomagolasaban. Abbanaz esetben, ha a csomag kifejezetten Debian rendszerhez keszult .diff.gz allomany nemtoltodik le, es altalaban az ”orig” szo nem szerepel a tomorıtett forras neveben.

Page 28: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

24

Clean Mint arra az elnevezesbol is kovetkeztethetunk, a parancs ugymond takarıtasraszolgal, ami a gyakorlatban azt jelenti, hogy a lock fajlok kivetelevel, minden, a csoma-gokhoz tartozo allomany torlodik a /var/cache/apt/ konyvtarban talalhato archiveses partial konyvtarakbol. Eppen ezert celszeru a parancsot idorol-idore kiadni, fokeppha /var kulon partıcion helyezkedik el, hisz ekkor annak beteltevel a csomagok frissıtesenem lehetseges, emellett pedig mas szolgaltatasok –ugymint naplozas– atmeneti leallasatis okozhatja. paragraphAutoclean Ugyanazt a celt szolgalja, mint a clean, azzal a ku-lonbseggel, hogy ebben az esetben csak azon allomanyok kerulnek torlesre, melyekre akesobbiekben mar biztos, hogy nem lesz szukseg. Erre pelda egy olyan csomag archıvallomanya, melytol ujabb verzioju van telepıtve a rendszeren.

4.3.2. Az apt-cache parancs

Ez a program az a bevezetoben mar emlıtett eszkoz, mely a csomagok informacioinakmegjelenıteset, illetve az APT csomaginformaciokat tartalmazo allomanyaban tortenoadatbanyaszast teszi lehetove. Ezen eszkoz segıtsegevel a csomagok, illetve a rendszerallapota nem valtoztathato meg, de lehetosegunk van –kulonbozo opciok megadasan ke-resztul– olyan kimenetek generalasara, melyekbol informaciokat szurhetunk le a csoma-gok, valamint a rendszer allapotaval kapcsolatban. A szakdolgozat targyat kepezo prog-ram tulajdonkeppeni celja, hogy megjelenıto feluleteivel kivaltsa ezt az eszkozt, illetvepotolja annak hianyossagait, gyengesegeit. paragraphgencache Az apt-get check pa-rancshoz hasonlo eredmennyel jar, vagyis letrehozza a binaris es a forras cache allomanyt,az /etc/apt/sources.list forrasbol letoltott adatok, illetve a /var/lib/dpkg/statusfajl alapjan, a /var/cache/apt/ konyvtar ala. paragraphshowpkg A parameterkent meg-adott, csomag(ok)rol jelenıt meg informaciokat az alabbi modon:

uhulinux:˜$ apt-get cache showpkg aptPackage: aptVersions:0.5.4-7.2(/var/state/apt/lists/ftp.uhulinux.hupub uhu 1.0 . Packages)(/var/lib/dpkg/status)

Reverse Depends:uhu-installer,aptuhubuild-under-chroot,aptsynaptic,apt 0.5.4edeity,apt 0.5.4Dependencies:0.5.4-7.2 - bash (2 2.05b) gcc-lib (2 3.2.2) glibc (2 2.3.2)libstdc++5 (2 3.2.2) perl (2 5.8.0) uhu-pkg (2 0.2)Provides:

Page 29: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

25

0.5.4-7.2 -Reverse Provides:

stats Informaciokat jelenıt meg a cache allomanyrol (eppen ezert tovabbi parameterekmegadasa nem lehetseges).

uhulinux:˜$ apt-get cache statsTotal Package Names : 1232 (49.3k)Normal Packages: 1193Pure Virtual Packages: 0Single Virtual Packages: 0Mixed Virtual Packages: 0Missing: 39virtualis cso Total Distinct Versions: 1208 (58.0k)Total Dependencies: 6607 (185k)Total Ver/File relations: 1730 (27.7k)Total Provides Mappings: 0 (0)Total Globbed Strings: 25 (194)Total Dependency Version space: 35.7kTotal Slack space: 89.1kTotal Space Accounted for: 409k

Az egyes sorok ertelmezese a kovetkezo:

Total package names

A cache allomanyban talalhato csomagok szama.

Page 30: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

26

Normal packages

Normal csomagok szama, melyek eseteben egy az egyhez megfeleltetes allfenn a csomag neve es a mas csomagok fuggosegeiben szereplo, erre a cso-magra utalo nev kozott.

Pure virtual packages

Tisztan virtualis csomagok szama, melyek semmilyen mas celt nem szolgal-nak, csak hogy normal csomagokat gyujtsenek egy virtualis csomagnev ala,melyet egyeb csomag nem hasznal.

Single virtual packages

Egyedi virtualis csomagok szama, melyek esetben egyetlen csomag alkotja avirtualis csomagot, ugyanazon nevvel.

Mixed virtual packages

Vegyes virtualis csomagok szama, vagyis azoke, melyeknel ket csomag nyujtegy virtualis csomagot, vagy letezik normal csomag a virtualis csomag neve-vel.

Missing packages

Hianyzo csomagok, melyek hivatkozottak mas csomagok fuggosegi listaja-ban, de nem szerepelnek a valodi csomagok kozott, ennek oka lehet az, hogyegy teljes disztribucio nem erheto el, vagy az adott csomagot eltavolıtottakbelole.

Total ditinct versions

Csomagverziok szama, azaz a cache allomanyban talalhato kulonbozo ver-zioju csomagok szama, ami mindig kisebb, vagy egyenlo a csomagnevekszamaval, attol az esetto eltekintve, mikor tobb disztribuciot is megadunk,ilyenkor meghaladhatja ezt a szamot.

Total dependencies

Fuggosegek szama, ami az osszes a cache allomanyban szereplo csomag fug-gosegeinek osszesıtett erteke.

dump Egy, az osszes csomagot erinto rovidıtett listat jelenıt meg, melyet elsosorbanhibakeresesre hasznalhatunk fel. paragraphdumpavail Az osszes elerheto csomag pa-rametereit kiırja a kepernyore.

Page 31: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

27

unmet Osszefoglalot keszıt a rendszerben levo feloldatlan fuggosegekrol.

show A dpkg -print-avail parancshoz teljesen hasonloan egy listat ad a megadottcsomag mezoinek ertekerol.

uhulinux:˜$ apt-cache show aptPackage: aptVersion: 0.5.4-7.2Section: consolePriority: optionalArchitecture: i386Depends: bash (>= 2.05b), gcc-lib (>= 3.2.2), glibc (>=2.3.2), libstdc++5 (>= 3.2.2), perl (>= 5.8.0), uhu-pkg (>=0.2)Distribution: UHU Linux devVendor: UHU Linux TeamInstalled-Size: 1440Installed-Sizes:1396 /usr192 /usr/share92 /usr/share/doc28 /varMaintainer: UHU Maintainer Team <maintaineruhulinux.hu>Source: apt 0.5.4-7Description: Dpkg csomagkezel}o kezeleset segıt}o programDpkg csomagkezel}o kezeleset segıt}o programFilename: ./apt 0.5.4-7.2 i386.uhuMD5Sum: edbb52690c69de2aecf4404ca2cbd6ebSize: 526656

search A megadott kulcsszot –ami lehet regularis kifejezes is– keresi az elerheto csoma-gok nev, illetve leıras mezoiben. Amennyiben egyezest talal, megjelenıti az adott csomagnevet es rovid leırasat, kotojellel elvalasztva.

Page 32: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

28

5. Az APT cache allomanyAz APT cache allomany lehetoseget biztosıt felhasznaloi felulete kialakıtasara azaltal,hogy a rendszerben tarolt –nagy szamu– csomagokrol adatokat tarol, es ezeket elemez-hetove teszi. Az allomany kialakıtasanak elsodleges celja az volt, hogy kepet kaphassunkegy onallo csomagrol, es emellett lathassuk annak a faban betoltott helyet es szerepetis, amit a cache bejegyzeseben elhelyezett fuggosegek es egyeb fontos informaciok biz-tosıtanak.

5.1. Az APT cache allomany celjaAz APT cache allomany letrehozasanak alapvetoen ket celja volt. Az elso, a csomagleıroktombjenek gyors betolthetosege es kezelhetosege, a masodik a memorihasznalat vissza-szorıtasa volt.

Az implementaciot olyan kornyezetre terveztek, melyben tobb elsodleges csomagleıroallomany lehetseges. Peldakent megemlıtheto az az eset, ha van egy csomagleıronka telepıto CD-ROM lemezen, egy a disztribucio legujabb verziojahoz, valamint egy adisztribucio fejlesztoi verziojahoz. Mindezen informaciok rendelkezesre allnak a statuszallomanyban, mely egy kulonallo csomagleıronak is tekintheto.

Kiemelendo, hogy a statusz allomany kifejezetten cache allomanynak lett tervezve,vagyis nem arra, hogy a gazdarendszeren kıvul hasznaljuk. Emellett nem tekintheto hite-lesnek sem, mivel egy rendszerosszeomlas, vagy szoftverhiba kovetkezteben teljesen elfo-gadott, hogy a cache allomany inkonzisztens allapotu legyen, valamint barmikor torolhetoinformaciovesztes nelkul.

A tarolasi szerkezet az APT GUI altali hasznalatra lett megtervezve, es nem feltetlenulalkalmas egyeb celokra, bar elvileg kiterjeszthetonek kell lennie, olyan kapcsolodo cacheallomanyokkal, melyek mas informaciokat tartalmaznak.

A memoriafelhasznalas alacsonyan tartasanak erdekeben a cache allomany csak agyakran hasznalt, es a keves eroforras felhasznalasaval tarolhato mezoket tarolja, a mezokteljes listajat pedig a csomagleıro allomany tartalmazza. A kliensek feltetelezhetik, hogyaz egyes elemek helyesek, es nem kell emiatt ellenorzeseket vegrehajtani. Informaciokeltavolıtasa a cache allomanybol lehetseges, de ures reszek es nem hasznalt sztringek ma-radhatnak a fajlban.

Minden egyes elem minden strukturaban a cache allomany indexekent tarolodik. Mi-vel ezek az allomanyok mmap eljarassal lettek letrehozva, minden egyes adathozzaferes-nek keresztul kell mennie egy olyan eljarason, melynek vegeredmenyekent egy valodi me-moriacımet kapunk eredmenyul. Ez ugy tortenik, hogy vesszuk az index erteket, megszo-rozzuk a tıpus meretevel, majd hozzaadjuk a memoriablokk kezdocımehez. Ez bonyolul-tan hangzik, de C nyelven ez csak egy egyszeru tombmuvelet. Mivel minden elem igazıtva

Page 33: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

29

van sajat meretehez es az indexek a strukturak mereteinek tobbszoroseikent tarolodnak, aformatum atalakıtas nelkul atviheto mas architekturakra, am a generalt allomany nem.

Ez sema lehetove teszi az ehhez hasonlo kodok ırasat:

void *Map = mmap(...);Package *PkgList = (Package *)Map;Header *Head = (Header *)Map;char *Strings = (char *)Map;cout << (Strings + PkgList[Head->HashTable[0]]->Name) >>endl;

A vegeredmeny az elso hash tablaban levo elso csomag neve, hibaellenorzes nelkul.

A generator biztosıtja az indexek egyediseget es azt, hogy ne legyen a strukturakkozotti atfedesek. Bar elso pillantasra ugy tunhet, lehetoseg van arra, hogy ket strukturaletezzen ugyanazon a helyen, de a generator ezt soha nem engedi meg.

5.2. Az APT cache allomany szerkezete

Fejlec A fejlec szerkezeti leırasat a A.1 fuggelek, annak ertelmezesenek reszleteit azAPT Cache File Format 2.1 fejezete tartalmazza.

Csomag Ez a resz informaciokat tartalmaz az egyszeru egyedi csomagokrol. Egy cso-magnak –mint az a struktura szerkezetebol latszik– akarhany verzioja lehet. A szerkezetetmegvalosıto strukturat az A.2 tartalmazza.

Csomagfajl Ebben a szekcioban informaciok talalhatok a csomagallomanyrol, melyeka verzio reszbol is hivatkozottak. Ez egy lancolt lista, melynek bazisat a fejlec FileListvaltozoja mutatja. A szerkezetet megvalosıto strukturat az A.3 tartalmazza.

Verzio Ez a resz a fentiekhez teljesen hasonlo lancolt lista, am itt a lista bazisat a fejlecVersionList valtozoja adja. A szerkezetet megvalosıto strukturat az A.4 tartalmazza.

Fuggosegek Ez a resz a fuggosegi rekordokat tartalmazza lancolt listaban, aminek bazisaa fejlec DependsList valtozoja. A fuggoseges minden formaja (Conflicts, Suggests, Re-commends) ebben a strukturaban van bejegyezve. Ha tobbszoros fuggoseg van ugyanazona csomagon, azoknak egymas mellett kell elhelyezkedniuk a fuggosegi listaban. A szer-kezetet megvalosıto strukturat az A.5 tartalmazza.

Virtualis csomagok Mikor a feldolgozas soran egy Provides mezohoz erunk, egy ujprovides bejegyzes jon letre, mely osszeegyezteti a csomagot egy virtualis csomag neve-vel. A provides struktura kimutat a csomagok strukturajabol, mivel a virtualis csomagokcsupan logikai cımkek. Ez a megoldas megkonnyıti a fuggosegek vizsgalatat. Egy pro-vides egy konkret csomag adott verziojara hivatkozik, ezert nem minden csomagnak kell

Page 34: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

30

nyujtania a virtualis csomagot, am minden olyan csomagtol kezdodik egy virtualis cso-magneveket tartalmazo lista, mely valoban nyujtja a virtualis csomagot. A szerkezetetmegvalosıto strukturat az A.6 fuggelek tartalmazza.

Page 35: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

31

6. Az APT programozasaAz APT letrehozoi nem csupan arra gondoltak, hogy egy rendkıvul jol hasznalhato esreszleteiben is jol atgondolt csomagkezelesi rendszert adjanak a felhasznalok kezebe, ha-nem arra is, hogy a tovabbi fejleszteseket elosegıtendo, olyan feluletet nyissanak prog-ramcsomagjuk fole, mely lehetove teszi a fejlesztok szamara a korabban mar kialakıtottfunkciok hasznalatat az APT forraskodjanak modosıtasa nelkuli hasznalatot. Ezen torek-ves eredmenyekent szamos fuggveny all a fejlesztok rendelkezesere, melyeket tartalmazoheader fajlok kozul a program megırasakor hasznaltakat az alabbiakban ismertetjuk.

6.1. A csomagkezelo programkonyvtar elokeszıteseconfiguration.h Ez az osztaly biztosıt egy konfiguracios fajl es egy parancssor

ertelmezot a fa-jellegu konfiguracios kornyezethez. Minden futasideju beallıtas itttarolodik, azonban ez az osztaly csupan tarolast es keresest biztosıt a faban, a kon-figuracios allomanyok formatuma mas osztalyokban tarolodik.

init.h Az itt deklaralt fuggvenyek (pkgInitConfig pkgInitSystem) meghıvasa el-engedhetetlen az APT fuggvenykonyvtarban talalhato funkciok helyes mukodese-hez.

6.2. Cache allomany eloallıtasapkgcachegen.h Ez az osztaly felelos a cache allomany szerkezetenek –a csomagok

listajabol torteno– kialakıtasaert. Minden egyes forrasnak megvan a maga sajatlista-feldolgozoja, mely adatokat szolgaltat a cache generator fuggveny fele. Acache fajl egyes reszeit a lista-feldogozok, mıg mas reszeit ez az osztaly hozzaletre. Az elobbi felelos a version, a depends es a provides reszek letrehozasaert.

6.3. Cache allomany kezelesepkgcache.h Az 5.2 fejezetben targyalt cache allomany kezelesere es az allomany e-

lemeinek eleresere –a CacheItarator strukturakon keresztul– szolgalnak az ittdefinialt osztalyok.

cacheiterator.h Mint azt feljebb emlıtettuk, a CacheIteratorok szolgalnak a cacheallomanyban torteno navigalasra.Az alabbi CacheIteratorokat kulonboztetjuk meg:

PkgIteraor A csomagok adatainak tarolasara.

VerIteraor A verzioihoz kapcsolodo informaciokhoz torteno hozzaferesre.

Page 36: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

32

DepIteraor A fuggosegi viszonyok lekerdezhetosegere.

PrvIteraor A virtualis csomagok kezeleseert.

PkgFileIteraor Az archıv allomanyok elerhetosegere.

A CacheIteratorok szerkezetenek reszletei a A.2 fuggelektol kezdodoen tekint-hetoek meg.

Megjegyzendo, hogy minden CacheIteratorra ertelmezettek a ”++”, ”==”, ”!=”,

”->” es a ”*” operatorok, melyek rovidebb es attekinthetobb kod ırasat teszik le-hetove, azokban az esetekben, mikor az egyes CacheItaratorok lancolatahoz kellhozzafernunk.

Kulon is erdemes megjegyezni, hogy a DepIterator kepes a csomag, ”normal” esfordıtott fuggosegeit egyarant tarolni es kezelni. Tıpusa a konstruktornak atadottstruktura tartalmatol fugg, mivel az kepes mindket fuggosegi viszony tarolasara.Ez a szerkezeti megvalosıtas a PrvIteratoroknal is teljesen hasonlo.

6.4. Csomagok kezelesedepcaches.h Ez az osztaly tarolja a cache allomany adatait, valamint kiterjesztett

strukturakat biztosıt a csomagok aktualis allapotanak figyelesere. Ezen felul afuggo csomagok statuszanak beallıtasaert is ez az osztaly a felelos.

StateCache Ez a struktura tarolja a cache allomany allapotat, valamint segıtse-gevel biztosıtani tudjuk, hogy az allomany csak olvashato legyen. A meg-valosıtas eszkoze az, hogy a cache allomany csak az adatok mentesekor frissula belso tarbol.

srcrecords.h A forrascsomagok kezelesere kialakıtott osztaly, mely biztosıtja egye-bek kozott a forrascsomagok listajaban torteno keresest.

6.5. Vegyes algoritmusokalgorithms.h Az itt definialt osztalyok segıtsegevel nyomon kovethetjuk, hogy mit

hajt vegre a rendezo algoritmus, sot analizalhatjuk is egy fuggosegi cache allo-manyon keresztul. Mindezeken tul ezen osztalyok virtualis fuggvenyein keresztulkepesek vagyunk egy frissıtesi folyamat minden lepeset nyomon kovetni. Itt de-finialtak tovabba a kovetkezo globalis hatassal bıro fuggvenyek:

pkgAllUpgrade Minden olyan csomag frissıteset hajtja vegre, melyhez nem kellujabb csomago(ka)t telepıteni.

Page 37: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

33

pkgDistUpgrade Lebonyolıt egy olyan frissıtesi eljarast, mely minden csomagoterint, melynek van elerheto ujabb verzioja.

pkgApplyStatus A half-installed statuszu csomagok korrekciojanak engedelyeze-set biztosıtja.

pkgFixBroken A broken statusszal rendelkezo csomagok fuggosegeinek javıtasathajtja vegre, amennyiben az lehetseges.

progress.h Ezen osztalyon keresztul valik lehetsegesse, hogy a hosszadalmas folya-matok kozolhessek allapotukat af felhasznaloi felulettel, melynek egyik leggyako-ribb alkalmazasa a folyamatindikator frissıtesere szolgal. Meg kell azonban je-gyezni, hogy ez a modell rendkıvul egyszeru, vagyis nem alkalmas osszetett tobbszalon futo esemenyek kezelesere.

A fenti modell azon a kezenfekvo megallapıtason nyugszik, miszerint egy atfogomuvelet kisebb muveletek sorozatara bonthato fel. Eppen ezert minden almuvelet-nek es maganak az atfogo muveletnek is megvan a maga allapota, mely a folya-mat veghezvitelenek allasat mutatja. Ez a ket egyseg kozott nincs atfedes, teljesenfuggetlenek egymastol.

strutl.h Nehany hasznos sztringkezelo fuggvenyt tartalmaz, peldaul a sztringek ele-jen es vegen talalhato nem megjelenıtheto karakterek torlesere.

Page 38: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

34

7. Egy csomagkezelo alkalmazas elkeszıtese

7.1. A megvalosıtas altalanos lepesei7.1.1. Kovetelmenyek meghatarozasa

Amint az mar a bevezetoben is megemlıtesre kerult, egy ilyen rendszerrel szemben ta-masztott elvarasok viszonylag egyszeruen megfogalmazhatoak. Egyfelol nyujtsa azokata szolgaltatasok, melyeket a 4.3.1 es a 4.3.2 bekezdesben ismertetett parancsok, illetveazok opcioi nyujtanak, masfelol kınaljon ehhez olyan kezeloi feluletet, mely attekintheto,es rendelkezik azzal az elonnyel, hogy egy, a rendszer parancssori eszkozokkel tortenovezerleseben jaratlan, amde kello elmeleti ismeretekkel rendelkezo felhasznalo is kepeslegyen annak hasznalatara. Mindez a gyakorlatban a kovetkezoket jelenti:

Attekinthetoseg

Valjek elso ranezesre (vagy nemi gondolkodas utan) is nyilvanvalova, hogya program altal nyujtott szolgaltatasok milyen szerepet toltenek be a rendszermukodeseben es fordıtva. Vagyis a rendszer egy mar korabbrol megismertparancsa, vagy konfiguracios eljarasa milyen uton erheto el az altalunk kınaltrendszerben.

Szerkezeti azonossag

Megfelelo menuszerkezet kialakıtasaval segıteni kell a felhasznalot, hogy ra-latasa legyen a rendszer felepıtesere, azaz az egyes menupontok ala felso-rakoztatott almenuk reprezentaljak azt, hogy elozo fejezetben megismert pa-rancsok opcioi kozul melyek tartoznak logikailag egybe, valamint a fomenukaltal meghatarozott szerkezet illeszkedjek a Debian alapu rendszerek csomag-kezelesi metodusai altal meghatarozott szerkezettel.

Page 39: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

35

Kezelhetoseg

Ez alatt jelen esetben az ertendo, hogy a program probalja egyszerusıteni afelhasznalo helyzetet, a csomagkezelesi rendszer osszetettebb elemeinek esbonyolultabb reszleteinek automatizalasaval. Am azt meg kell jegyezni, sem-mikepp nem cel, hogy az elobb emlıtetteket el is takarjuk a program hasznalojaelol (mint az a Windowsr felhasznalobarat alkalmazasaiban szokasos) es ez-altal kizarjuk ot abbol, hogy a tovabbi ismeretek megszerzese utan kepes le-gyen a rendszer optimalizalasara, vagy sajat kıvanalmainak megfelelo atala-kıtasara.

Modularis szerkezet

A program kodjanak attekinthetosege es a tovabbi fejlesztesek –melyek akartobb szemely kezeben is lehetnek– elonyos, ha az alkalmazas kulonbozo resz-feladatait, melyeknek egyebirant megjelenesi helyukben nem feltetlenul kellelterniuk, kulonbozo osztalyokban, ezzel egyuttal kulonbozo allomanyokbanhelyezunk el.

Feluletfuggetlenseg

A Gtk es a Curses fuggvenyein keresztul kialakıtott feluletek –termeszetuk-bol fakadoan– megjelenesre igen, de lenyegi elemeikben nem kulonboznekegymastol. Eppen ezert a felulet kezelesere hasznalt objektumok sem ter-hetnek el egymastol, csupan abban, hogy az azonos adattagokat, a szintenmegegyezo metodusok mikepp hasznaljak fel a feluletspecifikus megjelenıteskialakıtasahoz.

Karbantarthatosag

A program szempontjabol ez azt jelenti, hogy a rendszerben, vagyis az APTszerkezeteben, felhasznaloi fuggvenyeiben bekovetkezett valtozasok a prog-ramkod minel kisebb aranyu atalakıtasat tegyek szuksegesse, valamint ha le-hetseges ezek a modosıtasok kis szamu modult erintsenek.

7.1.2. Fejlesztoi eszkozok megvalasztasa

Programozasi nyelv A megvalosıtashoz szukseges programozasi nyelv megvalasztasa-kor szamos szempontot figyelembe kell venni, am alapvetoen ket eshetoseg kınalkozott,melyek a C++ es a Perl. A dontes a kovetkezo kriteriumok figyelembevetelevel jott letre:

Illeszkedes Kıvanalomkent merult fel a fejlesztes kezdetekor, hogy az el-keszıtendo szoftver minel jobban illeszkedjek, egyfelol az operaciosrendszerhez –jelen esetben az UHU-Linuxhoz, valamint altalanosan a

Page 40: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

36

Debian alapu rendszerekhez– valamint a mar korabban megvalosıtotteszkozokhoz, melyek legtobbje –peldakent megemlıtheto az UHU-Ve-zerlopult es az UHU-tarcsazo– Perl nyelven ırodott. A javasolt nyelvazonban megsem a Perl volt, mivel egy, az alapveto csomagok kozeszant program ne kıvanja meg, hogy fuggosegei kozott a Perl terjedel-mes fuggvenykonyvtarai is szerepeljenek.

Integralhatosag Bar a Perl is rendelkezik elore megırt modullal, mely a cso-magok kezeleset hivatott megoldani, a C nyelv eseten adott az APT fej-lesztoi csomag –mely elore definialt osztalyokat nyujt a fobb csomag-kezelesi problemak megoldasara valamint a csomagok informacioinakkinyeresere– celravezetobb megoldasnak tunt.

Hordozhatosag Mindket nyelv eleget tesz annak a kovetelmenynek, hogyne csupan az UHU-Linux specifikus eszkoze legyen, hanem a Debianrendszerekben altalanosan hasznalhato,F es a szabad szoftverek tekin-teteben is helytallo alkalmazas szulessen.

Elozmenyek Am a korabbi fejlesztesek iranyt is mutattak ebben a tekintet-ben. Parhuzamosan folyik a Synaptic nevu alkalmazas fejlesztese, melyjelen verzioja mellett (0.35.1) nem bır olyan lehetosegekkel, mint ami-ket a program fejlesztesenel alapkent hasznalt –egyebkent felbemaradt–Deity nevu alkalmazas nyujt.

Sebesseg Mindezek mellet kiemelt szerepet jatszott, az hogy a Perl, mintinterpreteres nyelv tulzott eroforrasigenyt tamaszt az alkalmazast hasz-nalokkal szemben.

Bovıthetoseg A dolgozat megırasakor mindket nyelvre elmondhato, hogyrendkıvul gazdag tamogatottsaggal rendelkezik a legkulonbozobb teru-leteken. A Perl nyelv moduljainak szama egyre gyarapodik, a C nyelvifuggvenykonyvtarak pedig hagyomanyosan szerteagazo teruleteket fed-nek le.

Idoallosag Meg kell azonban jegyezni, mivel hogy a Perl nyelvhez is letezikAPT fejlesztoi modul, ezert nem a C nyelv az egyetlen jarhato ut, hogyaz APT alkalmazasainak kimenetet feldolgozva –amihez a Perl kitunoszovegfeldolgozo elemekkel rendelkezik– jussunk a szukseges informa-ciokhoz. Emellett a grafikus felhasznaloi felulet –melynek kialakıtasa-nal hasznalt eszkoz a Gtk– Perl nyelvi modulja meglehetosen le vanmaradva a C nyelvi programkonyvtarhoz kepest, ami viszonylag rovididon beluli alapveto reszegysegek teljes atalakıtasat igenyelne.

Fejleszthetoseg A teljesseg kedveert megemlıtendo, hogy nemely, nem iskis jelentoseggel bıro, programreszek –melyek leginkabb adatfeldol-gozast vegeznek– megvalosıtasa Perl nyelvben lenyegesen egyszerubb

Page 41: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

37

es gyorsabb lett volna, ugyanakkor viszont igaz, hogy kulso forrasbolmegvalosulo hibajavıtasokra, illetve bovıto fejlesztesekre kesobbiekbeninkabb a C nyelv eseten lehet szamıtani.

Ahogy az a fentiekbol is kitunik, jelen esetben minden fontosabb erv amellett szolt,hogy a megvalosıtas eszkoze a C++ nyelv legyen.

Fejlesztoi kornyezet A szakdolgozat megırasanak idopontjaban mar rendelkezesre all-nak –Linux rendszerek alatt is– olyan magas szintu fejlesztoi eszkozok, mint peldaul a Ky-lix, am ezek legfontosabb elonye, hogy kisalkalmazasok fejlesztese eseten, gyors eszkoztnyujtson azok feluleteinek kialakıtasara, ami itt nem hasznalhato ki, hisz bonyolultabbesetekben hatekonysaguk egyre csokken. Az osszetettebb feladatok megoldasara a leg-jobb megoldas egyszersmind a legegyszerubb is. Jelen esetben ez a kovetkezoket jelenti:

Midnight Commander

A program szovegszerkesztoje, egy rendkıvul sokoldaluan hasznalhato, esmegis a vegletekig egyszeru eszkoz, mely csupan a legszuksegesebb esz-kozokkel –ugyis mint a szintaxis kiemelese, hagyomany szovegszerkesztofunkciok, makrok– segıti elo a fejlesztok munkajat.

GNU C nyelvi eszkozok

Az operacios rendszer a fejleszteshez programkonyvtarakat, header fajlokat,fordıto es linkelo eszkozoket nyujt. Itt jegyeznem meg, hogy a program fej-lesztese soran fordıtashoz a GNU C fordıtojanak 3.2-es, valamint a linkerprogram 5.0-as verziojat hasznaltam.

Strace

A strace egy rendszerhıvas figyelo. Megjelenıt minden olyan rendszerhıvast,amit a parameterkent megadott program kezdemenyez. Vagyis, hogy figyel-hessunk egy programot nem kell ujrafordıtanunk, hasznalhato a meglevo bi-naris is. Kitunoen felderıthetoek a program mukodesenek kritikus pontjai,valamint –sokszorosan egymasba agyazott fuggvenyhıvasok eseten– a leallastokozo hibak pontos helyei.

7.1.3. Csomagkeszıtes

Termeszetesen egy csomagkezelo sem kerulheti el a sorsat, vagyis a binaris allomanybolitt is csomag keszul. Erre maga a Debian is kınal megoldast, am ennek hasznalatara nemkerult sor, mivel az UHU-Linux tartalmaz egy sajat celokra kifejlesztett, kulonosen jolhasznalhato eszkozt csomagok keszıtesere es azok karbantartasara, aminek az uhubuildnevet adtak fejlesztoi. Ezen programcsomag taglalasara nem kerul sor jelen dolgozatkeretein belul, tekintettel arra, hogy a kesz forrasbol torteno csomagkeszıtes feladata nemaz ırora, hanem az UHU-Linux maintainereire harult.

Page 42: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

38

7.1.4. Terjesztes

A program UHU csomagkent elerheto az ftp.uhulinux.hu cımen, valamint az 1.0-asverziot koveto CD-ROM valtozatokon.

7.1.5. Menedzseles

Mivel a program GPL (General Public Licence) ala esik, ezert forrasnyelvu valtozatatis kozze kell tenni, melynek az UHU-Linux eleget is tesz azzal, hogy a forras elerhetoaz svn.uhulinux.hu/UHU/edeity cımen. A valtoztatasok ervenyrejuttatasanak egy-szerusıtese erdekeben a subversion nevu verziomenedzsment programot alkalmazzuk,amely egyebek mellet megkonnyıti egy adott program tobb szalon futo fejlesztesenek osz-szehangolasat azaltal, hogy jelzi ki milyen valtoztatasokat hajtott vegre a forrasban es mi-kor, valamint general szamunkra egy changelog allomanyt is, ami a forras felhasznaloinakjelent konnyebbseget abban, hogy megtudjak a legutobbi verzio ota milyen valtoztatasok-ra kerult sor a programban.

7.1.6. Visszajelzesek kezelese

A fejlesztett alkalmazas merlege minden esetben a felhasznalok es a fejlesztok kozos-segenek velemenye. Ebben az esetben a program vegfelhasznaloi az UHU-Linux altaluzemeltetett felhasznaloi levelezo listan fejthetik ki velemenyuket, javasolhatnak valtoz-tatasokat, illetve jelezhetnek hibakat. Letezik emellett egy fejlesztoi levelezo lista, amiugyancsak a hibak kiszuresenek fontos eszkoze, emellett pedig fontos szerepet jatszik atovabbi fejlesztes iranyvonalanak meghatarozasaban.

7.2. A koncepcio felallıtasa7.2.1. Az alapveto elgondolas

A program fejlesztesenel torekedni kell a szabvanyosıtott modszerek kovetesere, hisz akesobbi fejlesztesek es a fent emlıtett idoallosag szempontjabol ez meglehetosen fontosszempont. Minden olyan esetben, mikor a feladat megkıvanja, hogy ettol a koncepciotolreszben, vagy egeszben elterjunk, alapos megfontolas targyat kell kepezze, a megfelelohelyettesıto modszer megvalasztasa, mind a kod atlathatosaganak, mind a tobb szemelyufejleszthetoseg megvalosıthatosaganak erdekeben.

7.2.2. A szerkezeti struktura

Kialakıtasa soran figyelemmel kellett lenni a megjelenıtes sajatossagaira. Mivel kituzottcel volt, hogy a program alkalmas legyen a csomagok egyes tulajdonsagit csoportosıtasielvkent ertelmezve azokat faba rendezni, megvalosıthatonak kell lennie valosıtani a kovet-kezoknek:

Page 43: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

39

Azonos tarolas

A kıvant szerkezet kialakıtasa megkoveteli egy egyseges forma letrehozasat, mely-nek legkezenfekvobb modja a csomagleırokra mutato pointerek elhelyezese a szer-kezet alapjat kepezo osztaly adattagjakent. Ennek gyakorlati megvalosıtasarol resz-letesen az 7.3.5 fejezetben esik szo.

Page 44: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

40

Lancolhatosag

Szinten a szerkezetbol adodoan szukseges az, hogy az egyes osztalyok –melybena csomagok leıroit taroljuk– ismerjek a faban a megelozo, a kovetkezo, a szulo,illetve a gyermek osztalyok cımeit.

Rendezhetoseg

Biztosıtani kell az osztalyokban olyan tagfuggvenyeket, melyek a rendezes alapjatkepezo erekeket szolgaltatjak a rendezo mechanizmus fele. Az egyszeru megva-losıthatosag erdekeben lehetoleg azonos formaban, ami jelen esetben azt jelenti,hogy a szammal reprezentalhato ertekek is szovegkent kerulnek visszaadasra, hogymegvalosıthato legyen az osszehasonlıtas egyetlen fuggvennyel.

Egyseges kezeles

Meg kell oldani a csomagok leıroinak tarolasara szolgalo osztalyok osszefogasategy osztalyba. Ez tolti be a tulajdonkeppeni fa szerepet, melynek agai az egyesrendezesi elvek szerinti csoportok elemei es levelei a csomagleırokat tartalmazoosztalyok. A gyakorlatban ez valosıtja meg az egyes elemek felvetelet, hozzafu-zeset, tarolja a fa gyokerelemet, rendezesi metodusainak, oszlopainak, szuroinekcımet, biztosıtja a kereshetoseget es az ujraepıthetoseget.

7.2.3. A kereses

Megvalosıtasa az egysegesıtett csomagtarolasi rendszer kialakıtasa utan mar nem olyanrettento feladat, fokepp hogy az alap C nyelvi programkonyvtarak tartalmaznak sztringekkezelesere fuggvenyeket, sot regularis kifejezesek megadasara is van lehetoseg. Mindezkomoly konnyebbseget jelent a fejlesztesben, mivel a feladat a kereses opcioinak bekere-sere es a fent emlıtett eszkozokkel a csomaglistan torteno vegigfuttatasara szukul. Ezekutan mar csak az egymast koveto talalatok elerese jelenthet gondot, ami azonban a meg-feleloen kidolgozott kereso algoritmusok meglete eseten ugyancsak egyszeru feladat.

7.2.4. A szures

Jo nehany reszfeladatot tekintve megegyezik a keresessel, hisz hasonlo elvek –es bekeresimechanizmus– szerint tortenik a kiszurendo elemek megkeresese, mint a kereses esetlena talalatok meghatarozasa. Ami itt tobblet feladatot jelent az az, hogy a megadott szuresimintakat tarolni kell, a kesobbi torles, szerkesztes es eltavolıtas miatt, valamint a megje-lenıtett fat ujra kell rajzolni a kiszurt elemek nelkul.

Page 45: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

41

7.2.5. A felhasznaloi felulet

Formaja kovetkezik a tarolasi szerkezetbol, mivel annak celjait figyelembe veve lett ki-alakıtva. A helyzetet nemikepp bonyolıtotta, hogy ket felhasznaloi felulet fejlesztese folytparhuzamosan. Ennek termeszetesen megvannak a maga elonyei es hatranyi egyarant. AzUHU-Linux inkabb a grafikus feluleten megjeleno interfesz fejleszteset preferalta, de megkell vallanom, hogy szıvugyem a karakteres felulet tovabbvitele is, mivel remenyeim sze-rint kozeptavon a program kepes lehet a dselect felvaltasara, hasznalhato szolgaltatasi,illetve esszeru megjelenıtesi eszkozei reven. A fejlesztes soran – ahhoz kepest, ha csaka grafikus felulet fejleszteset kıvantuk volna felkarolni– tobblet munkat jelentett tekin-tettel lenni a ket fajta felulet egyforma kezelesere, am meg kell jegyezni, hogy az ennekokan modularizalt es egymasbol oroklodo osztalyokra szetbontott szerkezet egyszersmindatlathatobba is tette a forraskodot.

7.3. Amire a felulet epul7.3.1. Elokeszuleti lepesek

Mindenekelott a 6.1 fejezetben emlıtett eszkozokon keresztul inicializalnunk kell a APTfuggvenykonyvtarait, es csak ezutan kezdhetunk neki az erdemi munkanak.

Az elso lepes ebben az esetben a parancssori parameterek feldolgozasa. Ugyanis aprogram kepes nehany muveletet –feluletek elindıtasa nelkul– az apt-get parancshozhasonloan elvegezni. Ezek a legalapvetobb apt-get muveletek (telepıtes, torles, frissıtes,disztribuciovaltas) vegrehajtasat teszik lehetove, a felhasznaloi felulet indıtasa nelkul. Eza funkcio akkor hasznos, ha konkret feladatot szeretnenk a csomagkezelovel vegrehajtat-ni.

7.3.2. A cache allomany felepıtese

A 6.2 fejezetben ismertetett osztaly segıtsegevel legeneraljuk a cache allomanyt, amirea 7.2.2 fejezetben ismertetett egyseges kezeles elvet megvalosıto osztaly is tamaszkodik,valamint amibol a kesobbiek folyaman a felhasznaloi felulet altal megjelenıtett adatokatfogjuk kinyerni.

Ezek utan kovetkezik az elkeszul cache allomany alapjan az esetleges hibak felde-rıtese, amennyiben lehetseges, korrekcioja. Ebben a 6.5 fejezet fuggvenyeit hasznaljukfel. Eloszor a textithalf-installed statuszu csomagok javıtasat engedelyezzuk, majd haa rendszerben vannak broken statusszal rendelkezo csomagok, ezek javıtasara teszunkkıserletet.

A felhasznalo tajekoztatasa erdekeben a cache generalasanak es a javıtasi folyamatokideje alatt –mivel ez a muvelet akar nehany percet is igenybe vehet lassabb architektura,vagy hosszas helyreallıtasi metodus eseten– folyamatindikator jelenik meg.

Page 46: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

42

7.3.3. A csomagleırok kinyerese

A fa szerkezetu tarolas megvalosıtasanak elso lepese –kezenfekvo okoknal fogva– a faelemeit kepezo csomagleırok osszegyujtese. Ehhez elengedhetetlen a korabban mar let-rehozott cache allomany meglete. Eppen ezert, ha annak folyamataban olyan hiba lep fel,melyet az APT eszkozeivel korrigalni nem tudunk, a felhasznalot tajekoztatni kell a hibaforrasarol es annak lehetseges javıtasi modszereirol, valamint a program futasat le kellallıtani.

Amennyiben a cache allomany letrehozasa sikeresen befejezodott, akkor megkezd-hetjuk a 6.3 fejezetben targyalt CacheIteratorok osszegyujteset. A program indulasakortermeszetesen nem kell figyelembe vennunk semmilyen szuro hatast –mivel azok ekkormeg nem lehetnek definialva–, de a kesobbiekben, azaz a fa ujrainicializalasakor, marezzel a tenyezovel is szamolnunk kell.

7.3.4. A csomagleırok rendezese

Mielott meg valoban nekikezdhetnenk –az altalunk definialt osztalyok segıtsegevel ki-alakıtott– fa szerkezet megvalosıtasanak, a fentiekben megfogalmazott modon osszegyuj-tott CacheIteratorokat rendeznunk kell. A rendezes alapjat a mar emlıtett rendezesi el-vek kepezik. Adott egy alapertelmezett rendezesi sorrend, melyet a program indulasakoralkalmazunk, valamint adottak a modszerek a fa rendezesi elveinek megvaltoztatasara,ezaltal a fa ujrarendezesere. A csomagok meghatarozott tulajdonsagaik (prioritas, statusz,szekcio, nev) ertekei alapjan rendezhetoek faba.

Minden –ilyen ertelemben megkulonboztetett– tulajdonsagra ket fajta osszehason-lıtast is meg kell valosıtani. Egyfelol az azonos szekcioba eso csomagok sorrendbeallıtasahoz, masfelol a szekciok sorberendezhetosegehez. A legtobb esetben a ket al-goritmus azonos, am vannak esetek, mikor kulonbozo dontesi mechanizmust kell alkal-mazni. Erre pelda a csomagok neve alapjan torteno sorba rendezes. Mivel a kulonbozokezdobetuvel rendelkezo csomagok, kulon csoportba sorolandok, ezert ezek rendezesenela csomagok neveinek csupan a kezdobetuit kell figyelembe venni, de az egy csoportbakerulo csomagok rendezese mar teljes nev alapjan tortenik. Hasonlo az eljaras a csoma-gok merete alapjan torteno rendezes eseten is.

Ezen rendezeshez egy rekurzıv eljarast alkalmazunk melynek alapotlete a kovetkezo;adott egy rendezo fuggveny, melynek parameterkent atadjuk a rendezendo tomb kezdo-cımet, az aktualisan rendezni kıvant resz also es felso indexet, valamint a rendezesi elvettarolo osztaly cımet. A fuggveny elso hıvasakor a felso index termeszetesen megegyezika rendezendo tomb kezdocımevel, a rendezes pedig a masodik legnagyobb prioritassalmegadott elv szerint tortenik.

Page 47: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

43

A fuggveny elso teendoje, hogy megszamlalja, hogy az eggyel kisebb prioritasu ren-dezes –fentiekben ismertetett– csoportos osszehasonlıtasi elve szerinti hany elem minosulegyformanak.

• Ha ez nagyobb mint egy, akkor meghıvja onmagat also indexkent az eddigi erteket,felso indexkent az elteresi pontra mutato indexet, rendezesi elvkent pedig a so-ron kovetkezo elvet megadva. Ezaltal a csoportos osszehasonlıtasban egyformanakminosulo reszek a soron kovetkezo elvek szerint is rendezodnek, egyre kisebb alsoes felso index kulonbseggel.

• Amennyiben a felso index es a leszamlalt elemek szamanak osszege nem haladjameg az also index erteket, a fuggveny ujra onmagat hıvja felso indexkent az eddigifelso index es a darabszam osszeget, also indexkent az eddigi also indexet, rendezesielvkent az eddigi rendezesi elvet atadva.

7.3.5. A faszerkezet kialakıtasa

Ezzel az eljarassal letrehoztunk egy CacheIteratorokat tartalmazo listat, melynek elemei–a megadott rendezesi elvek prioritasa szerint– olyan sorrendet adnak, mint amilyen sor-rendet a kesz fa melysegi bejarasa adna. Ennek ismereteben a melysegi bejarashoz hason-latos algoritmussal fel lehet epıteni a megjelenıtesre szant fat. Ebben a reszben celszeruszot ejteni arrol is, hogy nem minden faelem reprezental valodi csomagot, hiszen a fabaminden szinten el kell helyezni az adott csoportosıtas elvhez tartozo csomagtulajdonsagaktualis erteket, mint gyujtoelemet.

Page 48: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

44

Mint az a B.1 fuggelekben lathato struktura elemzesebol kiderul, a fa elemei taroljaka fabeli elhelyezkedesuk melyseget, tıpusukat (gyujtoelem, vagy valodi csomag), isme-rik szomszedaikat, szulojuket, valamint a gyermekuket is. Minden elem tarol egy Ca-cheIteratort, ami az altala reprezentalt csomag leıroja, gyujtoelem eseten pedig a cso-portjaba tartozo elso valodi csomag leıroja, ami a gyujtoelem adatainak megjelenıtesehezszukseges.

Letezik az elozoekben emlıtett faelemek kezelesere szolgalo fuggvenyeket csopor-tosıto osztaly –melynek definıcioja a 7.3.5 fuggelekben talalhato– ami biztosıtja a ”++”,”--”, ”=”, ”==”, ”!=”, ”&”, ”*” es ”->” operatorokat. Ezek kozul kiemelendo a ”++”es ”--” operatorok, melyek a melyseg szerinti bejaras megvalosıtoi. A linearis bejarasmegvalosıtasara a GetNextLinear es a GetPrevLinear fuggvenyek szolgalnak, melyeknekhaszna a 7.3.6 fejezetben kifejtett keresesnel latszik.

7.3.6. Kereses a faban

A kereses mechanizmusa a 7.3.5 fejezetben mar emlıtett GetNextLinear es GetPrevLinearfuggvenyeken valosul meg. Ezen fuggvenyek segıtsegevel kepesek vagyunk a fat linearisegysegnek tekinteni, ami nagyban egyszerusıti a kereses algoritmusat, hiszen csupan azegymast koveto elemekre alkalmaznunk kell a keresesi feltetelt, mely vizsgalat pozitıveredmenye eseten az adott elemet meg kell jelolni.

Az osszegzett keresesi feltetel logikai es, valamint logikai vagy muveletekkel ossze-kapcsolt vizsgalatokat tartalmaz. Az egyes keresesi feltetelek a kovetkezok lehetnek:

egyezik A keresendo szoveg pontosan egyezik a csomag megadott tulaj-donsaganak ertekevel.

nem egyezik A keresendo szoveg nem egyezik meg pontosan a csomag meg-adott tulajdonsaganak ertekevel.

kisebb A keresendo szoveg –annak hosszaig– egyezik a csomag megadotttulajdonsaganak ertekevel, de rovidebb annal.

nagyobb A keresendo szoveg –annak hosszaig– egyezik a csomag megadotttulajdonsaganak ertekevel, de hosszabb annal.

tartalmazza A csomag megadott tulajdonsaganak erteke tartalmazza a kere-sendo szoveget.

nem tartalmazza A csomag megadott tulajdonsaganak erteke nem tartal-mazza a keresendo szoveget.

A keresesi feltetelekben megadhato csomagmezok az alabbiak:

csomagnev A csomag cache allomanyban levo neve.

elerheto verzio A csomag elerheto legfrissebb verzioja.

Page 49: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

45

telepıtett verzio A rendszerben telepıtett csomag verzioja.

rovid leıras A csomag rovid leırasa.

bovebb leıras A csomag reszeltekbe meno leırasa.

karbantarto A csomag kartartojanak neve, e-mail cıme.

fajlnev A csomagot archıv allomanyanak neve.

Lehetoseg van egyszerubb kereses lebonyolıtasara is, ahol a keresendo szoveg le-het regularis kifejezes, vagy normal szoveg. Utobbi esetben a keresesi feltetel ”tartal-mazza” lesz. Lehetoseg van a szoveg rovid leırasban torteno keresesere is, valamint abetuerzekenyseg ki- es bekapcsolasara.

A keresesi feltetelt magat nem szukseges tarolnunk, mivel –a 7.3.5 fuggelekben lat-hato– osztaly reven kepesek vagyunk meghatarozni, hogy egy adott csomag jelolt-e,vagy sem. A kovetkezo kereses alkalmaval ezek az allapotjelzok torlodnek, es az ujkeresesi feltetelnek megfeleloen vesznek fel erteket. A kovetkezo, illetve elozo talalatmeghatarozasanal is ezeket az allapotjelzoket hasznaljuk fel.

7.3.7. Elemek kiszurese a fabol

A szuresi feltetelek osszeallıtasa, valamint az azoknak megfelelo elemek megkeresesea 7.3.6 fejezetben ismertetett eljarashoz hasonloan zajlik le. A kulonbseg a talalatokkezeleseben van, hiszen itt nem arrol van szo, hogy valamely modon megjeloljuk azo-kat az elemeket, melyek megfelelnek bizonyos felteteleknek, hanem azok fabol tortenoeltavolıtasa a cel.

A szures gyakorlati megvalosıtasara tobb lehetoseg is kınalkozik. Ami elso kozelıtes-ben egyszerubbnek tunhet az –a keresesnel mar alkalmazott eljaras– a talalatok kiszuresea fa megjelenıtesebol. Ennek elonye egyuttal hatranyat is jelenti, hisz magaval a faszerke-zettel nem kellene egyebet tennunk, minthogy megjeloljuk a megfelelo elemeket a faban,majd a felhasznaloi felulet megjelenıtese soran ezeket kihagyjuk. Am be kell latni, hogyez nem feltetlenul az egyszerubb mod, mivel adott esetben a fa egyes csoportjainak osszeseleme is jelolt lehet, ami magaval vonja az oket csoportosıto elem megjelenıtesbol valokizarasat, ami kulon vizsgalatokat igenyel. Emellett a kulonbozo interfeszekre (Curses,Gtk) kulon-kulon meg kell valosıtani a szures utani megjelenıtes mechanizmusat.

Ettol kenyelmesebb megoldas –ami azonos hatekonysag mellett jobban attekinthetokodot is eredmenyez– az, ha a teljes faszerkezetet ujrakonstrualjuk, a mar meglevo szuresiadatok figyelembevetelevel, ami nem jelent mast, minthogy a szuresi felteteleknek meg-felelo elemeket nem epıtjuk be a faba. Ez a megoldas termeszetesen azzal jar egyutt, hogyminden esetben, mikor valtoznak a szuresi feltetelek a fat ujra kell epıteni es rajzolni, amiazonban minden ilyen jellegu szuresi feladatnal elfogadott.

Page 50: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

46

Tovabbi lenyegi kulonbseg a szuresi feltetel eredmenyenek tarolasaban van. Ellentet-ben a keresessel, a szures eseten nincs szuksegunk a –szuresi felteteleknek megfelelo–elemek megjelolesere, hiszen azok bele sem kerulnek a faba. A szuresi feltetelek tarolasaviszont annal fontosabb, hiszen ezekbol tobbet is meg lehet adni egymas utan, ami aztis jelentheti, hogy az ujabb feltetel az eddig meg a fa reszet kepezo elemet is kiszuri.Ezen tulmenoen pedig csak ıgy valik lehetove a szuresi feltetelek felvetele, torlese, szer-kesztese, inverzioja.

A B.3 fuggelekeben megtekintheto a szurok tarolasara hasznalt osztalyok szerkezete,melyekbol egyebirant kiderul, hogy az egyes szuresi feltetelek lancolt listakent tarolod-nak, am kezelesuket, mint egy LIFO tarolot valosıtjuk meg.

7.3.8. A rendszer frissıtese

A rendszer frissıtesere –ami alatt a 4.3.1 fejezetben emlıtett apt-get parancs update, upg-rade es distupdate opcioinak eredmenyet ertjuk– rendkıvul jol hasznalhato eszkozoketbiztosıt az APT programozoi felulete. Ezek ismertetese azonban az 6.5 fejezet targyatkepezi.

Ehhez a targykorhoz szorosan kapcsolodik az sources.list allomany, es annak szer-kesztese. Mindenekelott azonban ejtsunk nehany szot magarol az allomanyrol es annakszerkezeterol.

Az /etc/apt/sources.list allomany tulajdonkeppen egy kozonseges szoveges fajl,mely a csomagok forrasainak listajat tartalmazza, meghatarozott formaban. Az allomanytarra terveztek, hogy egyszerre tobb forrast is tamogasson, akar tobb kulonbozo mediarolis. A fajl soronkent tartalmazza a forrasokat, melyek kozul az elso minosul preferaltnak.Minden olyan sor megjegyzesnek minosul, mely ’#’ karakterrel kezdodik. Az egyes soroktıpus uri argumentumok formaban epulnek fel, ahol:

tıpus a csomagforras tıpus deb, vagy deb-src

uri a forras Universal Resource Indentifier szerinti leırasa

argumentumok itt adhato meg a disztribucion beluli tıpus, illetve egyeb parameterek

Page 51: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

47

8. A felhasznaloi felulet

8.1. Feluletfuggetlenul meglevo elemekA felhasznaloi felulet megalkotasakor a vezerlo elv rendkıvul egyszeru volt. Nem tore-kedtem olyan interfesz kialakıtasara, mely minden –az APT altal nyujtott– funkciot maga-ban foglal, mivel ennek elerese rendkıvul idoigenyes feladat, es nem jelent tobbleterteketsem az olyan felhasznalok szamara akik –az UHU-Linuxhoz hasonlo– desktop operaciosrendszert hasznalnak, sem azoknak akik a Debian alapu rendszerekkel valo megismer-kedes kezdo lepeseinel szeretnenek segıtsegre lelni.

Ami azert is igaz, mivel a felhasznalok ezen csoportja nem kıvan minden apro resz-lettel torodni, hiszek ezeknek sem mibenletet, sem jelentoseget nem ismerheti. Azonfelhasznaloi csoportok –es ezalatt most leginkabb rendszergazdakat ertek– akik melyebbismeretekkel rendelkeznek a Debian alapu rendszerek csomagkezeleseben, a reszletesbeallıtasokat maguk is el tudjak vegezni, emiatt nem szukseges kulon eszkozt igenybevenniuk. Am ha rendelkezesukre bocsatunk egy olyan alkalmazast, mely megjelenıtoeszkozei reven atlathatova tesz, egyebkent korulmenyesen megszerezheto informaciokat,annak hasznalatat –ezen tekintetben– elonyben fogjak reszesıteni.

A leginkabb preferalt elv a hasznalhatosag, es a kezenfekvo megoldasok alkalmazasavolt a felhasznaloi felulet kialakıtasakor. Mindemellett nem hanyagolhato el termeszete-sen a funkciok dokumentacioja, valamint egy egyszeru sugo elkeszıtese. A felhasznalokhelyzetenek egyszerusıtese erdekeben a legtobb funkcio tobb helyen is elerheto. Errepelda a csomag statuszanak allıtasa, mely mind a fomenubol, mind –a csomagra kattintva–legordulo menukent elerheto. Vannak olyan funkciok is melyek elerheto altalanosan(szures megadott opciokkal), valamint a fa valamely gyujto elemere kattintva specialisanis.

Page 52: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

48

Letezik jonehany olyan elem, melyek kezelese lenyeget tekintve nem fugg a felhasz-naloi felulet fajtajatol, eltekintve termeszetesen a feluletek –programozasi es megjelenıtoelemeinek– sajatsagaibol fakado elteresektol.

8.1.1. Menuszerkezet

Mint a legtobb felhasznaloi program eseten, itt is kialakıtasra kerult egy menusor, melyenkeresztul az alkalmazas altal nyujtott funkciok elerhetoek. Ennek szerkezete koveti abevett formakat, vagyis leteznek az alabbi menuk:

Fajl Ezen keresztul erhetoek el az APT azon funkcioi, melyek a rendszerbenvalodi valtozast hoznak letre, vagyis nem csak a megjelenıtes celjaitszolgaljak.

• APT forrasfajl szerkesztese.• Csomaglista frissıtese, melyre a 4.3.1 fejezetben ismertetett pa-

ranccsal szinten alkalmas.• Cache allomany frissıtese, mely a 4.3.2 fejezetben ismertetett pa-

ranccsal szinten elvegezheto.• Csomagok statuszan vegrehajtott valtoztatasok ervenyesıtese.

Szerkesztes Itt talalhatok a csomagok keresesevel osszefuggo funkciok, be-leertve a talalatok kozotti navigalast is.

Nezet Ezen menun belul valtoztathato meg, hogy a csomagok ”normal”,vagy fordıtott fuggoseget kıvanjuk-e megjelenıteni a csomagot tartal-mazo faelem megnyitasakor.

Sugo Tartalmaz egy nevjegyet, valamint a gyorsbillentyuk leırasait.

Page 53: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

49

Tovabba azok a menuk, melyek kifejezetten az program profiljahoz kotodnek.

Parancsok A csomagstatuszok valtoztatasanak parancsait foglalja ossze: ki-jeloles telepıtesre, frissıtesre, torlesre.

Szurok A 7.3.7 fejezetben kifejtett szurok kezelesenek menupontja: hozza-adas, megjelenıtes, eltavolıtas, invertalas.

Rendezes A 7.3.4 fejezetben reszletezett rendezesi elvek, valamint a megje-lenıtendo csomagtulajdonsagok sorrendjenek beallıtasara szolgalo kon-figuracios menuk.

8.1.2. Fa szerkezetu megjelenıtes

A fa szerkezetu megjelenıtes tobb szempontbol is az optimalis megoldas.

• A lista szerkezet meglehetosen nehezkesen kezelheto bizonyos elemszam felett, esemellett Gtk eseten meg tulzottan nagy eroforrasigenyt is tamaszt.

• Lehetoseget ad tobb szintu rendezes megvalosıtasara, ami takarekoskodik az ero-forrasokkal, amit tovabb fokozhatunk dinamikus kezeles megvalosıtasaval.

• Komoly informaciotartalommal bır, mivel maguk a csoportelemek is informaciokathordoznak a csomagokrol.

• A gyujtoelemek reven megvalosıthato az elemek csoportos kezelese (szuresi feltetelgeneralasa a csoportelem alapjan, statuszvaltas a teljes csoportra).

• Maguk a csomagok is kezelhetok csoportelemkent, mint fuggosegeik csoportja.

A faszerkezet elonyeinek szemleltetesere kituno pelda a fordıtott fuggoseg szerinti ren-dezes hasznalata, melynek akkor latjuk igazan komoly hasznat, ha rendszerunk mar ko-molyabb multra tekint vissza, es nagyszamu csomag telepıteset es torleset hajtottuk vegre.

Ebben az esetben a torlesek soran csak azok a csomagok allomanyai torlodnek, me-lyek fuggenek az adott csomagtol. Am a gyakorlat azt mutatja, hogy gyakran fordul eloaz az eset, amikor a csomaggal egyutt telepult csomagok (melyeket a telepıtett csomaghivatkozott fuggosegeben) eltavolıtasarol megfeledkezunk, melyek ezutan feleslegesenfoglaljak merevlemezunket.

Erre megoldas, ha elsodleges rendezesunk a csomagunk allapota, masodik pedig afordıtott fuggoseg. Igy, ha a telepıtett, de nem hivatkozott csomagjainkat vizsgaljuk, sokolyan csomagra lelhetunk, amely nem onallo alkalmazas (es ennek okan nem hivatkozzasemmilyen mas csomag), hanem ugymond feleslegkent marad hatra valamely felesleges-nek velt csomag torlesekor.

Page 54: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

50

Termeszetszeruleg megvannak a modszer hatranya is, hiszen egy csomag statuszanakvaltozasa, mas csomagok statuszanak valtozasat is maga utan vonhatja, ami egy ilyentıpusu megjelenıtesnel egyszersmind azt is jelenti, hogy ha nem akarjuk az egesz fatujrarajzolni minden egyes ilyen esetben, ami meglehetosen drasztikus megoldas volna,akkor be kell jarnunk a fat annak gyokeretol, es az elteresek eseten korrekciot kell vegre-hajtanunk a csomagstatusz kijelzeseben.

8.1.3. Oszlopok a faban

Amint a fa azon melysegebe erunk, ahol mar csomagok(vagy azok fuggosegei kerulnekmegjelenıtesre), azonnal szembetunove valik, hogy a csomagok tulajdonsagainak ertekeioszlopos szerkezetben helyezkednek el. Ennek elonye, hogy az oszlopok tetszes sze-rint atrendezhetok, eltekintve az elso harom oszloptol, melyek rendre a csomag nevet,statuszat es az altalunk beallıtott statuszt tartalmazzak.

8.1.4. Jelolo sav

A faban torteno eligazodast elosegıtendo mindket felulet eseten letezik egy jelolosav,mely az eppen aktıv elemet teszi meg inkabb szembetunove, aminek igazi elony akkorjelentkezik, ha nagyobb oszlopszam eseten kell szemmel megallapıtanunk, hogy a hatsooszlopok ertekei melyik sorhoz is tartoznak.

8.1.5. Statuszbar

Ez a megoldas is meglehetosen elterjedt, aminek okan tulzott magyarazatot fuzni nem iserdemes ehhez a reszhez. Annyi azonban megemlıtendo, hogy az udvozlo szovegen kıvulsok apro, de hasznos informacio jelenıtheto meg ıgy.

8.2. NCursesAz NCurses gyakorlatilag egy fuggvenykonyvtar, mely lehetove teszi –a terminal tıpusa-nak es vezerlo karaktereinek ismerete nelkul– a kurzor mozgatasat, ablakok letrehozasat,szınek hasznalatat, az eger kezeleset azaltal, hogy egy rendkıvul rugalmas es hatekonyAPI-t (Application Programming Interface) definial a nyers terminalkodok fole.

Am az NCurses nem csupan ennyi. Emellett nyujt –a curses testverkonyvtaraivalegyutt, melyek a panelek, menuk, formok kezeleset tamogatjak– egy eros vazat is, melylehetove teszi kenyelmes, valamint kellemes kinezetu felhasznaloi feluletek (C.2 fug-gelek) letrehozasat karakteres modban, melynek eroforrasigenye minimalis, es a hozzaszukseges csomagok szama is csekely. Ami azt jelenti, hogy egy szereny eroforrasokkalrendelkezo gepen is hatekonyan hasznalhato, melynek okan remelni lehet, hogy hosszabbtavon a dselect kivaltoja lehet.

Page 55: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

51

Mivel az UHU-Linux profiljaba nem igazan vag bele karakteres feluletu programokfejlesztese –mar ami a jelenlegi allapotokat es a desktop rendszer fejleszteset illeti– ezerta program ezen interfesze sokat nem fejlodott az alap allapothoz kepest, inkabb csak olyanvaltoztatasok kerultek vegrehajtasra, melyek az alapveto mukodokepesseg es a tovabbfej-leszthetoseg megorzeset voltak hivatottak megorizni.

8.3. GtkA Gtk (GIMP Tool Kit) szinten egy fuggvenykonyvtar, mely a felhasznaloi feluletekletrehozasara nyujt eszkozoket, am grafikus feluleten. Segıtsegevel megvalosıthatunkegeszen egyszeru adatbekero applikaciokat, de rendkıvul osszetett, dinamikusan kezeltfeluleteket is. Egyik legnagyobb elonye a Curseshez kepest, hogy rengeteg elore definialtosztaly teszi meg egyszerubbe a felulet kialakıtasat, es az azon helyet foglalo elemek ke-zeleset.

Az alap koncepcio roviden a kovetkezo. Minden egyes –a grafikus felhasznaloi felule-ten elhelyezheto– elem a GtkObject alaposztalybol szarmazik, aminek gyakorlati hasznaabban all, hogy erre az osztalyra visszavezetve egysegesen lehet kezelni es tarolni azegyes elemeket.

A gyors utemu fejlesztest es a jol kezelheto feluletek egyszeru kialakıtasat nagybansegıti az osztalyok atgondolt felepıtese es kezelese. Minden elem rendelkezik a ra jel-lemzo tulajdonsagokat reprezentalo valtozokkal, valamint a megfelelo esemenykezelok-kel, melyeken keresztul ugymond programkodot rendelhetunk a felhasznalo altal kivaltottesemenyekhez.

Ezt megvilagıtando, vegyuk egy gomb peldajat. Ezt az elemet a GtkButton osztalyvalosıtja meg, melynek ”activate”, ”clicked”, ”enter”, ”leave”, ”pressed” es ”released”esemenyei vannak a kulonbozo tortenesek kezelesere. Az esemenykezelo bemeneti pa-rametere minden esetben a GtkButton osztaly egy peldanyara mutato pointer, valamintegy masik mutato, melynek erteket az esemenykezelo fuggveny es az esemeny osszekap-csolasakor adhatjuk meg.

Az esemenykezeles ilyen megkozelıtese a faszerkezet –ami a C.1 fuggelekben latha-to– dinamikus megjelenıtesenel jelentett kulonosen nagy elonyt, hiszen minden egyes faelemnek megvannak a maga esemenyei, melyeken keresztul elerheto, hogy a Gtk megje-lenıto eszkoze ne taroljon a szuksegesnel tobb adatot. A gyujtoelemek gyermekei csakannak megnyitasakor kerulnek helyukre es bezarasakor torlodnek a memoriafelhasznalascsokkentese erdekeben.

Ez a megvalosıtas teszi tovabba lehetsegesse, hogy a fa elemeire torteno kattintaskorreszletesebb informacio jelenhessek meg a kivalasztott elemrol, valamint hogy az egyes

Page 56: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

52

–a csomagokra vonatkozo parancsok– menun keresztul is elerhetoek legyenek. Nagybankonnyıti tovabba a fa megjelenıteset is, az automatikus gorgetosav-kezelessel, az ablakokatmeretezhetosegevel.

Tovabbi elonyt jelent a hasonlo elemekbol felepulo ablakok gyors masolhatosaga,amire legkezenfekvobb pelda a kereses es a szures adatbekero ablakainak (C.5, C.6, il-letve C.7, C.8 fuggelekek) hasonlatossaga. Leven, hogy a kereses ablaka mar korabbanis letezett, annak atszabasa a szures felteteleinek bekeresere csekely energiabefektetestigenyelt.

Page 57: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

53

9. NemzetkozisegAz UHU-Linux, valamint a magyar felhasznalok szamara fontos szempont, hogy a prog-ram magyar nyelven jelenıtse meg az informaciokat –melyben fontos szerepet jatszik acsomagok leırasainek fordıtasa– kommunikaljon a felhasznaloval, adja hibauzeneteit.

Erre letezik tamogatas a GNU C nyelvu fuggvenykonyvtaraiban, ami roviden ossze-foglalva a kovetkezokepp mukodik. Minden egyes szoveget melyet –valamilyen modon–meg kıvanunk jelenıteni, egy makron keresztul adunk at a megjelenıtest megvalosıtofuggvenynek, ami lehetove teszi, hogy a szovegek futasidoben cserelodjenek le a meg-felelo nyelvre.

Ennek alapfeltetele azonban, hogy a fenti szovegek fordıtasat elvegezzuk. Erre ugyannincsenek automatizalt modszerek, de a GNU nemzetkoziseget tamogato eszkozei segıt-segunkre vannak. A megfelelo programmal a forraskodbol levalogathatok a fordıtandoszovegreszek egy kulon allomanyba, mely ezek utan kozzeteheto, ıgy a fordıtasban alegkulonbozobb nemzetisegu emberek vehetnek reszt , elosegıtve a program minnel tobbnyelvre torteno interpretalasat.

A lefordıtott allomanyok osszegyujtese utan azokat binaris allomanyokka fordıtjuk,melyek a telepıtes soran a /usr/share/locale/ konyvtar ala kerulnek elhelyezesre,nyelvenkent konyvtarakba valogatva, programnev.mo nevvel.

A program futasa soran a LANG kornyezeti valtozoban megadott nyelvi beallıtasokszerint kivalasztott binaris allomanybol helyettesıtodnek be a korabban mar lefordıtottszovegreszletek, melyek ıgy olyan hatast keltenek, mintha a program uzenetei az adottnyelven ırodtak volna.

Ez a megoldas rendkıvul praktikus, mivel leveszi a fordıtas terhet a program fej-lesztojerol, valamint a forraskodban sem tesz szuksegesse lenyeges valtoztatasokat. Aprogram fejlesztese soran azonban ugyelni kell arra, hogy a statikus szovegreszek fordı-tasa ezzel a modszerrel nem lehetseges.

Page 58: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

54

10. OsszefoglaloJelen applikacio az UHU-Linux Kft. megbızasabol keszult, azzal a cellal, hogy a diszt-ribucio rendelkezzek grafikus feluletu, felhasznalobarat csomagkezelo rendszerrel. Ter-meszetesen egyeb –Debian alapu csomagkezelessel rendelekezo– Linux rendszerek alattis hasznalhato. A megvalosıtas jelen szakaszaban –0.9.1.0 verzio– a szoftver kepes a cso-magok fa szerkezetu megjelenıtesere –ahol megjelenıtesi metodusok, es a megjelenıtendocsomagtulajdonsagok megvalaszthatok– az alapveto csomagkezelo funkciok ellatasara.Lehetseges a csomagok kozotti kereses, illetve a csomagok szurese azok tulajdonsagainakertekei alapjan egyszerusıtett es osszetett formaban. Ezeken tul modunk van globalisvaltoztatasok vegrehajtasara, azaz a csomaglista, illetve a teljes rendszer frissıtesere, aAPT forrasfajl szerkesztesere. Emelett alkalmas olyan informaciok hatekony megje-lenıtesere, melyek a hagyomanyos csomagkezelesi eljarasokkal nehezkesen erhetoek el.A tavlati celok kozott szerepel a csomagkezelo rendszer alkalmassa tetele a reszletesbeallıtasok kezelesere, valamint a karakteres felulet funkcionalitasanak felzarkoztatasaa grafikus feluleteehez.

Page 59: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

55

11. SummaryThe application in question has been designed on the assigment of UHU-Linux Kft. Thegoal of the project to provide the distribution a user friendly package manager with aGUI. Of course it can be used on other Linux distributions, with Debian based packagemanagement system. As of the current state of development –v 0.9.1.0– the program isable to display the packeges in a tree structure –sorting methods and package atrributionsto display are user selectable– and provides basic package management functionality. Itis possible to serach in the list of packages and to filter packages based on value of theirattributes either in a simple or a comlex form. Beyond that it is also possible to makeglobal changes: updating the package list, upgrading the system, editing the sources file.It can also efficiently provide informations that are uneasily accessible by convenctionalpackage managing methods. Future goals include implementing extended configurability,and improving the functionality of the console UI to the level of the graphical one.

Page 60: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

56

A. Fuggelek

A.1. A cache allomany fejlecestruct Header{//Signature informationunsigned long Signature;short MajorVersion;short MinorVersion;bool Dirty;//Size of structure valuesunsigned short HeaderSz;unsigned short PackageSz;unsigned short PackageFileSz;unsigned short VersionSz;unsigned short DependencySz;unsigned short ProvidesSz;unsigned short VerFileSz;//Structure countsunsigned long PackageCount;unsigned long VersionCount;unsigned long DependsCount;unsigned long PackageFileCount;//Offsetsunsigned long FileList; // PackageFileunsigned long StringList; // StringItemunsigned long VerSysName; // StringTableunsigned long Architecture; // StringTableunsigned long MaxVerFileSize;//Allocation poolsstruct{unsigned long ItemSize;unsigned long Start;unsigned long Count;} Pools[7];// Package name lookupunsigned long HashTable[2*1024]; // Package};

Page 61: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

57

A.2. A cache allomany csomagleırojastruct Pacakge { //Pointersunsigned long Name; // Stringtableunsigned long VersionList; // Versionunsigned long CurrentVer; // Versionunsigned long Section; // StringTable (StringItem)//Linked listsunsigned long NextPackage; // Packageunsigned long RevDepends; // Dependencyunsigned long ProvidesList; // Provides//Install/Remove/Purge etcunsigned char SelectedState; // Whatunsigned char InstState; // Flagsunsigned char CurrentState; // State//Unique ID for this pkgunsigned short ID;unsigned long Flags;};

A.3. A cache allomany archıv allomany leırojastruct PackageFile{// Namesunsigned long FileName; // Stringtableunsigned long Archive; // Stringtableunsigned long Component; // Stringtableunsigned long Version; // Stringtableunsigned long Origin; // Stringtableunsigned long Label; // Stringtableunsigned long Architecture; // Stringtableunsigned long Site; // Stringtableunsigned long IndexType; // Stringtableunsigned long Size;// Linked listunsigned long NextFile; // PackageFileunsigned short ID;unsigned long Flags;time t mtime; // Modification time}

Page 62: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

58

A.4. A cache allomany verzioszam leırojastruct Version{unsigned long VerStr; // Stringtableunsigned long Section; // StringTable (StringItem)unsigned long Arch; // StringTable// Listsunsigned long FileList; // VerFileunsigned long NextVer; // Versionunsigned long DependsList; // Dependencyunsigned long ParentPkg; // Packageunsigned long ProvidesList; // Providesunsigned long Size;unsigned long InstalledSize;unsigned long Hash;unsigned short ID;unsigned char Priority;};

A.5. A cache allomany fuggoseg leırojastruct Dependency{unsigned long Version; // Stringtableunsigned long Package; // Packageunsigned long NextDepends; // Dependencyunsigned long NextRevDepends; // Reverse dependency linkingunsigned long ParentVer; // Upwards parent version link// Specific types of dependsunsigned char Type;unsigned char CompareOp;unsigned short ID;};

A.6. A cache allomany fuggoseg leırojastruct Provides{unsigned long ParentPkg; // Package

Page 63: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

59

unsigned long Version; // Versionunsigned long ProvideVersion; // Stringtableunsigned long NextProvides; // Providesunsigned long NextPkgProv; // Provides};

Page 64: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

60

B. Fuggelek

B.1. A fa elemeinek felepıtesestruct PackageTree::Item {enum pkgState{None = 0, Expanded = (1 << 0), Matched = (1 << 1), Hidden =(1 << 2) };

enum pkgWill{Broken, Delete, Install, Keep, Purge, ReInstall, Remove,Upgrade};

enum pkgType {Pkg, Dep, RevDep, Div Sect, Div Pri, Div State, DivsState, Div Custom, Div Suite, Div Size, Div iSize, DivfName, Div Dep, Div rDep };

int increment; //How far this pkg increments in dependencyvoid *Extra; //A pointer for other uses ...pkgCache::PkgIterator TargetPkg;pkgState State;pkgType Type;

// Behave like a pkgiteratorinline operator pkgCache::PkgIterator & (){ return TargetPkg; };

struct PackageTree::Item *next, *prev, *child, *parent;};

Page 65: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

61

B.2. A fa elemeinek kezeleseclass PackageTree::Iterator {private:PackageTree::Item *where;

public:// Look as if we are a PackageTree::Iteminline operator PackageTree::Item & () { return *where; };inline operator PackageTree::Item * () { return where; };inline PackageTree::Item *operator -> () { return where; };inline void operator =(PackageTree::Iterator & B){ where = B.where; };inline void operator =(PackageTree::Item * B){ where = B; };void operator ++(int) { MoveNext(); };inline void operator ++() { operator ++(0); };void operator --(int) { MovePrev(); };inline void operator --() { operator --(0); };PackageTree::Item * operator +(int);PackageTree::Item * operator -(int);

inline bool operator ==(PackageTree::Iterator & B){ return where == B.where; };inline bool operator !=(PackageTree::Iterator & B){ return where != B.where; };inline PackageTree::Item *prev() { return GetPrev(where); };inline PackageTree::Item *next() { return GetNext(where); };inline bool Invalid() { return where == 0; };PackageTree::Item *GetNext(PackageTree::Item *);PackageTree::Item *GetPrev(PackageTree::Item *);PackageTree::Item *MovePrev();PackageTree::Item *MoveNext();

PackageTree::Item *GetNextLinear(PackageTree::Item *);PackageTree::Item *GetPrevLinear(PackageTree::Item *);PackageTree::Item *MovePrevLinear();PackageTree::Item *MoveNextLinear();

Iterator(PackageTree &Owner) { where = Owner.root; };Iterator(PackageTree::Item *head) { where = head; };Iterator() { where = 0; };};

Page 66: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

62

B.3. Elemek kiszurese a fabolclass Filter {public:friend class FilterList;

enum Polarity{negative=0,positive=1};int Count;bool PkgFiltered(pkgCache::PkgIterator I);

Filter();Filter(const char *, unsigned long);Filter();

private:int ID;char *Text;Polarity polarity;unsigned long targets;Filter *next;};

class FilterList {protected:PackageTree *Owner;Filter *Head, *Tail;long nodecount;public:inline int Length() return nodecount; ;

Filter *Push(const char *, unsigned long);void Pop();void Revoke(long Identifier);void Audit();bool IsPkgFiltered(pkgCache::PkgIterator);

void RedoLists(void);bool SimulateApply();

void Display();FilterList(PackageTree *);};

Page 67: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

63

C. Fuggelek

C.1. Abra: Grafikus felulet

C.2. Abra: Karakteres felulet

Page 68: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

64

C.3. Abra: Valtoztatasok ervenyesıtese

C.4. Abra: Az APT forrasfajl szerkesztese

Page 69: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

65

C.5. Abra: Egyszeru kereses

C.6. Abra: Osszetett kereses

Page 70: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

66

C.7. Abra: Szures kategoriara

C.8. Abra: Szures szovegre

Page 71: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

67

C.9. Abra: Megjelenıtendo oszlopok sorrendje

C.10. Abra: Rendezesi elvek

Page 72: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

68

C.11. Abra: Sugo

C.12. Abra: Nevjegy

Page 73: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

Targymutatoapt, 2, 14, 15, 31, 42, 46–48apt forrasfajl, 16, 21, 23, 24, 46, 48apt-cache, 24apt-get, 15, 41, 46archıv allomany, 4, 7, 10, 12, 15, 16, 18, 29,

57archives, 24archives konyvtar, 17

bovebb leıras, 5binaris csomag, 2

cache allomany, 24–26, 28, 31, 32, 41, 42,44, 48, 56–58

cache allomany elemei, 31cache allomany fejlece, 29, 56cache allomany generalasa, 31cache allomany szerkezete, 29cacheiterator, 42control fajl, 2, 7, 8, 12csomag, 2, 29, 57csomagfuggoseg, 6csomagleıro allomany, 28csomagnev, 5csomagok kezelese, 32csomagok statusza, 11, 49, 50curses, 35, 50

dist-upgrade, 21, 33dpkg, 12dpkg-deb, 4dpkg-source, 2dselect, 5, 12, 13, 50

egyseges kezeles, 40

fuggoseg, 9, 29, 48, 58fa elemek kezelese, 61fa elemek szerkezete, 60fa szerkezet, 40, 42, 49, 51, 54, 60

felhasznaloi felulet, 41, 50, 51folyamatkezeles, 33fordıtott fuggoseg, 10, 48, 49forrascsomag, 2, 6, 23, 32frissıtes, 46

gcc, 37gtk, 35, 36, 49, 51

hash tabla, 29hibaellenorzes, 32hibajavıtas, 42

iterator, 31, 42–44

keep, 21kept back, 21kereses, 40, 44keresesi feltetet, 44konfiguracios allomany, 4, 11, 12, 20

lancolt lista, 29, 40

mmap, 28

normal fuggoseg, 9

postinst szkript, 7, 12postrm szkript, 8pre-depends, 10preinst szkript, 7, 12prerm szkript, 8prioritas, 5, 8

rovid leıras, 5regularis kifejezes, 12, 27regularis kifejezesek, 40rendezes, 40, 42revızios szam, 4rpm, 2

statusz allomany, 2869

Page 74: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

70

szures, 40, 45, 62szurok, 49szekcio, 5

UHU-Linux, 1, 15, 35, 37, 47, 54up-to-date frissıtes, 15Upgrade, 21upgrade, 32

verzioszam, 4, 5, 29, 58virtualis csomag, 7, 9, 26, 29

Page 75: Felhasználóbarát csomagkezelő rendszer kialakítása Debian alapú Linuxokhoz

71

Hivatkozasok[1] samu Aoki, Debian Reference, 2001-2002

[2] ustavo Noronha Silva, APT HOWTO, 2001-2002

[3] ason Gunthorpe, APT Cache File Format, 1997-1998

[4] tephane Bortzmeyer, dselect Documentation for Beginners,

[5] ichard Petersen, Linux Teljes Referencia, Panem, 2001

[6] arcel Gagne, Linux rendszerfelugyelet, Kikapu Kft., 2002