Csomagkezelés (Debian)

A HupWiki-ből...

Debian HOWTO-k, írások: Útmutató (egyszerű)

Ha az Útmutató (egyszerű)t követve jutottál ide, akkor a következő részeket mindenképp olvasd el:

  • debconf
  • apt-setup
  • apt-listbugs és apt-listchanges
  • Stableről áttérés testingre / sidre

Tartalomjegyzék

Elmélet

További információk: Debian, Csomagkezelő

Mit jelent a "csomag"?

A legtöbb disztribúcióban a programok (és egyebek) kezelése csomagok szintjén történik. Egy csomagban lehetnek bináris, library, script, konfigurációs állomány, dokumentáció, kép, hang, stb. Egy program lehet több csomagba szétrakva (pld. külön a bináris, a library, a doksi) és egy csomagban lehet több program is. Debian alatt külön bontják a lib csomagokat, amik érthető módon librarykat tartalmaznak; a -dev csomagok nem teljes forráskódot tartalmazzák, hanem csak annyit, ami a programfordításhoz szükséges (headerek, dokumentáció, stb.). A csomagok telepítettségi állapotát (lásd: dpkg -l) a /var/lib/dpkg/statusban tárolja a rendszer.

Mit tartalmaz egy debian csomag?

A bináris, library, script, stb. a CONTENTS könyvtárban van. A DEBIAN könyvtárban található pld. a conffiles: a konfigurációs állományok helye (ezeket a dpkg --purge csomag távolítja el); control: a legfontosabb információk a csomagról (lásd apt-cache show csomag); md5sums: a csomagot képező minden állomány tartalma alapján generálódik egy azonosító (MD5), amellyel ellenőrizni lehet a telepített állományok sértetlenségét (debsums -a); preinst, postinst, prerm, postrm: karbantartó scriptek a telepítés / leszedés, előtt / után futnak le. Az INFO a csomagkezelőnek tartalmaz információkat (csomag neve, fontossági szintje, stb.), ezek közül a függőségek (Depends) legfontosabbak: szinte minden csomagnak szüksége van olyan állományokra, amelyek más csomagok részét képezik, ez jelentkezik telepítéskor és eltávolításkor is; egyszerű példa, hogy bármelyik C nyelven írt program futásához elengedhetetlen van a libc6 csomag megléte, ami a legalapvetőbb függvényeket tartalmazza.

Ha a gyakorlatban is érdekel egy debian csomag tartalma, akkor az ar tömörítővel lehet szétpakolni (ar x csomag.deb). 3 állományt kapsz: control.tar.gz (csomagkezelő scriptek), data.tar.gz (csomagot képező állományok), debian-binary (debian csomag verziószám).) Az újabb dpkgban már van .tar.bz2 támogatás is.

A debian csomagnevek feloldása

Példa: grub_0.91-2_i386.deb = grub a csomag neve, a 0.91-es programverzió 2. debian változata (ez az 1.-höz képest bugfixeket, biztonsági frissítést, stb. jelenthet; minden olyan változás, ami nem található meg az eredti forrásban), i386 architektúra (all a besorolása az architektúra független csomagoknak, pld.: dokumentáció).

Új csomagok

Ha az új csomagokra vagy kiváncsi több lehetőséged is van:

  1. heti összefoglaló a DWNben
  2. unstablebe kerülő csomagok (egy hétig van kint egy csomag): New Packages in "main"
  3. RSS: New Debian Packages
  4. néhány program önállóan vezeti: dselect, Synaptic

Alapvető eszközök

Gyorstalpaló a gyakran használt eszközökhöz.

debconf

A csomagok használják beállításaik kezelésére.

Érdemes újrakonfigolni (dpkg-reconfigure debconf): kimenetnek Dialogot használjon (ez működik karakteres felületen és elég könnyed), a low szintű kérdéseket is feltegye és ne kérdezzen rá a már megválaszolt kérdésekre.

dpkg

Alacsonyszintű eszköz, a csomagkezelés alapja. Képes telepíteni / eltávolítani csomagokat és az ehhez szükséges feladatokat elvégezni (konfigurálás, függőségek ellenőrzése). Csak állományrendszerből képes telepíteni, net elérésre és hasonló magasszintű feladatokra nem. Használatát megkönnyíti a bash programozható kiegészítés (lásd ott) és a joker karakterek (?, *, ...).

Használata:

  • dpkg -i foo: csomag telepítése; ha a telepítéshez hiányzik egy komponens, azt kiírja, ilyenkor lehet, hogy egyszerre több csomagot kell telepíteni
  • dpkg -r foo: csomag eltávolítása (csak a csomagban szereplő állományokat szedi le)
  • dpkg --purge foo: eltávolítja a konfigurációs állományokat is; utólag is kiadható
  • dpkg-reconfigure foo: újrakonfigurál egy csomagot; néha hasznos
  • dpkg -l: telepített csomagok listázása
  • dpkg -I foo.deb: egy adott csomag információi
  • dpkg -L foo: egy telepített csomag tartalmának kilistázása
  • dpkg -c foo.deb: egy adott csomag tartalma
  • dpkg -S foo: a foo állományt tartalmazó csomagok kikeresése (csak a feltelepített csomagokban keres; az összes elérhető csomaghoz használd az auto-apt)

