LoginSignup
15
15

More than 3 years have passed since last update.

クラウド環境でArchLinuxを使う (Vultr編)

Last updated at Posted at 2016-01-11

はじめに

今まで自作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台目からはインストールの際にスナップショットを元にサーバを構築出来るので、長いコマンド入力作業が不要になります。

手動インストール (手順)

方針

  • AURを使うため、yaourtを入れる
  • カーネルはlinuxではなくlinux-lts。linuxは更新頻度が高すぎるため。LTSはLong-term supportの略で長期サポート版の意味です。

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)

/etc/netctl/ens3
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にログインできず何もできなくなる(⇒インスタンス破棄しかない)ので注意して下さい。

/etc/ssh/sshd_config
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の値を更新

参考

最後に

VultrにはAPIがあるため、対応したコマンドラインツールTerraformのプロバイダを使ってインスタンスの操作ができるとの事です。
近々試してみる予定です。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15