경고: 저는 이것을 하고 있지도 않고 심지어 시도조차 하지 않습니다!

경고: 저는 이것을 하고 있지도 않고 심지어 시도조차 하지 않습니다!

64비트 프로세서에서 실행되는 32비트 시스템이 있습니다. 다시 설치하지 않고 어떻게 전체 64비트로 변환합니까? 어딘가에서 이것이 가능하다고 읽었습니다.새로운 다중 아키텍처 프레임워크.

답변1

간단히 말해서:이는 가능하지만 복잡합니다. 하단에 대안을 설명했습니다.

이제 긴 설명, 최선의 경로를 택하지 않을 수도 있으므로 소금 한 알씩 받아들이십시오.

가능합니다. 지난 이틀 밤에 제가 한 일은 다음과 같습니다. 구식 방식을 설명하는 위키 항목이 있습니다.다중 아키텍처 지원은 없습니다. 손상된 패키지를 복구하는 데 도움이 됩니다.

기본 시스템을 마이그레이션하려면,이 작업을 수행:

$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
          libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
          libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386

패키지 중 일부는 amd64이지만 대부분은 여전히 ​​i386입니다. apt-get upgrade일부 패키지는 작업 중이고 apt-get -f install일부 버그는 수정될 예정이지만 대부분의 패키지는 i386으로 유지됩니다. 이 문제를 해결하려면 까다로운 부분을 건너뛰세요 ;)

를 사용하면 dpkg --get-selections | grep :i386마이그레이션해야 하는 모든 패키지가 반환됩니다.

내 다음 생각은 다음과 같습니다.

# apt-get install `dpkg --get-selections \
  | grep i386 \
  | awk {'gsub(/:i386/, ":amd64"); print $1'}`

그러나 이것은 나쁜 생각임이 밝혀졌습니다. 일부 패키지는 amd64(예: libc6-i686)에서 사용할 수 없으며 apt-get은 혼란스럽고 두 버전 모두 많은 패키지를 설치합니다. 기능 측면에서 수행해야 할 수동 작업이 많이 있습니다.

더 많은 어려움:일부 중요한 패키지를 교체하여 항상 설치용 바이너리를 설치할 수 있지만 일부 패키지는 제거하고 다시 설치해야 합니다. 예를 들어 tarring할 때 이 문제가 발생했습니다. 다른 시스템에서 패키지를 가져오고 ed를 통해 패키지를 추출한 ar p package.deb data.tar.gz | tar zx다음 scp추출된 파일을 ed scp -r ./* root@other_computer:/하여 바이너리를 다시 사용할 수 있게 되었습니다. 헹구고 반복하면 scped 파일을 덮어쓰게 됩니다.

내가 뭘 할까?

시스템을 전환할 때마다 다음을 수행합니다.

/home, /etc(어쩌면 /var,,, /usr/local변경한 다른 파일,, /root..., YMMV)를 백업하세요 .

설치된 패키지 목록을 가져오고 dpkg --get-selections > packagelist결과 파일을 복사합니다 packagelist.

그런 다음 데비안을 완전히 다시 설치하고 모든 사용자를 다시 생성하거나 역할 등을 생성합니다.

모두 다시 설치하십시오 dpkg --set-selections < packagelist; apt-get -f install.

백업 디렉터리와 파일을 다시 복사하면 기본적으로 완료됩니다.

이 접근 방식의 한 가지 단점: 모든 패키지(라이브러리 포함)는 수동으로 설치된 것으로 표시되므로 더 이상 의존하는 패키지가 없으면 제거되지 않습니다.

답변2

여기에 대한 다른 답변은 이것이 이론적으로는 가능하지만 매우 복잡하고 노력할 가치가 없을 것이라고 제안합니다. 그러나 변경하지 않고 그대로 유지하면 $HOME새로 설치를 수행하여 프로세스를 비교적 쉽게 만들 수 있습니다.

일반적인 과정은 다음과 같습니다.

  1. 설치된 패키지 목록과 자동으로 설치된 패키지 목록을 백업합니다.

    dpkg --get-selections '*' > package.list
    apt-mark showauto >auto.list
    

    다음을 사용하여 설치된 패키지 이름에서 아키텍처를 제거할 수도 있습니다.다중 아키텍처:

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. 별도의 파티션이 있는 경우 /home설치 시 포맷하지 않도록 주의하세요. 별도의 파티션에 있지 않은 경우 나중에 복원할 백업을 만드세요.

    tar cvzf home_backup.tgz $HOME/
    
  3. 새 시스템을 설치한 후 누락된 패키지를 설치합니다.

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. $HOME을 복원하세요. tgz 파일을 복사하여 $HOME 디렉터리에 추출합니다.

    tar xvzf home_backup.tgz
    

당신은 또한 살펴보고 싶을 수도 있습니다도구Mint는 이를 더욱 쉽게 만들어주는 기능을 제공합니다. Ubuntu에도 모두 설치할 수 있어야 합니다.

답변3

이는 이론적으로는 가능하지만 위험할 수 있습니다. Debian multiarch는 현재 multiarch 라이브러리를 지원하지만 바이너리는 지원하지 않습니다. 그래서 그게 다입니다.

시스템은 기본적으로 자체 아키텍처 dpkg-architecture(실제로는 Perl 스크립트이지만 아키텍처 정보를 추출하여 표시함)를 알고 있으며 다음도 수행할 수 있다고 주장합니다.놓다건축학.


경고: 저는 이것을 하고 있지도 않고 심지어 시도조차 하지 않습니다!


대략적인 과정은 다음과 같습니다.

  1. 모든 라이브러리의 다중 아키텍처 변형 설치(가장 중요 libgcc1)
  2. dpkg-architecture -aamd64아치 이동용(GCC에 대해 불평할 수 있음 )
  3. 모든 필수 구성 요소를 다운로드하고 준비합니다(아래 참조).
  4. amd64 변형 dpkg및 종속성 강제 설치
  5. 커널을 포함하여 기본 시스템 패키지의 amd64 변형을 강제로 설치합니다 apt-get(불평이 많을 수 있습니다).
  6. 재시작
  7. 아마도 나머지 시스템을 설치할 것입니다.apt-get

이 단계는 지난 12년 동안 Linux 배포판에서만 거의 독점적으로 사용해 온 데비안 디자인에 대한 나의 지식을 기반으로 합니다(사용 포함).debtakeover이전) 그리고 내가 취할 접근 방식. 그러니 이것에 대해 생각해보세요자신의 책임 하에 사용하세요. 4단계를 시도한 후에는 언제든지 시스템을 사용할 수 없게 될 수 있습니다. 4단계와 5단계를 번갈아 수행하세요.가능한debbootstrap.

가장 중요한 것은 관심 있는 작업을 수행하기 전에 가상 머신에서 시도해 볼 것을 적극 권장한다는 것입니다.

당신과 행운을 빕니다포스가 함께하길.

답변4

질문에 대한 대답은 아니지만 x86에서 amd64로 모든 패키지를 업그레이드하는 것은 어려울 수 있지만 적어도 amd64 커널 패키지를 쉽게 설치할 수 있습니다. 이를 통해 최소한 64비트 애플리케이션은 물론 VM 및 컨테이너(아마도 당신의 필요에 충분합니다).

.amd64를 사용하여 linux-image 패키지를 설치하면 됩니다 dpkg -i --force-architecture.

관련 정보