「再インストールせずにアーキテクチャを移行」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:Arch の入手とインストール en:Migrate installation to new hardware fr:Migration 64 bits zh-CN:Migrating Between Architectures Without Rein...」)
 
(Pkg/AUR テンプレートの更新)
(2人の利用者による、間の3版が非表示)
1行目: 1行目:
 
[[Category:Arch の入手とインストール]]
 
[[Category:Arch の入手とインストール]]
  +
[[Category:システム管理]]
[[en:Migrate installation to new hardware]]
 
  +
[[en:Migrating between architectures]]
 
[[fr:Migration 64 bits]]
 
[[fr:Migration 64 bits]]
[[zh-CN:Migrating Between Architectures Without Reinstalling]]
+
[[ru:Migrating between architectures]]
  +
[[zh-hans:Migrating between architectures]]
このページではインストール済みの環境を i686 (32ビット) と x86_64 (64ビット) アーキテクチャで行き来する2つの方法を解説しています。どちらの方法でもシステム全体の再インストールは行いません。片方はライブ CD を使い、もう片方はシステムの中から移行を実行します。
 
  +
このページではインストール済みの環境を i686 (32ビット) から x86_64 (64ビット) アーキテクチャに移行する2つの方法を解説しています。どちらの方法でもシステム全体の再インストール (ハードドライブの消去など) は行いません。片方はライブ CD を使い、もう片方はシステムの中から移行を実行します。
   
  +
{{Note|技術的には以下のセクションで説明していることは、システムの全てのパッケージを「再インストール」することであると言い換えることができます。以下の方法では既存環境をできるだけ壊さずに維持します。}}
{{Warning|Unless explicitly stated, all these methods are '''untested''' and may irreparably damage your system. Continue at your own risk.}}
 
  +
{{Warning|特に断りがない限り、以下の方法を使うことによってシステムに不可逆的なダメージを与える可能性があります。移行は自己責任で行ってください。}}
   
 
== 準備 ==
 
== 準備 ==
   
 
=== 64ビットアーキテクチャの確認 ===
 
=== 64ビットアーキテクチャの確認 ===
 
x86_64 を使っていて i686 をインストールしたいという場合は問題ないのでこのステップはスキップしてかまいません。
 
   
 
64ビットのソフトウェアを動かすには64ビット対応の CPU を使用する必要があります。最近のほとんどの CPU は64ビットソフトウェアの実行に対応しています。次のコマンドを使って CPU を確認できます:
 
64ビットのソフトウェアを動かすには64ビット対応の CPU を使用する必要があります。最近のほとんどの CPU は64ビットソフトウェアの実行に対応しています。次のコマンドを使って CPU を確認できます:
   
grep --color '\<lm\>' /proc/cpuinfo
+
$ grep --color -w lm /proc/cpuinfo
   
 
x86_64 をサポートしている CPU の場合、{{ic|lm}} フラグ (“long mode”) が返ってきます。''lahf_lm'' は別のフラグであり64ビット対応とは関係ないので注意してください。
 
x86_64 をサポートしている CPU の場合、{{ic|lm}} フラグ (“long mode”) が返ってきます。''lahf_lm'' は別のフラグであり64ビット対応とは関係ないので注意してください。
23行目: 24行目:
 
移行を行うと {{ic|/var/cache/pacman/pkg}} のサイズが約2倍になるので、十分な容量を確保してください。ただし、{{ic|pacman -Sc}} を最近実行していて、インストールしているパッケージしかキャッシュに存在しない場合です。それぞれのパッケージの i686 バージョンと x86_64 バージョンが重複するのでディスク容量が増えます。
 
移行を行うと {{ic|/var/cache/pacman/pkg}} のサイズが約2倍になるので、十分な容量を確保してください。ただし、{{ic|pacman -Sc}} を最近実行していて、インストールしているパッケージしかキャッシュに存在しない場合です。それぞれのパッケージの i686 バージョンと x86_64 バージョンが重複するのでディスク容量が増えます。
   
