32ビットインストールを64ビットインストールに切り替えるにはどうすればよいですか?


54

64ビットのハードウェアで実行する32ビットのUbuntuインストールがあります。今というマルチアーチが実装されている、私はOSを再インストールすることなく、64ビットに切り替えたいと思います。

これは、仕様で扱われているユーザーストーリーの 1つです。

ShawnはUbuntuの32ビットバージョンを使用してシステムをインストールしましたが、ハードウェアは64ビットであり、切り替えたいと考えています。彼は手動でdpkgとaptのamd64バージョンをインストールし、i386バージョンを置き換え、デフォルトとして使用するアーキテクチャを変更します。次に、amd64 ubuntu-minimalパッケージをインストールします。次に、amd64 ubuntu-desktopパッケージをインストールします。時間の経過とともに、残りのi386パッケージはアップグレード時に自動的に置き換えられます。

ただし、そこにある指示に従おうとすると、64ビットバージョンのdpkgまたはaptが見つかりません。

このユーザーストーリーは最終仕様で別の方法で実装されましたか、それとも何か別のことをする必要がありますか?

つまり、32ビットインストールを64ビットに切り替えるにはどうすればよいですか?


3
askubuntu.com/questions/5018/…ですでに質問が行われていることを理解していますが、それはmulti-archが実装される前であったため、答えは異なるはずです。
デビッドプラネラ

回答:


36

このようなアプローチは非常に複雑であり、すべてのパッケージがamd64バージョンではなくバージョンになることはほとんどありませんi386。実際にアップグレードを受けるパッケージのみがアーキテクチャで変更される可能性が高く、おそらく、アップグレードされていない他のパッケージがi386アーキテクチャの存在に依存していない場合のみです。一部のパッケージは、Ubuntuリリースのサポートサイクル全体を通じて更新を受け取らないためamd64このような手法を使用した完全なシステムはおそらくないでしょう。さらに、そのようなアプローチに対する公式のサポートは確かにありません。

代わりに、既存のUbuntuシステムを新しい64ビットインストールに置き換えることをお勧めします。

