Tapasin vahingossa taustalla käynnissä olevan dpkg-prosessin ja haluaisin asentaa kaikki paketit uudelleen varmistaakseni, että kaikki on kunnossa.
Ensin yritin saada luettelon kaikista paketeista ja asentaa ne uudelleen
dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log apt-get install --reinstall $(cat list.log)
Mutta on viestejä, kuten:
E: Couldn"t configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.
Yritin apt-get -f install
, epäonnistuneena.
Viimeisenä keinona asensin uudelleen kaikki ohjelmat, jotka epäonnistuivat tarkistussummat:
dpkg -l | grep ^ii | awk "{ print $2 }" | xargs debsums -s -a
Mitä minun pitäisi tehdä asentaaksesi kaiken uudelleen?
Muokkaa: Ongelma ratkaistu. Asia oli jotain muuta (katso kommentit). Ymmärrän, että sitä on kuitenkin vältettävä Debianin kanssa.
Kommentit
- Minulla oli äskettäin kaatuminen yrittäessäni asentaa pakettia. Kun käynnistin uudelleen ja yritin asentaa paketin uudelleen, sain viestin, ” E: dpkg keskeytettiin, sinun on suoritettava manuaalisesti ’ dpkg –configure -a ’ ongelman korjaamiseksi. ”. Komennon suorittaminen poisti mainitun paketin ja sen määritystiedostot. Pystyin sitten asentamaan paketti tyhjästä. Yritä antaa komento mennä.
- Se ei tehnyt ’ t mitään, joten luulen, ettei mikään ole rikki. Yritän myöhemmin tarkistaa, ajurikysymykseni on ratkaistu.
- Kaikkien pakettien uudelleenasennus == todella huono idea. (a) Se ’ on melkein aina tarpeetonta (b) se todennäköisesti epäonnistuu ( c) Jos järjestelmäsi on todella niin sekaisin, asenna se uudelleen. Korjaa vain näkemäsi ongelmat.
vastaus
Kokeile tätä muistamalla, että tein en testaa se:
dpkg --get-selections > selections sudo dpkg --clear-selections sudo dpkg --set-selections < selections sudo apt-get --reinstall dselect-upgrade
Lähteet:
- 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
kommentit
- Minun ongelmani oli täysin erilainen: En ollut käynnistämässä oikeaa ydintä (!). Hyväksyn vastauksesi, koska se näyttää tekevän mitä halusin (mutta myös kokeilematta).
- Tämä ei voinut toimia ’ ja rikkoo järjestelmän kokonaan. Rivi 3 poistaa apt: n asennuksen, joten ’ ei voitu asentaa kaikkea jälkikäteen.
- @rkjnsn: Päivitin vastauksen ja tarkista, toimiiko se.
- Yritetään tehdä tämä mikään ei asenna uudelleen, vaikka valintatiedosto on täytetty: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Lukupakettiluettelot … Valmis Rakennetaan riippuvuuspuuta Lukutila tiedot … Valmis 0 päivitetty, 0 vasta asennettu, 0 poistettava ja 0 ei päivitetty. mitään ideoita?
- Yksi syy mielestäni koodisi voittamiseen ’ ei johdu siitä, että komento
dpkg --get-selections
-luettelo myös poistaa paketteja.
Vastaa
Aptitude-palvelua käytettäessä on helppo ja nopea tapa tehdä se:
sudo aptitude reinstall "~i"
joka asentaa kaikki nykyiset asennetut paketit.
Kommentit
- Hienoa ja ytimekästä!
Vastaa
Yritä vain asentaa kukin uudelleen paketti :
for i in $(cat list.log); do apt-get install --reinstall "$i"; done
Voit myös lisätä vastauksen kyllä kaikkiin kysymyksiin.
Vastaa
yhdessä resursseista , joihin Lucas Malor viittasi, löysin komentosarjan nimeltä populator, joka näyttää olevan lähellä ratkaisua. Jos asetat pakettien valintamuuttujan kaikkien pakettiesi luetteloon
PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)
voit sitten suorittaa komentosarjan ja asentaa kaikki paketit uudelleen mutta järjestelmällä on todennäköisesti joitain ongelmia. Olisi parempi testata se ensin virtuaalikoneessa.
Tässä on muunnelma komentosarjasta yllä olevasta linkistä:
#!/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
Jos ilmenee virhe, että tiettyjä paketteja ei voida asentaa uudelleen, yritä uudelleen suorittamalla tämä komento:
sudo apt-get -y autoremove
Vastaa
Kokeile tätä, koska se vie tuloksen ja tekee siitä yhden jättimäisen rivin, jossa on välilyöntejä tiedostonimien erottamiseksi.
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)
Ainoa muutos alkuperäiseen viestiisi on lisääminen toiseen awk-käskyyn, joka voidaan todennäköisesti tehdä heti ensimmäisenä luomalla haluamasi tiedosto.
Tämä muutos pakottaa apt- Lataa uudelleen paketit ja puuttuvat riippuvuudet, joita ei asennettu ensimmäistä kertaa, ja asenna ne uudelleen järjestyksessä
Jos teemme sen inline, uskon, että se näyttäisi tältä tältä:
dpkg --get-selections | grep -v deinstall | awk "{print $1}" | awk "$1=$1" ORS=" " > list.log
Ja sitten varmista, että teet todella, että järjestelmässä on oikeat paketit (tai uusimmat), puhdista apt-välimuisti, päivitä se ja lataa sitten kaikki tiedostot uudelleen (voit ohittaa kaksi ensimmäistä vaihetta, jos haluat vain välimuistissa olevan) uudelleenasennettu):
apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)
Minulla oli yli 2 kt paketteja asennettuna päivitetyssä järjestelmässä, jossa oli hangup. Asennuksen dpkg –configure -a käyttö viimeisteli asennuksen (se oli viimeisessä vaiheessa). Suoritin sitten tämän, jotta kaikki asennettaisiin uudelleen oikein.
Tai kuten kohdassa https://superuser.com/questions/298912/reinstall-debian-while-keeping-installed-packages-and-data todettiin :
sudo apt-get install --reinstall $(dpkg --get-selections | grep -w "install$" | cut -f1)
Varmista, että olet suorittanut ”init 2” -toiminnon ennen uudelleenasennusta, koska jotkin X: n tai suosikkiikkunanhallinta ei ehkä pidä uudelleenasennuksesta.
Kommentit
- Ellet ’ ole muokannut IFS: ää , noteeraamaton
$(cat file)
tunnistaa missä tahansa välilyönnissä ja antaa täsmälleen saman tuloksen riippumatta siitä, onko tiedosto erotettu uudella rivillä vai välilyönneillä.--reinstall
saattaa auttaa, mutta se annettiin jo kahdesti ennen tätä.
Vastaa
Tämän tekeminen apt
-palvelun kautta on melko yksinkertaista:
apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y
apt list --installed
osa tekee juuri sen, mitä voisi arvata. |
-merkki ohjaa komennon apt
vakiolähdön cut
komento. cut --delimiter=/
-osa käskee cut
-komennon käyttämään erottimena /
ja --fields=1
käskee cut
käyttämään ensimmäistä kenttää, ts. tekstiä, joka on ennen ensimmäistä /
, joka näkyy komennon apt list --installed
tulosteessa. Tällöin cut
-komennon tulos on luettelo kaikista asennetuista paketeista ilman kaikkia lisätietoja, joita emme tarvita apt list --installed
-komento.
Seuraava |
lähettää cut
-komennon vakiolähdön, luettelon kaikista asennetuista paketteja xargs
-komennon vakiosisääntuloon, joka puolestaan kutsuu apt reinstall -y
jokaiselle tällä hetkellä asennetulle paketille .
Huomaa : apt-kokoonpanostasi riippuen apt reinstall -y
part saattaa asentaa päivityksiä nykyisiin paketteihisi nykyisten asentamiesi versioiden sijaan.
Vastaa
Käytettäessä RPM, jos aiheutat vioittumista pakettitietokannassa, on mahdollisuus rakentaa tämä tietokanta uudelleen estäen sinua käymästä b asically asenna uudelleen. Kuten yksi käyttäjä huomautti, tämän tekee Debianissa dpkg --configure -a
.
Kommentit
- Rooli
dpkg --configure -a
on määrittää kaikki pakkaamattomat ja määrittämättömät paketit. Katsodpkg
jadpkg-reconfigure
ja debian.org/doc/manuals -sivun sivut /debian-faq/ch-pkg_basics.en.html