Hatena::ブログ(Diary)

とあるプログラマの日記 @s025236 RSSフィード Twitter

2015-01-05

簡単!さくらのVPSにcoreOSをインストールする方法

さくらのVPSを契約直後の状態から10〜15分程度でインストールが完了します。

SSHで準備する

SSHでログインしてインストールに必要なファイルを収集します。
sshならコピー&ペーストできるので、この後のコンソール操作で手が抜けるようにこの段階で出来るだけ纏めておきます。

cloud-init

まだ勉強中なので最低限の設定だけしています。

static.networkの[Match]で悩んでる方が多いですがeth*は非推奨みたいなのでMACAddressで良いのではと思ってますが機種に依存する設定は省きたいし難しいですね←アドバイスお待ちしております

mkdir -p /tmp/work
export VPS_IP=160.16.83.xx          # VPSのIPアドレス
export VPS_GATEWAY=160.16.82.1      # VPSのGATEWAYアドレス
export VPS_DNS1=210.188.224.10      # プライマリDNS
export VPS_DNS2=210.188.224.11      # セカンダリDNS
export VPS_MAC=9C:A3:BA:01:CD:F1    # MACアドレス
export NTP_SERVER=ntp1.sakura.ad.jp # sakura以外ならntp.nict.jpが便利
export ETCD_HOST=`curl -s https://discovery.etcd.io/new` # ディスカバリー用アドレスを発行する
cat > /tmp/work/cloud-config << EOT
#cloud-config
hostname: $HOSTNAME
coreos:
#  etcd:
#    discovery: $ETCD_HOST
#    peer-addr: $VPS_IP:7001

  units:
#    - name: etcd.service
#      command: start
#    - name: fleet.service
#      command: start
    - name: docker.service
      command: start
    - name: timezone.service
      command: start
      content: |
        [Unit]
        Description=set the timezone

        [Service]
        Type=oneshot
        ExecStart=/usr/bin/timedatectl set-timezone Asia/Tokyo
        RemainAfterExit=yes
    - name: swap.service
      command: start
      content: |
        [Unit]
        Description=Turn on swap

        [Service]
        Type=oneshot
        Environment="SWAPFILE=/swapfile"
        Environment="SWAPSIZE=1GiB"
        RemainAfterExit=true
        ExecStartPre=/usr/bin/sh -c '/usr/bin/fallocate -l \${SWAPSIZE} \${SWAPFILE} && chmod 0600 \${SWAPFILE} && /usr/sbin/mkswap \${SWAPFILE}'
        ExecStartPre=/usr/sbin/losetup -f \${SWAPFILE}
        ExecStart=/usr/bin/sh -c "/sbin/swapon \$(/usr/sbin/losetup -j \${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStop=/usr/bin/sh -c "/sbin/swapoff \$(/usr/sbin/losetup -j \${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStopPost=/usr/bin/sh -c "/usr/sbin/losetup -d \$(/usr/sbin/losetup -j \${SWAPFILE} | /usr/bin/cut -d : -f 1)"

        [Install]
        WantedBy=multi-user.target

    - name: static.network
      content: |
        [Match]
        MACAddress=$VPS_MAC

        [Network]
        Address=$VPS_IP/23
        Gateway=$VPS_GATEWAY
        DNS=$VPS_DNS1
        DNS=$VPS_DNS2

write_files:
  - path: /etc/ntp.conf
    content: |
      server $NTP_SERVER
      restrict $NTP_SERVER kod nomodify notrap nopeer noquery
      restrict default ignore
      restrict 127.0.0.1

ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEA5BqkP+ToroYtzOhnZ2aOJj8WqUpRcQRy/D2ojlPsQutM9Pqfo3qI+75iLpTAAkt+X0RlSBNFLfLsDgfV45IWS/5jv7CKLF/AAIU8Ke5wKVXZrC1LkZ7HfnluALhepUkeB3ilrhFQS+qeS8LHw2s2C2Ig/bGj8lXuEyt93aSREIU= makoto@2ch.to
EOT

※公開鍵は自分のに書き変えてください。

ファイルの収集

installerの中で呼ばれるコマンドや設定ファイルを準備します。
(コンソールでviとか面倒臭いので出来るだけこの段階で用意しましょう)

cp /sbin/{blockdev,wipefs,blkid} /tmp/work/
cp /bin/{mktemp,sed,grep,bash,lsblk,env,mkdir,rm,mount,umount,echo,cp} /tmp/work/
cp /usr/bin/{tee,wget,gpg,bzip2,which} /tmp/work/
(cd /tmp/work && ln -f bzip2 bunzip2)
echo 'nameserver 8.8.8.8' > /tmp/work/resolv.conf
coreos-install

coreOSのインストーラー本体をダウンロードして他のファイルと共にアーカイブします。
不要ファイルは削除しておきましょう。

wget -O /tmp/work/coreos-install https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install
(cd /tmp/work && tar cf /work.tar ./)
rm -rf /tmp/work/
sync

VNCコンソールを立ち上げる

コントロールパネルからカスタムOSインストールを選択して「CentOS7 x86_64」をインストールするVNCコンソールを立ち上げます。
(/dev/vdaを解放した状態でシェルが使いたいだけなので互換性のあるOSならなんでもかまいません)

「Troubleshooting」を選択

f:id:s025236:20150105191017p:image

「Rescue a CentOS system」を選択

f:id:s025236:20150105191018p:image

「Skip」を選択

f:id:s025236:20150105191019p:image

coreOSをinstallする

しばらくするとシェルが立ちあがりますのでまずは先ほど作成したwork.tarを取り出します。

mkdir -p /mnt/root
mount /dev/vda3 /mnt/root
tar xf /mnt/root/work.tar -C /tmp
umount /mnt/root

coreOSのinstall中にネットワークが必要になるのでネットワークを有効にします。

ifconfig eth0 160.16.83.xx(IPアドレス)/23
route add default gw 160.16.xx.1(ゲートウェイ)
cp /tmp/resolv.conf /etc/

「coreos-install」を実行します。

export PATH=$PATH:/tmp/
bash /tmp/coreos-install -d /dev/vda -C stable -c /tmp/cloud-config

「Success! CoreOS stable current is installed on /dev/vda」と表示されたらシャットダウンし、コントロールパネルから起動します。
(rebootだとカスタムOSインストールが終わらないのでシャットダウンが必要です)

インストール完了

パスワードは設定されてないのでSSHで秘密鍵を使ってcoreユーザーにログインします。
初回ntp.confの書き換えがntpdの起動後になるのでntpdの再起動が必要です。

参考