ただし、この手法を試してみたい場合は、とのファイルを手動でダウンロードする必要.debdpkgありaptます。それらはdpkg、UbuntuおよびLaunchpadのaptUbuntuページで見つけることができます。リリース、セキュリティ、および/または更新としてマークされている「The Oneiric Ocelot」の下の最新バージョンを展開します(ただし、おそらくバージョンのみをマークしたくない提案および/またはバックポート(ある場合)。次に、と.debマークされたファイルをダウンロードしますamd64。具体的には、必要なファイルは次のとおりですdpkg(これらのパッケージがインストールされている場合は、これもリストされます)、これこれこれこれそしてこれapt

これらのファイルを使用する前に、インストールされているUbuntuシステム内のすべての重要なドキュメントとその他の重要なファイル(音楽、電子書籍、ビデオなど)を必ずバックアップする必要があります。 Ubuntuシステムを完全に使用不能のままにします。

これらすべてのパッケージをインストールするには、他に何も含まれていないフォルダーにフォルダーを配置し(フォルダーが呼び出さdebsれ、Downloadsディレクトリ内にある場合)、次のコマンドを実行します。

sudo dpkg -Ri ~/Downloads/debs

もちろん、一度インストールすると、実行可能ファイルは64ビットで、32ビットUbuntuシステムは32ビットカーネル(32ビット実行可能ファイルのみを実行します)を実行するため、実際には実行されません。実際、実行不能な64ビットの実行可能ファイルを呼び出すインストール後スクリプトが存在する可能性があるため、インストールを完了することさえできません。

64ビットカーネルを32ビットシステムにインストールするさまざまな方法がありますが、それらはすべて非常に複雑なので、代わりに64ビットのOneiricライブCD(それ自体が64ビットを実行するカーネル)、インストールされたUbuntuシステムにchrootし、最近インストールされた64ビットaptを使用してdpkg、64ビットカーネルをインストールします。

これを行うための具体的な手順を以下に示します...しかし、これがうまくいくと言っているという意味ではありません。私はこれを試みていません。(私はライブCDからインストールされたUbuntuシステムにchrootし、パッケージ管理と他の操作を実行しましたが、ここで提案されているクロスアーキテクチャ操作は試していません。)

  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ビット)ライブCDから起動し、「Ubuntuのインストール」ではなく「Ubuntuを試す」を選択します。

  4. Webブラウザーに移動して、インターネット接続が完全に機能していることを確認します。そうでない場合は、セットアップします。

  5. ターミナルウィンドウを開いて実行します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を終了し、関連する構成ファイルをライブCDシステムから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)が存在しないことを伝えることである場合、これらの4つのコマンドの最初または2つが失敗しても心配しないでください。

    chrootに戻って再試行します。

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. これらのコマンドを実行して、chrooted環境を完全に使用できる状態にします。

    export HOME=/root  
    export LC_ALL=C  
    
  11. およびの.deb64ビットバージョンのファイルをインストールしていない場合は、今すぐインストールします。それらをインストールしたが、構成エラーがあった場合は、実行して修正します。(うまくいけば...インストールされたシステムで起動した状態で64ビットをインストールすると使用できない状態のままになるので、ライブCD環境になるまでインストールを試みるのを待つ方が良いかもしれません。)dpkgaptdpkg --configure -adpkgdpkg

  12. 64ビットのバージョンでdpkgaptインストールされ、彼らは自動的に64ビットパッケージをインストールすることを想定して、あなたは今、すべての32ビットのカーネルを削除して、64ビットのカーネルをインストールすることができます。32ビットカーネルを削除するには、を実行しdpkg -l | grep linux-ます。これは、で始まるインストール済みパッケージをリストしますlinux-。あなたは次のように起動したパッケージで、より具体的に興味を持っているlinux-genericlinux-imagelinux-server、および/またはlinux-headersapt-get purge ...where ...が削除するパッケージのスペース区切りリストで置き換えられたこれらのファイルを削除します。

  13. 次に、削除したパッケージを再インストールします。(実際には、たとえばlinux-image-3.0.0-13-generic、パッケージ名にバージョン番号が含まれるパッケージの場合、最新バージョンのパッケージ名のみをインストールする必要があります。)インストールするパッケージのスペース区切りリストで置き換えられるapt-get install ...where を実行することでこれ...を行います。 。

  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.oldしても失敗しなかった場合は、実行しsudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.confます。

  16. 実行sudo cp /mnt/etc/hosts /mnt/etc/hosts.oldしても失敗しなかった場合は、実行しsudo cp /mnt/etc/hosts.old /mnt/etc/hostsます。

  17. インストールされているシステムに個別の/bootパーティションがある場合は、次をアンマウントします。sudo umount /mnt/boot

  18. インストールしたシステムの/パーティションをアンマウントします。sudo umount /mnt

  19. ターミナルウィンドウを離れて(実行exit)、ライブCDシステムを再起動(またはシャットダウン)し、インストールされたシステムを起動します。

  20. システムが使用可能で、64ビットカーネルを実行しているかどうかを確認します(uname -mアーキテクチャがそうであると言うべきですx86_64)。

ia32_libsおよび/または64ビットバージョンのlibc6など、これが機能するためにインストールする必要がある追加のパッケージが存在する可能性があります。それらの一部については、64ビットバージョンのdpkgand / or をインストールしようとするときにそれらが必要であると通知される場合がありますapt。他の人のために、あなたは知らされないかもしれません。

