“dpkg --get-selections”를 어떻게 리포지토리에서 사용 가능한 패키지로 필터링 할 수 있습니까?


9

한 시스템에 설치된 패키지 목록을 가져 와서 다른 시스템에 모두 설치하고 싶습니다.

대상 시스템에 dpkg --get-selections파이프 할 수있는 설치된 모든 패키지 목록을 제공 할 수 있음을 알고 있습니다 dpkg --set-selections. 그러나 설치된 패키지 중 일부는 로컬에서 직접 빌드 한 패키지 (예 : checkinstall)이며 리포지토리에서 사용할 수없는 패키지입니다. dpkg --set-selections는 저장소에 이러한 패키지를 찾을 수 없을 때 프로세스가 실패합니다.

그래서 현재 설치된 버전을 현재 리포지토리에서 사용할 수있는 dpkg --get-selections패키지 만 포함하도록 생성 된 목록을 필터링 할 수있는 방법 이 있습니까?

답변:


9

요즘 소프트웨어 센터에는 컴퓨터 간 동기화 기능이 있다고 생각합니다. 누락 된 패키지를 올바르게 처리하면 문제를 해결할 수 있습니다.

여기서 문제 dpkg는 리포지토리를 인식하지 않고 설치된 패키지 만 인식한다는 것입니다. 를 실행하여 저장소에서 패키지를 사용할 수 있는지 확인할 수 있습니다 apt-cache policy $package. 에 저장소가 있으면 해당 저장소를 Version Table사용할 수 있습니다.

그래서 이건 어때? 느리지 만 작동해야합니다.

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

이것은 진행 상황을 보여주고 파일에 기록합니다 :total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77

-4

다음 명령을 사용하십시오

dpkg --get-selections > installed-software

홈 디렉토리에 installed-software라는 파일이 생성됩니다.

새로운 시스템에서

dpkg --set-selections < installed-software

이것은 선택을 읽고 설치합니다


3
나는 당신이 그 질문을 읽지 않았다고 생각합니다.
Ryan C. Thompson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.