--- title: "archlinux install by syui" slug: "arch" date: "2025-08-08" tags: ["arch"] draft: false --- ## 最小構成 まずはdiskの設定から。 ```sh # cfdisk /dev/sda ``` 次にdiskのフォーマットなど。それをmountしてarchlinuxを入れます。bootloaderも設定しておきましょう。 ```sh $ mkfs.vfat /dev/sda1 $ mkfs.ext4 /dev/sda2 $ mount /dev/sda2 /mnt $ mount --mkdir /dev/sda1 /mnt/boot $ pacstrap /mnt base base-devel linux linux-firmware linux-headers $ genfstab -U /mnt >> /mnt/etc/fstab $ arch-chroot /mnt $ pacman -S dhcpcd grub os-prober efibootmgr $ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub $ grub-mkconfig -o /boot/grub/grub.cfg ``` これで`exit;reboot`すると起動できます。 ## よく使うもの ```sh $ pacman -S openssh zsh vim git tmux cargo ``` ## userの作成 ```sh $ passwd $ useradd -m -G wheel ${USER} $ passwd ${USER} ``` ```sh $ HOSTNAME=archlinux $ echo "$HOSTNAME" > /etc/hostname ``` shellの変更など。 ```sh $ chsh -s /bin/zsh ${USER} or $ useradd -m -G wheel -s /bin/zsh ${USER} ``` ## sudoの使い方 1. `/etc/sudoers`は編集を間違えると起動できなくなります。安全のため`visudo`が推奨されています。 2. `vim`では`:w!`で保存します。 ```sh $ sudo visudo or $ vim /etc/sudoers ``` ```sh:/etc/sudoers %wheel ALL=(ALL:ALL) ALL ``` よく`update`する人は特定のコマンドをpasswordなしで実行できるようにしておいたほうが良いでしょう。 ```sh:/etc/sudoers %wheel ALL=(ALL:ALL) NOPASSWD: /usr/bin/pacman -Syu --noconfirm ``` ```sh $ sudo pacman -Syu --noconfirm ``` ## networkの設定 次にnetworkです。ここでは`systemd-networkd`を使用します。`dhcpcd`を使ったほうが簡単ではあります。もし安定しないようなら`dhcpcd`を使用。 ```sh # systemctl enable dhcpcd ``` ```sh $ systemctl enable systemd-networkd ``` network deviceをeth0にします。 ```sh $ ip link $ ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules ``` ```sh:/etc/systemd/network/eth.network [Match] Name=eth0 [Network] Address=192.168.1.2/24 Gateway=192.168.1.1 DNS=192.168.1.1 ``` ```sh $ systemctl enable systemd-resolved ``` ## auto-login 次にauto-loginを設定していきます。ここでは`getty`を使用。`${USER}`のところを自分のusernameにしてください。 ```sh $ mkdir -p /etc/systemd/system/getty@tty1.service.d/ ``` ```sh:/etc/systemd/system/getty@tty1.service.d/override.conf [Service] ExecStart= ExecStart=-/usr/bin/agetty --autologin ${USER} --noclear %I $TERM ``` ```sh $ systemctl daemon-reload $ systemctl restart getty@tty1 ``` ## window-manager `xorg`でdesktop(window-manager)を作ります。`i3`を使うことにしましょう。`xorg`は`wayland`に乗り換えたほうがいいかも。その場合は`sway`がおすすめ。 ```sh $ pacman -S xorg xorg-xinit i3 xterm # 確認 $ startx $ i3 ``` ```sh:~/.xinitrc exec i3 ``` ```sh:~/.bash_profile if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then exec startx fi ``` ## sshの使い方 ```sh $ systemctl enable sshd $ cat /etc/ssh/sshd_config Port 22119 PasswordAuthentication no $ systemctl restart sshd ``` 基本的にlanから使う場合はdefaultで問題ありませんが、wanから使う場合は変更します。とはいえ、lanでもport, passwordは変えておいたほうがいいでしょう。 次に接続側でkeyを作ってserverに登録します。 ```sh $ ssh-keygen -f ~/.ssh/archlinux $ ssh-copy-id -i ~/.ssh/archlinux ${USER}@192.168.1.2 -p 22119 ``` `ssh-copy-id`がない場合は以下のようにしましょう。 ```sh $ cat ~/.ssh/archlinux.pub | ssh -p 22119 ${USER}@192.168.1.2 'cat >> ~/.ssh/authorized_keys' ``` この設定で`ssh archlinux`コマンドで接続できます。 ```sh:~/.ssh/config Host archlinux User syui Hostname 192.168.1.2 Port 22119 IdentityFile ~/.ssh/archlinux ``` おそらく、これがarchlinuxを普通に使っていくうえでの最小構成かと思います。 serverだけならxorgなどは必要ありません。 ## zshの使い方 ```sh $ sudo pacman -S git-zsh-completion powerline zsh-autocomplete zsh-autosuggestions zsh-completions zsh-history-substring-search zsh-syntax-highlighting ``` 例えば、`ls -`と入力すると補完され、`C-n`, `C-p`で選択。 ```sh:~/.zshrc alias u="sudo pacman -Syu --noconfirm" alias zs="vim ~/.zshrc" alias zr="exec $SHELL && source ~/.zshrc" source /usr/share/zsh/plugins/zsh-autocomplete/zsh-autocomplete.plugin.zsh source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh # source /usr/share/powerline/bindings/zsh/powerline.zsh autoload -Uz compinit compinit fpath=(/usr/share/zsh/site-functions $fpath) HISTSIZE=10000 SAVEHIST=10000 HISTFILE=~/.zsh_history setopt SHARE_HISTORY setopt HIST_IGNORE_DUPS bindkey '^[[A' history-substring-search-up bindkey '^[[B' history-substring-search-down ``` `powerline`は重いのでコメントしています。 ## archlinuxの作り方 archlinuxはシンプルなshell scriptと言えるでしょう。なので色々と便利です。ここでは、`img.sh`, `install.sh`を作ります。 ### img.sh ここでは`archlinux.iso`, `archlinux.tar.gz`を生成します。これはarchlinux上で実行してください。 ```sh:img.sh #!/bin/bash pacman -Syuu --noconfirm git base-devel archiso git clone https://gitlab.archlinux.org/archlinux/archiso ./archiso/archiso/mkarchiso -v -o ./ ./archiso/configs/releng/ mkdir -p work/x86_64/airootfs/var/lib/machines/arch pacstrap -c work/x86_64/airootfs/var/lib/machines/arch base arch-chroot work/x86_64/airootfs/ /bin/sh -c 'pacman-key --init' arch-chroot work/x86_64/airootfs/ /bin/sh -c 'pacman-key --populate archlinux' tar -zcvf archlinux.tar.gz -C work/x86_64/airootfs/ . ``` 例えば、`pacstrap`で自分の好きなツールを指定すれば、独自のimgを作成でき、`docker`にも使えます。 ```sh $ docker import archlinux.tar.gz archlinux:syui $ docker run -it archlinux:syui /bin/bash ``` ### install.sh 最小構成のinstall scriptです。どこかのurlに置いて、install時にcurlして実行するようにすれば便利です。 ```sh $ curl -sLO arch.example.com/install.sh $ chmod +x install.sh $ ./install.sh ``` ```sh:install.sh #!/bin/bash set -euo pipefail # 変数定義 DISK="/dev/sda" HOSTNAME="ai-arch" USERNAME="ai" # パーティション作成(自動) parted $DISK mklabel gpt parted $DISK mkpart ESP fat32 1MiB 1GiB parted $DISK set 1 esp on parted $DISK mkpart primary linux-swap 1GiB 5GiB parted $DISK mkpart primary ext4 5GiB 100% # ファイルシステム作成 mkfs.fat -F32 ${DISK}1 mkswap ${DISK}2 mkfs.ext4 ${DISK}3 # マウント mount ${DISK}3 /mnt mkdir -p /mnt/boot mount ${DISK}1 /mnt/boot swapon ${DISK}2 # インストール pacstrap -K /mnt base linux linux-firmware base-devel vim networkmanager grub efibootmgr # 設定 genfstab -U /mnt >> /mnt/etc/fstab arch-chroot /mnt /bin/bash << EOF ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime hwclock --systohc echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen locale-gen echo "LANG=ja_JP.UTF-8" > /etc/locale.conf echo "$HOSTNAME" > /etc/hostname grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH grub-mkconfig -o /boot/grub/grub.cfg systemctl enable NetworkManager useradd -m -G wheel $USERNAME EOF ```