私は64ビットプロセッサで動作する32ビットシステムを持っています。再インストールせずに、すべて64ビットに変換するにはどうすればよいですか?新しいMultiarchフレームワークの結果として実行可能であることがどこかで見られました。
承認された回答:
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は混乱し、多くのパッケージが両方のバージョンにインストールされます。適性のある多くの手作業が行われることになっています。
さらなる困難: 一部の重要なパッケージは交換できるため、インストールのために常にバイナリをインストールできますが、一部のパッケージは削除して再度インストールする必要があります。私はタールでこの問題を抱えていました。別のシステムでパッケージを取得し、ar p package.deb data.tar.gz | tar zx
次にscp
抽出されたファイルをscp -r ./* [email protected]_computer:/
を介して編集しました 、したがって、バイナリが再び利用可能になります。すすぎ、繰り返し、scp
edファイルは上書きされます。
代わりに私がすること
システムを切り替えるたびに、次のことを行いました。
/home
をバックアップします 、/etc
(そして多分/var
、/usr/local
、変更した他のファイル、/root
、…、YMMV)。
dpkg --get-selections > packagelist
を使用してインストール済みパッケージのリストを取得します 結果のファイルをコピーしますpackagelist
同様に。
次に、Debianのクリーンな再インストールを行い、すべてのユーザー、おそらくロールなどを再作成します。
dpkg --set-selections < packagelist; apt-get -f install
。
バックアップしたディレクトリ、ファイルをコピーして戻すと、ほとんど完了です。
このアプローチの欠点の1つは、ライブラリを含むすべてのパッケージが手動でインストールされたものとしてマークされるため、パッケージがそれらに依存しなくなったときにアンインストールされないことです。