วิธีแปลงระบบ Debian แบบ 32 บิต (x86) เป็น 64 บิต


36

ฉันมีระบบ 32 บิตซึ่งทำงานบนโปรเซสเซอร์ 64 บิต ฉันจะแปลงให้เป็นแบบ 64 บิตโดยไม่ต้องติดตั้งใหม่ได้อย่างไร ผมเคยเห็นที่ไหนสักแห่งว่ามันเป็นไปได้เป็นผลมาจากกรอบ Multiarch ใหม่


5
ฉันสนใจคำตอบของคำถามนี้ ฉันมีระบบ 32 บิตบนเครื่องที่มีความสามารถ 64 บิต (ซึ่งตอนนี้มีอายุ 6 ปีขึ้นไป แต่ยังคงอยู่ในขณะนี้) เหตุผลเดียวที่ฉันใช้ 32 บิตเมื่อฉันติดตั้งเครื่องนี้ครั้งแรกในปี 2550 เป็นเพราะฉันต้องการเรียกใช้แอปพลิเคชัน 32 บิต ด้วย multiarch ใหม่ถ้าฉันเข้าใจถูกต้องแอป 32 บิตสามารถติดตั้งบนเครื่อง 64 บิตได้อย่างง่ายดาย ดังนั้นมันจะดีถ้าแปลงเป็น 64 บิตสำหรับเสียงฮืด ๆ แต่ฉันไม่รู้ว่ามันจะยากแค่ไหน @ bahamat คำแนะนำการใช้ VM ฟังดูดี หากฉันจัดการการแปลงที่ประสบความสำเร็จฉันจะตอบที่นี่
Faheem Mitha


คำถามที่คล้ายกันใน AU: askubuntu.com/q/5018/178596
Wilf

คำตอบ:


8

TL: DR:ทำได้ แต่มีความซับซ้อน ฉันได้อธิบายทางเลือกไว้ที่ด้านล่าง

ตอนนี้คำอธิบายที่ยาวและเอามันไปด้วยเม็ดเกลือเพราะฉันอาจไม่ได้ใช้เส้นทางที่ดีที่สุด:

เป็นไปได้และนี่คือสิ่งที่ฉันทำในช่วงสองคืนที่ผ่านมา: มีรายการ wiki ที่อธิบายถึงวิธีการโรงเรียนเก่าโดยไม่สนับสนุนหลาย มันมีประโยชน์สำหรับการแก้ไขหีบห่อที่ชำรุด

หากต้องการโอนย้ายระบบฐานของคุณให้ทำสิ่งนี้ :

$ 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 จะสับสนและแพคเกจจำนวนมากจะถูกติดตั้งในทั้งสองเวอร์ชัน ต้องทำงานด้วยมืออย่างถนัดในเรื่องความถนัด