ディスクに十分な容量がない場合は、''[[gparted]]'' を使って適切なパーティションをリサイズするか、他のパーティションに {{ic|/var/cache/pacman}} をマウントしてください。
+
ディスクに十分な容量がない場合は、[[gparted]] を使って適切なパーティションをリサイズするか、他のパーティションに {{ic|/var/cache/pacman}} をマウントしてください。
   
 
システムが新しいアーキテクチャで完全に動作するようになるまでは、古いアーキテクチャのパッケージをキャッシュから削除するのは止めてください。急いでパッケージを削除してしまうと、変更を元に戻せなくなってしまいます。
 
システムが新しいアーキテクチャで完全に動作するようになるまでは、古いアーキテクチャのパッケージをキャッシュから削除するのは止めてください。急いでパッケージを削除してしまうと、変更を元に戻せなくなってしまいます。
41行目: 42行目:
 
== 方法 1: Arch LiveCD を使う ==
 
== 方法 1: Arch LiveCD を使う ==
   
# 64ビットの Arch ISO LiveCD をダウンロードして書き込み、起動してください
+
# 最新の Arch Linux ISO [https://www.archlinux.jp/download/ ダウンロード] してメディアに書き込んでください
  +
# x86_64 モードで Arch LiveCD を起動してください。
# Configure your network on the LiveCD, then pacman to use your new architecture repos
 
  +
# LiveCD の中でネットワークを設定してください。
# Mount your existing installation to {{ic|/mnt}} directory. For example: {{ic|mount /dev/sda1 /mnt}}
 
  +
# 既存環境をマウントしてください。例: {{ic|mount /dev/sda1 /mnt}}。
# Use the following script to update the local pacman database, get a list of all your installed packages and then reinstall them.
 
  +
# LiveCD の {{ic|/etc/pacman.conf}} のリポジトリを編集して既存の {{ic|/mnt/etc/pacman.conf}} のリポジトリと同じに設定してください。
# You should probably run the script twice, because many packages fail to run their post-install scripts first time. This is due to sed, grep, perl, etc. being of the wrong architecture.
 
  +
# 以下のコマンドを使ってローカルの pacman データベースを更新してキャッシュディレクトリを消去してください:
# You might also need to update the initrd, chroot into /mnt and run mkinitcpio -p linux.
 
  +
# pacman --root /mnt -Syy
  +
# pacman --root /mnt -Scc
   
  +
:7. 最初に {{Pkg|base}} グループだけを再インストールして、それからインストールエラーが発生したパッケージをインストールしてください。エラーの発生したパッケージは {{ic|pacman --root /mnt -Qo <error file>}} で確認できます。エラーが出なくなるまで {{Pkg|base}} グループのインストールを繰り返し実行してください:
#!/bin/bash
 
  +
# pacman --root /mnt -S base
 
MOUNTED_INSTALL='/mnt'
 
TEMP_FILE='/tmp/packages.list'
 
 
pacman --root $MOUNTED_INSTALL -Sy
 
pacman --root $MOUNTED_INSTALL --cachedir $MOUNTED_INSTALL/var/cache/pacman/pkg --noconfirm -Sg base base-devel
 
pacman --root $MOUNTED_INSTALL -Qq > $TEMP_FILE
 
for PKG in $(cat $TEMP_FILE) ; do
 
pacman --root $MOUNTED_INSTALL --cachedir $MOUNTED_INSTALL/var/cache/pacman/pkg --noconfirm -S $PKG
 
done
 
 
exit 0
 
   
  +
:8. 以下のコマンドを使ってインストールされているパッケージのリストを取得して、再インストールしてください:
After rebooting to your new 64-bit system, run this command to find out what 32-bit binaries you still have and reinstall them:
 
  +
# pacman --root /mnt -Qnq | pacman --root /mnt -S -
   
  +
