Cách chuyển đổi hệ thống dựa trên Debian 32 bit (x86) sang 64 bit


36

Tôi có hệ thống 32 bit chạy trên bộ xử lý 64 bit. Làm cách nào để chuyển đổi nó thành all-64-bit, mà không cần cài đặt lại? Tôi đã thấy ở đâu đó rằng nó có thể thực hiện được do kết quả của khung Multiarch mới .


5
Tôi quan tâm đến câu trả lời cho câu hỏi này. Tôi đã có một hệ thống 32 bit trên một máy có khả năng 64 bit (hiện đã hơn 6 năm tuổi, nhưng vẫn còn hoạt động). Lý do duy nhất tôi sử dụng 32 bit khi tôi cài đặt máy này vào năm 2007 là vì tôi muốn chạy các ứng dụng 32 bit trên nó. Với multiarch mới, nếu tôi hiểu chính xác, các ứng dụng 32 bit có thể dễ dàng được cài đặt trên máy 64 bit. Vì vậy, thật tuyệt khi chuyển đổi thành 64 bit cho sự khò khè, nhưng tôi không biết nó sẽ khó như thế nào. @ bahamat đề nghị sử dụng VM nghe có vẻ tốt. Nếu tôi quản lý một chuyển đổi thành công, tôi sẽ trả lời ở đây.
Faheem Mitha


Câu hỏi tương tự trên AU: askubfox.com/q/5018/178596
Wilf

Câu trả lời:


8

TL; DR: Có thể thực hiện được, nhưng phức tạp. Tôi đã vạch ra một sự thay thế ở phía dưới.

Bây giờ mô tả dài , và mang nó với một hạt muối, vì tôi có thể không có con đường tốt nhất:

Có thể, và đây là những gì tôi đã làm trong hai đêm qua: Có một mục wiki mô tả cách học cũ mà không có sự hỗ trợ của nhiều người. Nó rất hữu ích cho việc sửa chữa các gói bị hỏng.

Để di chuyển hệ thống cơ sở của bạn, hãy làm điều này :

$ 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

Một số gói của bạn sau đó là amd64, nhưng hầu hết sẽ vẫn là i386. apt-get upgradesẽ chăm sóc một số gói, apt-get -f installsẽ sửa một số lỗi, nhưng hầu hết các gói sẽ vẫn là i386. Nếu bạn muốn đối phó với điều này, thì hãy bỏ qua phần khó khăn;)

Sử dụng dpkg --get-selections | grep :i386sẽ trả về tất cả các gói của bạn, mà bạn vẫn sẽ phải di chuyển.

Ý tưởng tiếp theo của tôi là làm:

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

Nhưng hóa ra đó là một ý tưởng tồi: một số gói không có sẵn trong amd64 (ví dụ libc6-i686), apt-get sẽ bị nhầm lẫn và rất nhiều gói sẽ được cài đặt trong cả hai phiên bản. Rất nhiều công việc thủ công trong năng khiếu sẽ được thực hiện.

