Az összes Debian-csomag újratelepítése

Tévedésből megöltem egy háttérben futó dpkg folyamatot, és szeretnék újratelepíteni minden csomagot, hogy megbizonyosodjak róla, hogy minden rendben van-e.

Először megpróbáltam listát szerezni az összes csomagról és újratelepíteni őket.

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log apt-get install --reinstall $(cat list.log) 

De vannak olyan üzenetek, mint:

E: Couldn"t configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle. 

Kipróbáltam a apt-get -f install alkalmazást, sikertelenül.

Végső megoldásként újratelepítettem az összes olyan programot, amely nem sikerült ellenőrző összegek:

dpkg -l | grep ^ii | awk "{ print $2 }" | xargs debsums -s -a 

Mit kell tennem, hogy mindent újratelepítsek?

Szerkesztés: A probléma megoldva. A kérdés valami más volt (lásd a megjegyzéseket). Megértem, hogy mégis el kell kerülni a Debian használatával.

Megjegyzések

  • Nemrégiben összeomlott egy csomag telepítése közben. Amikor újraindítottam és megpróbáltam újratelepíteni azt a csomagot, megkaptam az üzenetet: ” E: A dpkg megszakadt, manuálisan kell futtatnia a ‘ dpkg –configure -a ‘ a probléma kijavításához. “. A parancs futtatása eltávolította a csomagot és a konfigurációs fájlokat. Ezután telepíthettem a csomag a semmiből. Próbálja meg megadni ezt a parancsot.
  • Nem csinált ‘ semmit, tehát azt hiszem, semmi nem sérült meg. Később megpróbálom ellenőrizni, hogy az illesztőprogrammal kapcsolatos problémák megoldódtak.
  • Az összes csomag újratelepítése == nagyon rossz ötlet. (a) Szinte mindig felesleges ‘ (b) valószínűleg meghiúsul ( c) Ha a rendszered tényleg olyan rosszul van elrontva, egyszerűen telepítsd újra. Csak javítsd ki a ténylegesen látott problémákat.

Válasz

Próbálkozzon ezzel, és ne feledje, hogy nem tesztelje:

dpkg --get-selections > selections sudo dpkg --clear-selections sudo dpkg --set-selections < selections sudo apt-get --reinstall dselect-upgrade 

Források:

megjegyzések

  • problémám teljesen más volt: nem a megfelelő kernelt indítottam (!). Elfogadom a válaszodat, mivel úgy tűnik, hogy azt csinálok, amit szerettem volna (de még nem teszteltem is).
  • Ez nem fog működni ‘, és teljesen megbontja a rendszert. A 3. sor eltávolítja az apt alkalmazást, így nem sikerült utólag mindent újratelepíteni.
  • @rkjnsn: Frissítettem a választ, és ellenőrizzem, hogy működik-e.
  • Ennek elvégzéséhez semmi sem kerül újratelepítésre, bár a kiválasztási fájl be van töltve: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Csomaglisták olvasása … Kész a függőségi fa felépítése Olvasási állapot információ … Kész 0 frissítve, 0 újonnan telepítve, 0 eltávolításra és 0 nem frissítve. van valami ötlet?
  • Az egyik ok, amiért azt gondolom, hogy a kód nem fog működni ‘ azért, mert a dpkg --get-selections lista parancs is eltávolít csomagok.

Válasz

Az Aptitude használatakor ennek egyszerű és gyors módja van:

sudo aptitude reinstall "~i"

amely újratelepíti az összes jelenleg telepített csomagot.

Megjegyzések

  • Szép és tömör!

Válasz

Esetenként próbálkozzon mindegyik újratelepítésével csomag :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done 

Érdemes minden kérdésre igennel válaszolni.

Válasz

A ben az egyik forrás , amelyet Lucas Malor idézett, találtam egy populator nevű szkriptet, amely a megoldás közelében. Ha a csomagok választási változót az összes csomag listájára állítja

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

akkor futtathatja a szkriptet és újratelepítheti az összes csomagot de a rendszernek valószínűleg lesz néhány problémája. Jobb lenne, ha először egy virtuális gépen tesztelné.

Itt van a fenti link egy változata a szkriptből:

#!/bin/bash # # Script to pre-populate apt-get proxy for faster later downloads. # It uses apt-get and wget to pull all the specified packages. # # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "You"re not root, are you?" 1>&2 exit 1 fi # Specify wanted packages PKGLIST="exaile" # Clears out the local repository of retrieved package files apt-get clean # Resynchronize the package index files from their sources apt-get update # Re-install specified packages at the newest version. apt-get install --reinstall $PKGLIST 

Ha hiba jelentkezik, hogy bizonyos csomagokat nem lehet újratelepíteni, futtassa ezt a parancsot az újrapróbálkozáshoz:

sudo apt-get -y autoremove 

Válasz

Próbálja ki ezt inkább, mivel a kimenet elveszi, és egy óriási sor lesz belőle, szóközökkel elválasztva a fájlneveket.

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log awk "$1=$1" ORS=" " list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

Az eredeti bejegyzés egyetlen változása a második awk utasítás hozzáadása, amelyet valószínűleg az első sorban lehetne megtenni, amellyel létrehozza a kívánt fájlt.

Ez a változás kényszeríti az apt- töltse le megfelelően a csomagokat és minden hiányzó függőséget, amelyeket nem először telepítettek, és újból telepítse azokat.

Ha beillesztjük, úgy gondolom, hogy ez így néz ki:

dpkg --get-selections | grep -v deinstall | awk "{print $1}" | awk "$1=$1" ORS=" " > list.log

Ezután győződjön meg róla, hogy valóban a rendszer megfelelő csomagokkal rendelkezik (vagy legújabb verzióval), tisztítsa meg az apt gyorsítótárat, frissítse, majd töltse le újra az összes fájlt (kihagyhatja az első két lépést, ha csak azt akarja, ami van a gyorsítótárban újratelepítve):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

Több mint 2k csomag van telepítve egy általam frissített, letiltással rendelkező rendszerre. A dpkg –configure -a használatával befejeződött a telepítés (az utolsó fázisban volt). Ezt követően futtattam, hogy minden újból megfelelően települjön.

Vagy a https://superuser.com/questions/298912/reinstall-debian-while-keeping-installed-packages-and-data címen :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w "install$" | cut -f1)

Csak az újratelepítés előtt győződjön meg róla, hogy először futtatott egy “init 2” fájlt, mivel az X vagy előfordulhat, hogy kedvenc ablakkezelője nem szereti újratelepíteni.

Megjegyzések

  • Hacsak nem módosította az IFS ‘ , a nem idézett $(cat file) jeleket bármelyik szóközzel jelöli, és pontosan ugyanazt az eredményt adja, függetlenül attól, hogy a fájlt új sorok vagy szóközök határolják-e. A --reinstall segíthet, de ezt megelőzően már kétszer megadták.

Válasz

Ezt a apt segítségével meglehetősen egyszerű:

apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y

A apt list --installed rész éppen azt csinálja, amit kitalálna. A | karakter a apt parancs szabványos kimenetét az cut parancs. A cut --delimiter=/ rész utasítja az cut parancsot, hogy használja a / -t elválasztóként, és a --fields=1 azt mondja cut -nek, hogy használja az első mezőt, vagyis az első / előtti szöveget megjelenik a apt list --installed parancs kimenetében. Ebben az esetben az cut parancs eredménye az összes telepített csomag listája, minden további információ nélkül, amelyre nincs szükségünk a apt list --installed parancs.

A következő | az cut parancs normál kimenetét, az összes telepített listáját adja át. csomagokat a xargs parancs szokásos bemenetére, amely viszont a apt reinstall -y parancsot meghívja az aktuálisan telepített csomagok mindegyikéhez .

Megjegyzés : az apt konfigurációjától függően a apt reinstall -y part telepítheti a meglévő csomagok frissítéseit az éppen telepített verziók helyett.

Válasz

Használatkor RPM, abban az esetben, ha sérülést okoz a csomagadatbázisban, lehetőség van az adatbázis újjáépítésére, ezáltal megakadályozva, hogy b aszisztikusan újratelepíteni. Amint egy felhasználó rámutatott erre, ezt a Debianban dpkg --configure -a végzi.

Megjegyzések

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük