ฉันจะสลับการติดตั้ง 32 บิตเป็น 64 บิตได้อย่างไร


54

ฉันมีการติดตั้ง Ubuntu แบบ 32 บิตที่ทำงานบนฮาร์ดแวร์ 64 บิต ตอนนี้มีการนำ multi-arch มาใช้ฉันต้องการเปลี่ยนเป็น 64 บิตโดยไม่ต้องติดตั้งระบบปฏิบัติการใหม่

นี่คือหนึ่งในเรื่องราวของผู้ใช้ที่ระบุโดยสเป็ค :

Shawn ติดตั้งระบบของเขาโดยใช้ Ubuntu รุ่น 32 บิต แต่ฮาร์ดแวร์ของเขาคือ 64 บิตและเขาต้องการเปลี่ยน เขาติดตั้ง dpkg และ apt รุ่น amd64 ด้วยตนเองแทนที่รุ่น i386 และเปลี่ยนสถาปัตยกรรมที่ใช้เป็นค่าเริ่มต้น จากนั้นเขาก็ติดตั้งแพคเกจ amd64 ubuntu- ขั้นต่ำ จากนั้นเขาติดตั้งแพ็คเกจ amd64 ubuntu-desktop เมื่อเวลาผ่านไปแพ็คเกจ i386 ที่เหลือจะถูกแทนที่โดยอัตโนมัติเมื่อมีการอัพเกรด

อย่างไรก็ตามเมื่อพยายามทำตามคำแนะนำในนั้นฉันไม่พบ dpkg หรือ apt รุ่น 64 บิตใด ๆ

เรื่องราวของผู้ใช้นี้มีการนำไปใช้ในวิธีที่แตกต่างกันในข้อมูลจำเพาะสุดท้ายหรือฉันต้องทำอะไรที่แตกต่างออกไปหรือไม่?

กล่าวโดยย่อฉันจะเปลี่ยนการติดตั้ง 32 บิตเป็น 64 บิตได้อย่างไร


3
ฉันรู้ว่าคำถามนั้นได้ถูกถามไว้ที่askubuntu.com/questions/5018/…แต่นั่นคือก่อนที่จะมีการนำ multi-arch มาใช้ดังนั้นคำตอบควรแตกต่างกัน
David Planella

คำตอบ:


36

วิธีการดังกล่าวมีความซับซ้อนมากและไม่น่าจะส่งผลให้แพ็คเกจทั้งหมดของคุณเป็นamd64เวอร์ชันแทนที่จะเป็นi386เวอร์ชั่น แพคเกจเท่านั้นที่ได้รับการอัพเกรดจริงอาจมีการเปลี่ยนแปลงในสถาปัตยกรรมและอาจเฉพาะในกรณีที่ไม่มีแพคเกจอื่น ๆ ที่ไม่ได้รับการอัพเกรดขึ้นอยู่กับความเป็นของi386สถาปัตยกรรม เนื่องจากแพ็คเกจบางตัวจะไม่ได้รับการอัพเดตใด ๆตลอดระยะเวลาการสนับสนุนทั้งหมดของ Ubuntu ของคุณคุณอาจจะไม่เคยมีamd64ระบบที่สมบูรณ์โดยใช้เทคนิคดังกล่าว นอกจากนี้ยังไม่มีการสนับสนุนอย่างเป็นทางการสำหรับแนวทางดังกล่าว

คุณจะได้รับคำแนะนำเป็นอย่างดีให้แทนที่ระบบ Ubuntu ปัจจุบันของคุณด้วยการติดตั้งใหม่ 64 บิต

แต่ถ้าคุณไม่ต้องการที่จะพยายามเทคนิคนี้คุณจะต้องด้วยตนเองดาวน์โหลด.debไฟล์และdpkg aptคุณสามารถค้นหาได้ที่dpkgใน Ubuntuและaptในหน้าUbuntuบน Launchpad - ขยายเวอร์ชันล่าสุดภายใต้ "The Oneiric Ocelot" ที่ถูกทำเครื่องหมายว่าเป็นรุ่น, การรักษาความปลอดภัยและ / หรือการอัปเดต (แต่คุณอาจไม่ต้องการรุ่นที่ทำเครื่องหมายเท่านั้น เสนอและ / หรือ backport หากมีอยู่) จากนั้นดาวน์โหลดไฟล์การทำเครื่องหมาย.deb amd64โดยเฉพาะอย่างยิ่งไฟล์ที่คุณต้องการคือ: ไฟล์นี้สำหรับdpkg (และไฟล์อื่น ๆ ที่อยู่ในรายการด้วยหากคุณติดตั้งแพ็คเกจเหล่านี้) และสิ่งนี้และสิ่งนี้และสิ่งนี้และสิ่งนี้และนี้aptสำหรับ

ก่อนที่คุณจะทำอะไรกับไฟล์เหล่านี้คุณควรทำการสำรองข้อมูลเอกสารสำคัญทั้งหมดในระบบ Ubuntu ที่ติดตั้งไว้และไฟล์สำคัญอื่น ๆ (เช่นเพลง ebooks วิดีโอ) เพราะค่อนข้างเป็นไปได้ว่าการพยายามใช้เทคนิคนี้จะส่งผลเสีย และทำให้ระบบ Ubuntu ของคุณไม่สามารถใช้งานได้อย่างสมบูรณ์

คุณสามารถติดตั้งแพ็กเกจเหล่านี้ได้ทั้งหมดโดยใส่ไว้ในโฟลเดอร์ที่ไม่มีอะไรอื่น (สมมติว่าโฟลเดอร์นั้นมีชื่อdebsอยู่ในDownloadsไดเรกทอรีของคุณ) จากนั้นเรียกใช้คำสั่งนี้:

sudo dpkg -Ri ~/Downloads/debs

แน่นอนว่าเมื่อคุณติดตั้งแล้วพวกเขาจะไม่ทำงานเพราะไฟล์ปฏิบัติการของพวกเขาคือ 64- บิตและระบบ Ubuntu 32- บิตของคุณกำลังเรียกใช้เคอร์เนล 32- บิต (ซึ่งจะเรียกใช้ไฟล์ปฏิบัติการ 32- บิตเท่านั้น) ในความเป็นจริงพวกเขาอาจยังไม่เสร็จสิ้นการติดตั้งเนื่องจากอาจมีสคริปต์หลังการติดตั้งที่เรียกใช้ executables 64- บิตที่ไม่สามารถเรียกใช้ได้

มีหลายวิธีในการพยายามติดตั้งเคอร์เนล 64 บิตลงบนระบบ 32 บิต แต่มันซับซ้อนมากดังนั้นฉันขอแนะนำให้คุณบูตจาก Oneiric live 64 บิต (ซึ่งใช้ 64 บิตเอง เคอร์เนล), chrootลงในระบบ Ubuntu ที่ติดตั้งและใช้ 64-bit ที่เพิ่งติดตั้งaptและdpkgเพื่อติดตั้งเคอร์เนล 64- บิต