Khó khăn hơn: Một số gói thiết yếu có thể được thay thế, do đó bạn sẽ luôn cài đặt các tệp nhị phân để cài đặt, nhưng một số gói sẽ phải được gỡ bỏ và cài đặt lại, ví dụ: tôi gặp vấn đề này với tar. Tôi đã tải các gói trên một hệ thống khác, trích xuất các gói qua ar p package.deb data.tar.gz | tar zxvà sau đó scpchỉnh sửa các tệp được giải nén qua scp -r ./* root@other_computer:/, để các tệp nhị phân có sẵn một lần nữa. Rửa sạch và lặp lại, và các scptập tin ed sẽ bị ghi đè.

Thay vào đó tôi sẽ làm gì

Tôi đã làm như sau, bất cứ khi nào tôi chuyển đổi hệ thống:

Sao lưu /home, /etc(và có thể /var, /usr/localmột số tệp khác bạn đã thay đổi /root,, ..., YMMV).

Nhận một danh sách các gói đã cài đặt cùng dpkg --get-selections > packagelistvà sao chép tệp kết quả packagelist.

Sau đó thực hiện cài đặt lại Debian sạch, tạo lại tất cả người dùng, có thể là vai trò, v.v.

Cài đặt lại tất cả các gói với dpkg --set-selections < packagelist; apt-get -f install.

Sao chép lại các thư mục, tập tin đã sao lưu và bạn đã hoàn tất.

Một nhược điểm của phương pháp đó: Tất cả các gói của bạn, bao gồm các thư viện, sẽ được đánh dấu là đã cài đặt thủ công, vì vậy chúng sẽ không được gỡ cài đặt, khi không còn gói nào phụ thuộc vào chúng nữa.


1
"Thay vào đó tôi sẽ làm gì" ... anh bạn, tôi chắc chắn rằng OP đã hỏi mà không cần cài đặt lại: /
Braiam

@Braiam OP rất có thể muốn làm điều đó mà không cần cài đặt lại. Tôi chỉ báo cáo kinh nghiệm cá nhân của tôi làm điều đó. Lộ trình thay thế đơn giản hơn với tôi và có lẽ tôi đã mắc một số sai lầm khi chuyển đổi hệ thống.
Residuum

6
Để đánh dấu các gói được cài đặt tự động, bạn có thể đã sử dụng apt-mark showautođể xuất danh sách được cài đặt tự động và apt-mark autođánh dấu chúng trong cài đặt mới.
Adrien Clerc

Cảm ơn đã viết lên kinh nghiệm của bạn. "Nếu bạn muốn đối phó với điều này, thì hãy bỏ qua phần khó khăn;)" Điều gì xảy ra nếu mục tiêu của tôi chỉ là có thể phát triển phần mềm x86_64và không quan tâm nếu các gói hệ thống của tôi không sử dụng bộ xử lý 64 bit một cách tối ưu ? Tôi cũng đang chạy HĐH 32 bit. Tôi đoán tôi nghĩ rằng bộ xử lý của tôi là 32 bit khi lần đầu tiên tôi cài đặt :(
jberryman

7

Các câu trả lời khác ở đây cho thấy rằng về mặt lý thuyết là có thể, nó rất phức tạp và có lẽ không đáng để nỗ lực. Tuy nhiên, bạn có thể thực hiện cài đặt sạch và làm cho quá trình tương đối không đau nếu bạn giữ $HOMEnguyên.

Quá trình chung sẽ là

  1. Tạo một bản sao lưu danh sách các gói đã cài đặt và danh sách các gói được cài đặt tự động.

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

    Lưu ý rằng bạn cũng có thể muốn xóa kiến ​​trúc khỏi bất kỳ tên gói nào bạn đã cài đặt bằng multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Nếu bạn /homelà một phân vùng riêng biệt, chỉ cần đảm bảo không định dạng nó trong quá trình cài đặt. Nếu nó không nằm trên một phân vùng riêng, hãy tạo một bản sao lưu mà bạn có thể khôi phục từ sau này:

    tar cvzf home_backup.tgz $HOME/
    
  3. Khi bạn đã cài đặt hệ thống mới của mình, hãy cài đặt các gói còn thiếu

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Khôi phục $ HOME của bạn. Sao chép tệp tgz qua và giải nén nó trong thư mục $ HOME của bạn:

    tar xvzf home_backup.tgz
    

Bạn cũng có thể muốn xem qua các công cụ mà Mint cung cấp để làm cho việc này dễ dàng hơn. Tất cả đều có thể cài đặt được trên Ubuntu.


4

Đó là trong lý thuyết có thể, nhưng có khả năng nguy hiểm. Debian multiarch hiện tại hỗ trợ nhiều lib lib, nhưng không phải nhị phân. Vì vậy, có đó.

Hệ thống chủ yếu hiểu kiến ​​trúc của chính nó dpkg-architecture(thực ra là tập lệnh perl, nhưng nó trích xuất thông tin vòm và hiển thị nó), cũng tuyên bố có thể thiết lập kiến trúc.


CẢNH BÁO: TÔI KHÔNG LÀM ĐƯỢC NÀY NÀO KHI NÀO KHIẾN NÓ !!!


Quá trình thô sẽ là:

  1. Cài đặt biến thể multiarch của tất cả các thư viện của bạn (quan trọng nhất libgcc1)
  2. Sử dụng dpkg-architecture -aamd64để thay đổi vòm của bạn (Lưu ý, nó có thể phàn nàn về GCC)
  3. Tải xuống và giai đoạn tất cả các thành phần cần thiết (xem tiếp theo)
  4. Buộc cài đặt biến thể amd64 dpkgvà phụ thuộc
  5. Buộc cài đặt các biến thể amd64 của các gói hệ thống cơ bản thiết yếu, bao gồm apt-getvà kernel (Lưu ý, nó có thể khiếu nại rất nhiều)
  6. Khởi động lại
  7. Có lẽ cài đặt phần còn lại của hệ thống với apt-get

Các bước này dựa trên những gì tôi biết về thiết kế của Debian đã sử dụng nó gần như độc quyền giữa các bản phân phối Linux trong 12 năm qua (bao gồm cả việc sử dụng debtakeovertrước đó) và cách tiếp cận mà tôi sẽ thực hiện. Vì vậy, xem xét điều này có nguy cơ của riêng bạn . Hệ thống của bạn có thể trở nên không sử dụng được bất cứ lúc nào sau khi thử bước 4. Thay thế cho các bước 4 & 5 thể debbootstrap.

Quan trọng nhất, tôi thực sự khuyên bạn nên thử điều này trên máy ảo trước khi thực hiện bất cứ điều gì bạn quan tâm.

Chúc may mắn, và có thể lực lượng sẽ ở bên bạn .


3

Không phải là một câu trả lời cho câu hỏi, nhưng có thể khó nâng cấp tất cả các gói từ x86 lên amd64, nhưng ít nhất bạn có thể dễ dàng cài đặt gói kernel amd64, ít nhất sẽ cho phép bạn chạy các ứng dụng và máy ảo 64 bit ( có thể đủ cho những gì bạn cần).

Chỉ cần cài đặt gói hình ảnh linux amd64 với dpkg -i --force-architecture.


1
--force-architecturelà không cần thiết, và hạt nhân amd64 có thể được cài đặt thông qua apt trên i386.
jordanm

3

Có khá nhiều hướng dẫn sử dụng ngoài kia, nhưng hầu như không có chương trình nào thực sự mong đợi. Tôi đang viết điều này trên máy tính xách tay Debian Wheezy mà tôi vừa hoàn thành nâng cấp từ 32 bit lên 64 và nó thực sự hoạt động.

Tôi đã làm theo các hướng dẫn này và chúng thực sự chính xác về những gì bạn sẽ thực sự phải đối mặt:

http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html

Khuyến cáo là giữ cho hệ thống được cung cấp trong toàn bộ quá trình, không khởi động lại trừ khi bạn chắc chắn rằng bạn đã di chuyển mọi thứ và mọi thứ đã bị xóa đã được cài đặt lại (đặc biệt là các gói thiết yếu) hoặc bạn sẽ không chạy lại hệ thống.


1
Thật thú vị khi đọc những gì thực sự có liên quan, nhưng khi đọc nó, tôi nghĩ rằng tôi nên cài đặt lại. Cảm ơn.
Faheem Mitha

Liên kết đó không hoạt động với tôi - tài nguyên đã được di chuyển chưa?
Toby Speight

Oh yeah, bạn đã thấy ngày? Tôi đã viết rằng vào năm 2013, mọi thứ thường biến mất trên web sau 6 năm. Đáng buồn thay, web vẫn không có chức năng rất cơ bản: Hiển thị các liên kết bị hỏng trước khi bạn nhấp vào một liên kết.
nigratruo

1

Theo ý tưởng sử dụng awk , cuối cùng tôi đã sử dụng:

dpkg --get-selections \               # get the list
 | grep -v deinstall \                # throw away deselected packages
 | grep ':i386' \                     # get the i386 arch packages
 | sed 's/install//g' \               # drop 'install' to get list
 | sed 's/:i386/:amd64/g' \           # replace i386 with amd64
 | while read package; do \           # iterate over the result
      apt-get -yf install $package; \ # install each one and fix dependencies
   done

Tôi đã phải chạy nó một vài lần. dpkg --get-selectionschỉ đơn giản là một danh sách theo thứ tự chữ cái, vì vậy các gói ở đầu yêu cầu các gói ở phía dưới sẽ được chuyển qua. Nếu bạn muốn xem có bao nhiêu cái đang được cài đặt, hãy thực hiện dpkg --get-selections | grep amd64 | wc -lbên trong whilevòng lặp.


-1

Tôi có ít kinh nghiệm về vấn đề này, nhưng tôi tin rằng bạn đã đúng khi bạn nói chuyển đổi từ 32 sang 64 nên có khả năng với đa vòm. Tôi sẽ thận trọng mặc dù hệ thống mới này được hỗ trợ tốt như thế nào.

Đây là một trong những tài liệu mà tôi đọc đã thảo luận về vấn đề này, có lẽ điều này sẽ giúp bạn: https : //wiki.ub Ubuntu.com/MultiarchSpec

Lưu ý Câu chuyện người dùng thứ ba. Đây là một liên kết khác xung quanh cùng một chủ đề: https://help.ubfox.com/community/MultiArch

Mặc dù nó có thể là một chút khác biệt giữa Debian và Ubunutu, đây là một tính năng cốt lõi. Mà tôi có thể tưởng tượng Ubuntu và Debian sẽ phối hợp chặt chẽ để làm cho cấu trúc này hoạt động trên nền tảng trước khi Ubuntu rút đi và làm một cái gì đó theo ý thích của chúng.

Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.