64ビットプロセッサで実行される32ビットシステムがあります。再インストールせずに、すべて64ビットに変換するにはどうすればよいですか?新しいMultiarchフレームワークの結果として、それが実行可能であることをどこかで見ました。
64ビットプロセッサで実行される32ビットシステムがあります。再インストールせずに、すべて64ビットに変換するにはどうすればよいですか?新しいMultiarchフレームワークの結果として、それが実行可能であることをどこかで見ました。
回答:
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:/
バイナリが再び利用できるよう、。すすぎ、繰り返し、scp
edファイルは上書きされます。
代わりに私がすること
システムを切り替えるたびに、次のことを行いました。
バックアップし/home
、/etc
(そしておそらく/var
、/usr/local
あなたが変更されているいくつかの他のファイル、/root
、...、YMMV)。
インストールされたパッケージのリストを取得しdpkg --get-selections > packagelist
、結果のファイルpackagelist
もコピーします。
次に、Debianのクリーンな再インストールを行い、すべてのユーザー、おそらくロールなどを再度作成します。
すべてのパッケージをで再インストールしますdpkg --set-selections < packagelist; apt-get -f install
。
バックアップしたディレクトリ、ファイルをコピーして、ほとんど完了です。
そのアプローチの1つの欠点:ライブラリを含むすべてのパッケージは、手動でインストールされたものとしてマークされるため、パッケージに依存しなくなったパッケージはアンインストールされません。
apt-mark showauto
れたリストをエクスポートapt-mark auto
し、新しいインストールでそれらをマークするために使用できます。
x86_64
であり、システムパッケージが64ビットプロセッサを最適に使用していないかどうかは気にしない場合?また、32ビットOSを実行しています。私が最初にインストールを行ったとき、私のプロセッサは32ビットだと思ったと思います:(
ここでの他の回答は、これは理論的には可能ですが、非常に複雑であり、おそらく努力する価値がないことを示しています。ただし、クリーンインストールを実行し$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が提供するツールを確認することもできます。これらはすべてUbuntuにもインストール可能である必要があります。
理論上は可能ですが、おそらく危険です。現在のDebian multiarchはmultiarchライブラリをサポートしていますが、バイナリはサポートしていません。それがあります。
システムは主にdpkg-architecture
(実際にはperlスクリプトですが、アーキテクチャ情報を抽出して表示する)から独自のアーキテクチャを理解し、アーキテクチャを設定できると主張しています。
大まかなプロセスは次のとおりです。
libgcc1
)dpkg-architecture -aamd64
アーチをシフトするために使用します(注、GCCについて不平を言う場合があります)dpkg
と依存関係の強制インストールapt-get
およびカーネルを含む、基本的な基本システムパッケージのamd64バリアントを強制的にインストールします(注、それはA LOTに文句を言うかもしれません)apt-get
これらの手順は、過去12年間にLinuxディストリビューションの間でほぼ独占的に使用したDebianの設計(debtakeover
以前に使用したことも含む)と私が取るアプローチに基づいています。したがって、これはご自身の責任で考慮してください。システムは、ステップ4を試行した後はいつでも使用できなくなる可能性がありますdebbootstrap
。ステップ4および5の代替はになる場合があります。
最も重要なことは、気にすることを何でもする前に、VMでこれを試すことを強くお勧めします。
幸運を祈ります、そしてフォースはあなたと共にありますように。
質問への答えではありませんが、すべてのパッケージをx86からamd64にアップグレードするのは難しいかもしれませんが、少なくとも64ビットアプリケーションと仮想マシンおよびコンテナーを実行できるようにするamd64カーネルパッケージを少なくとも簡単にインストールできます(必要なものに十分かもしれません)。
でamd64 linux-imageパッケージをインストールするだけdpkg -i --force-architecture
です。
--force-architecture
必要ありません。amd64カーネルはi386のapt経由でインストールできます。
そこにはかなりの数のマニュアルがありますが、実際に何を期待するかはほとんど示されていません。私はこれをDebian Wheezyラップトップで書いていますが、32ビットから64へのアップグレードを終えたばかりで、実際に動作します。
私はこれらの指示に従いましたが、あなたが実際に直面することについて本当に正確でした:
http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html
推奨事項は、プロセス全体を通してシステムの電源を入れたままにすることです。すべてを移行し、削除されたすべてのもの(特に重要なパッケージ)が再度インストールされたことを確認しない限り、再起動しないでください。
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
ループ内で実行します。
私はこの問題についてはほとんど経験がありませんが、32から64への変換がmulti-archで可能なはずだと言うとき、あなたは正しいと信じています。この新しいシステムがどれだけうまくサポートされているかについては慎重になります。
ここに私が読んだこの問題について議論した文書の1つがあります。おそらくこれはあなたを助けるでしょう:https : //wiki.ubuntu.com/MultiarchSpec
3番目のユーザーストーリーに注目してください。同じトピックに関する別のリンクを次に示します。https: //help.ubuntu.com/community/MultiArch
DebianとUbunutuで少し異なるかもしれませんが、これはコア機能です。UbuntuとDebianが緊密に連携して、この構造が地上で機能するようになってから、Ubuntuが撤退し、独自の好みの何かをするようになると思います。
がんばろう!