A /var/lib/ útvonalon található dpkg könyvtár és tartalmának pótlása

kimarite képe

A var könyvtárban lakó backup könyvtárból nem tudod pótolni az egyes csomagokhoz tartozó, a /var/lib/dpkg/ elérési úton található, info könyvtárban lakó fájlokat: list, md5sums, postinst, postrm, preinst, prerm, config, conffiles.

Mindezeket menthetted rendszer-visszaállítási pontban (Timeshift, Systemback). Javasolt.
Az említett beállításokat alapértelmezetten a rendszer nem menti másodpéldányban, és ez nem is elvárás.

Az info könyvtár tartalmának pótlására két általános módszer létezik...

A módszerek

  • a rendszer újratelepítése telepítő segítségével.
    • az összes egyéni beállításod „elvész”, de teljesen friss rendszert kapsz.
    • a telepítés 10-15 perc, a rendszer személyre szabása az, ami hosszabb ideig tarthat (ehhez segítség itt).
  • az összes alkalmazás és csomag újratelepítése.
    • hosszú ideig tart.
    • sok szabad hely szükséges, akár 10-15 GB.
    • a saját beállításaid, a telepített alkalmazások megmaradnak, de egyes rendszer beállításokkal bizony foglalkozni kell (alapértelmezésre állnak vissza), és ehhez van-e kitartás.

Válaszd ki, melyik mellett döntesz. Mérlegeld a módszerek előnyeit és a hátrányait.

Telepítővel történő rendszer újratelepítés

Ismertek a feltételek. Ez a tiszta, azaz, az ajánlott módszer.
A telepítés előtt azonban érdemes a saját dolgaidat például külső merevlemezre vagy felhőbe menteni, hiszen egy új telepítés nem tartja meg a letöltött vagy mentett fájlokat és könyvtárakat, mindent töröl.

Az összes telepített alkalmazás és csomag újratelepítése

Megteheted azt is, hogy a telepített csomagokat újratelepíted.

A needrestart alkalmazás eltávolítása

0) Érdemes eltávolítani a needrestart alkalmazást, hiszen sok csomagot telepítesz újra, és a Systemd meglehetősen sokszor kérne meg, hogy bizonyos szolgáltatásokat indíts újra egy-egy csomag telepítése után, következésképpen az újratelepítések folyamata akár több óráig tartana, és folyamatos figyelmet, készenlétet igényelne tőled.

A needrestart beállításainak szerkesztése is megoldás lehet, de egyszerűbb az alkalmazást átmenetileg eltávolítani.

sudo apt-get purge needrestart

A szolgáltatás kikapcsolásának érvényesítéséhez indítsd újra a rendszert grafikusan vagy terminálban.

sudo systemctl reboot

Felkészülés a csomagok újratelepítésére

Könnyen érthető lépéseken vezetlek végig a tennivalókon.

1) Legyen elegendő szabad hely a merevlemezen a csomagkezelő által letöltött telepítőknek.

2) Előfordulhat, hogy egy-egy alkalmazást a telepítőjének letöltésével, a GDebi csomagkezelővel telepítetted, vagyis, a telepítés alkalmával nem jött létre az alkalmazás frissítéséhez szükséges tükör. Ilyen alkalmazás például a Zoom, amely a saját menüjéből frissíthető. Ezeket az alkalmazásokat mindenképpen telepítsd újra, hiszen ezzel létrehozod az alkalmazásra jellemző, a /var/lib/dpkg/ elérési úton található, info könyvtárban lakó fájlokat: list, md5sums, postinst, postrm, preinst, prerm, config, conffiles.

3) Telepíts újra a rendszerre telepített csomagokat. A script csak azokat a csomagokat telepíti újra, amelyek nem rendelkeznek az alkalmazásra jellemző, a /var/lib/dpkg/ elérési úton található, info könyvtárban lakó fájlokkal: list, md5sums, postinst, postrm, preinst, prerm, config, conffiles. A fájlokat az alkalmazások egyszeri telepítése hozza létre. A script csak azokat az alkalmazásokat tudja újratelepíteni, amelyek tükörrel rendelkeznek. Ezért volt fontos az előző lépés.

A hiányzó rendszerfájlokra (info könyvtár) jellemző hibaüzenetek egy-egy csomag telepítésének vagy újratelepítésének alkalmával jelentkeznek, a frissítés (sudo apt-get update ; sudo apt-get upgrade parancssorok futtatásakor) nem.

A hibaüzenet (példa):

dpkg: figyelj!: files list file for package '*' missing; assuming package has no files currently installed

Alkalmazások újratelepítése