นี่คือคำแนะนำเฉพาะสำหรับการทำเช่นนั้น ... แต่โปรดอย่าใช้สิ่งนี้เพื่อหมายความว่าฉันกำลังจะใช้งานได้ ฉันไม่ได้ลองสิ่งนี้ (ฉันได้ chrooted เป็นระบบ Ubuntu ที่ติดตั้งจากซีดีที่ใช้งานจริงและดำเนินการจัดการแพคเกจและการดำเนินการอื่น ๆ แต่ฉันไม่ได้พยายามดำเนินการข้ามสถาปัตยกรรมที่แนะนำที่นี่)

  1. ในระบบ Ubuntu ที่ติดตั้งของคุณให้เปิดหน้าต่างเทอร์มินัล ( Ctrl+ Alt+ T) และเรียกใช้mount | grep ' on / '(โดยวางลงในเทอร์มินัลแล้วกด Enter) /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0)คุณจะเห็นสิ่งที่ต้องการ ส่วนที่คุณสนใจคือชื่ออุปกรณ์ก่อนหน้าonนี้ (ในตัวอย่างนี้คือ/dev/sda2) จำไว้หรือเขียนมันลงไป

  2. ขั้นตอนที่ 1 ให้ชื่ออุปกรณ์ของ/พาร์ติชันแก่คุณ หากคุณมี/bootพาร์ติชันแยกต่างหากคุณจะต้องทราบชื่ออุปกรณ์สำหรับพาร์ทิชันนั้นด้วย mount | grep ' on /boot 'ดังนั้นในกรณีที่ทำงาน /dev/sda1 on /boot type ext2 (rw)คุณจะเห็นสิ่งที่ต้องการ จำหรือเขียนลงไปได้เช่นกัน

  3. บูตจากซีดี Oneiric amd64 (เช่น 64 บิต) และเลือก "ลอง Ubuntu" แทน "ติดตั้ง Ubuntu"

  4. เข้าสู่เว็บเบราว์เซอร์และตรวจสอบให้แน่ใจว่าการเชื่อมต่ออินเทอร์เน็ตทำงานได้อย่างสมบูรณ์ หากไม่มีให้ตั้งค่า

  5. เปิดหน้าต่าง Terminal และเรียกใช้sudo mount /dev/sda2 /mnt(แทนที่/dev/sda2ด้วยชื่ออุปกรณ์ที่คุณได้รับในขั้นตอนที่ 1 หากแตกต่างกัน)

  6. หากระบบที่ติดตั้งของคุณมี/bootพาร์ติชันแยกต่างหากให้รันsudo mount /dev/sda1 /mnt/boot(แทนที่/dev/sda1ด้วยชื่ออุปกรณ์ที่คุณได้รับในขั้นตอนที่ 2 หากต่างกัน)

  7. ตอนนี้รันคำสั่งเหล่านี้เพื่อ chroot ในระบบที่ติดตั้งของคุณ:

    sudo mount --bind /dev /mnt/dev  
    sudo chroot /mnt  
    mount -t proc none /proc  
    mount -t sysfs none /sys  
    mount -t devpts none /dev/pts  
    
  8. เรียกใช้ping -c 4 launchpad.netเพื่อดูว่าการเชื่อมต่ออินเทอร์เน็ตทำงานได้อย่างสมบูรณ์จากภายใน chroot หรือไม่ คุณหวังอย่างนี้:

    PING launchpad.net (91.189.89.223) 56(84) bytes of data.
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=1 ttl=41 time=141 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=2 ttl=41 time=143 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=3 ttl=41 time=142 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=4 ttl=41 time=140 ms
    
    --- launchpad.net ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3003ms
    
  9. ถ้าหากคุณไม่สามารถส่งหรือรับแพ็กเก็ตได้คุณจะต้องตั้งค่าการเชื่อมต่ออินเทอร์เน็ตใน chroot ในการดำเนินการดังกล่าวให้เรียกใช้คำสั่งเหล่านี้ (เพื่อออกจาก chroot คัดลอกไฟล์การกำหนดค่าที่เกี่ยวข้องจากระบบซีดีอยู่ใน chroot และป้อน chroot อีกครั้ง):

    sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old  
    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old  
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf  
    sudo cp /etc/hosts /mnt/etc/hosts
    

    ในขณะที่โดยทั่วไปคุณควรหยุดกระบวนการนี้หากมีข้อผิดพลาดไม่ต้องกังวลหากคำสั่งแรกและ / หรือที่สองของคำสั่งทั้งสี่นั้นล้มเหลวหากวิธีที่เฉพาะเจาะจงที่ล้มเหลวคือการบอกคุณว่า/mnt/etc/resolv.conf(หรือ/mnt/etc/hosts) ไม่มีอยู่ .

    chroot กลับมาแล้วลองใหม่อีกครั้ง:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. รันคำสั่งเหล่านี้เพื่อทำให้สภาพแวดล้อม chrooted ของคุณพร้อมใช้งานอย่างสมบูรณ์:

    export HOME=/root  
    export LC_ALL=C  
    
  11. หากคุณยังไม่ได้ติดตั้ง.debไฟล์สำหรับรุ่น 64 บิตdpkgและaptให้ทำตอนนี้ หากคุณติดตั้ง แต่มีข้อผิดพลาดของการกำหนดค่าให้เรียกใช้dpkg --configure -aเพื่อแก้ไข (หวังว่ามันจะใช้งานได้ ... มันอาจจะดีกว่าที่จะรอที่จะพยายามติดตั้งจนกว่าคุณจะอยู่ในสภาพแวดล้อมซีดีสดในกรณีที่ติดตั้ง 64- บิตdpkgในขณะที่บูทเข้าสู่ระบบที่ติดตั้งdpkgแล้ว

  12. ด้วยเวอร์ชัน 64 บิตdpkgและaptติดตั้งสมมติว่าพวกเขาจะติดตั้งแพ็คเกจ 64 บิตโดยอัตโนมัติตอนนี้คุณสามารถลบเคอร์เนล 32 บิตทั้งหมดของคุณและติดตั้งเคอร์เนล 64 บิต ในการลบเมล็ด 32 dpkg -l | grep linux-บิตของคุณทำงาน linux-นี้จะแสดงรายการแพคเกจติดตั้งที่ขึ้นต้นด้วย คุณสนใจมากขึ้นโดยเฉพาะในแพคเกจที่เริ่มต้นเช่นlinux-generic, linux-image, และlinux-server / หรือ linux-headersลบไฟล์เหล่านี้ด้วยapt-get purge ...ตำแหน่งที่...ถูกแทนที่ด้วยรายการแพ็คเกจที่คุณลบ

  13. ตอนนี้ติดตั้งแพคเกจที่คุณลบ (อันที่จริงสำหรับแพคเกจที่มีหมายเลขรุ่นในชื่อแพคเกจเช่นตัวอย่างเช่นlinux-image-3.0.0-13-genericคุณจะต้องติดตั้งล่าสุดชื่อแพคเกจ versioned.) ทำเช่นนี้โดยการทำงานapt-get install ...ที่...จะถูกแทนที่ด้วยรายการพื้นที่ที่แยกออกจากกันของแพคเกจที่คุณกำลังติดตั้ง .

  14. อัพเดตการกำหนดค่าบูตโหลดเดอร์ยกเลิกการต่อเชื่อมอุปกรณ์บางตัวแล้วออกจาก chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. ถ้าคุณวิ่งและมันไม่ได้ล้มเหลวแล้วตอนนี้ทำงานsudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.oldsudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf

  16. ถ้าคุณวิ่งและมันไม่ได้ล้มเหลวแล้วตอนนี้ทำงานsudo cp /mnt/etc/hosts /mnt/etc/hosts.oldsudo cp /mnt/etc/hosts.old /mnt/etc/hosts

  17. หากระบบที่ติดตั้งของคุณมี/bootพาร์ติชันแยกต่างหากให้ unmount ที่:sudo umount /mnt/boot

  18. ถอนติดตั้ง/พาร์ติชันระบบที่ติดตั้งของคุณ:sudo umount /mnt

  19. ออกจากหน้าต่างเทอร์มินัล (เรียกใช้exit) จากนั้นรีบูต (หรือปิด) ระบบซีดีสดและบูตเข้าสู่ระบบที่ติดตั้ง

  20. ดูว่าระบบสามารถใช้งานได้และใช้เคอร์เนล 64 บิต ( uname -mควรบอกว่าสถาปัตยกรรมเป็นx86_64)

อาจมีแพ็คเกจเพิ่มเติมที่คุณต้องติดตั้งเช่นia32_libsและ / หรือรุ่น 64 บิตlibc6เพื่อให้สามารถใช้งานได้ สำหรับบางคนที่คุณอาจจะแจ้งคุณต้องการพวกเขาเมื่อพยายามที่จะติดตั้งรุ่น 64 บิตและdpkg / หรือ aptสำหรับคนอื่นคุณอาจไม่ได้รับแจ้ง

(คำแนะนำข้างต้นสำหรับ chrooting และการดำเนินงานในสภาพแวดล้อม chrooted จะขึ้นอยู่ในส่วนสำคัญในขั้นตอนที่เกี่ยวข้อง แต่ที่แตกต่างกันนี้และในบางLaunchpad คำตอบโพสต์ของผมโดยเฉพาะอย่างยิ่ง # 6 ที่นี่และ # 6 ที่นี่ . และขอขอบคุณเป็นพิเศษกับซีเซียมสำหรับการชี้ออก ที่ 64- บิตdpkgและaptexecutables จะไม่ทำงานบนระบบที่ใช้เคอร์เนล 32- บิต)


2
ไบนารีเหล่านั้นจะทำงานภายใต้เคอร์เนล 32 บิตหรือไม่?
Cesium

@Caesium ดีโทร ไม่แน่นอน ฉันจะแก้ไขโพสต์ของฉันเพื่อระบุวิธีเรียกใช้เคอร์เนล 64 บิตที่ทำงาน ... ยกเว้นว่าฉันไม่รู้ว่าจะติดตั้งแพคเกจเคอร์เนล 64 บิตบนระบบ Ubuntu 32 บิตได้อย่างไร (ทำงานบนฮาร์ดแวร์ 64 บิต แน่นอน) เมื่อใดaptและdpkgยังคง 32- บิตและจะ (น่าจะ) ปฏิเสธที่จะติดตั้งเคอร์เนลแพ็คเกจ 64- บิต (การสร้างเคอร์เนลจากแหล่งที่มาและการใช้การคอมไพล์แบบข้ามจะทำงานได้ แต่สิ่งนี้ซับซ้อนมากและฉันไม่ต้องการแนะนำมันฉันแน่ใจว่ามีวิธีที่ดีกว่าและง่ายกว่าถ้าคุณรู้โปรดอย่าลังเล เพื่อแก้ไขโพสต์หรือความคิดเห็นของฉันหรือของคุณเกี่ยวกับเรื่องนี้)
Eliah Kagan

@Caesium จริงๆแล้วฉันคิดว่าฉันรู้วิธีติดตั้งเคอร์เนล 64 บิต ฉันจะแก้ไขโพสต์ของฉันในไม่ช้าเพื่อสะท้อนสิ่งนี้ เมื่อฉันทำแล้วถ้าคุณรู้สึกว่าเทคนิคที่เสนอมาใช้งานได้โปรดคัดลอกและ / หรือถอดความออกเป็นคำตอบของคุณ ... หรืออีกวิธีหนึ่งตราบใดที่ทั้งข้อมูลในคำตอบของคุณไม่ได้อยู่ในข้อมูลและข้อมูล ในคำตอบของฉันที่ไม่ได้อยู่ในการรักษาของคุณคุณสามารถรวมคำตอบของเราเป็นคำตอบเดียว (อาจเป็นคำตอบของคุณ - ไม่เป็นไรสำหรับฉันคุณโพสต์มาก่อนแล้วฉันจะลบคำตอบของฉัน)
Eliah Kagan

@Caesium Edits เสร็จสิ้น; ฉันหวังว่าจะแสดงความคิดเห็นของคุณ
Eliah Kagan

ว้าวเป็นงานที่ดี :) ณ จุดนี้คุณใช้ความพยายามมากกว่าฉันดังนั้นฉันจะไม่ฝันที่จะคัดลอกไปยังคำตอบของฉัน มันไม่ลอยออกไปจากเป้าหมายเดิมของการใช้เทคโนโลยี multiarch แต่ฉันจะมีความสนใจที่จะได้ยินไม่ว่าจะทำงานกระนั้น :) คิดว่าเราจะต้องรอให้โปสเตอร์เดิม :)
ซีเซียม

