LoginSignup
2
2

More than 1 year has passed since last update.

古いWindows機をArch Linux機にしてみた

Last updated at Posted at 2023-03-20

はじめに

家に手頃なPCが眠っていたので、Windowsを消して前から気になっていたArch Linuxをインストールしてみることにしました。デュアルブートではないです。PC自体が6年前の代物で、CPU自体も第7世代のCORE i5とかなので、性能的に不安だったからです。あと家にWindows機が別途あったので特にWindows機が必要じゃなかったというのもあります。

Arch Linux自体については、Arch Linuxのすゝめとか参考になります。

この記事の内容は、以下に基づいています(2023年3月20日アクセス)。この公式ガイドと突き合わせながらこの記事を使っていただくと一番いいかもしれません。

インストールメディアを作成する

以下を参考にUSBを使ってインストールメディア(ブータブルUSB)を作成しました。単にISOイメージをUSBに置くだけではダメですよ。

あと、インストールメディアを作成するとUSB内にあるファイルは全て消えるので注意してください。インストールメディアにしたUSBはUSBとして普通に使えなくなりますが、初期化すれば元に戻ります。僕のはバッファローのやつなので、バッファローの場合の初期化方法が説明された記事を置いときます。

僕はmacユーザーなので、ここではmacでUSBを使ってインストールメディアを作成する方法を説明します。macにUSBを挿したら、以下の手順でインストールメディアを作成します。

まず、USBドライブが何という名前で認識されているのかを確認します。以下のコマンドを実行すると、USBデバイスは/dev/disk5 (external, physical)のように表示されます。僕の環境では/dev/disk5でしたが、/dev/disk2だったり他の数字になっていることもあるでしょう。

diskutil list

次にUSBデバイスをアンマウントします。/dev/disk5の部分は適宜変えてください。

diskutil unmountDisk /dev/disk5

最後にISOイメージファイルをUSBデバイスにコピーして完成です。ISOイメージファイルのパスは自分の環境に合わせて変えてください。またdisk5の前にrを指定してrawモードを使うことで高速に転送できるようにしています。もちろんこのrdisk5も適宜変えてください。

sudo dd if=path/to/archlinux-2023.03.01-x86_64.iso of=/dev/rdisk5 bs=1m

インストールメディアが完成するとUSBは普通のUSBとして使えなくなるので、画面上に「「セットしたディスクは、このコンピュータで読み取れないディスクでした。」と表示されますが、「無視」を押してください。

BIOSの設定を一部変更してからブートする

次に生贄にするWindows機にUSBを挿してから、BIOSの設定を変更して、ブートします。

BIOSの開き方はメーカーによってまちまちだと思うので調べてください。僕のは電源を入れてから、メーカーのロゴが表示されているときにF2キーを連打することで開くことができました。

BIOSを開いたら、ブートする前にセキュアブートを無効化する必要があります。またBoot Device Priorityを変更して、USB HDDを一番先頭にし、HDDを2番目にします。

ノート: Arch Linux インストールイメージはセキュアブートをサポートしません。インストールメディアから起動するには、セキュアブートを無効化 する必要があります。インストールが完了した後に セキュアブート をセットアップすることもできます。

最後に設定を保存してブートすればArch Linuxの初期画面が開きます。一応、僕のPCの場合の方法が書かれた記事を置いときます。

作業ログを作成する

作業前に、作業ログを取るようにしましょう。作業ログを取ることで、後から分析したり、質問したりするのに使うことができるので便利です。script <ファイル名>と実行することができます。単にscriptと実行すると、typescriptというファイルが生成されます。

script

exitを実行して、作業ログの記録を終了できます。aオプションをつけてあげることで、再度同じファイルに作業ログを追記できます。

script -a

キーボードレイアウトの設定

デフォルトのキーボードレイアウトはUSキーボードとのことなので、以下のコマンドを実行して日本語キーボードレイアウトに変更します。

loadkeys jp106

インターネットに接続する

ネットワークインターフェースの確認

以下のコマンドでネットワークインターフェースが認識・有効化されていることを確認します。このとき、state DOWNとなっていても問題ありません。<BROADCAST,MULTICAST,UP,LOWER_UP>などとなっている部分にUPがあればそのネットワークインターフェースは有効化されています。一緒にネットワークインターフェースの名前も確認しておきましょう。一番上のLOOPBACKなどと書かれている方ではないです。僕の場合はwlan0という名前でした。