:9. 多くのパッケージは post-install スクリプトの実行に最初は失敗するため、上記のコマンドは2回実行することになります。sed, grep, perl などのパッケージが該当します。もしくは、エラーが出力されるパッケージを個別にメモして、アップグレードを完了した後に再インストールしてもかまいません。また、ディスク容量が足りないとエラーが表示される場合、パッケージリストをアルファベット順で順に分けることができます。例えば {{ic|<nowiki>...| grep '^[a-k]' |...</nowiki>}} で a から k のパッケージを再インストールした後に {{ic|'^l'}} や {{ic|'^[m-z]'}} で残りのパッケージを再インストールします。再インストールが問題なく完了したら {{ic|pacman --root /mnt -Scc}} を実行してディスク容量を開けてください。
find /usr/bin -type f -exec bash -c 'file {} | grep 32-bit' \;
 
  +
  +
:10. 最後に、以下のコマンドを実行してください:
  +
  +
# arch-chroot /mnt
  +
# mkinitcpio -p linux
  +
  +
:11. また、ブートローダーの移行が必要かどうか確認してください。例:
  +
# grub-install --recheck /dev/sda
  +
  +
:12. 新しい64ビット環境で再起動したら、{{ic|/etc/makepkg.conf.pacnew}} を {{ic|/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: 既存のシステムから ==
 
== 方法 2: 既存のシステムから ==
75行目: 81行目:
 
==== 古いパッケージをキャッシュ ====
 
==== 古いパッケージをキャッシュ ====
   
  +
{{Note|[[AUR]] やサードパーティのリポジトリからパッケージをインストールしていて移行先のアーキテクチャに対応するパッケージがない場合、pacman は適切な代替パッケージが見つからないと表示します。そういったパッケージのリストを作成しておいてアップデートが終わってから再インストールしたり {{ic|pacman -Rsn package_name}} で削除することができます。}}
{{Note|If you have any packages installed from the [[AUR]] or third-party repositories without new architecture availability, pacman will let you know it cannot find a suitable replacement. Make a list of these packages so you may re-install them after the update process and then remove them using {{ic|pacman -Rsn package_name}}.}}
 
   
 
インストールしているパッケージをキャッシュに保存していない場合は、フォールバック用にダウンロードしてください (前のアーキテクチャ)。
 
インストールしているパッケージをキャッシュに保存していない場合は、フォールバック用にダウンロードしてください (前のアーキテクチャ)。
91行目: 97行目:
 
==== Pacman のアーキテクチャを変更 ====
 
==== Pacman のアーキテクチャを変更 ====
   
{{ic|/etc/pacman.conf}} ファイルを編集して ''Architecture'' を {{ic|auto}} から移行先のアーキテクチャに変更してください。以下の ''sed'' コマンドを使うことができます:
+
{{ic|/etc/pacman.conf}} ファイルを編集して ''Architecture'' を {{ic|auto}} から {{ic|x86_64}} に変更してください。
   
  +
{{ic|/etc/pacman.conf}} と {{ic|/etc/pacman.d/mirrorlist}} のサーバーリストで {{ic|i686}} や {{ic|x86_64}} といった文字列ではなく {{ic|$arch}} が使われていることを確認してください。確認できたら pacman で新しいリポジトリに同期してください:
x86_64 の場合:
 
 
# sed -i '/^Architecture =/s/auto/x86_64/' /etc/pacman.conf
 
 
i686 の場合:
 
 
# sed -i '/^Architecture =/s/auto/i686/' /etc/pacman.conf
 
 
Make sure the server lists in ''/etc/pacman.conf'' and ''/etc/pacman.d/mirrorlist'' use ''$arch'' instead of explicitly specifying ''i686'' or ''x86_64''. Now force Pacman to synchronize with the new repositories:
 
   
 
# pacman -Syy # force sync new architecture repositories
 
# pacman -Syy # force sync new architecture repositories
113行目: 111行目:
 
32ビットに移行する場合は、Pacman が32ビットアーキテクチャに設定されている今ここでフォールバック用の32ビットの {{Pkg|busybox}} をインストールしてください。
 
32ビットに移行する場合は、Pacman が32ビットアーキテクチャに設定されている今ここでフォールバック用の32ビットの {{Pkg|busybox}} をインストールしてください。
   
{{Warning|Don't install the ''lib32-glibc'' package now. After a ''ldconfig'', when you install ''linux'', the generated image will have libraries like ''librt.so'' in '{{ic|/usr/lib32}}, where binaries during boot won't search, resulting in a boot failure.}}
+
{{Warning|まだ ''lib32-glibc'' パッケージはインストールしないでください。''ldconfig'' の後、''linux'' のインストール時に生成されたイメージは ''librt.so'' などのライブラリを {{ic|/usr/lib32}} に保存するため、起動時にバイナリが検索できなくなり起動できなくなります。}}
   
 
=== パッケージのインストール ===
 
=== パッケージのインストール ===
119行目: 117行目:
 
==== カーネルのインストール (64ビット) ====
 
==== カーネルのインストール (64ビット) ====
   
  +
カーネルを64ビット (x86_64) にアップグレードすることは簡単です。64ビットカーネルでは32ビット・64ビット両方のアプリケーションが実行可能だからです。
Upgrading the kernel to 64 bits (x86_64) is safe and straightforward: 32 bit and 64 bit applications run equally well under a 64-bit kernel.
 
For migration ''away'' from 64 bits, leave the 64-bit kernel installed and running for now and skip this step.
 
   
  +
{{Pkg|linux}} パッケージをインストールしてください:
Install the {{Pkg|linux}} package.
 
   
 
# pacman -S linux
 
# pacman -S linux
128行目: 125行目:
 
==== lib32-glibc のインストール ====
 
==== lib32-glibc のインストール ====
   
Install the {{Pkg|lib32-glibc}} fallback. You will need to add the [[multilib]] repository in {{ic|/etc/pacman.conf}} if you have not done so already.
+
{{Pkg|lib32-glibc}} フォールバックをインストールしてください。インストールするには {{ic|/etc/pacman.conf}} [[multilib]] リポジトリを有効にする必要があります。
   
 
# pacman -S lib32-glibc
 
# pacman -S lib32-glibc
   
  +
{{Note|別の名前のパッケージに存在するファイルによってインストールに失敗する場合、pacman の {{ic|--force}} オプションを使ってください。}}
{{Note|If this fails due to an existing file from a differently named package, use pacman's {{ic|--force}} option.}}
 
   
 
==== 再起動 ====
 
==== 再起動 ====
   
  +
x86_64 アーキテクチャで動作していることを確認してください:
Verify that you are running the x86_64 architecture:
 
   
 
{{hc|$ uname -m|
 
{{hc|$ uname -m|
144行目: 141行目:
 
==== コンソール端末に切り替え ====
 
==== コンソール端末に切り替え ====
   
  +
可能であれば、テキストモードの仮想端末に切り替えてください (例: Ctrl+Alt+F1)。1番目のコンソールを使おうとするとエラーが表示される場合、2番目のコンソールを使ってください (Ctrl-Alt+F2)。SSH などの疑似端末でも問題ありませんが、直接アクセスできる方法を使うことを推奨します。アップデートによって削除・置換されるパッケージの中には X11 デスクトップを不安定にするものがあり、システムが起動できなくなってしまう可能性があります。
Switch to a text-mode virtual console (e.g. Ctrl+Alt+F1) for the rest of the process, if possible. If you receive an error trying to use the 1st console, use the 2nd one (Ctrl-Alt+F2) instead. Pseudo-terminals like SSH should work, but direct access is recommended as a precaution. There will be several packages removed and replaced during the update process that may cause X11 desktops to become unstable and leave your system in an unbootable state.
 
   
 
==== Pacman のインストール ====
 
==== Pacman のインストール ====
   
  +
{{Warning|
{{Warning|Once you start updating pacman and its dependencies it must not be interrupted! Pacman and all of its dependencies must be installed at the same time in a single command line.}}
 
  +
* pacman と依存パッケージのアップデートを開始したら途中で止めてはいけません。Pacman と依存パッケージは一度にインストールする必要があります。
{{Warning|Immediately following this command only Busybox, Bash and Pacman will be executable until the other packages are migrated below. If you're using sudo, you should obtain root previlige prior to next command}}
 
  +
* 以下のコマンドを実行すると、他のパッケージを移行するまで Busybox, Bash, Pacman だけしか実行できなくなります。sudo を使用する場合、以下のコマンドを実行する前に root 権限を得ておいてください。}}
   
 
pactree を使って Pacman と依存パッケージをインストールしてください:
 
pactree を使って Pacman と依存パッケージをインストールしてください:
155行目: 153行目:
 
# pactree -l pacman | pacman -S -
 
# pactree -l pacman | pacman -S -
   
  +
エラーが出力されるかもしれませんが、pacman が動作するのであれば問題ではありません。
Errors may be printed but they will not cause a problem as long as Pacman works.
 
   
  +
{{Warning|以下のコマンドを実行するまでは、システムを再起動してはいけません。間違って再起動してしまった場合、他の Linux 環境 (インストールメディアなど) から [[chroot]] してインストールを続行する必要があります。}}
{{Warning|You must not reboot your system until the following commands have been completed. If you failed to do so, you should continue installing by [[chroot|chrooting]] from another linux environment(e.g. from live install medium)}}
 
   
 
==== 残りのパッケージのインストール ====
 
==== 残りのパッケージのインストール ====
165行目: 163行目:
 
# pacman -Qqn | pacman -S -
 
# pacman -Qqn | pacman -S -
   
  +
一部のパッケージが正しくインストールできなかった場合、この時点で問題なく再インストールできるはずです。どれが問題のあったパッケージが見分けるのが面倒な場合、上記のコマンドを再度実行すれば全てを再インストールできます。
If some packages didn't install correctly, you should now be able to reinstall them successfully; if you're lazy, you can just re-run the last command to reinstall everything.
 
 
For migration away from 64 bits, you may want to skip installing a 32-bit kernel in the commands above, since the old 64-bit kernel will still run 32-bit programs.
 
   
  +
再インストールが完了したら移行は完了です。コンピュータを再起動しても問題ありません。
After this step the migration in either direction should be complete and it should be safe to reboot the computer.
 
   
  +
ただし、AUR のパッケージをインストールしている場合、全てのパッケージを再インストールする必要があります。AUR パッケージのリストは以下のコマンドで確認できます:
However, if you have any AUR packages on your system, you must reinstall all of them. A list of those can be obtained by executing:
 
   
 
$ pacman -Qqm
 
$ pacman -Qqm
177行目: 173行目:
 
== 仕上げ ==
 
== 仕上げ ==
   
You are now free to remove '''busybox''' and ''lib32-glibc''.
+
移行できたら '''busybox''' ''lib32-glibc'' は削除してかまいません。
   
 
==== Makepkg コンパイラフラグ ====
 
==== Makepkg コンパイラフラグ ====
   
  +
アップグレードで {{ic|/etc/makepkg.conf}} の新しいバージョンが {{ic|/etc/makepkg.conf.pacnew}} に保存されます。後で [[makepkg]] を使ってコンパイルしたときに問題が起こらないように古いバージョンを置き換えてください:
During the upgrade the new version of {{ic|/etc/makepkg.conf}} may be stored as {{ic|/etc/makepkg.conf.pacnew}}. If so, you will have to replace the old version or modify it in order to compile anything with [[makepkg]] in the future.
 
   
 
# mv /etc/makepkg.conf /etc/makepkg.conf.backup && mv /etc/makepkg.conf.pacnew /etc/makepkg.conf
 
# mv /etc/makepkg.conf /etc/makepkg.conf.backup && mv /etc/makepkg.conf.pacnew /etc/makepkg.conf
   
  +
また、{{ic|/etc}} の新しいファイルのリストを確認すると良いでしょう。以下のコマンドでリストを表示できます:
It might also be a good idea to just get a list of "new" additions to {{ic|/etc}}. You can get a list with the following command:
 
   
 
# find /etc/ -type f -name \*.pac\*
 
# find /etc/ -type f -name \*.pac\*
191行目: 187行目:
 
== トラブルシューティング ==
 
== トラブルシューティング ==
   
  +
アップグレードの際、glibc が新しいアーキテクチャのバージョンで置き換えられると、古いアーキテクチャのバージョンのプログラムが動作しなくなります。問題が発生した場合、{{Pkg|busybox}} と {{Pkg|lib32-glibc}} で解決できるかもしれません。
During the upgrade, when glibc is replaced by the new architecture version, old architecture versions of many programs will not run. If problems occur, you can solve them with {{Pkg|busybox}} and {{Pkg|lib32-glibc}}.
 
   
 
=== Busybox ===
 
=== Busybox ===
   
  +
Arch では [[BusyBox]] は静的リンクされています。実行するのに何のライブラリも必要ありません。様々なコマンドを使うことができます。例えばキャッシュされたパッケージから Pacman の i686 版を抽出するには:
In Arch, Busybox is statically linked; it can run without any libraries. There are many commands available to you. For example, to extract an i686 version of Pacman from a cached package:
 
   
 
# busybox tar xf /var/cache/pacman/pkg/pacman-3.3.2-1-i686.pkg.tar.gz -C <some folder>
 
# busybox tar xf /var/cache/pacman/pkg/pacman-3.3.2-1-i686.pkg.tar.gz -C <some folder>
201行目: 197行目:
 
=== Lib32-glibc ===
 
=== Lib32-glibc ===
   
Example run 32 bit {{ic|/bin/ls}}:
+
32ビットの {{ic|/bin/ls}} を実行する例:
   
 
# /lib/ld-linux.so.2 /bin/ls
 
# /lib/ld-linux.so.2 /bin/ls
207行目: 203行目:
 
=== 32ビットから64ビットに移行後 KDE が起動しない ===
 
=== 32ビットから64ビットに移行後 KDE が起動しない ===
   
  +
32ビットから64ビットに移行した後、KDE がクラッシュするようになることがあります。原因は32ビットの KDE パッケージによって作成されたキャッシュファイルが {{ic|/var/tmp}} に残っているためです。以下のコマンドで kdecache フォルダを消去することで解決します:
KDE will crash when starting after switching from 32bit to 64bit. The cause are some leftover cached files from the 32 bit KDE packages in /var/tmp To fix this remove all kdecache folders in with
 
   
 
# rm -rf /var/tmp/kdecache-*
 
# rm -rf /var/tmp/kdecache-*
   
  +
=== キャッシュが存在する場合の Mutt の問題 ===
=== Mutt issues with cache enabled ===
 
   
  +
移行後、メールフォルダを開こうとすると mutt がフリーズする場合、キャッシュディレクトリの名前を変更してください。[[mutt]] は新しいキャッシュディレクトリを作成するため元のディレクトリは消去してかまいません。
If, after completion, you find that mutt hangs on opening mail folders, try renaming the cache directory. If this works, the renamed one can be deleted as mutt will have recreated a new one.
 
   
 
== 参照 ==
 
== 参照 ==

2019年11月21日 (木) 18:50時点における版

このページではインストール済みの環境を 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 を使う

  1. 最新の Arch Linux ISO を ダウンロード してメディアに書き込んでください。
  2. x86_64 モードで Arch LiveCD を起動してください。
  3. LiveCD の中でネットワークを設定してください。
  4. 既存環境をマウントしてください。例: mount /dev/sda1 /mnt
  5. LiveCD の /etc/pacman.conf のリポジトリを編集して既存の /mnt/etc/pacman.conf のリポジトリと同じに設定してください。
  6. 以下のコマンドを使ってローカルの 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

パッケージの準備

古いパッケージをキャッシュ

ノート: AUR やサードパーティのリポジトリからパッケージをインストールしていて移行先のアーキテクチャに対応するパッケージがない場合、pacman は適切な代替パッケージが見つからないと表示します。そういったパッケージのリストを作成しておいてアップデートが終わってから再インストールしたり pacman -Rsn package_name で削除することができます。

インストールしているパッケージをキャッシュに保存していない場合は、フォールバック用にダウンロードしてください (前のアーキテクチャ)。

# pacman -Qqn | pacman -Sw -

もしくは pacman パッケージの bacman を使ってキャッシュを生成してください。

busybox のインストール

32ビットから64ビットに移行する場合は、ここで32ビットの busybox をインストールします。

# pacman -S busybox

Pacman のアーキテクチャを変更

/etc/pacman.conf ファイルを編集して Architectureauto から x86_64 に変更してください。

/etc/pacman.conf/etc/pacman.d/mirrorlist のサーバーリストで i686x86_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 をインストールしてください。

警告: まだ lib32-glibc パッケージはインストールしないでください。ldconfig の後、linux のインストール時に生成されたイメージは librt.so などのライブラリを /usr/lib32 に保存するため、起動時にバイナリが検索できなくなり起動できなくなります。

パッケージのインストール

カーネルのインストール (64ビット)

カーネルを64ビット (x86_64) にアップグレードすることは簡単です。64ビットカーネルでは32ビット・64ビット両方のアプリケーションが実行可能だからです。

linux パッケージをインストールしてください:

# pacman -S linux

lib32-glibc のインストール

lib32-glibc フォールバックをインストールしてください。インストールするには /etc/pacman.confmultilib リポジトリを有効にする必要があります。

# pacman -S lib32-glibc
ノート: 別の名前のパッケージに存在するファイルによってインストールに失敗する場合、pacman の --force オプションを使ってください。

再起動

x86_64 アーキテクチャで動作していることを確認してください:

$ uname -m
x86_64

コンソール端末に切り替え

可能であれば、テキストモードの仮想端末に切り替えてください (例: Ctrl+Alt+F1)。1番目のコンソールを使おうとするとエラーが表示される場合、2番目のコンソールを使ってください (Ctrl-Alt+F2)。SSH などの疑似端末でも問題ありませんが、直接アクセスできる方法を使うことを推奨します。アップデートによって削除・置換されるパッケージの中には X11 デスクトップを不安定にするものがあり、システムが起動できなくなってしまう可能性があります。

Pacman のインストール

警告:
  • pacman と依存パッケージのアップデートを開始したら途中で止めてはいけません。Pacman と依存パッケージは一度にインストールする必要があります。
  • 以下のコマンドを実行すると、他のパッケージを移行するまで Busybox, Bash, Pacman だけしか実行できなくなります。sudo を使用する場合、以下のコマンドを実行する前に root 権限を得ておいてください。

pactree を使って Pacman と依存パッケージをインストールしてください:

# pactree -l pacman | pacman -S -

エラーが出力されるかもしれませんが、pacman が動作するのであれば問題ではありません。

警告: 以下のコマンドを実行するまでは、システムを再起動してはいけません。間違って再起動してしまった場合、他の Linux 環境 (インストールメディアなど) から chroot してインストールを続行する必要があります。

残りのパッケージのインストール

新しいアーキテクチャ用にダウンロードしておいたパッケージを全てインストールしてください (お酒を取りに行ってサンドイッチを作りましょう、このコマンドは時間がかかります):

# pacman -Qqn | pacman -S -

一部のパッケージが正しくインストールできなかった場合、この時点で問題なく再インストールできるはずです。どれが問題のあったパッケージが見分けるのが面倒な場合、上記のコマンドを再度実行すれば全てを再インストールできます。

再インストールが完了したら移行は完了です。コンピュータを再起動しても問題ありません。

ただし、AUR のパッケージをインストールしている場合、全てのパッケージを再インストールする必要があります。AUR パッケージのリストは以下のコマンドで確認できます:

$ pacman -Qqm

仕上げ

移行できたら busyboxlib32-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 が新しいアーキテクチャのバージョンで置き換えられると、古いアーキテクチャのバージョンのプログラムが動作しなくなります。問題が発生した場合、busyboxlib32-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

32ビットから64ビットに移行後 KDE が起動しない

32ビットから64ビットに移行した後、KDE がクラッシュするようになることがあります。原因は32ビットの KDE パッケージによって作成されたキャッシュファイルが /var/tmp に残っているためです。以下のコマンドで kdecache フォルダを消去することで解決します:

# rm -rf /var/tmp/kdecache-*

キャッシュが存在する場合の Mutt の問題

移行後、メールフォルダを開こうとすると mutt がフリーズする場合、キャッシュディレクトリの名前を変更してください。mutt は新しいキャッシュディレクトリを作成するため元のディレクトリは消去してかまいません。

参照