真面目にArchLinuxをUSBブートする

今まではお遊び、これからは本気。

最近はVirtualBox内のArchLinuxで色々やっているのだが、中でブラウザを使うようになると流石にCPUやらメモリやらが足りなくなる。やっぱり仮想環境ではなくそのままブートしたいので、またUSBブートすることにした。

“また”というのは、1年前に環境構築にハマっていてブログにも書き残しているのだ。が、情報が古いので今回書き直した。

https://blog.i544c.me/2016/04/18/install-arch-linux-in-usb/

https://blog.i544c.me/2016/04/20/install-archlinux-on-macbookpro/

インストール先のUSBの他に、ArchLinuxのイメージを直に焼いたUSBないしDVDを用意する。ArchLinuxイメージでブートして、インストール先のUSBを/dev/sdbで認識するところまで準備した。

ネットワーク接続する

これが手間取った。1年前にやった時はArchLinuxイメージでブートした時点でネットに繋がったものだが、最近のイメージでやると繋がらなかった。

どうもIPv6を優先的に繋ごうとするようだ。もうそんな時代なのか。。。まだIPv6の通っていない環境にいる俺はIPv4を使うべく、dhcpcdの設定を弄ることで解決した。

… – # clientid ++ clientid … – buid ++ # buid …

systemctl restart dhcpcd

パーティション分け

今まで使っていたVM上でUSBにインストールしていく形にする。VirtualBoxでUSBをマウントして、まずはパーティションを分ける。

fdisk /dev/sdb

ディスクラベルをgptにセット

コマンド:g

EFIシステムパーティションを作成

コマンド:n

パーティション番号と最初のセクタは未指定、尚512MBというのは推奨されるものであって、最小値は256MBである

最終セクタ:+512M

パーティションタイプをEFI Systemに変更

コマンド:t パーティションタイプ:1

ルートパーティションを作成

コマンド:n

あとは全部未指定でおk

変更をディスクに書き込んで終了

コマンド:w

EFIシステムパーティションをfat32で、ルートパーティションをext4でフォーマットする。

pacman -S dosfstools mkfs.fat -F32 /dev/sdb1

ジャーナリングを無効化して読み書きを減らしているが、電源喪失時にファイルシステムが壊れる恐れあり

mkfs.ext4 -O “^has_journal” /dev/sdb2

マウントして、インストール

mount /dev/sdb2 /mnt mkdir /mnt/boot mount /dev/sdb1 /mnt/boot pacstrap /mnt base base-devel

マウントのルールを設定

genfstab -U /mnt » /mnt/etc/fstab

arch-chroot /mnt /bin/bash

設定諸々

ロケールを設定。

en_US.UTF-8 UTF-8 ja_JP.UTF-8 UTF-8

locale-gen

LANG=en_US.UTF-8

ネットワークを設定。

pacman -S iw wpa_supplicant dialog

rootのパスワードを設定。

passwd

ブートローダーをセットアップ

pacman -S grub grub-install –target=x86_64-efi –efi-directory=/boot –bootloader-id=grub –removable –recheck grub-mkconfig -o /boot/grub/grub.cfg

これでとりあえずUSBは出来上がる。あとは自分好みに育てていくだけ👍


以下にオススメの設定や入れるべきソフトを記す。

Grubの選択時間を短縮する

GRUB_TIMEOUT=2

grub-mkconfig -o /boot/grub/grub.cfg で設定を適用する。

WatchDogを無効化する

/etc/default/grubでGRUB_CMDLINE_LINUX_DEFAULTにnowatchdogを追記./etc/modprobe.d/nowatchdog.confにblacklist iTCO_wdtを入力.

タイムゾーンを設定

ln -sf /usr/share/Zoneinfo/Asia/Tokyo /etc/localtime timedatectl set-local-rtc true #Windowsの時間に合わせる

Wi-Fiに繋ぐ

pacman -S networkmanager gnome-keyring network-manager-applet xfce4-notifyd

nmcli dev wifi connect password

デスクトップ環境を整える

pacman -S xorg-server xorg-apps xf86-video-nouveau

pacman -S xfce4 xfce4-goodies xcompmgr xmonad xmonad-contrib lightdm lightdm-gtk-greeter systemctl enable lightdm

useradd -mG wheel $USER passwd $USER

visudo #wheelグループのユーザーがsudoを使えるようにする

これで再起動したらログイン画面に遷移して、ログインしたらxfceが起動する。

import XMonad import XMonad.Config.Xfce

main xmonad xfceConfig { terminal = “xfce4-terminal” , modMask = mod4Mask }

よりカスタマイズしたいなら、ココを見ると良い。

http://dotshare.it/category/wms/xmonad/

xfceの中でxmonadを使えるようにしたいなら、設定→セッションと起動→自動開始アプリケーションでxmonad –replaceとxcompmgr -cCを追加する。

xmobar

pacman -S xmobar stalonetray

もっと見た目を整える

pacman -S arc-gtk-theme yaourt -S arc-icon-theme

Bluetoothマウスを使いたい

ArchLinux Wikiに全て載っている。

pacman -S bluez bluez-utils systemctl enable bluetooth

bluetoothctl [bluetooth]# list #接続されているbluetoothコントローラーが表示される [bluetooth]# select <コントローラーのMACアドレス> \[bluetooth\]# power on \[bluetooth\]# scan on \[bluetooth\]# agent on \[bluetooth\]# devices #周囲のBluetoothデバイスが表示される \[bluetooth\]# pair <マウスのMACアドレス> \[bluetooth\]# trust <マウスのMACアドレス> \[bluetooth\]# connect <マウスのMACアドレス>

exit

起動時に自動で接続したいなら、以下のようにAutoEnableをtrueにするだけ。

[Policy] AutoEnable=true

日本語入力したい

pacman -S fcitx-im fcitx-configtool fcitx-mozc

export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx

ターミナルで絵文字が使いたい

noto-fonts-emojiを入れておけば良い。

Profile-sync-daemon

X Window SystemないしWaylandを入れたら、まぁまずはブラウザを入れてしまう俺。このブラウザはディスクの読み書きを恐ろしいほど行うので、この読み書きをUSBではなくRAMで行うようにする。AURprofile-sync-daemonを入れて、$HOME/.config/psd/psd.confを編集して有効化するブラウザを選択して、systemctl –userで有効化するだけ。

ただこれだけだと$HOME/.cacheにどんどんキャッシュされるので、結局嬉しくない。ここを参考に、$HOME.cacheをメモリとしてマウントする。

ターミナルでファイルマネージャー

pacman -S ranger w3m

xfce-terminalはw3m-imgが上手く動かない。ターミナルはrxvt-unicodeを使うようにしよう。

USB接続のスピーカーを使えるようにする

pacman -S pulseaudio pavucontrol xbindkeys yay -S pulseaudio-ctl xbindkeys -d > ~/.xbindkeysrc pactl list sinks short #サウンドカードの番号を確認

set-sink-muteやset-sink-volumeの後の数字はサウンドカードの番号

“pactl set-sink-mute 1 false ; pactl set-sink-volume 1 +5%” XF86AudioRaiseVolume

“pactl set-sink-mute 1 false ; pactl set-sink-volume 1 -5%” XF86AudioLowerVolume

xbindkeys &

もしくはAURのxfce4-volumed-pulseを使う。

dアニメなどでDRMコンテンツを観る

yaourt -S chromium pepper-flash chromium-widevine hal-flash(要らないかも) systemctl enable hal-flash

NTFSフォーマットのドライブをマウントする

pacman -S ntfs-3g

マウントするドライブのUUID確認

ls -l /dev/disk/by-uuid

# 追記

UUID=xxxxxxxxxxxxxxxx /media/hdd ntfs-3g default,gid=1000,uid=1000,umask=0022 0 0

Git Diff

ln -s /usr/share/git/diff-highlight/diff-highlight /usr/local/bin/diff-highlight

[pager] log = diff-highlight | less show = diff-highlight | less diff = diff-highlight | less

NTPを使う

デフォだと時刻同期をしないので、どんどん時間が正しくなくなる。

timedatectl set-ntp true

Pacman

いくつか設定しなければならない.

Pacmanはアップデートしても過去のバージョンを保持し続ける.pacman-contribをインストールして,過去のバージョンをHookで消す.

[Trigger] Operation = Remove Operation = Install Operation = Upgrade Type = Package Target = *

[Action] Description = Keep the last cache and the currently installed. When = PostTransaction Exec = /usr/bin/paccache -rvk2

あと,XMonadはhaskellが更新されたらxmonad –recompileを実行しなきゃならないので,自動化する.

/etc/pacman.d/hooks/xmonad.hook

[Trigger] Operation = Install Operation = Upgrade Type = Package Target = xmonad* Target = haskell*

[Action] When = PostTransaction Exec = /usr/bin/xmonad –recompile

諸注意

ArchLinuxを運用する上で、気を付けるべきことをここに記す。

  1. 1週間に1回はpacman -Syu
  2. 動かなくなったら、とにかくログを遡れ

そんなこんなで、最近のデスクトップ事情はこんな感じ。


近況報告

デレステで二宮飛鳥役の志貴様をとうとうサブスクしたんだが、その時のご様子。

可愛すぎかよ、一生サブスクするわ。