ip link

もしネットワークインターフェースがUPしてないようでしたら、以下のコマンドで有効化します。wlan0の部分は適宜変えてください。

ip link set wlan0 up

無線カードの確認

また無線カードがrfkillによってブロックされているかを確認します。以下のコマンドを実行したとき、Soft blocked: yesまたは Hard blocked: yesのいずれかが表示された場合、無線カードがrfkillによってブロックされています。 Soft blocked: yesは、ソフトウェアによって無線カードがブロックされていることを示し、Hard blocked: yesは、物理的なスイッチまたはキーによって無線カードがブロックされていることを示します。

rfkill list

無線カードがブロックされている場合は以下のコマンドを実行してブロックを解除してください。

rfkill unblock all

Wi-Fiに接続する

無線または有線でインターネットに接続します。ここでは無線の場合の手順を示します。

$ iwctl
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect <任意のSSID>
[iwd]# known-networks list

接続確認

接続できたら、「Ctrl + C」で対話型シェルから抜けて、ping archlinux.jpで接続を確認しましょう。

タイムゾーンの設定

インターネットに接続すると自動的に時刻が同期されますが、タイムゾーンはUTCになっているので、Asia/Tokyoに変更します。以下のコマンドで現在の日時設定を確認できます。

timedatectl status

以下のコマンドを実行して、タイムゾーンを変更します。

timedatectl set-timezone Asia/Tokyo

この記事を参考にしました。

パーティションの設定

パーティションとは

パーティションについては以下の記事が参考になります。BIOS、UEFI、MBR、GPT、基本パーティション、拡張パーティション、論理パーティションという用語がわからない人も以下の記事を読んでおいてください。

現在のパーティショニングの確認

現在のパーティショニングがどうなっているかを以下のコマンドで確認します。romloopairootなどが名前に含まれるデバイスは無視してください。sdanvme0n1mmcblk0などのような名前が表示されていると思います。僕の場合はsdaでした。また、Disklabel type: gptと表示されていたら、パーティションスキームはGPTになっていることがわかります。

fdisk -l

バックアップ

ハードディスクに変更を加える前に、以下のコマンドを実行してドライブのパーティションテーブルとパーティションスキームをバックアップしておきます。/dev/sda > sda.dumpは適宜自分の環境に合わせて変えてください。

sfdisk -d /dev/sda > sda.dump

必要なら、以下のコマンドを実行すれば、バックアップからレイアウトを復元できます。

sfdisk /dev/sda < sda.dump

パーティションのレイアウト

インストールガイドのレイアウト例に則って、以下のようにパーティショニングします。EFIシステムパーティションのサイズは複数のカーネルをインストールする場合に最低限必要な1GiBとしています(複数カーネルをインストールする予定はありませんが念の為)。

スワップパーティションのサイズに関しては以下のように言及されているので、PCのRAMと同じ8GiBとしています。

歴史的に、スワップパーティションのサイズは物理 RAM のサイズの2倍にするという一般的なルールがありました。しかし、コンピュータがより多くのメモリを搭載するようになってから、このルールは時代遅れになりました。例えば、512 MiB の RAM を搭載する平均的なデスクトップマシンでは、通常「2倍ルール」は適切です。十分な量の RAM (1024 MiB 以上)が利用できる場合は、スワップパーティションを小さくしてもよいでしょう。

ハイバネート(suspend to disk)する場合、RAM と同じサイズのスワップパーティションを作成することが推奨されます。カーネルは、スワップ領域に収まるように suspend-to-disk イメージを圧縮しようとしますが、スワップ領域のサイズが RAM よりも大幅に小さい場合にハイバネートが成功する保証はありません。詳細は サスペンドとハイバネート#ハイバネーション を見てください。 - パーティショニング - ArchWiki

/homeは以下を参考にして、20GiBにしています。

マウントポイント パーティション タイプ サイズ
/mnt/boot /dev/sda1 EFIシステムパーティション 1GiB(最低300MiB必要)
[swap] /dev/sda2 Linux swap 8GiB(最低512MiB必要)
/mnt /dev/sda3 Linux x86-64 root (/) 20GB
/mnt/home /dev/sda4 home (/home) 残りデバイス容量全て