25

ตามที่ระบุไว้ข้างต้นฉันทำ:

echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install gcc-multilib
sudo update-grub

มันได้ผล ฉันสามารถรัน userland แบบ 32 บิตด้วยเคอร์เนล 64 บิตใน Ubuntu 12.04


5
คำตอบนี้หิน ฉันสามารถยืนยันว่ามันยังใช้งานได้กับทะลึ่ง ข้อแตกต่างประการหนึ่งคือกระบวนการของการเพิ่มสถาปัตยกรรมมีการเปลี่ยนแปลง: ใช้sudo dpkg --add-architecture amd64แทน มันจะตะโกนใส่คุณถ้าคุณทำอย่างอื่น ฉันต้องทำสิ่งนี้เพื่อให้ฉันสามารถ chroot ในการติดตั้ง 64 บิตจาก (ก่อนหน้านี้) 32 บิตหนึ่งและทำงานได้ตามที่คาดไว้โดยไม่มีข้อผูกมัด
2014

ฉันลองสิ่งนี้ใน Mint แต่ฉันมีปัญหาคุณทำอะไรอย่างอื่นอีกหรือ รายละเอียด: superuser.com/q/927830/150718
ดร. Hannibal Lecter

นอกจากการเปลี่ยนแปลงของ Wug แล้วคุณยังต้องใช้linux-image-generic:amd64กับ Ubuntu 16.04 มันใช้งานได้ดีแม้ไม่มีคำสั่งสองคำสั่งสุดท้าย
qznc

