apt-get törött csomag probléma

 ( csfeco | 2019. március 8., péntek - 10:03 )

Sziasztok, egy kis segítség kéne.
Adva van egy Ubuntu 14.04 szerver, ami folyamatosan működött, de nem volt karbantartva.
Az Ubuntu-k alapértelmezetten lelkesen töltögetik magukra az új kerneleket, amik aztán gyűlnek, és előbb-utóbb kitöltenek akármennyi lemezt.
Jelen esetben az a 10G-t nem volt nehéz megtölteni. A felesleges kernelek eltávolítása (autoremove) nem működik, amíg van törött csomag, de addig nem lehet javítani a törött csomagokat, amíg nincs hely. Jelen esetben hiába sikerült varázsolni 1,3G szabad helyet, a 'apt-get install -f' szerint nincs elég hely:

Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Függőségek javítása... Kész
A következő csomagok automatikusan lettek telepítve, és már nincs rájuk szükség:
linux-headers-3.13.0-112 linux-headers-3.13.0-112-generic
linux-image-3.13.0-112-generic linux-image-extra-3.13.0-112-generic
Ezeket az „apt-get autoremove” paranccsal törölheti.
Az alábbi extra csomagok kerülnek telepítésre:
linux-headers-3.13.0-165-generic
Az alábbi ÚJ csomagok lesznek telepítve:
linux-headers-3.13.0-165-generic
0 frissített, 1 újonnan telepített, 0 eltávolítandó és 183 nem frissített.
9 nincs teljesen telepítve/eltávolítva.
Letöltendő adatmennyiség: 0 B/696 kB.
A művelet után 13,2 MB lemezterület kerül felhasználásra.
Folytatni akarja? [I/n]
(Adatbázis olvasása ... 530077 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: .../linux-headers-3.13.0-165-generic_3.13.0-165.215_i386.deb ...
Kibontás: linux-headers-3.13.0-165-generic (3.13.0-165.215) ...
dpkg: hiba az archívum feldolgozásakor: /var/cache/apt/archives/linux-headers-3.13.0-165-generic_3.13.0-165.215_i386.deb (--unpack):
nem sikerült a(z) „/usr/src/linux-headers-3.13.0-165-generic/include/config/scsi/generic/ncr5380/mmio.h.dpkg-new” létrehozása („./usr/src/linux-headers-3.13.0-165-generic/include/config/scsi/generic/ncr5380/mmio.h” feldolgozása során): Nincs több hely a lemezen
Nem került kiírásra apport jelentés, mivel a hibaüzenet szerint megtelt a lemez
dpkg-deb: hiba: a(z) beillesztés részfolyamatot kilőtte a (Törött adatcsatorna) jel
Hibák történtek a feldolgozáskor:
/var/cache/apt/archives/linux-headers-3.13.0-165-generic_3.13.0-165.215_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Tegyük fel, hogy igaza van, nincs hely. Hogyan lehet rávenni az apt-get -et hogy eltávolítson egy felesleges csomagot? pl a régi kernel header-eket?
Szerintem nem igaz, van hely. Ebben az esetben hogy lehet ebből az állapotból kibillenteni?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

"Nincs több hely a lemezen"

akkor
sudo apt-get autoclean
sudo apt-get autoremove

és lesz
vagy törölj valamit

A 'sudo autoclean' -tól nem lett több hely.
A 'sudo autoremove' nem csinál semmit, mert van törött csomag, mint fentebb ezt le is írtam.
A varázsoltam rá 1,3G helyet, az úgy értendő, hogy mindent letöröltem amit lehetett. A régi kernel header csomagokat lehetne törölni, de azt az apt-get nem hajlandó a törött csomag miatt, csak úgy letörölni meg nem akarom, mert emlékeim szerint ettől az apt-get meg szokott sértődni, mert nem találja a letörendő fájlokat.
Szerintem 1,3G-nek elégnek kéne lennie egy törött kernel csomag helyreállításához. Szerintem valami félre ment, és ez nem a valós hiba, de meg lehet cáfolni.

Egy hülye ötlet így péntek reggel: df -i (inode tábla?)

99% foglalt. Ez lesz a baj.

Ez még segíthet: https://unix.stackexchange.com/questions/117093/find-where-inodes-are-being-used

Ha tele van az inode tábla, akkor ugyanúgy azt mondja, hogy tele a lemez...

De ha még villogni is akarsz kollégák előtt, akkor dumpe2fs -h /dev/valami.
Különben az inode elfogyása egy nagyobb baj tünete. (pl valaki szemetel a logba, vagy máshova)

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

A nagy baj az volt, hogy kicsi fájlrendszer, teletömve kernelekkel, kernel modulokkal (sok fájl), és kernel header-ekkel (még több fájl).
A másik baj, hogy nem jutott eszembe megnézni, mi is fogyott el. A helyet meg úgy csináltam, hogy a nagy (és felesleges) fájlok méretét 0-ra vettem : 'cp /dev/null ', ami nem nagyon csökkenti az inode-okat.
Mint írtam megoldódott, ténylegesen törölni kellet sok fájlt (darabra).

Hali.

Egy ötlet. A régi kernel fájlokat írd felül 0 byte osra...A fájl megmarad csak lesz hely.

3D nyomtatás, CNC marás

pont ezt akartam én is írni
dd if=/dev/null of=/path/to/file


"all submitted complaints will be forwarded to /dev/null for further investigation"
"ez ilyen hippi kommunás felfogás, ahogy Stallman sámán módjára dobol a nagy hasán, hogy GNU, free software, free as free beer."

Van ennek egyszerűbb módja is: > /path/to/file

Mert én nem azt irtam

apt clean -- törli a /var/cache/apt/ -ben a letöltött csomagokat, ha vannak.
töröld kézzel a /boot-ban a régi kerneleket és a régi initrd-ket, a /lib/modules/-ből a régi kernelek moduljait és a /usr/include-ban a régi headereket
ezután lesz annyi helyed, hogy apt install -f menjen majd az apt autoremove --purge

Így direktben nem mertem törölni. Ráadásul elbizonytalanított, hogy szerintem volt elég hely.
Mint fentebb válaszoltam, nem a hely volt kevés, hanem az inode.
Direktben töröltem néhány kernel modul könyvtárat, meg header könyvtárat a legrégebbiekből, és lefut az 'apt-get install -f'.
Azért, hogy ne legyen túl nagy az öröm, most már csak egy kernel verziót akar eltávolítani az autoremove, a régebbi 12-t nem.
Leszedem egyenként, most már legalább lehet.

SUB SUB SUB SUB SUB
--
"Csak webfejlesztést ne..." -ismeretlen eredetű szállóige-

Jól értem,hogy a régi kernelek foglalják a helyet, és emaiatt deadlockba kerültél?

A gordiuszi csomó átvágása: Simán töröld le a régi kernelcsomagokhoz tartozó fájlokat kézzel a 3.14csába. Akkor lehet baj belőle, ha van valami olyan szkript ( a Deb csomagkezelő prerm, vagy postrm szkriptjei között), ami elakad ettől. Jó esetben nincs ilyen, és meg lehet úszni. Esetleg tedd valami backupba, hogy vissza tudd tenni, ha egy újabb deadlockba kerülnél emiatt.

Ha még nagyobb slamesztikába kerülsz, akkor nem én ajánlottam :-).

ezt szoktam csinalalni. altalaban a kernel headereket torlom (/usr/src/...). ami a csomag telepites/eltavolitas kozben script kell a debiannak az mashol van.

illetve ha van regi kernel ami mar nemkell, akkor a generalt initrd is mehet a lecsoba. az is 20-30Mb/db. ha megis kene akkor ujratudja generalni debianban.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!