目次
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ログイン可能にする
- curl -L https://mykey.example.com/mykey.pub > .ssh/authorized_keys
- chmod 0600 .ssh/authorized_keys
- インストーラ環境の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