6

แม้ว่าคำถามจะคล้ายกับเป็นไปได้หรือไม่ที่จะ "อัพเกรด" จากการติดตั้ง 32 บิตเป็น 64 บิต? (ถ้าคุณยังไม่ได้อ่านก่อนที่ฉันจะแนะนำให้คุณลองใช้คำตอบที่ให้ไว้มีดี) ฉันขอแนะนำให้อ่านลิงก์ต่อไปนี้:

เพื่อประสิทธิภาพที่ดีขึ้นฉันควรติดตั้ง 32 บิตหรือ 64 บิต

ฉันจะสลับการติดตั้ง 32 บิตเป็น 64 บิตได้อย่างไร

อะไรคือความแตกต่างระหว่าง 32- บิตและ 64- บิตและฉันควรเลือกอะไร?

เป็นไปได้: ใช่

ง่ายไหม: ไม่!

หากปัญหาของคุณเกิดขึ้นกับหน่วยความจำคุณควรทราบว่า Ubuntu 32 บิตสามารถอ่าน RAM ได้มากกว่า 4GB (สูงสุด 64 GB) ดังนั้นการใช้ Ubuntu 32 บิตรุ่นล่าสุดกับคอมพิวเตอร์ที่มีสถาปัตยกรรม 32 บิตหรือ 64 บิตและการใส่ RAM เพิ่มจะไม่เป็นปัญหา มันจะอ่าน RAM เพิ่มเติมและการทำงาน


