32ビット(x86)Debianベースのシステムを64ビットに変換する方法


36

64ビットプロセッサで実行される32ビットシステムがあります。再インストールせずに、すべて64ビットに変換するにはどうすればよいですか?新しいMultiarchフレームワークの結果として、それが実行可能であることをどこかで見ました。


5
この質問の答えに興味があります。64ビット対応のマシンで32ビットシステムを使用しています(現在6歳以上ですが、今のところまだ使用しています)。2007年にこのマシンを最初にインストールしたときに32ビットを使用した唯一の理由は、32ビットアプリケーションを実行したかったからです。新しいmultiarchでは、正しく理解すれば、32ビットアプリを64ビットマシンに簡単にインストールできます。ですから、wheezy用に64ビットに変換するのは良いことですが、それがどれほど難しいかはわかりません。@bahamatのVMの使用に関する提案は良さそうです。変換が成功した場合、ここで回答します。
ファヒームミタ


AUに関する同様の質問:askubuntu.com/q/5018/178596
Wilf

回答:


8

TL; DR:実行可能ですが、複雑です。下部に代替案を概説しました。

今、長い説明、そして私は最良のルートを取っていなかったかもしれないので、塩の粒でそれを取ります:

それは可能です、そして、ここに私が最後の2晩でしたことです: multiarchサポートなしの古い学校の方法記述する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が混乱し、両方のバージョンで多くのパッケージがインストールされます。aptitudeで多くの手作業を行う必要があります。

