概要
WindowsとLinux(Ubuntu)のデュアルブートでThinkPadE470を運用していたが、Ubuntuが最近重い感じる場面があり、またSPARKを用いた環境を研究で使うため構築していたが不要になったため心機一転ArchLinuxとi3wmを用いた環境を構築しようと考えた。
事前準備
今回自身の環境(実機インストールの際)で成功した物を記す。
- BIOSでセキュアーブートをOFFにする
- Windows10の高速スタートアップをOFFにする
- (arch用の)パーティションをWindows10のパーティションツールで作る
- インストールメディア(USB)の作成
環境の確認
BIOSからboot順位をいじりUSB(インストールメディア)を最上位にする
PCの環境がBIOSかUEFIかパーティションテーブルがMBRかGPTかを確かめる
BIOS or UEFI
"/sys/firmware/efi"が存在するか調べる(存在したらUEFI)
MBR or GPT
$ parted /dev/sdx print
で確認できる。(sdxのxは適宜自身で読み替えてほしい(一般的にはsda))
自身の環境はUEFIとGPTだった!!
言語の選択
キーボードレイアウトの変更
$ loadkeys jp106
ロケールの変更
$ nano /etc/locale.gen
"en_US.UTF-8 UTF-8"と"ja_JP.UTF-8 UTF-8"のコメントから外す
$ locale-gen
$ export LANG=en_US.UTF-8
arch wikiだと"ja_JP"だが、文字化けするため、一通り終わるまでは"en_US"にしておく
インターネットの接続(無線)
有線だと何もせずにつながるらしい
無線の場合の接続方法を記述する(iwd使用)
$ iwctl
##### ここから下はiwdシェル
# デバイス(インターフェイス)の確認
$ device list
# wlan0が出るはず(自分は出なくて最初からインストールやり直した)
# ネットワークのスキャン
$ station wlan0 scan
# ネットワーク一覧
$ station wlan0 get-networks
# SSIDを指定し、ネットワーク接続
$ station wlan0 connect <SSID>
# パスフレーズの入力し接続
# iwdを抜ける
$ exit
#### ここまでiwdシェル
インターネットに接続しているかを調べるには以下のどちらかで確認できる
# ping -c 3 www.google.com
# ping -c 3 8.8.8.8
時計を合わせる
NTPサーバとの同期
$ timedatectl set-ntp true
ドライブの準備
ここが最重要
デバイスの確認
以下のコマンドでデバイス(パーテション)をすべて確認する
$ lsblk
インストール可能なデバイスは以下のコマンドで確認できる
$ lsblk | grep -v "rom\|loop\|airroot"
上述したようにsdxという表現を使うが、適宜自分で置き換えるように!!
また、目指すのはデュアルブートのため、パーティションは複数あるが、windows10のパーティションとリカバリー領域などのパーティションは触らないように(下手に触るとwindowsデータが消えたり、回復ができなくなる)
新しいパーティションテーブルの作成
パーティションは下記のコマンドで作成した(グラフィッカルな感じで使いやすい)
$ cfdisk /dev/sdx
必要なパーティションは下記の4つ
- /boot
- /
- swap
- /home
ただし、今回windows10によってEFIブートパーティションが存在するため、下記の3つのみパーティションを作る。(空いているパーティションはFree Spaceって表示されている)
- /:20G
- swap:8G
- /home:180G(Free Spaceの残り)
ファイルシステムの作成
以下のコマンドで正しくパーティションが用意できたか確認する
$ lsblk /sda/sdx
/(自分だとsda5)と/home(自分だとsda7)のファイルシステムを作成する。よく使われているext4を使用した
$ mkfs.ext4 /dev/sdxY
##### 自分だと下記のコマンド
$ mkfs.ext4 /dev/sda5
$ mkfs.ext4 /dev/sda7
swapの有効化
swapパーティションの有効化
$ mkswap /dev/sdxY
$ swapon /dev/sdxY
パーティションのマウント
まず最初に/をマウントし、次に/bootと/homeをマウントする。/bootに関してはすでに存在しているEFIブートパーティションを用いる。
$ mount /dev/sdxR /mnt
$ mkdir -p /mnt/boot/efi
$ mount /dev/sdxB /mnt/boot/efi #今回作成したパーティションでなく以前からあるはず
$ mkdir -p /mnt/home
$ mount /dev/sdxH /mnt/home
インストール
ミラーの選択
今回は日本のミラーが最上位に存在したため変更しなかった。
もし変更するなら下記のコードで
$ nano /etc/pacman.d/mirrorlist
インストール
$ pacstrap /mnt base base-devel linux linux-firmware
多分、少し時間かかる
fstab作成
fstabを知らなかったので軽く調べたら、マウントに関することを記述してあるファイルらしい。
$ genfstab -U /mnt >> /mnt/etc/fstab
システム内の諸設定
chrootでシステムに入る
$ arch-chroot /mnt /bin/bash
多分、ここからキーボードがusに変わっていると思う
一時的だけど下記のコマンドを打てばjpで使える
$ loadkeys jp106
いろいろ必要なものをインストールする
$ pacman -Syy
$ pacman -S nano iwd
ロケールの設定
$ nano /etc/locale.gen
"en_US.UTF-8 UTF-8"と"ja_JP.UTF-8 UTF-8"のコメントから外す
$ locale-gen
$ echo LANG=en_US.UTF-8 > /etc/locale.conf
$ export LANG=en_US.UTF-8
コンソールフォントとキーマップ
$ nano /etc/vconsole.conf
##### 以下/etc/vconsole.confに記入
KEYMAP=jp106
FONT=lat9w-16
タイムゾーンの設定
hwclockでハードウェアクロックも設定
現在、arch側の時計の時間がずれている(dualbootによるwindowsとarchの時間のとり方による違いだと考える)
一応、windows側の時間がずれていないためこのまま進めた
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /eetc/localtime
$ hwclock --systohc --utc
hostname
psp3000というhostnameにした
$ echo psp3000 > /etc/hostname
$ nano /etc/hosts
##### 以下/etc/hostsに追加
127.0.0.1 localhost
::1 localhost
127.0.1.1 psp3000.localdomain psp3000
rootパスワード設定
$ passwd
ブートローダのインストール
$ pacman -S grub efibootmgr intel-ucode
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub --recheck --debug
$ grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg
chrootを抜ける
$ exit
アンマウントして再起動
$ umount -R /mnt
$ reboot
再起動するとGRUBからArchを起動できる。しかし、GRUBにwindowsが載っていない。(後ろで設定するためこのまま進める)
Archに入ってrootでログイン
ネットワークの再設定
この時点でネットワークに接続できていないので設定する必要がある
systemd-networkd+iwdを使う
まず、systemd-networkd関連のサービスを有効化・起動しておく
$ systemctl enable systemd-networkd
$ systemctl start systemd-networkd
$ systemctl enable systemd-resolved
$ systemctl start systemd-resolved
# /etc/resolv.confにシンボリックリンクを設定
$ mv /etc/resolv.conf /etc/resolv.conf.bak
$ ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
同様にiwdも有効化・起動しておく
$ systemctl enable iwd
$ systemctl start iwd
$ iwctl
##### ここからiwdシェル
device list
# wlan0が出るので、以下これで設定する
station wlan0 scan
station wlan0 get-networks
station wlan0 connect <SSID>
exit
##### ここまでiwdシェル
ここまでやるとip aでwlan0に設定されているが、まだpingは通らない
"/etc/systemd/networkd/25-wireless.network"を作成し、以下のように記述
[Match]
Name=wlan0
[Network]
DHCP=yes
systemd-networkd再起動でネットワーク接続完了
$ systemctl restart systemd-networkd
# 接続確認
$ ping -c 3 8.8.8.8
iwd-ArchWikiによると、起動時に接続失敗する話があるためサービスの起動順位を設定しておく。
$ mkdir /etc/systemd/system/iwd.service.d
$ touch /etc/systemd/system/iwd.service.d/override.conf
"/etc/systemd/system/iwd.service.d/override.conf"に以下のように記述
[Unit]
After=systemd-udevd.service systemd-networkd.service
再起動し、ログイン後に再度pingして、ネットワーク接続できているか確認。
Windowsとのデュアルブート
$ pacman -S os-prober
$ grub-mkconfig -o /boot/efi/EFI/grub.cfg
再起動し、WindowsとArchが両方起動できることの確認