さくらのクラウドの API を使ってみただけの話

さくらのクラウドで利用できる API を使ってみたメモです。メモだけ。
API の操作に必要な API キーはクラウドの管理画面にある「設定」→「API キー」とたどると作ったり確認したりできます。

ローカル側は Windows から FreeBSD 11.0-RELEASE-p7 に SSH 接続したターミナルの bash から curl で叩いています。

使う API キーとか URL は変数に格納しておきます。

$ export sandbox="https://secure.sakura.ad.jp/cloud/zone/tk1v/api/cloud/1.1/"
$ export token="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$ export secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

以下に出てくる12桁のXはディスクのIDとかサーバーのIDとかそんな感じなので、適宜読み替える。
curl の実行結果を jq に渡しているのはレスポンスの JSON を整形して読みやすくしてるだけです。なくても OK。

サーバーの作成とか

まずはサーバープランのプラン ID を確認

$ curl --user "${token}:${secret}" -X GET ${sandbox}/product/server | jq "."

確認したプラン ID を使って1コア 1GB のサーバーを作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/server -d '{"Server":{"Name":"Test Server","ServerPlan":{"ID":1001}}}' | jq "." 

続いてディスクプランのプラン ID を確認

$ curl --user "${token}:${secret}" ${sandbox}/product/disk | jq "." 

確認したプラン ID から SSD プランで 20GB のディスクを作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/disk -d '{"Disk":{"Name":"Test Disk","Plan":{"ID":4},"SizeMB":20480}}' | jq "."

保持しているディスクの一覧を表示

$ curl --user "${token}:${secret}" -X GET ${sandbox}/disk | jq "."

作成したディスクを作成済みのサーバーに接続

$ curl --user "${token}:${secret}" -X PUT ${sandbox}/disk/XXXXXXXXXXXX/to/server/XXXXXXXXXXXX | jq "."

サーバーで利用するインターフェイスの作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/interface -d '{"Interface":{"Server":{"ID":XXXXXXXXXXXX}}}' | jq "."

サーバーがネットワークに出られるようにインターフェイスを共有セグメントに接続

$ curl --user "${token}:${secret}" -X PUT ${sandbox}/interface/XXXXXXXXXXXX/to/switch/shared | jq "."

セットしたサーバーの電源を入れる

$ curl --user "${token}:${secret}" -X PUT ${sandbox}/server/XXXXXXXXXXXX/power| jq "."

管理画面でサーバーを強制終了してからサーバーと共にディスクを削除

$ curl --user "${token}:${secret}" -X DELETE ${sandbox}/server/XXXXXXXXXXXX/ -d '{"WithDisk:XXXXXXXXXXXX}' | jq "."

アーカイブの操作

もういっちょ SSD プラン 20GB のディスクを作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/disk -d '{"Disk":{"Name":"Test Disk","Plan":{"ID":4},"SizeMB":20480}}'| jq "."

作成したディスクを元にアーカイブを作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/archive -d '{"Archive":{"Name":"Test Archive","SizeMB":20480,"SourceDisk":{"ID":XXXXXXXXXXXX}}}'| jq "."

元になったディスクを削除

$ curl --user "${token}:${secret}" -X DELETE ${sandbox}/disk/XXXXXXXXXXXX | jq "."

今度はアーカイブを元に新しいディスクを作成

$ curl --user "${token}:${secret}" -X POST ${sandbox}/disk -d '{"Disk":{"Name":"Test Disk","SourceArchive":{"ID":XXXXXXXXXXXX}}}' | jq "."

アーカイブを削除

$ curl --user "${token}:${secret}" -X DELETE ${sandbox}/archive/XXXXXXXXXXXX | jq "."

後は

さくナレも参考にして Rubyスクリプトを組みたい。

地理院地図のタイルと OSM を重ねて比較するページを作った

国土地理院ベクトルタイル提供実験レポジトリ をフォークして地理院地図のラスタ/ベクタタイルと OpenStreetMap を重ねて表示するページを作りました。

地理院地図と OSM の比較

