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 .
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 .
Câu trả lời:
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 upgrade
sẽ chăm sóc một số gói, apt-get -f install
sẽ 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 :i386
sẽ 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 zx
và sau đó scp
chỉ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 scp
tậ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/local
mộ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 > packagelist
và 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.
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.
x86_64
và 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 :(
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ữ $HOME
nguyên.
Quá trình chung sẽ là
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
Nếu bạn /home
là 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/
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)
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.
Đó 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.
Quá trình thô sẽ là:
libgcc1
)dpkg-architecture -aamd64
để thay đổi vòm của bạn (Lưu ý, nó có thể phàn nàn về GCC)dpkg
và phụ thuộcapt-get
và kernel (Lưu ý, nó có thể khiếu nại rất nhiều)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 debtakeover
trướ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 có 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 .
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
.
--force-architecture
là 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.
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.
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-selections
chỉ đơ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 -l
bên trong while
vòng lặp.
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!