(chrootするとchrootされた環境で動作するための上記の手順は、上の重要な部分に基づいています。この関連するが、別の手順と、いくつかの上のLaunchpad回答特に、#6私の記事をここに#6 ここに。そして、特別な感謝をセシウム指摘し64ビットdpkgapt実行可能ファイルは、32ビットカーネルを実行しているシステムでは実行されません。


2
これらのバイナリは32ビットカーネルで動作しますか?
セシウム

@セシウム良い電話。もちろん違います。私は投稿を編集して、64ビットカーネルを実行する方法を示します...ただし、32ビットUbuntuシステムに64ビットカーネルパッケージをインストールする方法がわからないことを除きます(64ビットハードウェアで実行し、もちろん)する場合aptdpkg、まだ32ビットであり、(おそらく)64ビットカーネルパッケージをインストールすることを拒否します。(ソースからカーネルを構築し、クロスコンパイルを使用すると動作しますが、これは非常に複雑であり、お勧めしたくありません。より良い、より簡単な方法があると確信しています。私またはあなたの投稿を編集したり、それについてコメントしたりします。)
エリアカガン

@Caesium実際、64ビットカーネルをインストールする方法を知っていると思います。これを反映するために、すぐに投稿を編集します。一度私が提案したテクニックがうまくいくと思うなら、それをあなたの答えにコピーおよび/または言い換えてください...または、あなたの答えの情報が私のものではなく、情報の両方である限り、私の回答ではあなたのものではありませんが保存されていますが、私たちの答えを1つの答えにまとめることができます。(それはあなたの答えかもしれません-それは私でいいです。あなたは私がする前に少し投稿しました。それから私は私の答えを削除します。)
エリアハKagan

@Caesium編集が完了しました。コメントをお待ちしております。
エリアケイガン

うわー、すてきな仕事:)この時点であなたは私よりもはるかに多くの努力をしてきましたので、私の答えにコピーすることを夢見ていないでしょう、あなたの信用のために残ってください。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

動いた。Ubuntu 12.04で、32ビットユーザーランドを64ビットカーネルで実行できます。


5
この答えは揺れます。私はそれがまだ生意気で動作することを確認できます。1つの違いは、アーキテクチャを追加する手順が変更されたsudo dpkg --add-architecture amd64ことです。代わりに使用します。他の方法でやると大声で叫ぶでしょう。これを行う必要があったので、(以前の)32ビットの1つから64ビットのインストールにchrootできるようになり、問題なく正常に機能しました。
ワグ14年

これをMintで試しましたが、いくつか問題があります。他に何かしましたか?詳細:superuser.com/q/927830/150718
ハンニバルレクター博士

Wugの変更に加えてlinux-image-generic:amd64、Ubuntu 16.04 でも使用する必要があります。最後の2つのコマンドがなくても、うまく機能しました。
qznc

6

質問は似ていますが、32ビットから64ビットへの「アップグレード」は可能ですか?(まだ読んでいないなら、試してみることをお勧めします。そこにある答えは良いです。)また、以下のリンクを読むことをお勧めします。

パフォーマンスを向上させるには、32ビットまたは64ビットをインストールする必要がありますか?

32ビットインストールを64ビットインストールに切り替えるにはどうすればよいですか?

32ビットと64ビットの違いは何ですか?どちらを選択すればよいですか?

可能ですか:はい

簡単ですか:いいえ!

メモリに問題がある場合は、Ubuntu 32ビットが4GB以上のRAM(最大64 GB)を読み取れることを知っておく必要があります。したがって、32ビットまたは64ビットアーキテクチャのコンピューターで最新のUbuntu 32ビットバージョンを使用し、RAMを追加しても問題はありません。単に追加のRAMを読み取って動作します。


5

これらの答えはやや時代遅れです。クロスグレーディングは、Debian wikiDebian向けに文書化されましが、まだ推奨されていません。

異なるアーキテクチャからカーネルをインストールすることは、そこに記述されているのと同じくらい簡単になりましたが、新しい「apt」は以前のアーキテクチャからのパッケージを認識しないため、すべてのフロントエンドが多くの壊れたパッケージを報告する可能性があります。これには、他のアーキテクチャへのすべての依存関係を変更するか、aptとdpkgを32ビットに戻す必要があります。

したがって、最善のアプローチは、最初にの結果を保存dpkg --get-selectionsし、そこから:i386を取り除き、各依存関係のamd64パッケージをキャッシュにダウンロードすることです。

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