リポジトリはこちら GitHub

地理院地図と比較して OSM の中で不足しているオブジェクトを目視で判断したかった気がしたので作成したものです。
見ている画面の領域を JOSM で開くためのこの場所を JOSM で編集ボタンが右上の方にあります。

ローカルだと leaflet-hash があってもちゃんと動いたのですが、ロリポップのサイトにアップロードしたらうまくいかなかったので zoar.space の方はハッシュを表示しないようにしています。

スクリプトをいじると Potlatch 2 とか iD エディタでも編集できるようになると思いますが…。

Word を起動した時に「shredder.osi.office.net/shredderservice/api/aadgraph/gettenantdetails」へのサインインダイアログが表示される

Office 365 Business の契約で使えるデスクトップ版 Word を起動した時に次のようなサインインダイアログが表示されるようになってしまいました。

f:id:k-side:20161214145656p:plain

「なんだこれ」と思いググったところ、Microsoft の英語圏コミュニティで解決策が示されていました。

作業としては次のような感じ。

  • Word で表示されるダイアログをバツで消してから「ファイル」→「アカウント」→「サインアウト」とたどって Office 365 からサインアウトする

f:id:k-side:20161214151404p:plain

  • コントロールパネルから「資格情報マネージャー」を開く

f:id:k-side:20161214151401p:plain

  • 「MicrosoftOffice15_Data」または「MicrosoftOffice16_Data」で始まる資格情報を「資格情報コンテナーから削除」

f:id:k-side:20161214151400p:plain

  • 必要に応じて Word からサインインする

f:id:k-side:20161214151402p:plain

これで件のサインインしてっていうダイアログが出てこなくなります。

debian で VS Code が起動できなかったのでライブラリをいじった

さくらのクラウドに X 環境構築してローカルから接続して開発とかどうだろうって遊ぼうとしたら VS Code が起動できなかった時のメモ。

環境は次の通り

deb ファイルから VS Code をインストールして、メニューから起動させようとしても何も起こらない。
tar ファイルを落として解凍して起動しようとしたら次のようなエラーが発生して起動しませんでした。

Xlib:  extension "XInputExtension" missing on display ":11.0".
Xlib:  extension "XInputExtension" missing on display ":11.0".
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
Xlib:  extension "XInputExtension" missing on display ":11.0".
Xlib:  extension "XInputExtension" missing on display ":11.0".

既に GitHub の vscode リポジトリでは issue が作られていて、解決法も掲載されていました。

んで、次のような操作でとりあえず起動ができます。

$ mkdir ~/lib
$ cp /usr/lib/x86_64-linux-gnu/libxcb.so.1 ./lib/
$ sed -i 's/BIG-REQUESTS/_IG-REQUESTS/' ~/lib/libxcb.so.1

この ~/lib ディレクトリを LD_LIBRARY_PATH に突っ込むと起動します。

$ LD_LIBRARY_PATH=$HOME/lib code

GUI から起動するメニューの内容も変更しておかないと GUI のメニューからは起動できません。

$ sudo vi /usr/share/applications/code.desktop

[Desktop Entry] の中にある Exec を変更します。

Exec=sh -c "env LD_LIBRARY_PATH\=\$HOME/lib  /usr/share/code/code" %U

これで GUI のメニューからも起動できるようになりました。

mikutter を起動した瞬間にろき氏をブロックするプラグインを書きました

一部で被ブロック芸人として知られ、[被ブロック数n件達成イベント]などが開催されているろき氏、そんな彼をブロックするためのプラグインmikutterにあるのかと作者の人に尋ねてみましたが、どうやら無いようだったので作ってみました。

ブロックするプラグインはないことと同時に mikutter プラグインの中でブロック関係の処理をしているプラグインを教えていただいたのでそれを参考にしています。

このプラグインでは mikutter が起動した段階でブロックリクエストを送ります。
ブロックリクエストは、すでにブロックしているユーザーに対して行ってもエラーにならないようなので、ブロックをチェックせずにリクエストを送ることができました。