5

คำตอบเหล่านี้ค่อนข้างล้าสมัย Cross-grading ได้รับการบันทึกไว้สำหรับ Debian ในDebian wikiแล้ว แต่ก็ยังไม่แนะนำ

การติดตั้งเคอร์เนลจากสถาปัตยกรรมที่แตกต่างกันนั้นง่ายเหมือนที่อธิบายไว้ในตอนนี้ แต่ 'apt' ใหม่จะไม่รู้จักแพ็คเกจจากสถาปัตยกรรมก่อนหน้าดังนั้นส่วนหน้าทั้งหมดอาจรายงานแพ็คเกจที่เสียหายจำนวนมาก สิ่งนี้ต้องเปลี่ยนการขึ้นต่อกันทั้งหมดกับสถาปัตยกรรมอื่นหรือเปลี่ยน apt และ dpkg เป็น 32- บิต

ดังนั้นวิธีที่ดีที่สุดคือการบันทึกผลลัพธ์ของdpkg --get-selections, strip: i386 จากนั้น, และดาวน์โหลดแพ็คเกจ amd64 สำหรับการขึ้นต่อกันของแคช:

apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...

อย่างดีที่สุดน่าจะช้าและใช้เวลานานในการแก้ไขการอ้างอิง


5

คำแนะนำเหล่านี้ทำให้ระบบของคุณบูตด้วยเคอร์เนล 64 บิต แต่ไม่เปลี่ยนแปลงโปรแกรมส่วนใหญ่ของ userland

หลังจากอัพเกรดระบบของฉันด้วย CPU 64 บิตฉันยังต้องการติดตั้งเคอร์เนล 64 บิตบน Ubuntu 32 บิต 14.04.2 ของฉัน (ชื่อรหัส: เชื่อถือ) ในการทำสิ่งนี้ฉันได้ป้อนคำสั่งต่อไปนี้ในฐานะผู้ใช้รูท :

dpkg --add-architecture amd64   
apt-get update
apt-get install linux-generic-lts-utopic:amd64