パーティショニングツール

パーティショニングには以下のツールが使用できます。ここではpartedを使用します。

名称 パッケージ MBR GPT CLI TUI スクリプティングユーティリティ GUI
fdisk util-linux Yes Yes fdisk cfdisk sfdisk partitionmanager
GPT fdisk gptfdisk No Yes gdisk cgdisk sgdisk No
Parted parted Yes Yes parted No parted gparted, gnome-disk-utility

パーティショニング

以下のコマンドを実行し、対話型シェルに入ります。/dev/sdaに関しては適宜自分の環境に合わせて変えてください。

parted /dev/sda

?を入力するとコマンド一覧が表示されます。

printを入力すると、現在のパーティションを表示できます。

(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB   fat32        EFI system partition          boot, hidden, esp
 2      274MB   290MB  16.8MB               Microsoft reserved partition  msftres
 3      290MB   255GB  255GB   ntfs         Basic data partition          msftdata
 4      1049kB  274MB  273MB   fat32        Basic data partition          hidden, diag

僕のPCには、Windowsがすでにダウンロードされているので、EFIシステムパーティションはすでに存在しますが、Linux用のブートローダーがインストールされているわけではないので削除し、新しいEFIシステムパーティションを作ることにします。

(parted) rm 1
(parted) rm 2
(parted) rm 3
(parted) rm 4
(parted) mkpart ESP fat32 1MiB 1GiB
(parted) set 1 esp on
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1074MB  1073MB  fat32        ESP      boot, esp

次にスワップパーティションを作成します。

(parted) mkpart primary linux-swap 1GiB 9GiB
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  1074MB  1073MB  fat32           ESP      boot, esp
 2      1074MB  9664MB  8590MB  linux-swap(v1)  primary  swap

最後に/home用のパーティションを作成します。

(parted) mkpart primary ext4 9GiB 29GiB
(parted) mkpart primary ext4 29GiB 100%
(parted) print
Model: ATA SanDisk SD7SN6S2 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  1074MB  1073MB  fat32           ESP      boot, esp  
 2      1074MB  9664MB  8590MB  linux-swap(v1)  primary  swap
 3      9664MB  31.1GB  21.5GB  ext4            primary
 3      31.1GB  256GB   225GB   ext4            primary

「Ctrl + C」で対話型シェルを抜けます。

マウント済みのファイルシステムをアンマウントする

以下のコマンドでどのデバイスがマウントされているかを確かめます。

lsblk -f

もしもMOUNTPOINTSの項目に値がある場合はそのデバイスを以下のコマンドでアンマウントします。(romloopairootなどが名前に含まれるデバイスは除く)

umount /dev/sda2

ファイルシステムを作成する

EFIシステムパーティションにFAT32ファイルシステムを作成します。EFIシステムパーティションのファイルシステムはFAT32である必要があります。

mkfs.fat -F 32 /dev/sda1

次に/dev/sda2にスワップパーティションをmkswapで初期化します。

mkswap /dev/sda2

最後に/home用のパーティションにext4ファイルシステムを作成します。

mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4

ファイルシステムをディレクトリにマウントする

mountコマンドでディレクトリにマウントします。マウントする前にマウントポイントをmkdirコマンドで作成しておく必要があります。スワップボリュームはswaponコマンドで有効化します。

mkdir -p /mnt/boot
mount /dev/sda1 /mnt/boot
swapon /dev/sda2
mount /dev/sda3 /mnt
mkdir /mnt/home
mount /dev/sda4 /mnt/home
lsblk -f

インストール

ミラーリストを変更する

パッケージをインストールする際は、/etc/pacman.d/mirrorlistに書かれているミラーサーバーからパッケージがインストールされるのですが、デフォルトのミラーリストには世界中のサーバーが載っており、そのままだとダウンロードするのに時間がかかってしまいます。以下を実行してミラーリストに日本のサーバーを載せるように変更します。

curl -s "https://archlinux.org/mirrorlist/?country=JP" | sed -e 's/^#Server/Server/' > /etc/pacman.d/mirrorlist
cat /etc/pacman.d/mirrorlist

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

pacstrap -K /mnt base linux linux-firmware

システムの設定

以下を実行してfstabを生成します。Uオプションを指定するとUUIDが生成されますが、扱いづらいのでLオプションを指定してラベルを使うことにします。

genfstab -L /mnt > /mnt/etc/fstab

fstabの内容を確認して、きちんと設定されているか確かめます。fstabがきちんと作成されていないと後述するgtub-installコマンド等の実行時にエラーが起こってしまいます。きちんと全てのデバイス(僕の場合は、/dev/sda1/dev/sda2/dev/sda3)が書かれているかどうか、EFIシステムパーテーションのファイルシステムがvfatと表示されているかどうかなどを確認してください。

cat /mnt/etc/fstab

載っていないデバイスがあったら再度マウントし、fstabを生成します。

mount /dev/sda1 /mnt/boot
genfstab -L /mnt > /mnt/etc/fstab

以下を実行して新しくインストールしたシステムにchrootする。

arch-chroot /mnt

以下を実行してタイムゾーンを設定します。

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
cat /etc/localtime
hwclock --systohc
cat /etc/adjtime

以下を実行してローカリゼーションを行います。

locale-gen
echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo LANG=ja_JP.UTF-8 > /etc/locale.conf
echo KEYMAP=jp106 > /etc/vconsole.conf

以下を実行してネットワーク設定を行います。本当はNetworkManagerを使用したかったのですが、systemdのエラーが出て使えなかったので、代わりにdhcpcdを使います。下記に詳しく書いてありそうですが、僕はよく分かってません。

また、wlan0hostnamehostname.localの部分は適当に変えてください。

pacman -S dhcpcd
ip link
systemctl enable dhcpcd@wlan0
echo hostname > /etc/hostname
echo "127.0.0.1 localhost" > /etc/hosts
echo "::1 localhost" >> /etc/hosts
echo "127.0.1.1 hostname" >> /etc/hosts

以下を実行してrootユーザーと一般ユーザーの設定をします。usernameは適宜変えてください。

passwd
echo $SHELL
useradd -m -G wheel -s /bin/bash username
pacman -S sudo
pacman -S vim
visudo

以下のように/etc/sudoersの内容を編集します。

~

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL    # ここをコメントアウトする

~

以下を実行してブートローダーをインストールします。ここではsystemd-bootを使用します。他にもGRUBなどがブートローダーとしてよく使われていますが、SlackのArch Linux JPで質問したところ、「grubわけわからない感がすごいので使ってないな」、「bootのエントリー選択を凝った画面にしたいとかならgrub一択だけど、CUIでシンプルにして、起動スプラッシュは[OK]をいっぱい表示させたいとかならsystemd-bootは最適だと思ってる」などと、systemd-boot推しの人が多かった印象でした。

また、systemctl enable systemd-boot-update.serviceでsystemdに同梱されているsystemd-boot-update.serviceを有効にし、次回の起動時にブートローダーが自動で更新されるようにします。

加えて、IntelプロセッサかAMDプロセッサかに応じて、それぞれintel-ucodeまたはamd-ucodeをインストールし、/boot/loader/entries/arch.confinitrd /intel-ucode.imgまたはinitrd /amd-ucode.imgの行を追記することで、マイクロコードのアップデートがインストールされるようにします。

bootctl --path=/boot install
systemctl is-enabled systemd-boot-update.service
systemctl enable systemd-boot-update.service
systemctl is-enabled systemd-boot-update.service
pacman -S intel-ucode
echo "default arch.conf" > /boot/loader/loader.conf
echo "timeout 10" >> /boot/loader/loader.conf
echo "editor no" >> /boot/loader/loader.conf
echo "console-mode max" >> /boot/loader/loader.conf
echo "title Arch Linux" > /boot/loader/entries/arch.conf
echo "linux /vmlinuz-linux" >> /boot/loader/entries/arch.conf
echo "initrd /intel-ucode.img" >> /boot/loader/entries/arch.conf
echo "initrd /initramfs-linux.img" >> /boot/loader/entries/arch.conf
echo "options root=/dev/sda3 rw" >> /boot/loader/entries/arch.conf

作業ログを保存する

exitでchrootを抜けてから、再度exitで作業記録を終了し、作業ログファイルをドライブにコピーします。

exit
exit
cp typescript /mnt/root/worklog_archlinux-install_2023Mar21.log

ブート

rebootでブートします。起動が開始する前までに、USBを取り外してください。

reboot

インストール後のセットアップ

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2