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:
- http://www.linuxquestions.org/questions/linux-software-2/force-apt-get-to-redownload-and-reinstall-dependencies-as-well-873038/
- https://kura.io/2010/07/02/using-dpkg-selections-to-backup-and-install-packages/?ModPagespeed=noscript
-
man apt-get
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
- A szerep a
dpkg --configure -a
az összes kicsomagolt és konfigurálatlan csomag konfigurálása. Lásd adpkg
és adpkg-reconfigure
kézikönyveket, valamint a debian.org/doc/manuals oldalakat. /debian-faq/ch-pkg_basics.en.html