さくらのVPSへのArchLinuxインストール

目次

1. 手順書作成時の環境

  • さくらのVPSバージョンv5
  • 2023年5月時のArchLinuxインストーラを使用

2. 手順

2.1. さくらのVPSコントロールパネルで行う作業

ArchのインストールISOでインストーラ環境を立ち上げる

  • OS再インストール機能等で ArchLinux ISO を選択して再インストール実施
  • VNCコンソール起動のUIをクリックしてコンソールにアクセスする
  • 次の「VNCコンソール上で行う作業」に移る

2.2. Webコンソール上で行う作業

Archのインストーラ環境でネットワーク設定を行い、インターネットと通信可能な状態にする 各種IPアドレスはVPSのコントロールパネルから確認可能。

  • ip addr でネットワークインターフェイスを確認する
  • ip addr add {VPSのIPアドレス}/23 dev {使用ネットワークインターフェイス} でIPアドレスを設定
  • ip route add default via {VPSのゲートウェイIPアドレス} でデフォルトゲートウェイを設定
  • vim /etc/resolv.conf 等で nameserver を下記2つに設定する
    • nameserver {プライマリDNSIPアドレス}
    • nameserver {セカンダリDNSIPアドレス}
  • ping www.genie-yk.net などで疎通確認を行う
  • 例えば下記のようにしてパソコンや作業用サーバからインストーラ環境にSSHログイン可能にする
  • インストーラ環境のrootユーザにSSHログインする
  • 次の「インストーラ環境へSSHログイン後の作業」に移る

2.3. インストーラ環境へSSHログイン後の作業

シェルスクリプトによる自動インストールを行う。

  • 後述の構築スクリプト「ArchLinuxインストールスクリプト」をアップロードする
  • 上記スクリプトでは fdisk によるパーティショニング部分では必要に応じてパーティションサイズを変更する
    • パーティション1: swap領域
    • パーティション2: /boot
    • パーティション3: rootファイルシステム
  • 後述の構築スクリプト「ArchLinuxインストールスクリプト実行スクリプト」をアップロードする
  • 上記スクリプトの環境変数部分を書き換えておく
  • 下記のように実行してインストールを終える
    • sh do_install_arch_sakura_vps.sh
  • 2回目のスクリプト実行時など既にファイルシステムがある場合下記ダイアログが表示されることがあるがこの場合yを入力する

mke2fs 1.47.0 (5-Feb-2023) /dev/vda3 contains a ext4 file system last mounted on / on Tue May 30 15:47:56 2023 Proceed anyway? (y,N) y

  • cp -a root.ssh/authorized_keys mnt/root.ssh/authorized_keys でインストールした環境にもSSHログイン可能にする
  • 再起動してSSHログインができたら成功

3. 構築スクリプト

3.1. ArchLinuxインストールスクリプト実行スクリプト

do_install_arch_sakura_vps.sh

#!/bin/sh

env HOST_NAME={設定するホスト名} \
    ADMIN_PASSWORD={設定するrootユーザパスワード} \
    NETWORK_INTERFACE={使用ネットワークインターフェイス} \
    IP_ADDRESS={VPSのIPアドレス} \
    GATEWAY={VPSのゲートウェイIPアドレス} \
    NAME_SERVER1={プライマリDNSIPアドレス} \
    NAME_SERVER2={セカンダリDNSIPアドレス} \
    sh install_arch_sakura_vps.sh

3.2. ArchLinuxインストールスクリプト

install_arch_sakura_vps.sh

#!/bin/sh

[ -z "$HOST_NAME" ] && { echo variable \$HOST_NAME is empty. 1>&2; exit 1; }
[ -z "$ADMIN_PASSWORD" ] && { echo variable \$ADMIN_PASSWORD is empty. 1>&2; exit 1; }
[ -z "$NETWORK_INTERFACE" ] && { echo variable \$NETWORK_INTERFACE is empty. 1>&2; exit 1; }
[ -z "$IP_ADDRESS" ] && { echo variable \$IP_ADDRESS is empty. 1>&2; exit 1; }
[ -z "$GATEWAY" ] && { echo variable \$GATEWAY is empty. 1>&2; exit 1; }
[ -z "$NAME_SERVER1" ] && { echo variable \$NAME_SERVER1 is empty. 1>&2; exit 1; }
[ -z "$NAME_SERVER2" ] && { echo variable \$NAME_SERVER2 is empty. 1>&2; exit 1; }

fdisk /dev/vda <<EOF
o
n
p
1

+2G
n
p
2

+1G
n
p
3


t
1
82

t
2
83

t
2
83

w
EOF
mkfs.ext4 /dev/vda3
mkswap /dev/vda1
mkfs.fat -F 32 /dev/vda2
mount /dev/vda3 /mnt
mount --mkdir /dev/vda2 /mnt/boot
swapon /dev/vda1
pacstrap -K /mnt base linux linux-firmware
genfstab -U /mnt >> /mnt/etc/fstab
:> /mnt/etc/dhcpcd.conf
echo interface ${NETWORK_INTERFACE} >> /mnt/etc/dhcpcd.conf
echo static ip_address=${IP_ADDRESS}/23 >> /mnt/etc/dhcpcd.conf
echo static routers=${GATEWAY} >> /mnt/etc/dhcpcd.conf
echo static domain_name_servers=${NAME_SERVER1} ${NAME_SERVER2} >> /mnt/etc/dhcpcd.conf
chmod 0644 /mnt/etc/dhcpcd.conf
arch-chroot /mnt <<EOF
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
sed 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' < /etc/locale.gen > /etc/locale.gen.new
mv /etc/locale.gen.new /etc/locale.gen
echo $HOST_NAME > /etc/hostname
mkinitcpio -P
(echo $ADMIN_PASSWORD; echo $ADMIN_PASSWORD) | passwd
pacman -Sy --noconfirm grub
grub-install --target=i386-pc /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg
pacman -Sy --noconfirm dhcpcd openssh
systemctl enable dhcpcd sshd
EOF