หมายเหตุ:

  1. นี้อาจลบเคอร์เนล 32 บิตของคุณเป็นเชื่อถือ - โดยเริ่มต้น - เรือที่มีการอัปเดตเคอร์เนล (เคอร์เนลจาก Utopic), การดู14.04 หมายเหตุรีลีส ในกรณีนี้เคอร์เนลปัจจุบันของคุณขัดแย้งกับเคอร์เนล 64 บิตที่ต้องติดตั้งและดังนั้นจึงถูกลบออก หากคุณไม่ชอบแนวคิดนี้คุณอาจต้องการลองใช้แพคเกจเคอร์เนล 64- บิตรุ่นเก่ากว่า "linux-generic-lts-trusty: amd64" แทน

  2. คำสั่ง "--add-architecure" เป็นสิ่งจำเป็น หากไม่มีระบบแพ็คเกจจะไม่สนับสนุนแพ็คเกจจากสถาปัตยกรรมที่แตกต่างกันดูMultiarch-HowTo

  3. หากต้องการดูว่าapt-getระบบของคุณจะทำอะไรให้เรียกใช้ด้วยตัวเลือก-Vsที่เปิดใช้งาน "โหมดการจำลอง verbose" นี่จะพิมพ์แพ็คเกจทั้งหมดที่จะติดตั้งและลบออก

  4. การบูทระบบของคุณโดยใช้เคอร์เนลใหม่นั้นขึ้นอยู่กับการgrubกำหนดค่าหรือไม่ ในฐานะผู้ใช้รูทให้รันupdate-grubเพื่อทำการอัพเดต grub และพิมพ์การกำหนดค่าการบูตปัจจุบัน ภาพแรกในรายการจะถูกบูตเป็นค่าเริ่มต้น

  5. ในการเลือกภาพเคอร์เนลที่แตกต่างกันฉันลบบรรทัดGRUB_HIDDEN_TIMEOUT=0ออกจาก/etc/default/grubและรันในฐานะผู้ใช้รู update-grubท ณ เวลาบูตตอนนี้คุณสามารถเลือกเคอร์เนลที่แตกต่างกัน (คุณมีเวลา 10 วินาทีในการกดปุ่มใด ๆ ไม่เช่นนั้นด้วงจะใช้เคอร์เนลเริ่มต้นต่อไป)

  6. คำตอบที่มีคะแนนโหวตมากที่สุดคือจาก 2011 และล้าสมัยอย่างไร้ความหวังในความคิดของฉัน Multiarch ช่วยให้คุณติดตั้งแพ็กเกจไลบรารีจากสถาปัตยกรรมหลาย ๆ เครื่องในเครื่องเดียวกันโดยไม่ต้องกังวลใจมาก


นั่นเป็นคำแนะนำง่ายๆที่ใช้งานได้ดีสำหรับฉันในวันที่ 14.10 (Utopic) (แต่ฉันทำอย่างนั้นapt-get install linux-generic:amd64ซึ่งไม่สำคัญสำหรับการทดสอบ)! หากฉันผ่านตัวเลือกการบูต "ช่วยเหลือ" ระบบจะทำงาน แต่ X ไม่ได้ใช้nouveauไดรเวอร์วิดีโอและอื่น ๆ หากฉันบูตตามปกติการเริ่มต้นจะหยุดในบางจุดและระบบจะรีบูต (แต่เป็นครั้งแรกที่ฉันสามารถบูตได้สำเร็จ) ฉันไม่แน่ใจว่าปัญหาเกิดขึ้นกับไดรเวอร์วิดีโอในระหว่างการบูต "ปกติ" หรืออย่างอื่น
imz - Ivan Zakharyaschev

โปรแกรมควบคุมวิดีโอและ X กลายเป็นไม่ใช่ (เกี่ยวกับสถิติ) ที่เกี่ยวข้องกับข้อขัดข้อง / การรีบูตด้วยเคอร์เนล amd64 มันเป็นเพียงความลึกลับสำหรับตอนนี้ - bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116
imz - Ivan Zakharyaschev

2

บางทีในขณะที่ฉันประสบปัญหาเดียวกันนี้จะได้ผลมันเป็นสิ่งที่ฉันวางแผนไว้ว่า:

รับ OS เวอร์ชัน 64 บิตติดตั้งลงในพาร์ติชันเมื่อคัดลอกเอกสารและสิ่งอื่น ๆ จากการติดตั้งแบบ 32 บิตเมื่อทุกอย่างถูกคัดลอกอย่างปลอดภัยคุณสามารถฟอร์แมตส่วนที่เหลือของไดรฟ์และใช้งานได้


2

ใช่สายสถาปัตยกรรมต่างประเทศมีความสำคัญมากที่สุดสำหรับการติดตั้งแพคเกจ cross-arch ใด ๆ แต่หลังจากนั้นทำตามที่ผู้ใช้รายอื่นพูดถึง:

sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install linux-modules:amd64
sudo init 6 #reboot into new kernel
sudo apt-get install apt:amd64
sudo apt-get install ubuntu-desktop:amd64

