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は混乱し、多くのパッケージが両方のバージョンにインストールされます。 aptitudeでの多くの手動作業が行われます。
より困難:一部の必須パッケージは置き換えることができるため、インストールのために常にバイナリがインストールされますが、一部のパッケージは削除してインストールする必要があります再び、例えばタールに関してこの問題がありました。別のシステムでパッケージを取得し、ar p package.deb data.tar.gz | tar zx
でパッケージを抽出してから、scp -r ./* root@other_computer:/
で抽出ファイルをscp
edしたので、バイナリを再度使用できます。すすぎ、繰り返します。scp
edファイルは上書きされます。
代わりに私がすること
システムを切り替えるたびに、次のことを行いました。
/home
、/etc
(および/var
、/usr/local
、変更したその他のファイル、/root
、...、YMMV)をバックアップします。
dpkg --get-selections > packagelist
を使用してインストール済みパッケージのリストを取得し、結果のファイルpackagelist
もコピーします。
次に、Debianを完全に再インストールし、すべてのユーザーを作成します。おそらくロールなどを作成します。
dpkg --set-selections < packagelist; apt-get -f install
を使用してすべてのパッケージを再インストールします。
バックアップしたディレクトリ、ファイルをコピーして戻すだけで、ほとんど完了です。
そのアプローチの1つの欠点:ライブラリを含むすべてのパッケージは手動でインストールされたものとしてマークされるため、パッケージに依存しなくなったパッケージはアンインストールされません。
ここでの他の答えは、これは理論的には可能ですが、非常に複雑で、おそらく努力する価値がないことを示しています。ただし、$HOME
を同じにしておけば、クリーンインストールを実行してプロセスを比較的簡単にすることができます。
一般的なプロセスは
インストール済みパッケージのリストと自動インストールされたパッケージのリストのバックアップを作成します。
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
multiarch を使用してインストールしたパッケージ名からアーキテクチャを削除することもできます。
dpkg --get-selections '*' | sed -e 's/:\(i386\|AMD64\)//' > package.list
/home
が別のパーティションである場合は、インストールプロセス中にフォーマットしないでください。別のパーティションにない場合は、後で復元できるバックアップを作成します。
tar cvzf home_backup.tgz $HOME/
新しいシステムをインストールしたら、不足しているパッケージをインストールします
Sudo dpkg --set-selections < package.list
Sudo apt-get update
Sudo apt-get dist-upgrade
Sudo apt-mark auto $(cat auto.list)
$ HOMEを復元します。 tgzファイルをコピーして$ HOMEディレクトリに抽出します。
tar xvzf home_backup.tgz
また、Mintがこれを容易にするために提供している the tools も参照する必要があります。それらはすべてUbuntuにもインストールできるはずです。
理論的には可能ですが、おそらく危険です。現在、Debian multiarchはmultiarchライブラリをサポートしていますが、バイナリはサポートしていません。だからそれがあります。
システムは主にdpkg-architecture
(実際にはPerlスクリプトですが、Arch情報を抽出して表示します)から独自のアーキテクチャを理解し、set 建築学、建築物、建築様式。
大まかなプロセスは次のようになります。
libgcc1
)。dpkg-architecture -aamd64
を使用してArchを移行します(注、GCCについて不平を言う場合があります)dpkg
のAMD64バリアントと依存関係を強制インストールするapt-get
とカーネルを含む、必須の基本システムパッケージのAMD64バリアントを強制的にインストールします(注意:A LOTと不平を言うかもしれません)apt-get
でインストールしますこれらの手順は、過去12年間にLinuxディストリビューションでほぼ独占的に使用したDebianの設計(以前に debtakeover
を使用したことを含む)と私が知っているアプローチに基づいています。かかるだろう。したがって、これを考慮してください自己の責任において。ステップ4を試みた後、システムはいつでも使用できなくなる可能性があります。ステップ4と5の代替mightがdebbootstrap
である可能性があります。
最も重要なこととして、私はあなたが気にかけることをする前に、これをVMで試すことを強くお勧めします。
幸運、そしてMay the Force be With You.
そこにはかなりの数のマニュアルがありますが、実際に何を期待すべきかを示すものはほとんどありません。 32ビットから64ビットへのアップグレードを終えたばかりのDebian Wheezyラップトップでこれを書いていますが、実際に機能します。
私はこれらの指示に従いました、そして彼らはあなたが実際に直面することについて本当に正確でした:
http://blog.zugschlus.de/archives/972-How-to-AMD64-an-i386-Debian-installation-with-multiarch.html
すべてのプロセスを移行し、削除されたすべてが再インストールされたこと(特に重要なパッケージ)が確実に実行されない限り、システムを再起動しないでください。そうしないと、システムが再び実行されなくなります。
質問への回答ではありませんが、すべてのパッケージをx86からAMD64にアップグレードするのは難しい場合がありますが、少なくとも64ビットのアプリケーションと仮想マシンおよびコンテナーを実行できるようにするAMD64カーネルパッケージを少なくとも簡単にインストールできます(これで十分です)。
AMD64 linux-imageパッケージをdpkg -i --force-architecture
でインストールするだけです。
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
ループ内。