CoreOS を手動でアップデートする


## 概要
CoreOS を自動アップデートを使わずに手動でアップデートする話。

CoreOS のアップデートの仕組み及び自動アップデートについては [CoreOS の自動アップデートを理解する](http://qiita.com/spesnova/items/38239b2faee209009b09) を参照

## 手動でアップデートする理由
2014/12/18 現在 CoreOS の自動アップデートはまだ不安定という印象なため。海外のサービスで CoreOS を導入しているところでも、自分の環境でも自動アップデート後に etcd のクラスタリング（fleet もダイレクトに影響を受ける）に問題が生じるケースが発生しておりアップデート戦略は `off` にしておくのが無難な気がしている。
ただ、[「CoreOS の自動アップデートを理解する」の「背景」](http://qiita.com/spesnova/items/38239b2faee209009b09#%E8%83%8C%E6%99%AF) にも書いた通り、継続的にアップデートしていくうえで自動アップデートは理想的なので引き続き自動アップデートの導入を試みていきたい。

## 手動でアップデートする
コンテキストとしては

* 現在のバージョンは stable channel の最新の 494.5.0
* 522.2.0 を使いたい
* 522.2.0 は alpha channel の最新バージョン
* アップデート戦略は `off` （＝手動アップデート）

```bash
# 現在のバージョンを確認
core@core-01 ~ $ cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=494.5.0
VERSION_ID=494.5.0
BUILD_ID=
PRETTY_NAME="CoreOS 494.5.0"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"

# アップデート戦略の設定
core@core-01 ~ $ cat /etc/coreos/update.conf
GROUP=alpha
REBOOT_STRATEGY=off

# 手動でアップデート
core@core-01 ~ $ sudo update_engine_client -update
[1218/111512:INFO:update_engine_client.cc(245)] Initiating update check and install.
[1218/111512:INFO:update_engine_client.cc(250)] Waiting for update to complete.
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_UPDATE_AVAILABLE
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_UPDATE_AVAILABLE
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_UPDATE_AVAILABLE
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_UPDATE_AVAILABLE
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.141913
CURRENT_OP=UPDATE_STATUS_DOWNLOADING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.456123
CURRENT_OP=UPDATE_STATUS_DOWNLOADING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.668975
CURRENT_OP=UPDATE_STATUS_DOWNLOADING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.891964
CURRENT_OP=UPDATE_STATUS_DOWNLOADING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_FINALIZING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_FINALIZING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_FINALIZING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_FINALIZING
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
LAST_CHECKED_TIME=1418868913
PROGRESS=0.000000
CURRENT_OP=UPDATE_STATUS_UPDATED_NEED_REBOOT
NEW_VERSION=0.0.0.0
NEW_SIZE=106685362
[1218/111617:INFO:update_engine_client.cc(193)] Update succeeded -- reboot needed.

# リブート
core@core-01 ~ $ sudo reboot

# アップデート後のバージョンを確認
core@ip-10-0-0-26 ~ $ cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=522.2.0
VERSION_ID=522.2.0
BUILD_ID=
PRETTY_NAME="CoreOS 522.2.0"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"
```

* systemd を使って docker コンテナを立ち上げていれば リブート後もコンテナは立ち上がり直す。
* 作業にかかる時間も 5 分もかからないくらい

## メモと感想
### 特定のバージョンにしたい場合はどうすればいいんだろう?
TODO

## REF

* [CoreOS の自動アップデートを理解する](http://qiita.com/spesnova/items/38239b2faee209009b09) 
* [Upgrade CoreOS manually on a single instance, without losing data](https://groups.google.com/forum/#!topic/coreos-user/3qvoMb_MRkY) 
* [Switching Release Channels](https://coreos.com/docs/cluster-management/setup/switching-channels/)
* [CoreOS in Production
](http://slides.com/lukebond/coreos-in-production#/)