apt

Az Advanced Packaging Tool valójában egy függvény-gyűjtemény, amely a dpkgra támaszkodik. A csomagokat az /etc/apt/sources.listban felsorolt forrásokból tölti le és fejlett a függőség-kezelő rendszere. Sok program épül rá, leggyakrabban használt az apt-get és apt-cache. Támogatja a bash programozható kiegészítést és a joker karaktereket (pld.: apt-ge[TAB] ins[TAB] csomagn[TAB]).

A 0.6os verziótól kezdve (ami jelenleg csak sid alól érhető el) a hivatalos Release állomány (amely a csomaglisták MD5 ellenőrző összegét tartalmazza) PGP kulccsal lett aláírva. Tehát az apt figyelmeztet, ha nem hivatalos helyről akarsz csomagot telepíteni. A csomagszintű PGP szignálás fejlesztés alatt van. (A 2006-os PGP kulcsok telepítése.)

Használata (csomag = gdm_2.2.5.5-2_i386.deb, csomagnév = gdm):

  • apt-get update: frissíti a csomaglistákat és a függőségeket a sources.list alapján
  • apt-get upgrade: összehasonlítja a feltelepített csomagok listáját a rendelkezésre állókéval és ha van vmelyikből frissebb, azt frissíti
  • apt-get dist-upgrade: az olyan csomagokat is frissíti, amik újabb változatának telepítéséhez új csomagokat is kell telepíteni
  • apt-get install csomagnév: telepíti a csomagok, amennyiben szerepel a csomaglistában
  • apt-get remove csomagnév: eltávolítja az adott csomagot (kezeli a --purge tagot)
  • apt-cache show csomagnév: alapvető információk a csomagról
  • apt-cache search kulcsszó: keresés a csomagleírások közt
  • apt-get -f install: valamilyen hiba miatt félbemaradt telepítést / eltávolítást megpróbálja folytatni

Megj.: a -s esetén csak szimulálja az adott feladatot.

Problémák

Fontos! Minden probléma megoldása után add ki az apt-get -f install parancsot, hogy folytatódjon a csomag-konfiguráció.

egy megváltoztatott konfig felülírása

Probléma: egy csomaghoz tartozó konfigurációs állomány megváltozott az előző telepítés óta és a dpkg felülírná az új változattal.

Példa:

Setting up module-init-tools (3.1-pre5-3) ...