せいぜい、依存関係の解決に時間がかかり、時間がかかる可能性があります。


5

これらの手順により、システムは64ビットカーネルで起動しますが、ほとんどのユーザーランドプログラムは変更されません。

64ビットCPUでシステムをアップグレードした後、32ビット14.04.2 Ubuntu(コード名:Trusty)に64ビットカーネルをインストールしたかったのです。これを行うには、rootユーザーとして次のコマンドを入力しました

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「冗長シミュレーションモード」を有効にします。これにより、インストールおよび削除されるすべてのパッケージが印刷されます。

  4. 新しいカーネルを使用してシステムを起動するかどうかは、grub構成によって異なります。rootユーザー、実行update-grubGRUBの更新を行い、現在のブート設定を印刷します。リストの最初のイメージがデフォルトとして起動されます。

  5. 異なるカーネルイメージを選択するには、私はラインを取り外しGRUB_HIDDEN_TIMEOUT=0から/etc/default/grubとして走ったルートユーザ update-grub。ブート時に、別のカーネルを選択できるようになりました(キーを押すのに10秒かかります。そうしないと、grubはデフォルトのカーネルで続行します)。

  6. 最も多くの票を獲得した回答は2011年のものであり、私の意見では絶望的に時代遅れです。Multiarchを使用すると、同じマシンに複数のアーキテクチャのライブラリパッケージを手間をかけずにインストールできます。


これは、14.10(Utopic)で私にとってほとんど効果があった素晴らしく簡単なアドバイスです(ただしapt-get install linux-generic:amd64、実験ではそれほど重要ではないはずです)。「レスキュー」ブートオプションを使用すると、システムは実行されますが、Xはnouveauビデオドライバーなどを使用しません。正常に起動すると、ある時点で起動が中断し、システムが再起動します。(しかし、初めて、正常に起動することができました。)「通常の」起動中にビデオドライバに問題があるかどうかはわかりません。
imz-イヴァンザカリヤシェフ2015

ビデオドライバーとXは、amd64カーネルでのクラッシュ/リブートに(統計的に)関連していないことが判明しました。-それは、今のと同じくらい謎だbugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116
imz-イワンザカリヤシェフ

2

おそらく、私は同じ問題に直面しているので、これはうまくいくでしょう、それは私がやろうとしていたことです:

64ビットバージョンのOSを入手し、パーティションにインストールします。32ビットインストールからドキュメントやその他のものを完全にコピーしたら、すべてを安全にコピーしたら、残りのドライブをフォーマットして使用できます。


2

ええ、クロスアーキテクチャパッケージをインストールするためには、外部アーキテクチャラインが最も重要です。しかし、その後、他のいくつかのユーザーが述べたようにしてください:

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に置き換えると問題が発生します
ヤヌストロエルセン14

2

Ubuntu 16.04 Xenialの私のレシピは、新しくインストールされた32ビットUbuntu VMでテストされ、標準システムと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

上記のループでは、正常にインストールされ、dpkgリストで「ii」ステータスになった.debファイルを削除します。

dpkg -i最初の試行では成功しないため、実行を繰り返す必要があります

reboot

現在、64ビットカーネルとユーザー空間の両方で、残りのi386パッケージを削除できます。

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

pkgs1ファイルに保存したリストは、今後のニーズに使用できます。


これは一種の魔法ですが、リモートPCでSSHを介して32ビットから64ビットに移行するのに役立ちました。
user271872

1

良い質問。私はあなたが引用したユーザーストーリー以外で狩りをしましたが、これを行う方法についての詳細は見つかりません。すべてのドキュメントは、すでに64ビットOSで32ビットアプリケーションを実行するためだけのものであることを示しています。

ただし、試してみたい場合は、以下を試してみてください([1]のリンクから派生)

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

32ビットのカーネルでは64ビットのバイナリを実行できないため、amd64カーネルから始める必要があると思います。ただし、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.