All Your Bugs Are Belong To Ass

VZNopeというOpenVZ wrapperの紹介 (1)

前置きの前置き

これのブログエントリ楽しみにしてますということをこの前言われましたので、書くことにしました。

背中を押してくれた人、ありがとうございます。

前置き

このまえ、Dockerに入門してみたけど、僕の用途とは合わないと思った件などという割とでかい釣り針っぽい感じのエントリを公開したわけですが、あの後も少し触っており、部分的に活用はしているものの、開発環境をお手軽に構築できるツールとしてはやはり「コレジャナイ」感を拭いきれずにいます。

そして、僕は結構長い間OpenVZを触りまくってた時期があり、ノウハウも相応に持ち合わせています(と思っている)。じゃあ、Dockerを触って「便利だな」と思った機能をOpenVZにも取り入れたらどうだろう・・・!

そういう割と大雑把で向こう見ずな思想に基づき、VZNopeというものを作ったので、紹介したいと思います。ちなみに今のところ非常に雑な作りなので、system()とか呼びまくりです。素直にshellとかで実装すれば良かったかな!w

VZNopeとは?

OpenVZに以下の機能を追加するラッパーです。

  • OSテンプレートの管理

  • コンテナ作成手順の簡略化とバージョンコントロール

  • 既存機能の一部強化

  • 一般ユーザ(not root)向けCLIの提供

動作に必要なもの

  • Ubuntu 14.04 or CentOS 6 (他のLinux distroでも動作するかもしれないけど、確認してません)

  • OpenVZ (この辺にインストールの仕方かいてます)

  • vzctlやvzlistなどのいわゆるvztools

  • git

  • wget

  • perl-5.12 or later (それ以前ではセットアップツールの動作確認をしてません)

入手とインストール

$ git clone https://github.com/ytnobody/VZNope.git
$ cd VZNope
$ ./setup.sh

ここまでやったら、ひたすら待ちましょう。

プロンプトが戻ってきたら、あとはこんな感じにvisudoしてあげるといいです。

$ pwd vzn     ### vznのパスをしらべる
$ sudo visudo ### 'youruser ALL=(root) NOPASSWD: /path/to/vzn' みたいな感じの行を追加する

最後に、$HOME/.bash_profileを読み直してやるとオーケーです。

$ . $HOME/.bash_profile

無事にインストールができていれば、vznコマンドが実行できるはずです。

~$ vzn

  usage: 
    vzn [subcommand] [options]

  subcommands:
    build
    commit
    commit-log
    create
    destroy
    enter
    exec
    get-image
    help
    images
    images-available
    list
    set
    start
    stop
    vznfile

こんなかんじ。サブコマンドがいっぱいありますけど、どれもいきなりぶっ叩いても苦しい思いをすることはないはずです。

利用可能なイメージ(OSテンプレート)を見てみる

無事にvznが実行できるようになったら、今度はイメージ選びをしたいですね。vzn images-available としてみましょう。

~$ vzn images-available
        DIST     VERSION      ARCH                               TAG    SIZE            MODIFIED
----------------------------------------------------------------------------------------------------
      centos           5       x86                             devel    197M    2014-05-14 02:36
      centos           5       x86                                      174M    2014-05-14 02:35
      centos           5    x86_64                             devel    208M    2014-05-14 02:38
      centos           5    x86_64                                      184M    2014-05-14 02:37
      centos           6       x86                             devel    234M    2014-05-14 02:31
      centos           6       x86                                      203M    2014-05-14 02:29
      centos           6    x86_64                             devel    249M    2014-05-14 02:34
      centos           6    x86_64                                      215M    2014-05-14 02:32
    (中略)
      ubuntu       12.10    x86_64                                      137M    2014-05-14 02:19
      ubuntu       13.10       x86                                      141M    2014-05-14 02:20
      ubuntu       13.10    x86_64                                      143M    2014-05-14 02:21
      ubuntu       14.04       x86                                      145M    2014-05-14 02:11
      ubuntu       14.04    x86_64                                      147M    2014-05-14 02:13
----------------------------------------------------------------------------------------------------

note: 
  'vzn images-available subtypes' to show the list of image subtypes
  'vzn images-available beta' to show the list of images that is assigned to beta subtype

こんな感じで、OS一覧がとれます。

コンテナを作ってみよう

コンテナをつくるコマンドは vzn createです。書式はこんな感じ。コンテナIDはOpenVZの許容するコンテナIDとしての数値で指定してください。

vzn create [コンテナID] [ディストロ名(省略時は最新版)] [オプション]

例えば、コンテナID101にcentosの最新版をいれたい場合は、こんな感じです。

vzn create 101 centos

これだけ。OpenVZを多少かじったことのある方ならわかると思いますが、書式が大幅に短縮されているのがわかると思います。

ちなみにコンテナのIPアドレスは、ホストIPを元に機械的に割り当てられますが、それが困るという方もいると思います。そんな時は --ip オプションを使います。

vzn create 101 centos --ip 10.20.10.101

また、ホスト名についても、とくに指定がなければ適当につけられてしまうのですが、--name オプションで明示的に指定することができます。

vzn create 101 centos --name www101.oreore

もし32bitなイメージを使いたい場合、--arch オプションでx86を指定すると実現可能です。

vzn create 101 centos --arch x86

あと、OSバージョンを指定したい(例えばcentos4とかを使いたい!みたいな状況)場合は、

vzn create 101 centos@4

のように、[ディストロ名]@[バージョン]とすればよいです。

コンテナを起動しよう

コンテナを起動するのはとても簡単で、 vzn start コマンドで行います。

vzn start [コンテナIDまたはホスト名]

例えば、コンテナIDが101のコンテナをブートするには、

vzn start 101

とすればできますし、ホスト名がwwwならば

vzn start www

でwwwというコンテナがブートします。

(2)に続く

Created at
by
ytnobody
Last modified at
2014-06-26 16:55
by
ytnobody