Configuration file `/etc/modprobe.d/aliases'

 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
    D     : show the differences between the versions
    Z     : background this process to examine the situation
 The default action is to keep your current version.
*** aliases (Y/I/N/O/D/Z) [default=N] ?

Megoldás: először érdemes "d"vel megnézni, mi fog változni; ha semmi jelentős, akkor érdemes engedni ("i"). (Megj.: az előző változat nem vész el, hanem lemetődik .dpkg-old kiegészítő kiterjesztéssel, így késöbb is használható az egyediesített rész.)

egy csomag nincs telepítésre kijelölve

Probléma: nem lehet egy csomagot telepíteni, mert nincs telepítéshez kijelölve.

Példa:

# apt-get install openoffice.org-help-hu
Csomaglisták olvasása... Done
Függőségi fa építése... Done
Package openoffice.org-help-hu is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: A openoffice.org-help-hu csomagnak nincs telepítéshez jelöltje

Megoldás: megvárod, míg feltölti valaki a te ágadba (Keresés a csomagkönyvtárakban Verzió: mindegyik). (Megj.: előfordul olyan eset is, hogy a csomag feladatát már egy másik csomag látja el ("Azonban a következő csomagok felváltják"), tehát ilyenkor már az újabbat kell telepíteni.)

megoldhatatlan függőségi viszonyok

Példa: frissül az xfs, de az ettől függő x-window-system nem követi a verziószám változást, így nem engedi a frissítés végrehajtását.

Megoldás: legkönnyebben a synapticban lehet végigkövetni, mi okozza a gubancot (esetünkben az x-window-systemet el lehet távolítani, mert az csak egy metacsomag). Ha nem sikerül megoldani fontos csomagok eltávolítása nélkül, akkor érdemes kicsit várni, amíg kijavítják a hibát.

függőségi okokból eltávolítana egy csomagot

Példa:

# apt-get dist-upgrade 
Csomaglisták olvasása... Kész
Függőségi fa építése... Kész
Frissítés kiszámítása... Kész
A következő csomagok el lesznek TÁVOLÍTVA:
  libgcj6-common
A következő ÚJ csomagok lesznek telepítve:
  gcj-4.0-base libgcj6-jar
A következő csomagok frissítve lesznek:
  cpp-4.0 fastjar g++-4.0 gcc-4.0 gcc-4.0-base gcc-4.0-locales gconf2 gconf2-common gij-4.0 imlib-base imlib11 java-gcj-compat libgcc1 libgcj-common libgcj6 libgconf2-4 libpaper1 libstdc++6
  libstdc++6-4.0-dev libttf2
20 csomag frissítve lesz, 2 új csomag lesz telepítve, 1 el lesz távolítva és 0 nem lesz frissítve.
18,3MB-t kell letölteni az archívumokból.
Kicsomagolás után 1098kB lemezterület lesz felhasználva.
Folytatni akarod [Y/n]? n
Megszakítva.

Megnézzül az eltávolítandó és az újonnan települő csomagok leírását:

# apt-cache show libgcj6-common libgcj6-jar

Package: libgcj6-common
Priority: optional
Section: libs
Installed-Size: 9488
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Architecture: all
Source: gcj-4.0
Version: 4.0.2-5j2
Depends: gcc-4.0-base (>= 4.0.2), libgcj6 (>= 4.0.2)
Filename: pool/main/g/gcj-4.0/libgcj6-common_4.0.2-5j2_all.deb
Size: 3120006
MD5sum: 3aa1655b95110ff5abbeb4e1c114235d
 Description: Java runtime library for use with gcj (jar files)
 This is the jar file that goes along with the gcj front end to gcc.

Package: libgcj6-jar
Priority: optional
Section: libs
Installed-Size: 9524
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Architecture: all
Source: gcj-4.0
Version: 4.0.2-6
Replaces: libgcj6-common
Depends: gcj-4.0-base (>= 4.0.2-6), libgcj6 (>= 4.0.2-5j2)
Conflicts: libgcj6-common
Filename: pool/main/g/gcj-4.0/libgcj6-jar_4.0.2-6_all.deb
Size: 3103518
MD5sum: 3f2601c89fc089c2f9659bc4329ec09d
Description: Java runtime library for use with gcj (jar files)
 This is the jar file that goes along with the gcj front end to gcc.

Megoldás: a verziószámok alapján egyértelmű, hogy a libgcj6-common csomit felváltja a libgcj6-jar, ezért hagyjuk jóvá frissítést.

hiányos csomagkezelő script

Probléma: egy csomag telepítése / törlése közben derül ki, hogy a csomagkezelést végző scriptek végrehajtásához hiányzik valami.

Példa:

/var/lib/dpkg/info/php4.prerm: modules-config: command not found

Megoldás: Bugreport. (Quickfix: keress rá, hogy melyik csomagban van (auto-apt search modules-config vagy Debian -- Csomagok: Keresés a csomagok tartalmában) és telepítsd fel.)

hiba a dpkg futása közben

Probléma: hiba történt a dpkg futása közben.

Példa:

(...)

E: Sub-process /usr/bin/dpkg returned an error code (1)

Megoldás: scrollozz vissza a problémáig. Ha fontosnak tűnik, akkor írj egy bugreportot. (Általában elég egy apt-get -f install lefuttatása.)

más csomaghoz tartozó állomány felülírása

Probléma: a telepítő script egy másik csomaghoz tartozó állományt írna felül.

Példa:

dpkg-divert: rename involves overwriting `/usr/X11R6/include/X11/Xft/Xft.h'
with different file `/usr/X11R6/include/X11/Xft/Xft1.h', not allowed

Példa2:

Preparing to replace libvte-common 1:0.11.15-3 (using .../libvte-common_1%3a0.11.15-4_all.deb) ...
Unpacking replacement libvte-common ...
dpkg: error processing /var/cache/apt/archives/libvte-common_1%3a0.11.15-4_all.deb (--unpack):
 trying to overwrite `/usr/share/locale/no/LC_MESSAGES', which is also in package libgnomeui-common
dpkg-deb: subprocess paste killed by signal (Törött cső(pipe))
Errors were encountered while processing:
 /var/cache/apt/archives/libvte-common_1%3a0.11.15-4_all.deb

Megoldás: Bugreport. (Quickfix: töröld az /usr/X11R6/include/X11/Xft/Xft.h-t ill. /usr/share/locale/no/LC_MESSAGESt.)

sérült "status"

Probléma: megsérült a /var/lib/dpkg/status állomány.

Példa: bármilyen apt vagy dpkg parancs hatására:

error in /var/lib/dpkg/status near line xxxx

Megoldás: cseréld le az ugyanabban a könyvtárban lévő status-old állományra, ill. /var/backups/-ban vannak régebbi változatok.

sérült "available"

Probléma: megsérült a /var/lib/dpkg/available állomány.

Példa: FIXME

Megoldás: egyszerűen töröld le a tartalmát (pld.: echo > /var/lib/dpkg/available) és frissítsd a csomaglistákat (apt-get update).

sérült a "cache"

Probléma: megsérültek az apt cache állományai.

Példa:

apt-get akarmi
(...)
Segmentation faulty Tree... 50%

