시스템을 32비트에서 64비트로 변경하고 이전과 동일한 Debian Squeeze를 사용하지만 이전에 설치한 프로그램 이름이 기억나지 않아서 잃어버리고 싶지 않습니다.
그래서 나는 나를 위해 이 작업을 수행하는 명령을 원합니다. 내가 설치한 모든 프로그램의 이름을 파일에 저장하지만 시스템과 함께 제공되는 표준 프로그램은 저장하지 않습니다. 다른 시스템을 사용할 때 파일과 디렉토리를 언급하므로 모든 것이 자동으로 설치됩니다.
질문 하나 더: 수동으로 설치된 프로그램을 사용하여 이 작업을 수행할 수 있습니까 dpkg-i package.deb
? 그렇다면 어떻게 해야 합니까?
답변1
현재 데비안 릴리스에서는 다음을 사용하여 명시적으로 설치된 패키지 목록을 얻을 수 있습니다.
apt-mark showmanual
존재하지 않는 이전 버전의 데비안을 실행하는 경우 apt-mark showmanual
또는 다른 옵션을 수행하려는 경우 aptitude를 사용할 수 있습니다.
aptitude search '~i !~M' -F %p >package.list
~i
설치된 패키지와 일치하며, !~M
다른 패키지의 종속성으로 자동으로 설치된 패키지는 생략됩니다. -F %p
패키지 이름만 포함하도록 출력 형식을 변경합니다.
나중에 이 패키지를 설치할 수 있습니다.
apt-get install $(cat package.list)
데비안 스퀴즈는 그렇지 않지만 자동으로 설치된 패키지를 나열 apt-mark showmanual
합니다 . apt-mark showauto
이 기능을 사용하는 경우 이전 시스템의 모든 패키지 나열 을 사용하고 dpkg --get-selections >package.list
모든 패키지를 복원한 다음 자동 패키지 표시를 사용할 수 있습니다 apt-mark markauto
. 사용 사례(32비트에서 64비트)의 경우 이 접근 방식은 일부 라이브러리가 아키텍처에 따라 이름이 다르기 때문에 일부 라이브러리를 수동으로 표시할 수 있습니다.
사용 사례가 패키지 세트를 유지하는 대신 스키마를 변경하는 대신 동일한 설치를 재현하는 것이라면 이제앱클론(wheezy 이후 데비안에 배포됨)은 모든 것을 자동으로 수행합니다.
답변2
을 사용해 보셨나요 dpkg --get-selections >packages
? 특정 패키지를 제외하려는 경우 출력 파일을 편집할 수 있습니다 packages
. 완료되면 대상 시스템으로 전송하고 다음과 같이 말합니다.
dpkg --set-selections <packages
패키지는 설치용으로 표시됩니다. 당신은 또한 말할 필요가 있을 것입니다 aptitude update; aptitude dist-upgrade
.
또 다른 질문: 이러한 패키지가 i386
아키텍처 패키지이고 이미 설치되어 있는 경우 일반적인 패키지를 multiarch
사용할 수 있습니다 . 하지만 사례별로 조사하여 이러한 패키지가 포함된 64비트 버전을 설치하는 것이 좋습니다..deb
dpkg -i package.deb
답변3
이 작업을 수행하는 간단하고 표준적인 방법은 없습니다. "시스템과 함께 제공되는 표준 프로그램"과 다른 프로그램을 구별하지 않기 dpkg
때문에 로그와 옵션을 조작해야 할 것 같습니다 .dpkg
간단하진 않을 거에요,명확하게 하기 위해 굵은 대문자 텍스트를 사용하는 것을 선호합니다., 하지만 다음과 같은 작업을 수행할 수 있습니다.
파일에서 설치된 소프트웨어 목록을 추출합니다
/var/log/dpkg.log*
.시스템 설치 중에 설치된 것을 제거하십시오. (설치 시간을 사용하여 감지)
dpkg --get-selections
목록을 형식으로 저장
바라보다! 시스템이 실행 중이면 다음 명령을 사용하여 프로그램을 다시 설치하십시오.
apt-get update
dpkg --set-selections < yourSelection
apt-get -u dselect-upgrade
답변4
RPM 패키징을 사용하여 RHEL/Fedora 시스템에서 동일한 작업을 수행하는 방법을 알아내려고 합니다. 이것이 도움이 되었지만 sudo dnf history
이 명령은 아나콘다 설치 프로그램이 시스템을 설치한 후에 사용자가 설치한 항목만 나열합니다.
이것은 내가 사용하는 명령입니다:
sudo dpkg -l|awk '/^ii/{ print $2 }'|grep -v -e ^lib -e -dev -e $(uname -r) > /path/to/your/filename000.txt