모든 데비안 패키지 재설치


19

실수로 백그라운드에서 실행되는 dpkg 프로세스를 죽였고 모든 패키지가 다시 설치되어 모든 것이 올바르게 작동하는지 확인하고 싶습니다.

먼저 모든 패키지 목록을 가져 와서 다시 설치하려고했습니다.

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

그러나 다음과 같은 메시지가 있습니다.

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

나는 apt-get -f install성공하지 않고 시도했다 .

최후의 수단으로 체크섬에 실패한 모든 프로그램을 다시 설치했습니다.

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

모든 것을 다시 설치하려면 어떻게해야합니까?

편집 : 문제가 해결되었습니다. 문제는 다른 것이 었습니다 (의견 참조). 그래도 데비안에서는 피해야 할 부분이라는 것을 알고 있습니다.


1
최근에 패키지를 설치하는 중에 충돌이 발생했습니다. 재부팅하고 패키지를 다시 설치하려고하면 "E : dpkg가 중단되었습니다. 문제를 해결하려면 'dpkg --configure -a'를 수동으로 실행해야합니다."라는 메시지가 나타납니다. 해당 명령을 실행하면 해당 패키지와 구성 파일이 제거되었습니다. 그런 다음 패키지를 처음부터 설치할 수있었습니다. 그 명령을 시도해보십시오.
embedded.kyle

그것은 아무것도하지 않았으므로 아무것도 깨지지 않은 것 같습니다. 나중에 드라이버 문제가 해결되었는지 확인하려고합니다.
alex_reader

1
모든 패키지 재설치 == 정말 나쁜 생각입니다. (a) 거의 항상 불필요합니다. (b) 실패 할 것입니다. (c) 시스템이 너무 심하게 엉망인 경우 다시 설치하십시오. 실제로 보이는 문제를 해결하십시오.
Faheem Mitha

답변:


9

내가 않았다 기억이 시도 하지 테스트 :

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

출처 :


내 문제는 완전히 달랐습니다. 올바른 커널 (!)을 부팅하지 않았습니다. 나는 내가 원하는 것을하는 것처럼 보이지만 당신의 대답을 받아 들일 것입니다.
alex_reader

이것은 작동하지 않으며 시스템을 완전히 중단시킵니다. 3 행은 apt를 제거하므로 나중에 모든 것을 다시 설치할 수는 없습니다.
rkjnsn

@ rkjnsn : 답변을 업데이트하고 작동하는지 확인하십시오.
Marco Sulla

1
pis_prodpi ~ $ sudo apt-get --reselect dselect-upgrade 패키지 목록 읽기 ... 완료 건물 종속성 트리 읽기 상태 정보 ... 완료 0 업그레이드 됨 , 0 새로 설치, 0 제거 및 0 업그레이드되지 않음 어떤 생각?
andig

코드가 작동하지 않는다고 생각하는 이유 중 하나는 명령 dpkg --get-selections목록도 패키지를 제거 하기 때문 입니다.
Ortomala Lokni

2

경우에 따라 각 패키지 를 다시 설치하십시오 .

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

모든 질문 옵션에 예를 추가 할 수도 있습니다.


cat : list.log : 해당 파일 또는 디렉토리 없음
IgorGanapolsky

2
@IgorGanapolsky dpkg --get-selections > list.log먼저 실행하십시오 .
QwertyChouskie

2
list.log질문에서 가져옵니다.
Stephen Kitt

2

에서 자원 중 하나 루카스 Malor I에 의해 인용 된 솔루션 가까운 것 같다라는 스크립트 populator을 발견했다. 패키지 선택 변수를 모든 패키지 목록으로 설정 한 경우

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

그런 다음 스크립트를 실행하고 모든 패키지를 다시 설치할 수 있지만 시스템에 문제가있을 수 있습니다. 가상 머신에서 먼저 테스트하는 것이 좋습니다.

위 링크의 스크립트 변형은 다음과 같습니다.

#!/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

특정 패키지를 다시 설치할 수 없다는 오류가 표시되면이 명령을 실행하여 다시 시도하십시오.

sudo apt-get -y autoremove

1

대신 출력을 가져 와서 파일 이름을 구분하는 공백이있는 하나의 거대한 선으로 만들기 때문에 대신 시도하십시오.

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)

원래 게시물의 유일한 변경 사항은 두 번째 awk 문을 추가하는 것입니다.이 문장은 원하는 파일을 만들기 위해 첫 번째 줄과 일치 할 수 있습니다.

이 변경으로 인해 apt-get은 처음 설치되지 않은 패키지 및 누락 된 종속성을 올바르게 다시 다운로드하고 순서대로 다시 설치합니다.

인라인으로 만들면 다음과 같이 보일 것입니다.

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

그런 다음 시스템에 올바른 패키지 (또는 최신)가 있는지 확인하고 apt 캐시를 정리하고 업데이트 한 다음 모든 파일을 다시 다운로드하십시오 (캐시에있는 것을 원하면 처음 두 단계를 건너 뛸 수 있습니다) 재설치) :

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

전화를 끊은 업그레이드 된 시스템에 2k 개 이상의 패키지가 설치되었습니다. dpkg --configure -a를 사용하여 설치를 완료했습니다 (최종 단계에 있음). 그런 다음 모든 것을 올바르게 다시 설치하기 위해 이것을 실행했습니다.

또는 /superuser/298912/reinstall-debian-while-keeping-installed-packages-and-data에 명시된 바와 같이 :

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

X의 구성 요소 중 일부 또는 즐겨 찾는 창 관리자가 다시 설치되지 않을 수 있으므로 다시 설치하기 전에 먼저 "init 2"를 실행하십시오.


IFS를 수정하지 않은 경우 인용되지 않은 인용 부호 $(cat file)는 공백을 토큰 화하고 파일을 줄 바꿈 또는 공백으로 구분하든 정확히 동일한 결과를 제공합니다. --reinstall도움이 될 수 있지만 이미 전에 두 번 제공되었습니다.
dave_thompson_085

0

적성을 사용할 때 쉽고 빠른 방법이 있습니다.

sudo aptitude reinstall '~i'

현재 설치된 모든 패키지가 다시 설치됩니다.


-1

RPM을 사용할 때 패키지 데이터베이스가 손상 될 경우이 데이터베이스를 다시 작성하는 옵션이 있으므로 기본적으로 다시 설치하지 않아도됩니다. 여기서 한 명의 사용자가 지적한 것처럼 이것은 데비안에서에 의해 수행됩니다 dpkg --configure -a.


1
그 역할은 dpkg --configure -a압축을 풀고 구성되지 않은 모든 패키지를 구성하는 것입니다. 의 맨 페이지를 참조하십시오 dpkgdpkg-reconfiguredebian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.