Megoldás: töröld le a cacheket (rm /var/cache/apt/*.bin).

dpkg nem tud .lockolni

Példa:

E: Could not open lock file /var/lib/apt/lists/lock - open (13 Hozzáférés megtagadva)
E: Nem lehet zárolni a lista könyvtárat

Megoldás: root felhasználóként kéne futtatni.

lehetetlen elérni a szervert

Példa:

W: Lehetetlen a http://ftp.de.debian.org unstable/non-US/contrib Packages
(/var/lib/apt/lists/ftp.de%5f.debian.org_debian-non-US_dists_unstable_non-US_contrib_binary-i386_Packages)
forráscsomag listát ellenőrizni - stat (2 Nincs ilyen fájl vagy könyvtár)

Megoldás: keress egy másik mirrot (apt-setup).

nincs elég memória az apt számára

Példa:

# apt-get update
(...)
E: Dynamic MMap ran out of room

Ok: az apt egy fix méretű memóriaterületet foglal le az available állomány tárolására, ami túl sok csomag esetén betelik.

Megoldás: az /etc/apt/apt.conf állományba írd bele ezt a sort:

APT::Cache-Limit 16777216;

Ez 16 megára növeli ezt a memóriát; ha ez is kevés: kétszerezd addig, amíg elég nem lesz.

nem írható /tmp

Probléma: noexec /tmp miatt nem lehet néhány csomagot frissíteni.

Példa:

Preconfiguring packages ...
Can't exec "/tmp/tasksel.config.20021": Hozzáférés megtagadva at /usr/share/perl/5.8/IPC/Open3.pm line 168.
open2: exec of /tmp/tasksel.config.20021 configure 2.16 failed at /usr/share/perl5/Debconf/ConfModule.pm line 44
tasksel failed to preconfigure, with exit status 255

Ok: a /tmp könyvtár noexec opcióval lett mountolva, ezért a csomag telepítéséhez szükséges egyik komponens nem tud lefutni.

Megoldás: a /tmp-en lehetővé kell tenni a binárisok futtatását.

létező csomagbejegyzéshez nem tartozik csomag

Példa:

# apt-cache show locale-ja
(nincs válasz)

Ok: valaha létezett a csomag, de mára átnevezték vagy eltávolították.

Megoldás: kideríteni az új nevét: apt-get install locale-ja -s

Magasszintű eszközök

apt-setup

Kezeli a sources.listet.

Konfigurálásakor kérdések: honnan érhetőek el a debian csomagok? ftp; melyik ág? válaszd a jelenleg használt vagy mostnatól használni kívánt ágat; akarsz nemszabad (non-free, pontosabban contrib) csomagokat? igen; melyik országból kérsz tükörszervert? ami földrajzilag legközelebb van; (most letölti a csomag listákat); akarunk más úton is deb csomagokat? nem; security.debian.org? nem (csak stable támogatja).

Pár megjegyzés az apt-setuppal kapcsolatban:

  1. nem ellenőrzi a sources.list tartalmát, ezért többszöri futtatásakor mindig újabb címeket ír bele ahelyett, hogy a régit felülírná; ezért érdemes az állományról biztonsági másolatot készíteni, majd törölni, ha új frissítési forrást akarsz felvenni
  2. gyakori probléma, hogy nem kérdez rá, hoy melyik ágat akarod használni; ennek oka, hogy a debconf csomag kérdezési szintje nem lowra lett állítva (átállíthatod: dpkg-reconfigure debconf paranccsal)

apt-listbugs

Minden csomag frissítés és telepítés előtt lekérdezi a bugs.debian.orgról a csomaghoz tartozó hibák listáját.

Lényeges tudnivalók:

  1. a hiba lehet: open - nincs lezárva a hiba, done - mehet a frissítés
  2. milyen architektúrák érintettek: ha nem i386, akkor nyugodtan frissíts
  3. mi a hiba természete: w kiad egy oldalt, itt lehet végigfutni

Ha bizonytalan vagy, inkább ne frissítsd az adott csomagot pár napig.

Adott csomag hibáinak lekérdezése: apt-listbugs list csomagnév

Megj.: alapesetben a csomag verziójától függetlenül az összes hibát kiírja, ezért a gyanús hibákat érdemes megnézni (w). Jobb megoldás, ha szűröd, hogy milyen típusú hibákra vagy kiváncsi, pld. csak sid hibák: apt-listbugs -T sid list csomagnév. Ha frissítés közben is szertnél szűrni, akkor az /etc/apt/apt.conf.d/10apt-listbugs állományt írd át: (...) then /usr/sbin/apt-listbugs -T sid apt (...).

Megj.2: Az apt-listbugs egy böngészőt hív meg a hibalist megjelenítésekor (w) a sensible-browser segítségével. Ez alapból a lynx, aminek tudása igen szerény, ezért érdemes felrakni a fejlettebb linkst és beállítani: update-alternatives --config www-browser

Probléma: nem sikerül elérni egy bug reportot (hibás csomag)
Példa:

Reading package fields... Done
Reading package status... Done
Retrieving bug reports... 0% [0/6] W: invalid compressed data -- crc error: module-init-tools
Retrieving bug reports... Done
Bugs of the following packages couldn't be fetched:
 module-init-tools
Assuming that there is no bugs of these packages.

Megoldás: töröld az adott csomagot a /var/cache/apt/archives könyvtárból és kezd elölről a frissítési procedúrát.

Probléma 2.: "Dummy bug" Példa:

listbugs grave bugs of clamav (0.83.84rc2-2 -> ) <open>
#304059 - clamav: Dummy bug

Megoldás: nem valódi hiba, hanem a csomag testingbe kerülését akadályozzék meg ezzel a trükkel. Nyugodtan telepítsd fel.

apt-listchanges

Egy csomagok telepítése előtt kilistázza a változtatásokat (összeveti a chagelog.Debian.gz állományt a jelenleg telepítettel).

Kérdések telepítés során: hova írjon? pager; kihagyja a már ismertett változásokat? igen; kinek küldjön emilt? root; milyen típusú változásokra vagy kíváncsi? both; rákérdezzen a frissítésre? igen.

Csomagfrissítéskor legyűjti az új változásokat, érdemes átfutni.
Lényeges tudnivalók:

  1. egy frissítés fejléce:
    • csomagnév (verzió) melyik ágba került feltöltésre
    • mennyire fontos (minél magasabb, annál gyorsabban kerül be a testingbe)
  2. lábléc: csomagot feltöltő neve <emil> feltöltés dátuma
  3. New upstream version: új változata jelent meg a csomagot alkotó programból
  4. debian/ debian specifikus állományok változnak, ilyenkor szokott a csomag release növekedni
  5. patch: programkód változás bug javítás / feature bővítés / jobb együttműködés a debiannal
  6. NMU (non-maintainer upload): a csomag eredeti karbantartója épp nem volt elérhető, ezért másvalaki töltött fel új verziót
  7. BTS (bug tracking system): a debian bugokat nyilvántartó adatbázisa
  8. FTBS (fails to build from source): nem sikerült lefordítani a forrást, így nem készült el a bináris csomag (ált. bizonyos architektúránál)

reportbug

A debian saját hibakezelő rendszeréhez tartozó hibabejelentő program. Egy kis angoltudással és a debian működésének ismeretével könnyen el lehet igazodni benne.

Nagyon fontos, hogy mielőtt beküldenél egy hibabejelentést (vagy bármilyen más szolgáltatását igénybevennéd) gyűjts össze minden információt a hibáról (pontos leírása, pontos körülmények a reprodukáláshoz, stb.).

Egy példa a Debian BTS használatára (természetesen a szöveg begépelésekor él, de lehet, hogy holnap már nem; szóval csak egy példa a logika megértéséhez):

  1. egy program indítása a következő hibaüzenttel félbeszakad: /usr/bin/ssh-agent: error while loading shared libraries: libcrypto.so.0.9.7:cannot enable executable stack as shared object requires: Error 14
  2. milyen csomaghoz tartozik a hibát okozó állomány? auto-apt search ibcrypto.so.0.9.7, eredmény a libssl0.9.7 csomag
  3. ezután a csomaggal kapcsolatos bejelentett (és lezáratlan) hibák listáját átfutni: a packages.qa.debian.org-on rákeresel az adott csomagra (ebben az esetben átirányít a openssl forrás-csomaghoz)
  4. leellenőrzöd a lezáratlan hibabejelentéseket: az Overview of openssl source package oldal bal oldalán van egy navigációs menü, aminek Bugs Count részében nekünk az összes hiba listája kell, ezért az All bugs melletti hibaszámra bökj egyet
  5. az oldalt végigfutva van egy valószínűleg hasonló hiba: #321721 cannot enable executable stack as shared object requires: Error 14
  6. az hibabejelentést átfutva kiderül, hogy lassan javítva lesz a hiba

Érdemes ezeket átolvasni a hibabejelentés elküldése előtt:

popularity-contest

Periodikusan visszaküldi a telepített csomagok listáját a debian fejlesztőinek, akik ezeket összesítve jutnak értékes információkhoz a csomagok népszerűségéről (melyik csomagok melyik cdre kerüljön, mi élvezzen magasabb prioritást hibavadászaktor, stb.).

Kérdés telepítéskor: Szolgáltat adatokat a Debian-csomagok népszerűségi nyilvántartásának? igen.

(Megj.: a megfelelő működés érdekében a telepített állományoknak rendelkezni kell valós Access Time értékkel; röviden: a rootfs ne noatime beállítással legyen mountolva. Ez a mount kimenetén ellenőrizhető.)

csomagstátusz loggolás

A friss dpkg már képes a csomagok telepítésének, újrakonfigurálásának, eltávolításának, stb. loggolására. Ellenőrizd, hogy milyen verzió van fent (dpkg --version), ha 1.13.5 vagy magasabb, akkor támogatva van ez a funkció (jelenleg csak sidben). A log helye: /var/log/dpkg.log.

Ha nincs támogatva, akkor használhatod az apt-historyt.

debsums

Ellenőrizni lehet a feltelepített csomagok sértetlenségét (MD5 hasht).

Használata: debsums -a | grep -v "OK"

Lényeges tudnivalók:

  1. "FAILED" : eltér az állomány md5 értéke a csomagban tároltétól; ez egyediesített állományoknál oké (pl.: bash.bashrc, logrotate.conf, stb.)
  2. "debsums: no md5sums for": nincs hozzá md5 érték; majd egyszer lesz

feleslegessé vált csomagok keresése

Az idők során gyűlni fognak a direkt / véletlenül feltelepített, de mára feleslegessé vált csomagok.

Hogyan lehet ezeket megtalálni?

deborphan:
Sima indításakor kigyűjti azokat a library csomagokat, amiktől nem függ semmi; a man oldalát átböngészve érdemes kicsit tuningolni: deborphan --priority=optional --all-packages | sort | less

debfoster:
Kikeresi azon csomagokat, amiktől csak egy másik csomag függ, vagy egy sem; ha bármelyik kérdésnél "h"t ütsz kiírja a lehetséges műveleteket (fontos: (y)es = tartsa meg a csomagot, (p)rune = csomag és árván maradó függőségeinek törlése, (i)nformation = információ a csomagról, (q)uit = kilépés csomageltávolítás nélkül). (Megj.: a debfoster megjegyzi az eddigi válaszokat, ha ezt felül akarjuk bírálni indítsuk egy "-n" kapcsolóval.)

Fontos!
Végig oda kell figyelni, mert sok fontos csomagtól nem függ semmi, ám leszedésük lehetetlenné teheti a rendszer működését; ezért a fölöslegesnek talált csomagok eltávolítása előtt mindig nézd meg (apt-cache show csomag) a fontossági szintje ("priority") ne legyen magas (magas: required, important, standard; alacsony: optional, extra) és a csomag rendeltetésébe is érdemes beleolvasni (pl. libtrash nem árt)).

egyéb trükkök

Release critical hibák kilistázásához telepítsd a devscripts csomagot.
Használata: rc-alert | less

Szabálytalan státuszú csomagok listázása: dpkg -l | grep -v "ii "
Lényeges tudnivalók:

  1. "rc": a csomaghoz tartozó konfigurációs állományok --amelyek az /etc könyvtárban találhatók-- nem kerültek eltávolításra. Amennyiben ezeket is törölni szeretnéd, add ki a 'dpkg --purge csomag' parancsot
  2. úgy általában, ha nem "ii" (épp ezt szűrtük le), akkor ajánlott újratelepíteni az adott csomagot: 'apt-get install csomagnév --reinstall'

A telepített csomagok neveinek listázása: dpkg --get-selections | cut -f1

Az összes telepített csomag letöltése (pl. archív cd készítéséhez):

  1. 'apt-get clean' - a letöltött, de nem telepített (vagy idejétmúlt) csomagoktól megszabadulunk
  2. 'dpkg --get-selections | cut -f1 > csomagok' - a telepített csomagok listája
  3. 'apt-get install $(cat csomagok) --download-only --reinstall' - csomagok letöltése

Egy csomag mely csomagoktól függ és melyek függnek tőle:
'apt-cache depends csomag' = mely csomagoktól függ
'apt-cache rdepends csomag' = mely csomagok függnek tőle

Közvetlen turkálás a csomag-adatbázisokban?
a '/var/lib' alkönyvtáraiban rengeteg érdekesség van: 'apt/', 'dpkg/'

Csomagok kézi letöltése:
ftp://ftp.debian.org/debian/pool/

A csomagfüggőségek felülbírálása: "equivs" csomaggal ismerkedj meg.

Deb csomagok telepítése lokálisan (már ha 'dpkg -i csomagnev' nem elég)?

  1. a .debek egy könyvtárban legyenek
  2. 'dpkg-scanpackages ./ /dev/null | gzip > Packages.gz '
  3. 'sources.list'-be: "deb file:/a_konyvtra_eleresi_utja /"
  4. 'apt-get update'

A csomag régi verziójának letöltése: snapshot.debian.net

Egyéb programok, amiről nem esett szó (mert ugyanazokat a feladatokat látják el, mint a fentebb említettek, csak másképp): dlocate, dselect, aptitude, ...

Grafikus megoldások

(Természetesen ezek futtatásához is kell X.)

  • gjig: sok alapvető és mélyebb csomagkezelési feladathoz frontend (a wajig csomag része)
  • gkdebconf: csomagok újrakonfigurálását segíti elő
  • synaptic: az apt képességeinek széles körét valósítja meg egy jól megtervezett felületen
  • apt-watch és upgrade-notifier: a systrayba ül és jelez, ha elérhető valamilyen frissítés

Debconf grafikus kimenettel:
A csomagok a konfigurálás alatt a debconf segítségével tudnak egy szabványos felületen keresztül kommunikálni a felhasználóval. A debconf újrakonfigurálásakor több kiment közül is lehet választani; ha a grafikus csomagkezelés a cél, akkor a "Gnome" vagy a "Kde" interface áll rendelkezésre: az előbbi GTKt használ (és a libgnome2-perl csomagot igényli), az utóbbi pedig Qtt (libqt-perl); kicsit eltér mindkettőnek a kinézete, de teljesen ugyanazt végzik el.

Stableről áttérés testingre / sidre

Elméleti rész: Debian kiadások

a csomagforrások beállítása: apt-setup

Továbbiakban nem szertnénk használni a telepítő cdt, mint csomagforrást, ezért az /etc/apt/sources.list állomány deb cdrom(...) sorait tedd megjegyzésbe (írj elé egy #t).

A csomaglisták frissítése: apt-get update.

pár lépés, amik megkönnyítik a frissítést:
telepíteni: libc6 libc6-dev locales - minden alapja; az új libc6 telepítésénél figyelmeztet, hogy pár csomag nem fog megfelelően működni újraindításig, de ezeket még raktuk fel. Ha volt libc6 firssítés, akkor érdemes újraindítanni (reboot) a rendszert, hogy a váltás rendben legyen. (Meg.: ritkán előfordulnak kompatibilitási problémák, ha nagyobb libc6 és kernel frissítés egyszerre zajlik, ezért ha most új kernelt szeretnél telepíteni, azt mindeképp reboot után tedd.)

telepíteni: debconf debsums debconf-i18n dpkg apt - csomagkezelés legyen friss
telepíteni: modconf modutils module-init-tools - kernel modulok kezelése
telepíteni: harden-clients harden-servers - megakadályozza, hogy feltelepíts nem megbízható csomagokat

apt-get dist-upgrade - alaprendszer frissítése, ha követted az eddig írtakat, akkor kb. 50 megát fog leszedni és eltart jó ideig. (Ha kiakad a frissítés: apt-get -f install, majd apt-get dist-upgrade, amíg rendbe nem jön.)

Ha felraktad az apt-listbugst, akkor most jópár hibát fog jelezni (akár opent is), de ezt most figyelmen kívül lehet hagyni.

Hagyd, hogy az előzőleg kézzel módosított állományokat (login.defs, bash.bashrc) felülíródjanak, majd frissítés után újra meg lehet ejteni a változtatásokat.

Miután befezte, érdemes újratelepíteni a grubot, hogy érvényesüljön az új verzió (grub-install /dev/hdx).

reboot

Programfordítás

általános fordítás forrásból

Általános információk a Programfordításról.

Milyen csomagokra lesz szükség?
'build-essential' = biztosítja a fordításhoz szükséges alapvető csomagok meglétét (libc6-dev, gcc, g++, make, dpkg-dev)

auto-apt

Ha egy program egy nem létező állományt akar elérni, akkor kikeresi a megfelelő csomagot és felajánlja a telepítését. A megfelelő működéséhez a következő csomagokat telepítsd fel: sudo wget dpkg-dev libgtk-perl. Csak x alatt működik rendeltetés szerint. A felajánlás lehet egy vagy több csomag, utóbbi esetben érdemes megnézni az info alatt melyiket érdemes választani; ha nem ismered, mire való az adott csomag, akkor is érdemes elolvasni az infot. Ha bizonytalan vagy: nyomj mindenre install.

auto-apt használata:

  • auto-apt run parancs: a parancs figyelése
  • auto-apt update: állomány-listák frissítése (első használat előtt mindenképp kell és minden dist-upgrade után ajánlott)
  • auto-apt search allomany: adott állomány mely csomag(ok)ban fordul elő (teljes path esetén / nélkül keress, pld.: auto-apt search etc/email-addresses)

Megj.: a helyes működéshez az /etc/sudoersben helyezd el ezt a sort:

felhasználó_név    ALL=(root) NOPASSWD: /usr/bin/apt-get -y install [!-]*

Megj.2: a progam működési elve miatt néhány csomagot nem képes megfelelően felismerni:

  • libgtk2.0-dev-et nem ismeri fel, kézzel kell telepíteni
  • nem tudja megkülönböztetni a libgnome-dev és libgnome2-devet, ezért az előbbit szokta felajánlani, pedig általában az utóbbit kell telepíteni

deb csomag készítés forráscsomagból

FIXME: nem sokat foglalkoztam a témával, ha van kiegészítő információd: írj.

Először érdemes ellenőrizni, a csomagforrások elérhetőségét: az /etc/apt/sources.listben a deb (...) sorokhoz hasonló, de deb-src (..) sorok is szerepeljenek (lásd: apt-setup).

egy csomag forrása három állományból áll:
'hello_2.1.1-4.dsc' = pgp aláírás és legfontosabb információk (bináris csomag(ok) neve, karbantartó, debian szabvány verzió, csomag forrás állományai, stb.);
'hello_2.1.1.orig.tar.gz' = eredeti forrás;
'hello_2.1.1-4.diff.gz' = debian csomag készítéshez szükséges patchek;
ebből kitömörítés és patchelés után egy könyvtárba kerülnek a fordításra kész állományok: 'hello-2.1.1/'

jópár módszer létezik a feladatra a (szinte) teljesen kézivezérléstől a (szinte) teljes automatizálásig, amit csak tudok ismertetek;
(megj.: ne felejtsd telepíteni a "fakeroot" csomagot, szinte minden fordító felület használja;)

apt-get

(megj.: ezt érdemes a '/var/cache/apt/archives/' könyvtárban intézni, elvégre ez a csomagok szabványos helye)

apt-get build-dep hello<br> a fordításhoz szükséges függőségek telepítése;
apt-get source hello -b
források leszedése, kitömörítése és patchelése; majd a forrásból létrehozható minden bináris csomag architektúrának megfelelő elkészítése;
dpkg -i hello_2.1.1-4_i386.deb
lefordított csomag telepítése;

megj.: egy-egy csomaghoz nem rossz, de napi frissítéshez nehézkes;

apt-src

telepíteni: apt-src
egyszerűbb ennyiben: apt-src install hello -b
fordít és telepít;

apt-build

telepíteni: apt-build - kérdések: Where should apt-build download and build packages? maradhat alapértelmezett; Where must apt-build store built packages? szintén; Which optimization level do you want? Medium (-O2) ajánlott, a Strong (-O3) generálhat hibás kódot; Add apt-build repository to sources.list? yes, így rögtön lehet telepíteni a lefordított csomagokat; Which options would you like to add to gcc? maradhat üresen; What is your architecture? értelemszerű;

teljesen ugyanúgy működik, mint az 'apt-get' (update, install, stb.; ugyanúgy cacheeli a letöltött csomagokat);
pld.: 'apt-build install hello'

részletek: man apt-build

megj.:
ha megváltoztatod a 'sources.list'et, akkor lehet, hogy nem megy automatikusan a repository beillesztés, ilyenkor kézzel kell: "deb file:/var/cache/apt-build/repository apt-build main";
az 'apt-build install' mindig fordít, ha egyszerűen telepíteni akarsz egy fordított csomagot, akkor 'apt-get install';
a függő csomagok bináris változatát telepíti;

megjegyzések

általános megjegyzések:
lehetne további hibák fordítás közben, nem árt ha felkészült vagy debianból és alapvető programozási ismeretekből; szabadidő sem árt;
elképesztő fordítási függőségei vannak egy-két csomagnak;
az apt-listbugs kézzel kell előtte intézni, ha nem akarsz hibás csomagot fordítani; az 'auto-apt'tel nem működik együtt;

Ha egy létező csomagot szeretnél újraforgatni más paraméterekkel: Debian Package Customization HOWTO.

és végül a lényeg:
a legtöbb c/c++ programnál nem történik semmilyen optimalizáció, hiába pentium-builder vagy bármilyen trükk, mivel a 'debian/rules'ben a lokális "CFLAGS" és "CXXFLAGS" előre be van állítva, ami felülbírálja a globális beállításunk;
egy lehetséges megoldás, ha kézzel a 'debian/rules'ben a többi "CFLAGS" és "CXXFLAGS" definíció után és a "build:" rész előtt beilleszted a kívánt optimalizálást, pld.: 'CFLAGS = -g -Wall -O2 -march=i686 -mcpu=i686' és 'CXXFLAGS = -g -Wall -O2 -march=i686 -mcpu=i686';
aki nagyon ráér keressen jobb módszert;

Sima forráskódból Debian csomag készítése: How to make a Debian package without using a helper

apt-fu

(Ez a program jelenleg nincs karabntartva (sőt a neten se lehet fellelni), de benthagytam okulásul. Ne töröld ki. Kösz.)

ez nem hivatalos, de sokkal nagyobb tudású az előzőknél (pld. a fordításhoz szükséges függőségeket csak idégelensen tölti le, a csomag függőségeit is fordítja, stb.);

az '/etc/apt/sources.list'be írd be:

deb http://des.petta-tech.bogomips.org/~eric/apt-fu/ ./
deb-src http://des.petta-tech.bogomips.org/~eric/apt-fu/ ./

frissítsd a csomaglistákat (a "Nem sikerült leszedni http://des.petta-tech.bogomips.org/~eric/apt-fu/./Release sikertelen átnevezés, (...)" hibát még egy update megoldja) és telepítsd ezeket a csomagokat: apt-fu fakeroot patchutils pentiumbuilder

pentiumbuilder:
a támogatott fordítók (gcc, g++) alapértelmezett binárisait lecseréli egy-egy scriptre, amin keresztül könnyen rá lehet venni a fordítókat, hogy a kívánt architektúrára optimalizáljanak fordítás során;
használatához a DEBIAN_BUILDARCH környezeti változót kell definiálni; imho legegyszerűbb, ha az '/etc/bash.bashrc'-be rakod: 'export DEBIAN_BUILDARCH=$(uname -m)'
gcc/g++ felülbírálása (néha csak 2.95 jó): DEBIAN_BUILDGCCVER=2.95
(szép lenne, ha igaz lenne, lásd "általános megjegyzések" részt lejjebb)

csomag forrásból:
'apt-fu src-install csomag'
(ha létezik azonos nevű bináris csomag, azt lecseréli)

megj.:
ha az 'apt-fu src-install', 'src-dist-upgrade', stb. során a függőségek is fordítani karod, told meg egy '-R' kapcsolóval (ez azt is fordítja, ami már telepítve van, pld.: libc6);

hiba:

  1. hiányoznak csomagok
Info messages replay:
I: PKG cdbs/0.0-0 is not installable!
I: PKG aspell-bin/0.0-0 is not installable!

Megoldás: telepítsd a hiányzó csomagokat.

deb csomag készítése vanilla forrásból

Itt találsz egy jó ismertetőt:

Fun

Pár érdekes parancs:

  • apt-get moo
  • aptitude moo, illetve aptitude -v moo, aptitude -vv moo, stb.

Zárszó

Messziről kerüld el a nem hivatalos csomagokat, binárisokat, forrásokat, mert bizonytalan a támogatásuk (hiba- és biztonsági javítás, új verziók) valamint bizonytalan, hogy a név fedi-e a tartalmat (magyarul a kártékony tartalom gépbe juttatásának egyik legegyszerűbb eszköze). Kivétel ez alól az adott program készítőjének hivatalos csomaglistája (pl.: KDE).

Merre tovább?

Hardware és Kernel (Debian)