Arch Linux

Author

gentam

Date
2018-04-21
Category

log

Tag

setup, linux

Updated

2018-08-11

Arch Linux をセットアップするときのメモ. (これは自分用メモなのであくまで基本は公式Wiki <https://wiki.archlinux.org/index.php/Installation_guide> を参照してください)

Updates:

Contents

Setup

デスクトップ編

UEFI/GPT で作る.

Pre-installation

  • ISOイメージをダウンロード <https://www.archlinux.org/download/>

  • PGP signature (or md5, sha1)を確認する:

    gpg --keyserver pgp.mit.edu --keyserver-options auto-key-retrieve --verify archlinux-<version>-x86_64.iso.sig
  • USBメモリ経由でインストールするのでここを参照する. <https://wiki.archlinux.org/index.php/USB_flash_installation_media>

    • Macでddを使う場合:

      $ watch diskutil list
        ここでUSBメモリをさして,新たに追加された /dev/disk2 (external, physical):
        などを確認する.数字はこれに合わせて変更
      $ diskutil unmountDisk /dev/disk2
      $ sudo dd if=path/to/arch.iso of=/dev/rdisk2 bs=1m
        diskX じゃなくて rdiskX にするとrawモードで速くなる.rdisk2s1 のような
        suffix はつけない.
    • "The disk you inserted was not readable by this computer." とアラートが出た らIgnore

これでUSBからブートできるようになったはず.

Note

このUSBメモリ空にして普通に使いたい場合は,フォーマットする前に wipefs --all /dev/sdx してiso9660ファイルシステムのシグネチャを消す必要がある.

  • USBメモリとEthernetケーブルをさした状態で起動し,一瞬表示されるBIOS画面に表示 されるF12とかに従って押してブートメニューに入る.

  • UEFI: Generic USB Flash Disk を選択

  • Arch Linux archiso x86_64 UEFI CD を選択

問題なければ root@archiso にログインした状態になる.

  • キーボードはUSで使うので変更しない

# ls /sys/firmware/efi/efivars    # ブートモードでUEFIが有効かどうか確認
# ping archlinux.org
# timedatectl set-ntp true
# timedatectl status

2つのパーティションを作る:

  • 1つをLinux本体が使う用にフォーマット (8300, Linux filesystem → mkfs.ext4)

    • /mnt にマウント

  • もう1つは,ブートローダー用の領域

    • EFIの場合: ef00, EFI System → mkfs.vfat -F32

      • /mnt/boot にマウント

    • MBRの場合: ?(やってない)

  • swap領域をパーティションで作るなどの場合さらに分ける

(これはGNU Parted とかだと名前がちょっと違う)

# fdisk -l
# gdisk /dev/sda
  d               # 既存のパーティションがあったので一応消した
  o               # 新規GPT作成
    y
  n               # 新規パーティション作成
    2             # なんとなくsda1をメインにしたかったのでsda2をESPにした
    <Enter>       # 開始
    +512M         # ESPの推奨サイズ
    ef00          # EFI System
  n
    1
    <Enter>
    <Enter>
    <Enter>       # Linux filesystem
  p               # で確認
  w               # 書き込み
# mkfs.ext4 /dev/sda1         # sda1をLinux用にフォーマット
# mkfs.vfat -F32 /dev/sda2    # sda2をESP用にフォーマット.mkfs.fatでも同じみたい

# mount /dev/sda1 /mnt
# mkdir /mnt/boot
# mount /dev/sda2 /mnt/boot   # sd1,2どちらがboot用か間違えないように
でマウントする

Reference:

Installation

# vim /etc/pacman.d/mirrorlist
  Japan を検索してリストの上に持ってくる
# pacstrap /mnt base base-devel

Configuration

# genfstab -U /mnt >> /mnt/etc/fstab
# cat /mnt/etc/fstab
# arch-chroot /mnt            # このchroot以降はディスク上の作業

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

# vi /etc/locale.gen
  (コメントを外す)
  en_US.UTF-8
  ja_JP.UTF-8
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf

# vi /etc/hostname            # 適当なホスト名をつける
  archg                       # https://tools.ietf.org/html/rfc1178 的にはよくないホスト名
# vi /etc/hosts

  127.0.0.1   localhost
  ::1             localhost
  127.0.1.1   archg.localdomain       archg

# passwd

# pacman -S grub efibootmgr intel-ucode
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# grub-mkconfig -o /boot/grub/grub.cfg

# exit
# umount -R /mnt
# shutdown -h now

USBメモリを抜いて再起動.

Reference:

Network

archg login: root
Password: (passwd で設定したパスワード)
[root@archg ~]#

# ip a
  DHCPが動いてないからアドレスが降ってきてない
# systemctl enable dhcpcd

  特定のインターフェイスを設定する場合:
    # ip link
      1: lo: ...
      2: eno1: ...
      → この場合インターフェイス名はeno1.(eth0とかではなくなった代わりに抜き差し
      しても同じ名前で同じインターフェイスが使える)
    # ip link set eno1 up
    # systemctl enable dhcpcd@eno1.service
    # systemctl start dhcpcd@eno1.service

# ping archlinux.org
  • A start job is running for sys-subsystem-net-devices-eth0.device が出る場 合:

    おそらくだけど最初に systemd-networkd, systemd-resolved の方で設定しよう としてやめたせいか,どこかの古いブログを参照してコピーしたせいか分からないが再 起動したときに A start job is running for sys-subsystem-net-devices-eth0.device というメッセージが出て90秒待たされた. たぶん存在しない eth0dhcpcd を動かそうとして失敗していたっぽい.

    • とりあえず systemctl disable dhcpcd@eth0.service したうえで, /etc/systemd/system 下にeth0を参照してるサービスがないか調べる.

    • 今後同じようなミスをしたときに90秒待たなくていいように,設定ファイルでタイム アウトを20秒にしておいた:

      # vi /etc/systemd/system.conf
        DefaultTimeoutStartSec=20s
        DefaultTimeoutStopSec=20s

Reference:

Packages & AUR

# pacman -Syy
# pacman -S neovim zsh git openssl python3
# git clone https://aur.archlinux.org/yay.git
# cd yay
# makepkg -si

AURとyayの詳細 → # Arch User Repository (AUR)

Reference:

User

# useradd -m -g wheel -s /bin/bash gentam
# passwd gentam
# visudo
  ...
  ## Same thing without a password
  %wheel ALL=(ALL) NOPASSWD: ALL
  ...
# logout

arch login: gentam
Password:
[gentam@archg ~]$

GUI

方針は最も軽くてシンプルなオプションをかつ,見た目もよくする(できるカスタマイズ 性がある)こと.

最初はxfce4を入れたが,後からopenboxを研究室で教えてもらったので変えた.

https://i.imgur.com/9io1zU9.jpg

(/r/unixporn taste SS at 2018-06-18)

ここからはインストールするパッケージ名だけをリストするので, sudo pacman -S <pkg>yay <pkg> でインストールと読み替える.

Xorg

xorg-serverと,マシンに合わせたxorgのドライバーを入れる:

$ lspci | grep -e VGA -e 3D
  Intel ...
xf86-video-intel

xorg-server xorg-xinit
mesa

Reference:

Window Manager

openbox
obconf
lxappearance-obconf

  その他必須ではないやつ:
  obkey
  obmenu
$ cp /etc/X11/xinit/xinitrc ./.xinitrc
$ nvim ~/.xinitrc
  twm &
  xclock ...
  ...
  exec xterm
  までを削除して
  exec openbox-session
  を追記
$ cp -R /etc/xdg/openbox ~/.config/
$ startx

これでただ黒いだけの画面だけが立ち上がるはず.右クリックでメニューが出るのでログ アウトする.

Terminal

rxvt-unicode-patched

rxvt-unicode: lightweight terminal emulator

起動コマンドは urxvt. ターミナルが軽いとか言ってもそんな変わらないでしょと 思いつつもインストールしたら,実際軽くて速い気がする. また複数端末を開く時に,デーモンモードでメモリを節約できる

nvim ~/.Xresources
...

File Manager

thunar

$ nvim ~/.config/openbox/autostart
  thunar &
  を追加

thunar: lightweight file manager for Xfce

Taskbar

tint2

$ nvim ~/.config/openbox/autostart
  tint2 &
  を追加

tint2: simple, unobtrusive and light taskbar

Theme & Icon

openbox-arc-git
arc-icon-theme-git

Arc theme (openbox): Arc Openbox theme

テーマ設定:

  • startx > 右クリック > Openbox Configuration Manager > Arc-Darker

  • lxappearance > Icon > moka

Fonts

ttf-hack
noto-fonts-cjk    # libx264 の選択はデフォルト(10bitじゃない方)
noto-fonts-emoji

Japanese

fcitx-im
fcitx-mozc

$ fcitx-configtool
  Input Methodタブ + > Mozcを追加
$ nvim ~/.xprofile
  export GTK_IM_MODULE=fcitx
  export QT_IM_MODULE=fcitx
  export XMODIFIERS=@im=fcitx
$ nvim ~/.config/openbox/autostart
  fcitx-autostart &
  • Ctrl+Space -> change input method

  • Ctrl+; -> clipboard history

Mouse

MacとLinuxを交互に使っていると,マウスホイールによる画面スクロールの方向が逆にな ってしまって混乱する.

最初はMac側で "Natural Scrolling" をオフにして合わせようと思った.これはマウスで 使う分には問題なかったが,トラックパッドでは,タッチスクリーンに慣れた感覚からし て,違和感が大きすぎたので,結局Linux側を natural に合わせることにした.

その設定は xinput コマンドでできるみたいなので入れる: yay xorg-xinput

次に使っているマウスを確認する (Logitech M325 id=10)

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech M325                             id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Topre Corporation HHKB Professional       id=9    [slave  keyboard (3)]

設定項目が list-props <id> で確認できる:

$ xinput list-props 10
Device 'Logitech M325':
        Device Enabled (139):   1
        Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Natural Scrolling Enabled (274):       0
        libinput Natural Scrolling Enabled Default (275):       0
        [...]

'libinput Natural Scrolling Enabled' を設定し,動作が確認できたら .xinitrc に追記して永続化させる.

$ xinput set-prop 'Logitech M325' 'libinput Natural Scrolling Enabled' 1
$ echo xinput set-prop 'Logitech M325' 'libinput Natural Scrolling Enabled' 1 >> ~/.xinitrc

Other Tools

  • tree

  • mlocate

  • fasd

  • the_silver_searcher (ag)

  • feh

  • ranger

  • imagemagick

  • gist-git

  • google-chrome

  • firefox

dotfiles

Xresources,zshrc,vimrc などの設定.

Warning

このdotfilesレポジトリは常にwork in progressです! 下のコマンドの通 りにはやらないでください.

$ git clone https:://github.com/gentam/dotfiles.git
$ cd dotfiles
$ ./setup.sh

Reference:

VirtualBox編

(2018-04-21)

MacのVirtualBox上にArch Linuxをセットアップして,ヘッドレスで起動してローカルの ターミナルからSSH接続するところまでの流れ.Macのターミナルから使うのでGUIはセッ トアップしない.

ホスト環境:

  • Mac OSX El Capitan

  • VirtualBox Version 5.2.10

起動までの手順:

  • ISOイメージをダウンロード <https://www.archlinux.org/download/>

  • PGP signature を確認する:

    gpg --keyserver pgp.mit.edu --keyserver-options auto-key-retrieve --verify archlinux-<version>-x86_64.iso.sig
  • VirtualBox で新規VMを作成

    • Name: arch

    • Memory: 4096MB

    • Disk: 8GB

    • Image: archlinux-2018.04.01-x86_64.iso

  • System > Motherboad > Enable EFI (special OSes only) にチェック

  • Storage > Controller: IDE > Empty にISOイメージをセット

起動後:

# loadkeys jp106 (日本語キーボードの場合)
# ping archlinux.org
# timedatectl set-ntp true
# fdisk -l
# gdisk /dev/sda
  o
    y
  n
  Permission number: 1
  First sector     : Enter
  Last sector      : +512M
  Hex code or GUID : ef00

  n
  Permission number: 2
  First sector     : Enter
  Last sector      : Enter
  Hex code or GUID : 8300
  w
    y

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext4 /dev/sda2
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

# vim /etc/pacman.d/mirrorlist
  Japan を検索してリストの上に持ってくる

  rankmirrors コマンドでこんな風にもできるらしい:

  # cp -p /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.orig
  # rankmirrors -n 3 /etc/pacman.d/mirrorlist.orig > /etc/pacman.d/mirrorlist
  # cat /etc/pacman.d/mirrorlist
  Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
  Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
  Server = http://archlinux.cs.nctu.edu.tw/$repo/os/$arch

# pacman -Syy
# pacstrap /mnt base base-devel
# genfstab -U /mnt >> /mnt/etc/fstab
# cat /mnt/etc/fstab

# arch-chroot /mnt
# vi /etc/locale.gen
  (コメントを外す)
  ...
  en_US.UTF-8
  ...
  ja_JP.UTF-8
  ...
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# vi /etc/vconsole.conf (日本語キーマップにする場合)
  KEYMAP=jp106

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

# echo arch > /etc/hostname
# vi /etc/hosts
  ...
  127.0.0.1       localhost
  ::1             localhost
  127.0.1.1       arch.localdomain arch

# systemctl enable dhcpcd
# passwd

# pacman -S grub efibootmgr intel-ucode
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg
# mkdir /boot/EFI/boot
# cp /boot/EFI/arch_grub/grubx64.efi  /boot/EFI/boot/bootx64.efi

# exit
# umount -R /mnt
# shutdown -h now
  • Storage > Controller: IDE > archlinux-...-x84_64.iso をRemove disk

  • Virtualbox Setting > Network > Adapter 1 > Advanced > Port Forwarding

    • Host Port > 2222

    • Guest Port > 22

起動後:

arch login: root
Password: (passwd で設定したパスワード)
[root@arch ~]#

# useradd -m -g wheel -s /bin/bash gentam
# passwd gentam
# visudo
  ...
  ## Same thing without a password
  %wheel ALL=(ALL) NOPASSWD: ALL
  ...
# logout

arch login: gentam
Password:
[gentam@arch ~]$

$ sudo pacman -S openssh
$ sudo systemctl enable sshd

$ sudo pacman -S virtualbox-guest-utils-nox
  * GUIがいるならvirtualbox-guest-utils
  * 2のvirtualbox-host-modules-arch を選択
$ sudo systemctl enable vboxservice
$ sudo shutdown -h now

ローカルのターミナルから接続:

$ VBoxHeadless -s arch &
$ ssh -p2222 gentam@localhost

Reference:

Memo

パッケージの削除

# pacman -R package_name

remove package + its dependencies which are not required by any other package:
# pacman -Rs package_name

Arch User Repository (AUR)

<https://wiki.archlinux.org/index.php/Arch_User_Repository>

大量の非公式なパッケージはAURからインストールできる. AURからパッケージをインストールするために,様々なAURヘルパー <https://wiki.archlinux.org/index.php/AUR_helpers>があるみたいだが,今のところは 手動でやってみる.

手順:

$ git clone https://aur.archlinux.org/<package_name>.git
$ cd <package_name>
$ less PKGBUILD
$ less package_name.install
$ makepkg -si

Update: 2018-06-11

デスクトップPCにセットアップするときに yay <https://aur.archlinux.org/packages/yay/> を入れた:

$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ less PKGBUILD
$ less package_name.install
$ makepkg -si

これはAURからのインストールも,pacmanへのラッパーも果たしてくれるので yay コ マンドだけで全部できる.

Examples of Custom Operations

  • yay <Search Term> presents package selection menu

  • yay -Ps prints system statistics

  • yay -Pu prints update list

  • yay -Yc cleans unneeded dependencies

  • yay -G downloads PKGBUILD from ABS or AUR

  • yay -Y --gendb generates development package DB used for devel updates.

  • yay -Syu --devel --timeupdate Normal update but also check for development package updates and uses PKGBUILD modification time and not version to determine update