さらに困難:いくつかの必須パッケージを置き換えることができるため、インストール用に常にバイナリをインストールする必要がありますが、一部のパッケージを削除して再インストールする必要があります。たとえば、tarでこの問題が発生しました。私は、別のシステムにパッケージをwgot経由でパッケージを抽出ar p package.deb data.tar.gz | tar zxし、その後scp経由で抽出されたファイルを編scp -r ./* root@other_computer:/バイナリが再び利用できるよう、。すすぎ、繰り返し、scpedファイルは上書きされます。

代わりに私がすること

システムを切り替えるたびに、次のことを行いました。

バックアップし/home/etc(そしておそらく/var/usr/localあなたが変更されているいくつかの他のファイル、/root、...、YMMV)。

インストールされたパッケージのリストを取得しdpkg --get-selections > packagelist、結果のファイルpackagelistもコピーします。

次に、Debianのクリーンな再インストールを行い、すべてのユーザー、おそらくロールなどを再度作成します。

すべてのパッケージをで再インストールしますdpkg --set-selections < packagelist; apt-get -f install

バックアップしたディレクトリ、ファイルをコピーして、ほとんど完了です。

そのアプローチの1つの欠点:ライブラリを含むすべてのパッケージは、手動でインストールされたものとしてマークされるため、パッケージに依存しなくなったパッケージはアンインストールされません。


1
「私が代わりに何をするか」...男、私はOPが再インストールせずに尋ねたと確信していた:/
Braiam

@Braiam OPは、再インストールせずにこれを実行したいと考えていました。私は個人的な経験を報告していました。代替ルートは私にとって簡単であり、システムの変換中にいくつかの間違いを犯した可能性があります。
レジデューム

6
自動的にインストールされたパッケージをマークするには、自動インストールさapt-mark showautoれたリストをエクスポートapt-mark autoし、新しいインストールでそれらをマークするために使用できます。
エイドリアンクラーク

あなたの経験を書いてくれてありがとう。「これに対処したい場合は、トリッキーな部分をスキップしてください;)」の目的がソフトウェアを開発することだけx86_64であり、システムパッケージが64ビットプロセッサを最適に使用していないかどうかは気にしない場合?また、32ビットOSを実行しています。私が最初にインストールを行ったとき、私のプロセッサは32ビットだと思ったと思います:(
jberryman

7

ここでの他の回答は、これは理論的には可能ですが、非常に複雑であり、おそらく努力する価値がないことを示しています。ただし、クリーンインストールを実行し$HOME、同じプロセスを維持すればプロセスを比較的簡単にすることができます。

一般的なプロセスは

  1. インストール済みパッケージのリストと自動インストール済みパッケージのリストのバックアップを作成します。

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

    multiarchを使用してインストールしたパッケージ名からアーキテクチャを削除することもできます。

    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

理論上は可能ですが、おそらく危険です。現在のDebian multiarchはmultiarchライブラリをサポートしていますが、バイナリはサポートしていません。それがあります。

システムは主にdpkg-architecture(実際にはperlスクリプトですが、アーキテクチャ情報を抽出して表示する)から独自のアーキテクチャを理解し、アーキテクチャを設定できると主張しています。


警告:私もこれをやったことがありません!


大まかなプロセスは次のとおりです。

  1. すべてのライブラリのmultiarchバリアントをインストールします(最も重要なことですlibgcc1
  2. dpkg-architecture -aamd64アーチをシフトするために使用します(注、GCCについて不平を言う場合があります)
  3. 必要なすべてのコンポーネントをダウンロードしてステージングします(次を参照)
  4. amd64バリアントdpkgと依存関係の強制インストール
  5. apt-getおよびカーネルを含む、基本的な基本システムパッケージのamd64バリアントを強制的にインストールします(注、それはA LOTに文句を言うかもしれません)
  6. リブート
  7. おそらくシステムの残りの部分をインストールします apt-get

これらの手順は、過去12年間にLinuxディストリビューションの間でほぼ独占的に使用したDebianの設計(debtakeover以前に使用したことも含む)と私が取るアプローチに基づいています。したがって、これはご自身の責任で考慮してください。システムは、ステップ4を試行した後はいつでも使用できなくなる可能性ありますdebbootstrap。ステップ4および5の代替はになる場合があります。

最も重要なことは、気にすることを何でもする前に、VMでこれを試すことを強くお勧めします。

幸運を祈ります、そしてフォースはあなたと共にありますように


3

質問への答えではありませんが、すべてのパッケージをx86から​​amd64にアップグレードするのは難しいかもしれませんが、少なくとも64ビットアプリケーションと仮想マシンおよびコンテナーを実行できるようにするamd64カーネルパッケージを少なくとも簡単にインストールできます(必要なものに十分かもしれません)。

でamd64 linux-imageパッケージをインストールするだけdpkg -i --force-architectureです。


1
--force-architecture必要ありません。amd64カーネルはi386のapt経由でインストールできます。
ヨルダン

3

そこにはかなりの数のマニュアルがありますが、実際に何を期待するかはほとんど示されていません。私はこれをDebian Wheezyラップトップで書いていますが、32ビットから64へのアップグレードを終えたばかりで、実際に動作します。

私はこれらの指示に従いましたが、あなたが実際に直面することについて本当に正確でした:

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

推奨事項は、プロセス全体を通してシステムの電源を入れたままにすることです。すべてを移行し、削除されたすべてのもの(特に重要なパッケージ)が再度インストールされたことを確認しない限り、再起動しないでください。


1
実際に関係していることを読むのは面白いですが、これを読んだので、再インストールをお勧めします。ありがとう。
ファヒムミタ

このリンクは機能していません-リソースは移動しましたか?
トビースパイト

ええ、日付を見ましたか?私は2013年に、6年後にウェブ上でデータが消えることが多いと書きました。残念ながら、Webにはまだ基本的な機能がありません。リンクをクリックする前に壊れたリンクを表示します。
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 -lwhileループ内で実行します。


-1

私はこの問題についてはほとんど経験がありませんが、32から64への変換がmulti-archで可能なはずだと言うとき、あなたは正しいと信じています。この新しいシステムがどれだけうまくサポートされているかについては慎重になります。

ここに私が読んだこの問題について議論した文書の1つがあります。おそらくこれはあなたを助けるでしょう:https : //wiki.ubuntu.com/MultiarchSpec

3番目のユーザーストーリーに注目してください。同じトピックに関する別のリンクを次に示します。https//help.ubuntu.com/community/MultiArch

DebianとUbunutuで少し異なるかもしれませんが、これはコア機能です。UbuntuとDebianが緊密に連携して、この構造が地上で機能するようになってから、Ubuntuが撤退し、独自の好みの何かをするようになると思います。

がんばろう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.