APIって単語があると、超面倒くさそうって思う方もいるかと思います。
私もその一人です。というわけで、ここではAPIという単語が嫌いでも簡単にVMware Workstation Player(以下 VM)をREST API使って起動する方法についてまとめました。
まずうちの環境をざっと書き出します。
ホストOS:Ubuntu 20.04 LTS +VMware Workstation 16.12 Player
ゲストOS:Ubuntu 16.04 LTS
Ubuntu大好き。Rasbianも好きですよ。
そもそも、何でREST APIに至ったのか
凄く簡単に経緯を書くと、VMをLinuxでGUI無しで起動(headless)したかったからです。
これまではWindowsで動かしてたのですが、それをUbuntuに移行するという過程で、WindowsでVMをサービス化していたアプリがUbuntuには無いという事で、それをどうにか出来ないかが始まりです。
そこで、色々と探し回ったところ、最初は以下のような情報が出てきました。
VMware VIXを使えばいい!
これらの方法、既に使う事が出来ない情報でした・・・無念。
これらの方法を試すだけで多分、1日近く費やしてしまった気がします。
私の時間を生贄に捧げ、このブログまでたどり着いた人に祝福あれ。
それでは早速やり方を書き出していきたいと思います。
戦いはホストOSをインストールするところから始まっている
私はエンジニアの端くれなので、どうにも無駄なアプリが入っているのが嫌いです。謎のゲームとか。
なので、最初はUbuntuを最小インストールして進めました。
どっこい、これが1つ目の罠でした。
LinuxのVMwareはインストールする際にカーネルをビルドするのですが、最小インストールだとビルドに必要なライブラリが足りず、不完全な状態でインストールされて動きません。
どのライブラリが足りないかまでは探すのが骨が折れるので実施してませんが、とりあえず最小インストールしないで進めるが吉です。
グラボのドライバーとか云々は入れてません。
ホストOSのインストールがひとしきり終わったら、次はいよいよVMについてです。
まずはビルド環境をインストール。その後にVM関連
先にも書いた通り、LinuxのVMwareはインストール時にカーネルをビルドします。
ですので、まずは以下をインストールしましょう。
sudo apt update -y && sudo apt upgrade -y sudo apt install build-essential -y
何はともあれのアップデート類をしてから、ビルド関連をインストールです。
インストールが終わったら、VMwareのサイトからVMのインストーラを拾ってきましょう。
VMwareも情報収集に必死なのか、Customer Connectというのを登録しないとダウンロードさせてくれなくなりました。面倒くさい。
ダウンロードが終わったら、以下のコマンドでインストールを実行します
sudo sh ダウンロードしてきたVMのbundleまでのパス 例:sudo sh /home/ubuntu/VMware-Player-16.1.2-17966106.x86_64.bundle
インストールが終わったら、とりあえず一回インストールされたVMを起動してみましょう。
こんな感じで起動されるはずです。なんかもう終わった気分になりますが、まだ序章です。
一回VMを閉じてから、以下のコマンドを実行です。
sudo mkdir /etc/vmware/hostd/ sudo touch /etc/vmware/hostd/proxy.xml
ただし、これは実行する意味があるのかちょっと不明です。
ターミナルでvmplayerで起動した際にこのファイルが無いよ!とエラーが出ていたのでとりあえず作成して置いたというだけです。
何かのお守りになるかもしれない程度で考えてます。
インストールはここまで。いよいよREST APIの操作へ
APIを操作する前に、そもそもAPIが動かせる環境かの確認が必要です
cd /usr/bin ls -l
上記のコマンドでまず、vmrestというのを探します。
察しが良い方は既にお分かりかもしれませんが、このvmrestというのがREST APIでの操作を可能とするアプリケーションです。
vmrestが見つかったら、早速vmrestで設定していきます。
vmrest -C
大文字のCだという事に注意してください。
上記を実行すると、ユーザー名とパスワードを聞かれます。
ここで言うユーザー名とパスワードは、vmrest内でのみ使うものなので、OSのログインユーザーとかとは関係ありません。
設定したら次にREST APIを受け付けるサーバーを起動します。
vmrest -P 5000
上記のコマンドを実行すると、REST APIを受け付けるサーバーを起動しましたという表示が出ます。
アクセス先はhttp://127.0.0.1:5000です。
早速アクセスしてみましょう。
すると、こんな感じのページが表示されると思います。
なんかそれっぽい感じがしてきますね。
まずは、先程設定したユーザー名とパスワードを入力します。
右上にあるAuthorizationをクリックします。
先程作成したユーザー名とパスワードを入力して、Saveをします。
次に、現在ある仮想イメージのIDを取得します。
VM Managementをクリックして展開し、一番上の/vmsをクリックします。
展開した中にあるTRY IT OUT !をクリックします。
すると、登録されている仮想イメージのIDが表示されるので、そのIDをコピーしてどこかテキストファイルとかに保存しておきます。
続いて、VM Power ManagementのShow/Hideをクリックして展開します。
次にPUT(黄土色)の方をクリックします。
展開されたら、Operationのところにはonとだけ記入します。
idの欄は上のスクショでは空欄になっていますが、実際にはidを入力してから実行しています。idのところには先程取得した仮想イメージのIDを入力してください。
記入したら、下にスクロールします。
TRY IT OUT !をクリックすると実行されます。
すると、VMのGUI無しに、バックグラウンドで仮想イメージが立ち上がります。
私の場合は仮想の中にTeamViewerやAnyDeskを仕込んであるので、それのステータスで起動したかどうかを確認しています。
ここで起動出来る事が確認出来たら、あとは自動起動するだけですので、伝統と格式のcronで実行しましょう。
cronで実行するコマンドは、上記のTRY IT OUT !を実行した後に出てくる、結果のCurlの実行コマンドです。
黒塗りされている場所にはidが入ります。
このCurlの内容を全てコピーします。
例:crul ‘https://~ REQUEST_BODY
REQUEST_BODYまで全部コピーしてください。REQUEST_BODYは不要そうに見えるかもですが。
コピーした内容をそのままターミナル上にコピペしてから実行すると、仮想イメージがバックグラウンドで自動起動します。
なお、自動起動する場合は、crontabに書いて自動起動をすればいいだけですので、詳細は割愛します。色々と調べればcronについては先人の方々がいると思います。
まとめ
VMware Workstation PlayerをREST APIでバックグラウンドで起動する方法をまとめました。
結構今更感のある内容かもしれませんが、オペレーターの目に見えるところでVMを動かしていて、不意の操作でVMを停止してしまったというような事が起きないよう、バックグラウンド実行するのは結構大事だなと思います。
この記事が誰かのお役に立つことを祈念致します。