プラグインがこの形になってから数時間経っていたのですが、mikutter で認証しているアカウントと、ブロックの状況を確認しているアカウントが違っていたので「ブロックできていない」と思ってしばらく悩んでいました。
確認重要…。

なお、自分はろき氏をフォローもブロックもしておりません。ご了承ください。

Zabbix サーバーを仮想マシンから実機に移動する

ちょっと仮想マシンを別のことに使いたくなったので、Zabbix サーバーを実機に移動してみました。
今までだとまっさらな環境からスタートするのですが、今回は保存されているデータごとごっそり移動してみた記録です。

ざっくりとした移行プランは次のような感じ。

  • 新サーバーに Zabbix と MySQL をセット
  • 旧サーバーの Zabbix を停止
  • 旧サーバーのデータベースをエクスポート
  • スクリプトを新サーバーにコピー
  • 旧サーバーをシャットダウン
  • 新サーバーへデータベースをリストア & Zabbix Server の再起動
  • 新サーバーの IP アドレスを旧サーバーのものにセット

クッソ長いので注意。 あとパスワードは適当な文字列なのでちゃんとセットしないとひどい目に遭います。

続きを読む

QGIS の QTiles プラグインを使えるようにした話

タイルサーバーの画像を拾ってきて結合して使いたかったのですが、 QGIS の QMetaTile プラグインは動かないし、 QTiles は一覧にないし…だったので QTilesGithub から取ってきて使えるようにしてみました。

環境は Windows 7 x64 で QGIS 2.16.3 を使ってます。

Git が使えるコンソールでリポジトリをクローンする(ウチの場合は PowerShell)

PS> git clone https://github.com/nextgis/QTiles

そのままビルドすると No module named qgscollapsiblegroupbox というエラーで泣かされるので QTiles\ui\qtilesdialogbase.ui の997行~1003行あたりを編集する。 デフォルトでは次のような感じ

 <customwidgets>
  <customwidget>
   <class>QgsCollapsibleGroupBox</class>
   <extends>QGroupBox</extends>
   <header>qgscollapsiblegroupbox.h</header>
   <container>1</container>
  </customwidget>

ここの header 要素の中身を書き換えて

 <customwidgets>
  <customwidget>
   <class>QgsCollapsibleGroupBox</class>
   <extends>QGroupBox</extends>
   <header>qgis.gui</header>
   <container>1</container>
  </customwidget>

てな感じにすると良いよってナレッジがあった。

Python 関連で一番環境がいい OSGeo4W Shell を起動してビルドする

C:\> B:
B:\> cd b:\build\QTiles

Makefile.bat が上手く動かなかったので手動で順番に実行する

b:\build\QTiles> cd ui
b:\build\QTiles\ui> pyuic4 -o ui_aboutdialogbase.py aboutdialogbase.ui
b:\build\QTiles\ui> pyuic4 -[f:id:k-side:20161011120435p:plain]o ui_qtilesdialogbase.py qtilesdialogbase.ui
b:\build\QTiles> cd ..
b:\build\QTiles> pyrcc4 -o resources_rc.py resources.qrc
b:\build\QTiles> lrelease i18n\qtiles_ru_RU.ts
b:\build\QTiles> cd ..

lrelease コマンドはどっちにしろロシア語しかないので実行しても意味ないかもしれない…。

Makefile.bat によるといくつかのファイルやディレクトリはいらないようなので削除しておく。
面倒だから削除しなかったんだけどイケた。 *.pyc だけはあったら削除しておいたほうがいいかもしんない。

\*.pyc
\*.ts
\*.ui
\*.qrc
\*.pro
\*~
\*.git\*
\*.svn\*
\*Makefile*

最後に QTiles ディレクトリをプラグインディレクトリにコピーする。
プラグインディレクトリは ~\.qgis2\python\plugins って感じの場所にあるはず。

QTiles を使う時にはオンザフライ変換(OTF)を無効にしておかないとエラーが出るっぽい。

とりあえずウチの環境ではこれで動いたった。

f:id:k-side:20161011120435p:plain