「再インストールせずにアーキテクチャを移行」の版間の差分
Kusakata.bot2 (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
(→参照: リンクを修正) |
||
(同じ利用者による、間の1版が非表示) | |||
200行目: | 200行目: | ||
# /lib/ld-linux.so.2 /bin/ls |
# /lib/ld-linux.so.2 /bin/ls |
||
+ | |||
+ | === 2017年以前の旧システムからの移行 === |
||
+ | |||
+ | 2017 年に Arch Linux が i686 のサポートを終了したため、古い 32 ビット システムの更新で問題が発生する可能性があります。その更新を安全に行うには、[[Arch Linux Archive]] を使用することをお勧めします。つまり、リポジトリのスナップショットを修正し、現在のシステムを更新してから、'''同じバージョン''' に対応する 64 ビットフレーバーのパッケージに切り替えます。 |
||
+ | |||
+ | パッケージの署名に使用されたすべての GPG キーがまだ有効であるとは限らないため、{{ic|pacman.conf}} で必要な信頼レベルを下げる必要がある場合があることに注意してください ({{ic|PackageTrustAll}} のように、marginal trust を含めるようにします) ただし、HTTPS を使用して、少なくともパッケージが {{ic|archlinux.org}} ドメインからのものであることを確認することをお勧めします。 |
||
=== 32ビットから64ビットに移行後 KDE が起動しない === |
=== 32ビットから64ビットに移行後 KDE が起動しない === |
||
213行目: | 219行目: | ||
== 参照 == |
== 参照 == |
||
− | *[[ |
+ | * [[新しいハードウェアに移行する]] |
2023年3月10日 (金) 21:31時点における最新版
このページではインストール済みの環境を i686 (32ビット) から x86_64 (64ビット) アーキテクチャに移行する2つの方法を解説しています。どちらの方法でもシステム全体の再インストール (ハードドライブの消去など) は行いません。片方はライブ CD を使い、もう片方はシステムの中から移行を実行します。
準備
64ビットアーキテクチャの確認
64ビットのソフトウェアを動かすには64ビット対応の CPU を使用する必要があります。最近のほとんどの CPU は64ビットソフトウェアの実行に対応しています。次のコマンドを使って CPU を確認できます:
$ grep --color -w lm /proc/cpuinfo
x86_64 をサポートしている CPU の場合、lm
フラグ (“long mode”) が返ってきます。lahf_lm は別のフラグであり64ビット対応とは関係ないので注意してください。
ディスク容量
移行を行うと /var/cache/pacman/pkg
のサイズが約2倍になるので、十分な容量を確保してください。ただし、pacman -Sc
を最近実行していて、インストールしているパッケージしかキャッシュに存在しない場合です。それぞれのパッケージの i686 バージョンと x86_64 バージョンが重複するのでディスク容量が増えます。
ディスクに十分な容量がない場合は、gparted を使って適切なパーティションをリサイズするか、他のパーティションに /var/cache/pacman
をマウントしてください。
システムが新しいアーキテクチャで完全に動作するようになるまでは、古いアーキテクチャのパッケージをキャッシュから削除するのは止めてください。急いでパッケージを削除してしまうと、変更を元に戻せなくなってしまいます。
電源
移行には大変時間がかかります。バッテリー不足で移行中に電源が切れてしまう可能性もあります。インストールしているパッケージの量やインターネット接続の速度にもよりますが、最低でも1時間は見積もっておいてください (実際に移行を始める前にパッケージをあらかじめダウンロードしておくことは可能です)。安定した電源に接続してください。できればフェイルオーバーやバッテリーのバックアップがあると良いでしょう。
フォールバックパッケージ
移行が途中で失敗したときに、役に立つパッケージがあります。ただし、メインのパッケージの移行を行う前にインストールする必要があります。詳しくは下の #トラブルシューティング を見てください。
一つは busybox であり、変更を戻すのに使うことができます。静的リンクされるのでライブラリには全く依存しません。32ビット (i686) バージョンをインストールしてください。
もう一つは Multilib x86_64 リポジトリの lib32-glibc です。32ビットから移行するときだけ役に立ちます。64ビットから移行する場合はこのパッケージは必要ありません。このパッケージを使って /lib/ld-linux.so.2
を呼び出すことで32ビットのプログラムを実行することが可能です。
方法 1: Arch LiveCD を使う
- 最新の Arch Linux ISO を ダウンロード してメディアに書き込んでください。
- x86_64 モードで Arch LiveCD を起動してください。
- LiveCD の中でネットワークを設定してください。
- 既存環境をマウントしてください。例:
mount /dev/sda1 /mnt
。 - LiveCD の
/etc/pacman.conf
のリポジトリを編集して既存の/mnt/etc/pacman.conf
のリポジトリと同じに設定してください。 - 以下のコマンドを使ってローカルの pacman データベースを更新してキャッシュディレクトリを消去してください:
# pacman --root /mnt -Syy # pacman --root /mnt -Scc
- 7. 最初に base グループだけを再インストールして、それからインストールエラーが発生したパッケージをインストールしてください。エラーの発生したパッケージは
pacman --root /mnt -Qo <error file>
で確認できます。エラーが出なくなるまで base グループのインストールを繰り返し実行してください:
# pacman --root /mnt -S base
- 8. 以下のコマンドを使ってインストールされているパッケージのリストを取得して、再インストールしてください:
# pacman --root /mnt -Qnq | pacman --root /mnt -S -
- 9. 多くのパッケージは post-install スクリプトの実行に最初は失敗するため、上記のコマンドは2回実行することになります。sed, grep, perl などのパッケージが該当します。もしくは、エラーが出力されるパッケージを個別にメモして、アップグレードを完了した後に再インストールしてもかまいません。また、ディスク容量が足りないとエラーが表示される場合、パッケージリストをアルファベット順で順に分けることができます。例えば
...| grep '^[a-k]' |...
で a から k のパッケージを再インストールした後に'^l'
や'^[m-z]'
で残りのパッケージを再インストールします。再インストールが問題なく完了したらpacman --root /mnt -Scc
を実行してディスク容量を開けてください。
- 10. 最後に、以下のコマンドを実行してください:
# arch-chroot /mnt # mkinitcpio -p linux
- 11. また、ブートローダーの移行が必要かどうか確認してください。例:
# grub-install --recheck /dev/sda
- 12. 新しい64ビット環境で再起動したら、
/etc/makepkg.conf.pacnew
を/etc/makepkg.conf
に移動して cpu アーキテクチャを移行します。それから AUR からインストールした "foreign" パッケージを再ビルドしてください。
- 再ビルドする前に、孤児となっている外部パッケージを削除したい場合、以下のコマンドを実行することで32ビットのバイナリが確認できます:
$ pacman -Qo `find /usr/bin -type f -exec bash -c 'file "{}" | grep 32-bit' \; | cut -d':' -f1` | cut -d' ' -f5 | sort | uniq | tee list
方法 2: 既存のシステムから
先に進む前にシステムが完全にアップデートされていることを確認してください:
# pacman -Syu
パッケージの準備
古いパッケージをキャッシュ
インストールしているパッケージをキャッシュに保存していない場合は、フォールバック用にダウンロードしてください (前のアーキテクチャ)。
# pacman -Qqn | pacman -Sw -
もしくは pacman パッケージの bacman を使ってキャッシュを生成してください。
busybox のインストール
32ビットから64ビットに移行する場合は、ここで32ビットの busybox をインストールします。
# pacman -S busybox
Pacman のアーキテクチャを変更
/etc/pacman.conf
ファイルを編集して Architecture を auto
から x86_64
に変更してください。
/etc/pacman.conf
と /etc/pacman.d/mirrorlist
のサーバーリストで i686
や x86_64
といった文字列ではなく $arch
が使われていることを確認してください。確認できたら pacman で新しいリポジトリに同期してください:
# pacman -Syy # force sync new architecture repositories
新しいパッケージのダウンロード
現在インストールしているパッケージの新しいアーキテクチャのバージョンを全てダウンロード:
# pacman -Sw $(pacman -Qqn|sed '/^lib32-/ d') # download new package versions
32ビットに移行する場合は、Pacman が32ビットアーキテクチャに設定されている今ここでフォールバック用の32ビットの busybox をインストールしてください。
パッケージのインストール
カーネルのインストール (64ビット)
カーネルを64ビット (x86_64) にアップグレードすることは簡単です。64ビットカーネルでは32ビット・64ビット両方のアプリケーションが実行可能だからです。
linux パッケージをインストールしてください:
# pacman -S linux
lib32-glibc のインストール
lib32-glibc フォールバックをインストールしてください。インストールするには /etc/pacman.conf
で multilib リポジトリを有効にする必要があります。
# pacman -S lib32-glibc
再起動
x86_64 アーキテクチャで動作していることを確認してください:
$ uname -m
x86_64
コンソール端末に切り替え
可能であれば、テキストモードの仮想端末に切り替えてください (例: Ctrl+Alt+F1)。1番目のコンソールを使おうとするとエラーが表示される場合、2番目のコンソールを使ってください (Ctrl-Alt+F2)。SSH などの疑似端末でも問題ありませんが、直接アクセスできる方法を使うことを推奨します。アップデートによって削除・置換されるパッケージの中には X11 デスクトップを不安定にするものがあり、システムが起動できなくなってしまう可能性があります。
Pacman のインストール
pactree を使って Pacman と依存パッケージをインストールしてください:
# pactree -l pacman | pacman -S -
エラーが出力されるかもしれませんが、pacman が動作するのであれば問題ではありません。
残りのパッケージのインストール
新しいアーキテクチャ用にダウンロードしておいたパッケージを全てインストールしてください (お酒を取りに行ってサンドイッチを作りましょう、このコマンドは時間がかかります):
# pacman -Qqn | pacman -S -
一部のパッケージが正しくインストールできなかった場合、この時点で問題なく再インストールできるはずです。どれが問題のあったパッケージが見分けるのが面倒な場合、上記のコマンドを再度実行すれば全てを再インストールできます。
再インストールが完了したら移行は完了です。コンピュータを再起動しても問題ありません。
ただし、AUR のパッケージをインストールしている場合、全てのパッケージを再インストールする必要があります。AUR パッケージのリストは以下のコマンドで確認できます:
$ pacman -Qqm
仕上げ
移行できたら busybox と lib32-glibc は削除してかまいません。
Makepkg コンパイラフラグ
アップグレードで /etc/makepkg.conf
の新しいバージョンが /etc/makepkg.conf.pacnew
に保存されます。後で makepkg を使ってコンパイルしたときに問題が起こらないように古いバージョンを置き換えてください:
# mv /etc/makepkg.conf /etc/makepkg.conf.backup && mv /etc/makepkg.conf.pacnew /etc/makepkg.conf
また、/etc
の新しいファイルのリストを確認すると良いでしょう。以下のコマンドでリストを表示できます:
# find /etc/ -type f -name \*.pac\*
トラブルシューティング
アップグレードの際、glibc が新しいアーキテクチャのバージョンで置き換えられると、古いアーキテクチャのバージョンのプログラムが動作しなくなります。問題が発生した場合、busybox と lib32-glibc で解決できるかもしれません。
Busybox
Arch では BusyBox は静的リンクされています。実行するのに何のライブラリも必要ありません。様々なコマンドを使うことができます。例えばキャッシュされたパッケージから Pacman の i686 版を抽出するには:
# busybox tar xf /var/cache/pacman/pkg/pacman-3.3.2-1-i686.pkg.tar.gz -C <some folder>
Lib32-glibc
32ビットの /bin/ls
を実行する例:
# /lib/ld-linux.so.2 /bin/ls
2017年以前の旧システムからの移行
2017 年に Arch Linux が i686 のサポートを終了したため、古い 32 ビット システムの更新で問題が発生する可能性があります。その更新を安全に行うには、Arch Linux Archive を使用することをお勧めします。つまり、リポジトリのスナップショットを修正し、現在のシステムを更新してから、同じバージョン に対応する 64 ビットフレーバーのパッケージに切り替えます。
パッケージの署名に使用されたすべての GPG キーがまだ有効であるとは限らないため、pacman.conf
で必要な信頼レベルを下げる必要がある場合があることに注意してください (PackageTrustAll
のように、marginal trust を含めるようにします) ただし、HTTPS を使用して、少なくともパッケージが archlinux.org
ドメインからのものであることを確認することをお勧めします。
32ビットから64ビットに移行後 KDE が起動しない
32ビットから64ビットに移行した後、KDE がクラッシュするようになることがあります。原因は32ビットの KDE パッケージによって作成されたキャッシュファイルが /var/tmp
に残っているためです。以下のコマンドで kdecache フォルダを消去することで解決します:
# rm -rf /var/tmp/kdecache-*
キャッシュが存在する場合の Mutt の問題
移行後、メールフォルダを開こうとすると mutt がフリーズする場合、キャッシュディレクトリの名前を変更してください。mutt は新しいキャッシュディレクトリを作成するため元のディレクトリは消去してかまいません。