web-dev-qa-db-ja.com

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

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

37
tshepang

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

さて、長い説明、そして私が最良のルートをとっていなかったかもしれないので、一粒の塩と一緒にそれを取ってください:

それは可能であり、ここに私が過去2晩に行ったことを示します。 旧式の方法を説明する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での多くの手動作業が行われます。

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

代わりに私がすること

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

/home/etc(および/var/usr/local、変更したその他のファイル、/root、...、YMMV)をバックアップします。

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

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

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

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

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

9
Residuum

ここでの他の答えは、これは理論的には可能ですが、非常に複雑で、おそらく努力する価値がないことを示しています。ただし、$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がこれを容易にするために提供している the tools も参照する必要があります。それらはすべてUbuntuにもインストールできるはずです。

7
terdon

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

システムは主にdpkg-architecture(実際にはPerlスクリプトですが、Arch情報を抽出して表示します)から独自のアーキテクチャを理解し、set 建築学、建築物、建築様式。


警告:私はこれを実行していませんNOR試みたことさえあります!!!


大まかなプロセスは次のようになります。

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

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

最も重要なこととして、私はあなたが気にかけることをする前に、これをVMで試すことを強くお勧めします。

幸運、そしてMay the Force be With You.

4
bahamat

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

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

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

すべてのプロセスを移行し、削除されたすべてが再インストールされたこと(特に重要なパッケージ)が確実に実行されない限り、システムを再起動しないでください。そうしないと、システムが再び実行されなくなります。

3

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

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

3

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