ความยากลำบากมากขึ้น:แพคเกจที่จำเป็นบางอย่างสามารถเปลี่ยนได้ดังนั้นคุณจะต้องติดตั้งไบนารีไว้สำหรับการติดตั้งเสมอ แต่แพคเกจบางอย่างจะต้องถูกลบออกและติดตั้งอีกครั้งเช่นฉันมีปัญหากับ tar ฉันได้แพคเกจบนระบบอื่นแล้วทำการแยกไฟล์แพคเกจผ่านar p package.deb data.tar.gz | tar zxแล้วscpเอ็ดไฟล์ที่ถูกแตกไฟล์ผ่านscp -r ./* root@other_computer:/ดังนั้นไฟล์ไบนารี่จึงสามารถใช้งานได้อีกครั้ง ล้างและทำซ้ำและscpไฟล์ ed จะถูกเขียนทับ

ฉันจะทำอะไรแทน

ฉันได้ทำสิ่งต่อไปนี้ทุกครั้งที่ฉันเปลี่ยนระบบ:

Back up /home, /etc(และอาจจะ/var, /usr/localบางไฟล์อื่น ๆ ที่คุณมีการเปลี่ยนแปลง/root, ... , YMMV)

รับรายการแพ็กเกจที่ติดตั้งด้วยdpkg --get-selections > packagelistและคัดลอกไฟล์ผลลัพธ์packagelistเช่นกัน

จากนั้นทำการติดตั้ง Debian ใหม่ทั้งหมดสร้างผู้ใช้ทั้งหมดอีกครั้งอาจเป็นบทบาทเป็นต้น

ติดตั้งแพ็กเกจทั้งหมดdpkg --set-selections < packagelist; apt-get -f installอีกครั้งด้วย

คัดลอกไดเรกทอรีไฟล์และคุณทำเสร็จแล้วส่วนใหญ่

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


1
"ฉันจะทำอะไรแทน" ... คนฉันแน่ใจว่า OP ถามโดยไม่ต้องติดตั้งใหม่: /
Braiam

@Braiam OP ต้องการทำเช่นนั้นโดยไม่ต้องติดตั้งใหม่ ฉันแค่รายงานประสบการณ์ส่วนตัวของฉันในการทำเช่นนั้น เส้นทางอื่นนั้นง่ายกว่าสำหรับฉันและบางทีฉันอาจทำผิดพลาดบางอย่างในขณะที่แปลงระบบ
Residuum

6
หากต้องการทำเครื่องหมายแพ็คเกจที่ติดตั้งโดยอัตโนมัติคุณสามารถใช้apt-mark showautoเพื่อส่งออกรายการที่ติดตั้งอัตโนมัติและapt-mark autoทำเครื่องหมายในการติดตั้งใหม่
Adrien Clerc

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

7

คำตอบอื่น ๆ ที่นี่แสดงให้เห็นว่าในขณะนี้เป็นไปได้ในทางทฤษฎีมันมีความซับซ้อนมากและอาจไม่คุ้มค่าความพยายาม อย่างไรก็ตามคุณสามารถทำการติดตั้งใหม่ทั้งหมดและทำให้กระบวนการไม่เจ็บปวดหากคุณ$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 ได้เช่นกัน


4

เป็นไปได้ในทางทฤษฎี แต่มีแนวโน้มว่าจะทรยศ เดเบียนมัลติฮาร์ทที่ปัจจุบันรองรับ multiarch libs แต่ไม่ใช่ไบนารี ดังนั้นมีที่

ระบบเข้าใจสถาปัตยกรรมของตัวเองเป็นหลักdpkg-architecture(ซึ่งจริงๆแล้วเป็นสคริปต์ Perl แต่จะแยกข้อมูล arch และแสดง) ซึ่งอ้างว่าสามารถตั้งค่าสถาปัตยกรรมได้


คำเตือน: ฉันไม่ได้ทำสิ่งนี้แม้จะได้ลอง !!!


กระบวนการคร่าวๆคือ:

  1. ติดตั้งตัวแปร multiarch ของไลบรารีทั้งหมดของคุณ (ที่สำคัญที่สุดlibgcc1)
  2. ใช้dpkg-architecture -aamd64เพื่อเปลี่ยนส่วนโค้งของคุณ (หมายเหตุมันอาจบ่นเกี่ยวกับ GCC)
  3. ดาวน์โหลดและจัดวางองค์ประกอบที่จำเป็นทั้งหมด (ดูถัดไป)
  4. บังคับการติดตั้งตัวแปร amd64 dpkgและการขึ้นต่อกัน
  5. บังคับให้ติดตั้งแพคเกจระบบพื้นฐานที่จำเป็น amd64 หลากหลายรวมถึงapt-getและเคอร์เนล (หมายเหตุมันอาจจะบ่นมาก)
  6. Reboot
  7. สมมุติว่าติดตั้งส่วนที่เหลือของระบบด้วย apt-get

ขั้นตอนเหล่านี้ขึ้นอยู่กับสิ่งที่ฉันรู้เกี่ยวกับการออกแบบ Debian ที่ใช้มันเกือบเฉพาะในหมู่ distros Linux ในช่วง 12 ปีที่ผ่านมา (รวมถึงการใช้งานมาdebtakeoverก่อน) และวิธีการที่ฉันใช้ ดังนั้นพิจารณานี้ที่มีความเสี่ยงของคุณเอง ระบบของคุณอาจใช้ไม่ได้ตลอดเวลาหลังจากความพยายามที่ขั้นตอนที่ 4 สำรองสำหรับขั้นตอนที่ 4 และ 5 อาจdebbootstrapจะเป็น

สิ่งสำคัญที่สุดคือฉันขอแนะนำให้ลองใช้ VM ก่อนทำสิ่งใดก็ตามที่คุณใส่ใจ

ขอให้โชคดีและพฤษภาคมกองทัพจะอยู่กับคุณ


3

ไม่ใช่คำตอบสำหรับคำถาม แต่อาจเป็นการยากที่จะอัพเกรดแพ็คเกจทั้งหมดจาก x86 เป็น amd64 แต่อย่างน้อยคุณสามารถติดตั้งแพคเกจเคอร์เนล amd64 ได้อย่างน้อยซึ่งจะทำให้คุณสามารถรันแอปพลิเคชัน 64 บิตและเครื่องเสมือนและคอนเทนเนอร์เสมือนได้ ซึ่งอาจเพียงพอสำหรับสิ่งที่คุณต้องการ)

เพียงแค่ติดตั้งแพคเกจ amd64 dpkg -i --force-architectureลินุกซ์ภาพด้วย


1
--force-architectureไม่จำเป็นและเคอร์เนล amd64 สามารถติดตั้งผ่าน apt บน i386
จอร์แดน

3

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

ฉันทำตามคำแนะนำเหล่านี้และพวกเขาแม่นยำในสิ่งที่คุณจะเผชิญจริง:

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

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


1
สนใจอ่านสิ่งที่เกี่ยวข้องจริง ๆ แต่เมื่ออ่านอย่างนี้แล้วฉันคิดว่าฉันดีกว่าด้วยการติดตั้งใหม่ ขอบคุณ
Faheem Mitha

ลิงก์นั้นไม่ทำงานสำหรับฉัน - มีการย้ายทรัพยากรหรือไม่
Toby Speight

โอ้ใช่คุณเห็นวันที่หรือไม่ ฉันเขียนว่าในปี 2013 สิ่งต่าง ๆ มักจะหายไปในเว็บใน 6 ปี น่าเศร้าที่เว็บยังไม่มีฟังก์ชั่นพื้นฐานมาก ๆ : แสดงลิงค์เสียก่อนที่คุณจะคลิกลิงค์
nigratruo

1

ต่อไปนี้ความคิดที่ใช้ awkฉันสิ้นสุดที่ใช้:

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

ฉันต้องวิ่งสองสามครั้ง dpkg --get-selectionsเป็นรายการที่เรียงตามตัวอักษรดังนั้นแพ็คเกจที่อยู่ด้านบนที่ต้องใช้แพ็คเกจที่ด้านล่างจะถูกส่งผ่าน หากคุณต้องการดูจำนวนการติดตั้งให้ทำdpkg --get-selections | grep amd64 | wc -lภายในwhileลูป


-1

ฉันมีประสบการณ์เพียงเล็กน้อยกับเรื่องนี้ แต่ฉันเชื่อว่าคุณถูกต้องเมื่อคุณพูดว่าการแปลงจาก 32 เป็น 64 ควรมีความสามารถแบบ multi-arch ฉันจะต้องระมัดระวังแม้ว่าจะรองรับระบบใหม่นี้ได้ดีเพียงใด

นี่คือหนึ่งในเอกสารที่ฉันอ่านที่กล่าวถึงเรื่องนี้อาจจะช่วยให้คุณ: https://wiki.ubuntu.com/MultiarchSpec

สังเกตเห็นเรื่องราวของผู้ใช้ที่สาม นี่คือลิงค์อื่นรอบ ๆ หัวข้อเดียวกัน: https://help.ubuntu.com/community/MultiArch

แม้ว่ามันอาจจะแตกต่างจาก Debian และ Ubunutu แต่ก็เป็นคุณสมบัติหลัก ซึ่งฉันคิดว่า Ubuntu และ Debian จะทำงานอย่างใกล้ชิดเพื่อให้โครงสร้างนี้ทำงานบนพื้นดินก่อนที่ Ubuntu จะดึงออกมาและทำสิ่งที่ตนเองชอบ

โชคดี!

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