Arch Linuxをインストールした
2016/05/14更新
@kotatsu_mi 様からのありがたいお言葉を頂いたので載せておきます.
今タイムゾーンを設定するのってtimedatectlコマンド使うほうが良いと思うな(同様にlocaleはlocale.confじゃなくてlocalectl,keymapもlocalectlかな) https://t.co/s9CsOIqEhQ [sokutenable]
— орумин (@kotatsu_mi) 2016年5月14日
@173210 アッハイ
— орумин (@kotatsu_mi) 2016年5月14日
とのことなので, Wikiコントリビュートしないんですかと煽りながら期待しながら,
各自対応をお願いします.
また, 「systemd-networkd使わずとも最初からNetworkManagerインストールしておけばええやん」的なツッコミもお待ちしています.
# コメント欄やっぱり欲しいな. でも作るのめんどくせ.
突然のArch Linux
聞いて驚け! 私はArch Linuxをインストールした. そうだ. Ubuntu 7.10から8年も使い続けていたそのUbuntuを捨て, Arch Linuxをインストールしたのだ.
といってもUbuntuに嫌気が差したからArch Linuxを入れたのではなく, これは必要に迫られてのものだ.
私はQtでWebコンテンツを表示しようとしていた. Qt 5ではWebEngineというものが導入され, これまでのWebKitがdeprecatedになった. そして, WebKitモジュールは最近のブラウザに比べれば古く, 劣ったものになってしまっていた. それ故に私はQt 5 WebEngineを導入し, そしてPythonでのAPIとして使用していたPyQtをそれに対応させる必要があった.
私は素直にChromiumがまるごと入った太ったWebEngineを時間をかけてコンパイルし, PyQtも同じくコンパイルし, そしてcheckinstallによってインストールした.
しかし, うまく動かない. 元から導入されていたQtやPyQtのモジュール群などとの不整合を起こしたらしかった. QtやPyQtをまるごとcheckinstallしようかとも考えたが, checkinstallに嫌気が差していたのは事実だった. そこまでして不足を補う必要があるかも, もはや曖昧なものになっていた.
そこで, Arch Linuxだ. これは合理的な帰結だ. 必要なものを得るというだけのことだ. しかし, Ubuntuにも愛着があったので, 悩んだ. 私にはマルチブートとか中途半端な選択肢はない.
結局, 私はArch LinuxをメインPCであるThinkPad X220 Tablet上のUbuntuに 上書きインストールすることにした.
手順
ここで, WebEngineを使ったプログラムを共同開発するたけてぃ氏のために, そしてすべてを忘れ去った未来の自分のために自分が踏んだ手順を書いておく.
前準備
まず, Arch Linuxをダウンロードする. 推薦されているBitTorrent Downloadを使用した.
このイメージをUSBメモリ上のFATに展開した. EFIなのでこれだけで十分だった. 有線LANを接続し, 心の準備を整えたら このUSBメモリを挿して起動する.
Arch Linuxが起動したら, 次のコマンドでキーボードレイアウトを設定した.
loadkeys jp106
これでインストール環境は準備できた.
インストール先の用意
/dev/sdb1
にcrypt_LUKS
な領域があり, /dev/mapper/arch
にマップすることにする.
/dev/mapper/arch
はBtrfsで, @
, @home
というsubvolumeがある.
ここではUbuntuが入っている@
を消去し, @home
からは設定ファイルを抹消,
それぞれ/mnt
, /mnt/home
にマウントした.
cryptsetup open /dev/sdb1 arch
mount /dev/mapper/arch /mnt
btrfs subvolume delte /mnt/@
btrfs subvolume create /mnt/@
umount /mnt
mount -o subvol=@ /dev/mapper/arch /mnt
mkdir /mnt/home
mount -o subvol=@home /dev/mapper/arch /mnt/home
rm -rf /mnt/home/.*
さらに, EFISTUBを使う予定なので, 次のようにEFI領域へのマウントポイントを作成した.
ESPは/dev/sda1
で, FATである.
mkdir /mnt/esp
mount -o fmask=0177,dmask=0077 /dev/sda1 /mnt/esp
mkdir /mnt/esp/EFI/arch
mount --bind /mnt/esp/EFI/arch /mnt/boot
インストール
Arch Wikiに沿ってインストールする. (素晴らしいことにArch Wikiの翻訳はほぼ完璧かつ最新なので, 日本語版へのリンクを貼っておく.)
nano /etc/pacman.d/mirrorlist
pacstrap /mnt base
genfstab -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt
nano /mnt/etc/fstab # ちょっとだけ編集. やらなくてもよい.
echo root3-X220t > /etc/hostname
ln -s /usr/share/zoneinfo/Japan /etc/localtime
nano /etc/locale.gen
locale-gen
echo LANG=ja-JP.UTF-8 > /etc/locale.conf
echo KEYMAP=jp106 > /etc/vconsole.conf
: crypt_LUKSのためにHOOKSの中のfilesystemの前にencryptと追記.
nano /etc/mkinitcpio.conf
mkinitcpio -p linux
passwd
exit
次に, ブートできるようにEFIエントリに追加する.
efibootmgr -c -l '\EFI\arch\vmlinuz-linux' -L 'Arch Linux' -u 'cryptdevice=/dev/sdc1:arch root=/dev/mapper/arch rootflags=subvol=@ initrd=/EFI/arch/initramfs-linux.img'
cryptdisk
ではパーティション構成が変更されても問題ないようにUUIDなどを設定すべきだが,
UUIDを書いたら長すぎたのかファームウェアが正常に動作しなくなってしまったのでこうした.
また, より新しいマシンではSecure Bootがあるかもしれない. そういった場合には, 鍵を追加する, shimを使う, Secure Bootを無効にする, などの対応が必要だ.
終わったらpoweroff
で電源を切り, メディアを取り外す.
ユーザーの作成
まずはrootで起動する.
起動したら, 最初にやることはユーザーの追加だ. rootは心臓に悪い.
useradd -d /home/root3 -M root3
passwd root3
ユーザーを追加したらとっととexit
でroot抜けて, 作ったユーザーでログインする.
しかし, 当然のことながらこのあともrootでの作業が続く.
インターネット接続
当然のようにsuでrootになる.
su
さて, 現状では最低限のものしかないので不便極まりない. 追加でソフトウェアをインストールするために, まずはインターネットにつなぐ. 使うのはsystemd-networkdだ.
lspci -v | grep -i ethernet
これにより, e1000e
なるカーネルモジュールで有線LANが提供されていることがわかった.
これでdmesgを検索する.
dmesg | grep e1000e
デバイスファイルはenp0s25
らしい. これを元に設定ファイルを作成する.
nano /etc/systemd/network/enp0s25.network
[Match]
Name=enp0s25
[Network]
DHCP=both
あとはサービスを開始するだけだ. Ubuntuばかり使っていたからservice
と手が滑る.
systemctl start systemd-networkd
続けてsystemd-resolvedを設定する. DHCPでどう設定するのかわからなかったので, Google先生の力を借りた. 仮の設定なので問題ないだろう.
nano /etc/resolv.conf
namespace = 8.8.8.8
同じくサービスを開始する.
systemctl start systemd-resolved
sudo
これでインターネットに自由にアクセスできるようになった. rootをもっと安全に使うため, sudoを導入する.
pacman -S sudo
次に, sudoersを書き換える. rootにsudoを許可する設定があるが, これに習い作ったユーザーにsudoを許可する. viは使わない.
EDITOR=nano visudo
これが済んだらexit
でrootから抜ける.
gnome
GUIがないと辛いのでgnomeをインストールする. 同時にextraをインストールするか聞かれるが, 私はすべてインストールした. ログインにはgdmを使う.
sudo pacman -S gnome
gdmを開始する.
sudo systemctl start gdm
Ctrl-Alt-F1などでセッションを切り替え, gdmでログインする. 端末を立ち上げて設定の続きを行う.
次回以降でgdmが自動起動するようにgdmを有効にする.
sudo systemctl enable gdm
NetworkManager
先にしたネットワークの設定は暫定だ. 簡単にネットワークの設定ができるようにNetworkManagerをインストールする.
sudo pacman -S network-manager-applet
インストールしたら, systemd-networkdやsystemd-resolvedを殺し, NetworkManagerを起動, 有効にする.
sudo systemctl stop systemd-networkd
sudo systemctl stop systemd-resolved
sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager
開発環境の導入
ようやく準備が整った. あとはpacmanで導入するだけだ.
sudo pacman -S qt5-webengine python-pyqt5 git
インストールしたら目的のソフトウェアをダウンロードし, 動作を確認する.
git clone https://github.com/173210/daisy.git
cd daisy
sudo python setup.py install
daisy
一言
面倒くせえ.