はじめに
今まで自作PCにArchLinuxを入れて使ってきましたが、突然PCが故障してしまいました。
そこで、今度はクラウドでArchLinuxを使おうと思い試してみました。
ArchLinuxとクラウド
ArchLinuxをインストールOSとしてデフォルトで選択できるクラウド環境は稀なようです。
しかし、ISOインストールが可能なら、当たり前ですがArchLinuxも入ります。
国内VPSへのインストール手順はいろいろな記事で紹介されていますので、
今回は海外VPSのVultrへのインストール手順を紹介したいと思います。
…とはいっても、手動インストールの手順は環境非依存なので、どこでもほぼ一緒です。
(もちろんデバイス名やネットワークカード名は違いますが)
Vultrの特徴
- ArchLinuxがインストール可能
- 安い
- 最安プランの搭載RAMが他より少し多い (768MB)
- クーポンを活用すれば2カ月程度試用可能
- 海外拠点が豊富(特にヨーロッパ)。東京リージョンあり
- 2段階認証あり (YubiKey OTPも使える)
- APIあり
- DDOS対策オプションあり
※2016/4/20追記、最近以下の機能が追加されました。
-
ブロックストレージ
SSDボリュームを10GBあたり$1/月で好きな時に追加(マウント)可能。今はまだβ期間なので無料、ただしNewJerseyのみ。
安さの点では国内VPSサービスと比較すると負けている気もしますが、海外拠点が多い・クーポンがあり気軽に試用できるのは良いですね。
料金プランについて追記
ホームページのデザイン改変で見えなくなってしまいましたが、メモリ512MB, HDD 125GBで月$5というプランもあります。
例えば、ブロックチェイン系の開発をする時には、HDDが大きい方が良いですね。
vultrコマンドを利用してAPI経由で料金プラン一覧を取得した結果です。
nirvana% vultr plans|sort -n
VPSPLANID NAME VCPU RAM DISK BANDWIDTH PRICE
29 768 MB RAM,15 GB SSD,1.00 TB BW 1 768 15 1.00 5.00
87 512 MB RAM,125 GB SATA,1.00 TB BW 1 512 125 1.00 5.00
88 1024 MB RAM,250 GB SATA,2.00 TB BW 1 1024 250 2.00 10.00
89 2048 MB RAM,500 GB SATA,3.00 TB BW 1 2048 500 3.00 20.00
90 3072 MB RAM,750 GB SATA,4.00 TB BW 2 3072 750 4.00 30.00
91 4096 MB RAM,1000 GB SATA,5.00 TB BW 2 4096 1000 5.00 40.00
93 1024 MB RAM,20 GB SSD,2.00 TB BW 1 1024 20 2.00 10.00
94 2048 MB RAM,45 GB SSD,3.00 TB BW 2 2048 45 3.00 20.00
95 4096 MB RAM,90 GB SSD,4.00 TB BW 4 4096 90 4.00 40.00
96 8192 MB RAM,150 GB SSD,5.00 TB BW 6 8192 150 5.00 80.00
97 16384 MB RAM,300 GB SSD,6.00 TB BW 8 16384 300 6.00 160.00
98 32768 MB RAM,600 GB SSD,10.00 TB BW 16 32768 600 10.00 320.00
100 65536 MB RAM,700 GB SSD,15.00 TB BW 24 65536 700 15.00 640.00
115 8192 MB RAM,110 GB SSD,10.00 TB BW 2 8192 110 10.00 60.00
116 16384 MB RAM,110 GB SSD,20.00 TB BW 4 16384 110 20.00 120.00
117 24576 MB RAM,110 GB SSD,30.00 TB BW 6 24576 110 30.00 180.00
118 32768 MB RAM,110 GB SSD,40.00 TB BW 8 32768 110 40.00 240.00
手動インストール (概要)
いつものArchLinuxインストールと変わりません。いつものように不便ですw
まあ、ArchLinuxユーザなら慣れたやり方だと思いますが、こつこつとコマンドを打っていきます。
ところで、一通りインストールと基本的な設定が終わったら、「スナップショット」を取るのがお勧めです。2台目からはインストールの際にスナップショットを元にサーバを構築出来るので、長いコマンド入力作業が不要になります。
手動インストール (手順)
方針
ArchLinuxが選べないんだけど
VultrでもArchLinuxはデフォルトのメニューの選択肢に存在しません。
ではどうすれば良いかというと、OSに「Custom」を選択して、ISOからインストールします。
ISOの指定
アカウントを登録してログインした後、上部のタブから「Deploy」を選択します。
Operating SystemにCustomを選択すると、ISOをアップロードするためのリンクが出現するのでクリックします。
ISOにはURLを指定できるので、設定しているサーバに一番近いアメリカのミラーのURLをフォームに貼り付けます。
例:
http://mirror.rackspace.com/archlinux/iso/2016.01.01/archlinux-2016.01.01-dual.iso
又は、自分でインストール用のISOを作ることも出来るそうです。
余談ですが、ArchLinuxのCDイメージにはいろいろなパッケージが入っておりかなり便利です。レスキュー用ブートCDとしてもバリバリ使えます。
Uploadボタンをクリックして、少し待ちます。
ダウンロードが完了したら、先ほどのデプロイ画面に戻り、
「My ISOs」に指定したISOが出てくる事を確認して下さい。
サーバータイプ、ロケーション、サーバーサイズ、オプションを選択して、「Place Order」を押すとサーバが起動します。
起動まで3分位掛かりました。
ブート画面をブラウザで確認する
起動が完了すると、サーバのリストの右側に「Manage」というリンクが出てきますのでクリックして下さい。
管理画面で「View Screen」を押すと、ブラウザ上でVNCクライアント(noVNC)が起動し、サーバの画面が見えるはずです。
ブートメニューで止まっているはずですので、ENTERキーを押して起動させます。
起動するとルートでログインされた状態です。
既にネットワークにつながっており、名前解決も出来ます。確認してみます。
ネットワーク疎通確認
$ ping -w 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=9.49 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=9.68 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=9.51 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 9.490/9.563/9.682/0.116 ms
$ nslookup gnu.org
Server: 108.61.10.10
Address: 108.61.10.10#53
Non-authoritative answer:
Name: gnu.org
Address: 208.118.235.148
rootのパスワード設定
echo root:root1234567890 | chpasswd
SSHD起動
noVNCではコピペが出来ず作業しずらいので、SSHDを立ち上げた方が楽です。
今立ち上げたサーバのIPアドレスは My Serversの一覧の所に表示されています。
systemctl start sshd
クライアントからSSH接続
ssh root@サーバのIPアドレス
パーティション作成
デバイス | 容量 | ファイルシステム | マウント先 |
---|---|---|---|
/dev/vda1 | 128MB | ext4 | /boot |
/dev/vda2 | 2GB | swap | スワップ |
/dev/vda3 | 残り全部 | ext4 | / |
parted /dev/vda --script mklabel msdos
# Make partitions
parted /dev/vda --align optimal\
--script\
mkpart primary ext4 2048s 128MB\
unit MB\
mkpart primary linux-swap 128MB 2GB\
unit GB\
mkpart primary 2GB 100%\
set 1 boot on\
align-check opt 1 align-check opt 3
パーティション確認
parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 128MB 127MB primary ext4 boot
2 128MB 2000MB 1872MB primary linux-swap(v1)
3 2000MB 16.1GB 14.1GB primary ext4
ファイルシステムのフォーマット
# Format the partitions and mount it
mkswap /dev/vda2
swapon /dev/vda2
mkfs.ext4 /dev/vda1
mkfs.ext4 /dev/vda3
ファイルシステムのマウント
mount /dev/vda3 /mnt
mkdir /mnt/{boot,etc}
mount /dev/vda1 /mnt/boot
fstab生成
# Generate the /etc/fstab
genfstab -p /mnt > /mnt/etc/fstab
fstab確認
cat -n /mnt/etc/fstab
1 # UUID=0511c0d9-2e1a-47ea-bdaf-2ac0dd0f771b
2 /dev/vda3 / ext4 rw,relatime,data=ordered 0 1
3
4 # UUID=51b42fd0-e7d6-4795-b11c-cbf950cae57a
5 /dev/vda1 /boot ext4 rw,relatime,data=ordered 0 2
6
7 # UUID=d659fbc3-66e0-4a9c-b0c2-fb2134fdb477
8 /dev/vda2 none swap defaults 0 0
9
各種設定
パッケージの取得先を設定します。
手でやるなら一番地理的に近いミラーサイト一つ、又は二つだけ残して残りは削除。
rankmirrorsコマンドを使えば自動でやってくれますが、5~10分程の時間がかかりますので手で設定。
# Find the nearest mirror automatically
mkdir /mnt/etc/pacman.d
cat <<'MIRRORS' >/mnt/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
MIRRORS
# 自動で生成しても良いけど10分前後時間が掛かる
# rankmirrors -n 3 /run/archiso/sfs/airootfs/etc/pacman.d/mirrorlist >/mnt/etc/pacman.d/mirrorlist
基本パッケージのインストール
# サーバ用途なので、頻繁に更新されるlinuxパッケージではなく、より更新が少ないlinux-ltsを入れます
pacstrap /mnt base netctl sudo shadow openssh linux-lts
環境に入る
arch-chroot /mnt bash
Localeの設定
# locale設定
echo en_US.UTF-8 UTF-8 >/etc/locale.gen
# echo ja_JP.UTF-8 UTF-8 >/etc/locale.gen
locale-gen
# Generating locales...
# en_US.UTF-8... done
# Generation complete.
# 言語設定
echo "LANG=en_US.UTF-8" > /etc/locale.conf
ホスト名設定
echo vultr-server-01 > /etc/hostname
タイムゾーン設定
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ネットワーク設定
ネットワーク設定ファイル作成
ネットワークインターフェース名はens3だと思いますが、念のため確認して下さい。
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 56:00:01:55:66:65 brd ff:ff:ff:ff:ff:ff
インターフェース名と同じ名前のファイルを作成して、内容を記述します。
cd /etc/netctl
cp examples/ethernet-static ens3
nano ens3
(※IPアドレス、ネットマスク、DNS、Gatewayの値は置換して下さい)
[My Servers]の[IPv4]タブに移動し、「network configuration」リンクをクリックすると設定すべき値が表示されます。
(CentOS / RHEL の所に表示されている値を使えばOK)
Description='A basic static ethernet connection'
Interface=ens3
Connection=ethernet
IP=static
Address=('111.112.113.114/255.255.254.0')
Gateway='111.112.113.1'
DNS=('108.61.10.10')
## For IPv6 autoconfiguration
# IP6=stateless
## For IPv6 static address configuration
# IP6=static
# Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
# Routes6=('abcd::1234')
# Gateway6='1234:0:123::abcd'
ネットワーク有効化
netctl enable ens3
# ln -s '/etc/systemd/system/netctl@ens3.service' '/etc/systemd/system/multi-user.target.wants/netctl@ens3.service'
時刻同期設定
cat <<TIME >>/etc/systemd/timesyncd.conf
NTP=asia.pool.ntp.org
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
TIME
timedatectl set-ntp true
timedatectl status|grep NTP
# NTP synchronized: yes
特権ユーザの設定
echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers
ブートローダ設定
# Setting up the boot loader
pacman -S grub --noconfirm
grub-install --recheck --target=i386-pc /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg
# 結果
# Generating grub configuration file ...
# Found linux image: /boot/vmlinuz-linux-lts
# Found initrd image: /boot/initramfs-linux-lts.img
# Found fallback initramfs image: /boot/initramfs-linux-lts-fallback.img
特権ユーザ追加 (ログイン用)
※user01 は適切なアカウント名に置換して下さい
useradd -m -g users -G wheel user01
# 初期パスワード追加
echo user01:password | chpasswd
SSHDのパスワード認証を無効化
クラウド上なので、SSHDのパスワード認証を無効にする必要があります。
有効のままだと、例えば寝ている間に総当たり攻撃が来て知らないうちにクラックされてしまうかもしれません。
パスワードではなく公開鍵・秘密鍵を使ってログインするようにしましょう。
公開鍵はSFTPなどでアップロードしても良いですが、一番手軽なのはGithubに登録しているものをそのまま使うことだと思います。curlで普通に取得できます。
GitHubに登録している公開鍵を取得 (確認)
curl -s https://github.com/<<ユーザー名>>.keys
# 例:
curl -s https://github.com/dseg.keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIAnJSEJG1MVYf2BrRSAWw+DhDvswo3Bv1g3MO+dCBoI
GitHubに登録している公開鍵をSSHに登録
su - user01
[ -d ~/.ssh ] || mkdir ~/.ssh
curl -s https://github.com/<<ユーザー名>>.keys >> ~/.ssh/authorized_keys
SSHDの設定ファイルを更新
秘密鍵でSSHのログインが出来るか確認し、OKならSSHのパスワード認証を無効化してしまいます。
もし秘密鍵でログインできないままSSHのパスワード認証を無効化すると、PCにログインできず何もできなくなる(⇒インスタンス破棄しかない)ので注意して下さい。
PasswordAuthentication no
この程度なら手で編集した方が良いかもしれませんが、一応スクリプトを張っておきます。
sudo -i
F=/etc/ssh/sshd_config
# コメント行のPasswordAuthentication...は無視する
if [[ `grep -P '^(?<!#)PasswordAuthentication yes' "$F"` ]]; then
sed -ie 's/^PasswordAuthentication yes/PasswordAuthentication no/g' "$F"
fi
SSHDをブート時に起動させる
systemctl enable sshd
ISOイメージの取り外し
管理ツールの[My Servers] - [Custom ISOタブ]でRemove ISOボタンをクリックします。
再起動
exit
# Unmound drives
umount /mnt/{boot,}
reboot
もし全てが順調なら、ネットワーク及びSSHDが起動しており、SSHクライアントでアクセス可能なはずです。
うまくいかない場合は、ManageリンクからView ConsoleボタンをクリックしてVNCを起動し、rootでログインしてから修正します。
ssh user01@IPアドレス -i 秘密鍵ファイル
起動直後のメモリ使用量確認
$ free -h
total used free shared buff/cache available
Mem: 745M 20M 666M 296K 58M 705M
Swap: 2.0G 0B 2.0G
20M! いいですね。
base-devel追加
開発用のパッケージ群、base-develをインストールします。
sudo pacman -S base-devel
yaourt追加
# /etc/pacman.conf の 末尾に追記
cat <<EOL | sudo tee -a /etc/pacman.conf
[archlinuxfr]
SigLevel = PackageOptional
Server = http://repo.archlinux.fr/\$arch
EOL
sudo pacman --sync --refresh --noconfirm yaourt
あとは、AURから好きなパッケージをインストール出来ます。
nkfを入れてみます。
yaourt -S --noconfirm nkf
不要パッケージ、pacmanのキャッシュ削除
# 不要パッケージ削除
sudo pacman -R linux --noconfirm
# pacmanのキャッシュ削除
sudo pacman -Sc --noconfirm
Vultrのスナップショット機能を活用する
以上で完了です。お疲れさまでした!
最後にこの状態でスナップショットを取ることをお勧めします。
次のインスタンスを作る時、このスナップショットから構築可能となるため、作業時間とデータ転送量の節約になります。
トップの[My Servers]で「Snapshots」タブを開き、フォームにスナップショット名を入力して「Take Snapshot」ボタンをクリックすればOKです。
数分でスナップショットが作成されます。
スナップショットから復元した時は、ネットワーク設定が古いままなため、設定を更新しないとネットワークに繋がらないので注意。
sudo vi /etc/netctl/ens3
# AddressとGatewayの値を更新
参考
-
Installing Arch Linux On a Vultr Server
参考になるものの若干内容に誤りあり。それでこのエントリを書く気になりました。
最後に
VultrにはAPIがあるため、対応したコマンドラインツールやTerraformのプロバイダを使ってインスタンスの操作ができるとの事です。
近々試してみる予定です。