มันควรจะทำ ...


คุณลองไหม มันใช้งานไม่ได้จริง ๆ ฉันได้รับปัญหาเมื่อมันเริ่มแทนที่ dpkg และ perl โดย amd64 counterparts ของพวกเขา
Janus Troelsen

2

สูตรของฉันสำหรับ Ubuntu 16.04 Xenial ทดสอบบน Ubuntu VM 32 บิตที่ติดตั้งใหม่พร้อมระบบมาตรฐานและเซิร์ฟเวอร์ SSH แต่ไม่มี GUI:

sudo -s
dpkg --get-selections > pkg1
dpkg --add-architecture amd64
apt update
apt install linux-image-generic:amd64 thermald 

(ไม่เช่นนั้นจะติดตั้ง thermald: amd64 และไม่สามารถรีสตาร์ทได้ภายใต้เคอร์เนล 32 บิต)

reboot

หลังจากรีบู๊ตด้วยเคอร์เนล 64 บิต:

sudo -s
unset LANG
apt install apt:amd64 apt-utils:amd64

พิมพ์ 'ใช่ทำตามที่ฉันพูด!' เมื่อถูกถามก็จะปลอดภัย

mkdir /tmp/upgrade 
cd /tmp/upgrade
pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u
}
apt download $(comm -23 <(pkgs i386) <(pkgs amd64))
while ls *amd64*deb
do dpkg -i *amd64*deb
   dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' |
   while read a
   do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb
   done
done

ในลูปด้านบนเราจะลบไฟล์. deb ที่ติดตั้งสำเร็จแล้วและได้รับสถานะ 'ii' ในรายการ dpkg

เราต้องทำการdpkg -iวิ่งซ้ำเนื่องจากมันไม่สำเร็จจากความพยายามครั้งแรก

reboot

ตอนนี้ด้วยเคอร์เนล 64 บิตและพื้นที่ผู้ใช้สามารถลบแพ็กเกจ i386 ที่เหลืออยู่ได้:

dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')

รายการที่คุณบันทึกไว้ในpkgs1ไฟล์ที่คุณสามารถใช้สำหรับความต้องการเพิ่มเติมของคุณ


นั่นเป็นเวทย์มนตร์ แต่มันช่วยให้ฉันเปลี่ยน 32-64 บิตผ่าน SSH บนพีซีระยะไกล
271872

1

คำถามที่ดี. ฉันมีการตามล่าและนอกเหนือจากเรื่องราวของผู้ใช้ที่คุณพูดฉันไม่สามารถหารายละเอียดเกี่ยวกับวิธีการทำเช่นนี้ได้ เอกสารทั้งหมดระบุว่าเป็นเพียงการใช้งานแอพพลิเคชั่นแบบ 32 บิตบนระบบปฏิบัติการ 64 บิตที่มีอยู่แล้ว

อย่างไรก็ตามหากคุณต้องการทดลองคุณสามารถลองต่อไปนี้ (มาจากลิงก์ของฉันที่ [1])

 echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
 sudo apt-get install linux-image:amd64

ฉันคิดว่าคุณจะต้องเริ่มต้นด้วยเคอร์เนล amd64 เนื่องจาก 32- บิตจะไม่สามารถเรียกใช้ไบนารี 64 บิตได้ อย่างไรก็ตาม 64- บิตควรรันไบนารี 32 บิต (หากติดตั้ง ia32-libs?)

หากคุณได้รับการติดตั้งและบูตเคอร์เนล 64 บิตคุณสามารถไปที่นั่นเพื่อติดตั้ง apt: amd64 จากนั้นทำตามเรื่องราวของผู้ใช้ตามที่เสนอไว้ก่อนหน้านี้ ubuntu-minimal, ubuntu-desktop เป็นต้น

หลังจาก apt: amd64 ได้รับการติดตั้งแล้วฉันคิดว่าคุณสามารถลบไลน์สถาปัตยกรรมต่างประเทศได้เนื่องจากคุณได้ทำการสลับไปที่จุดนั้น

คำเตือน: ฉันไม่มีระบบ 32 บิตที่จะทดสอบดังนั้นนี่คือการคาดเดาทั้งหมด โชคดี!

[1] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1#Improved_handling_of_32-bit_compatibility_on_amd64_systems


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.