Az újratelepítő scriptben a Kaffeine alkalmazás újratelepítésével hozom létre azon hibaüzeneteket, amelyekre az újratelepítés folyamata felépül.

Ha a rendszereden nincs telepítve a Kaffeine vagy nem szeretnéd telepíteni, akkor cseréld ki a kaffeine kifejezést egy, a rendszeredre már telepített alkalmazás csomagnevére...

for package in $(LANG=C sudo apt-get install --reinstall kaffeine 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do sudo apt-get install --reinstall "$package" --yes; done

Ha például a Firefox böngésző telepítve van, akkor a script így néz ki:

for package in $(LANG=C sudo apt-get install --reinstall firefox 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do sudo apt-get install --reinstall "$package" --yes; done

A parancssorban a yes kapcsoló (--yes) biztosítja, hogy a telepítések a lehetőségekhez mérten a felhasználó közreműködése nélkül fussanak le. Amikor feltétlen szükséges -helyetted nem tud dönteni a rendszer- valamilyen választ kell adnod a folytatáshoz (lásd lentebb).

A folyamat meglehetősen hosszú ideig tart (~három napi hideg élelemről gondoskodj).

A csomagok újratelepítése...

  • nem befolyásolja a saját könyvtáradban található, a felhasználóra vonatkozó alkalmazás beállításokat,
  • viszont akár befolyásolhatja az általános, azaz rendszerszintű alkalmazás beállításokat.

Megfelelően kezelendő jelzések

  • A Lynis alkalmazás az újratelepítésekor megkérdezi, a meglévő (általad szerkesztett, megváltoztatott) beállításokat használod, vagy a mindenkori újat. A felkínált lehetőségek közül választhatsz.
  • Az update-alternatives alkalmazás figyelmeztet az alapértelmezett beállítások megváltozására. Ezt mondja: esetleg újra be kell állítanod a jelzett alapértelmezéseket. Alapértelmezett beállításra példa: háttérkép, szövegszerkesztő, böngésző.
  • Az inxi, ha nem a tükörről származó verzióját használod, megkérdezi azt, mint a Lynis. Itt azonban, a választásodtól függetlenül, érdemes inkább ismét frissíteni a legújabb inxi verzióra.

Egy-egy csomag telepítése nem sikerül

Az alkalmazások sikertelen telepítéséről hibajelzést kapsz a folyamat során (dpkg).

Hibajelzés a kimenetben (példa):

Hibák történtek a feldolgozáskor:
 libpaper1:amd64
 libreoffice-writer
 libgs9:amd64
 libreoffice-draw
 dvisvgm
 libspectre1:amd64
 ufw
 libpaper-utils
 ghostscript
 fig2dev
 scribus
 grub-pc
 unattended-upgrades
 cups
libdvd-pkg: Package libdvdcss2-1.4.2-1 was removed, stop processing...
E: Sub-process /usr/bin/dpkg returned an error code (1)

A dpkg csomagkezelő jelzései az alkalmazás telepítéséhez szükséges függőségek hiányát jelzik, és a folyamat előrehaladásával eltűnnek. Amikor az alkalmazás függősége is telepítésre kerül, az apt csomagkezelő helyrehozza a problémás telepítést. Magyarázat másképpen: egyszerre egy alkalmazás kerül újratelepítésre, és a dpkg nem kezeli a csomagfüggőségeket, az apt viszont igen.

Ha mégsem tűnnek el, akkor futtasd:

sudo dpkg --configure -a
sudo apt-get -f install

Ha a két parancssor után is hibákat kapsz bármilyen csomagtelepítés alkalmával...

Ellenőrzés (példa):

sudo apt-get install --reinstall kaffeine

vagy

sudo apt-get install --reinstall firefox

vagy esetleg (lásd később is).

sudo apt-get install --reinstall needrestart

Hibák (példa):

dpkg: figyelj!: files list file for package 'linux-image-5.18.0-10.2-liquorix-amd64' missing; assuming package has no files currently installed
dpkg: figyelj!: files list file for package 'libasound2-plugins:i386' missing; assuming package has no files currently installed
(Adatbázis olvasása ... 382030 files and directories currently installed.)

A javítás sikerességének felmérése az apt-cache alkalmazás policy kapcsolójával történik (példa)

Ha az alkalmazás tükörről telepíthető, akkor http://* elérést kapsz (a tükör):

apt-cache policy libasound2-plugins:i386
libasound2-plugins:i386:
  Telepítve: 1.2.2-2
  Jelölt:    1.2.2-2
  Verziótáblázat:
 *** 1.2.2-2 500
        500 http://deb.debian.org/debian bullseye/main i386 Packages
        100 /var/lib/dpkg/status

Ha az alkalmazás tükörről nem telepíthető, azaz, törölhető, akkor nincs http://* elérés, csak status:

apt-cache policy linux-image-5.18.0-10.2-liquorix-amd64
linux-image-5.18.0-10.2-liquorix-amd64:
  Telepítve: 5.18-10.1~bullseye
  Jelölt:    5.18-10.1~bullseye
  Verziótáblázat:
*** 5.18-10.1~bullseye 100
        100 /var/lib/dpkg/status

Alkalmazás újratelepítése a hibaüzenet alapján (példa)

sudo apt-get install --reinstall libasound2-plugins:i386

Nem elérhető, másként felesleges alkalmazás törlése (példa)

sudo apt-get purge linux-image-5.18.0-10.2-liquorix-amd64

Egyszerre több csomag is kezelhető, ha sorba állítod a fenti parancssorokban az újratelepítendő, illetve a törlendő alkalmazásneveket (akkor, ha azokból több is létezik).

A sikeres újratelepítési folyamat után

Töröld a letöltött telepítőket.

sudo apt-get clean

Helyfoglalás (példa)

a tisztítás előtt,

df -h
Fájlrendszer   Méret Fogl. Szab. Fo.% Csatol. pont
udev            3,8G     0  3,8G   0% /dev
tmpfs           783M  1,5M  781M   1% /run
/dev/sda1       110G  101G  3,0G  98% /
tmpfs           3,9G  148K  3,9G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           783M  100K  782M   1% /run/user/1000

és a tisztítás után.

df -h
Fájlrendszer   Méret Fogl. Szab. Fo.% Csatol. pont
udev            3,8G     0  3,8G   0% /dev
tmpfs           783M  1,5M  781M   1% /run
/dev/sda1       110G   99G  5,7G  95% /
tmpfs           3,9G  148K  3,9G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           783M  100K  782M   1% /run/user/1000

... az újratelepítésekkel a rendszer korábban elfoglalt mérete mindenképpen megnő.

Töröld a rendszer működéséhez nem szükséges alkalmazásokat

sudo apt-get autoremove --purge

Telepítsd a needrestart alkalmazást (szükség van rá)

sudo apt-get install needrestart

A szolgáltatás használatának érvényesítéséhez és az újratelepített alkalmazások működéséhez szükséges szolgáltatások újraindításához, vagyis, a rendszer biztonságos használatához indítsd újra a rendszert grafikusan vagy terminálban.

sudo systemctl reboot

Enjoy :-)

Jegyzet

A korábbi leírást itt meghagyom: a Debian-alapú rendszerek csomagkezeléséről lehet vele tanulni...

Ne használd.

Nézd meg, a könyvtár létezik-e (terminálban):

file /var/lib/dpkg/

Ha a könyvtár létezik, akkor a kimenet ez:

/var/lib/dpkg/: directory

A könyvtár pótlása (ha nem létezik, akkor):

sudo apt-get update
sudo apt-get upgrade

... az eredeti tartalom azonban elveszett.

A könyvtár tartalma igen fontos, az APT, a dpkg, a Synaptic és az összes csomagkezelő ezt használja.
Véletlen törlés következményeként a telepített csomagokat nem látja a rendszer, így azokat frissíteni sem tudja.

Mutatom a javítás módszerét...

Készíts biztonsági mentést a status fájlról (mv):

sudo mv /var/lib/dpkg/status /var/lib/dpkg/status.ORIG

Másold a biztonsági mentésből (/var/backups/) a dpkg.status.0 fájlt a /var/lib/ útvonalon lakó dpkg könyvtárba (cp)

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/

Nevezd át a bemásolt fájlt, mert a működő status fájl ez lesz (mv):

sudo mv /var/lib/dpkg/dpkg.status.0 /var/lib/dpkg/status

Ismételd meg a műveleteket a diversions és a statoverride fájlokkal (szintén fontos és szükséges beállításokat tartalmaznak):

sudo mv /var/lib/dpkg/diversions /var/lib/dpkg/diversions.ORIG
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/
sudo mv /var/lib/dpkg/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo mv /var/lib/dpkg/statoverride /var/lib/dpkg/statoverride.ORIG
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/
sudo mv /var/lib/dpkg/dpkg.statoverride.0 /var/lib/dpkg/statoverride

A másolás és az átnevezés megoldható a fájlkezelő használatával is (admin joggal).

Futtass javítást terminálban (vélhetően, ezt üzenet is jelzi):

sudo apt-get -f install

Majd frissítsd a csomagokat:

sudo apt-get update
sudo apt-get upgrade

Hozzászólások