さくらのクラウドの 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 "."
後は
地理院地図のタイルと OSM を重ねて比較するページを作った
国土地理院ベクトルタイル提供実験レポジトリ をフォークして地理院地図のラスタ/ベクタタイルと OpenStreetMap を重ねて表示するページを作りました。
地理院地図と比較して OSM の中で不足しているオブジェクトを目視で判断したかった気がしたので作成したものです。
見ている画面の領域を JOSM で開くためのこの場所を JOSM で編集
ボタンが右上の方にあります。
ローカルだと leaflet-hash があってもちゃんと動いたのですが、ロリポップのサイトにアップロードしたらうまくいかなかったので zoar.space の方はハッシュを表示しないようにしています。
スクリプトをいじると Potlatch 2 とか iD エディタでも編集できるようになると思いますが…。
Word を起動した時に「shredder.osi.office.net/shredderservice/api/aadgraph/gettenantdetails」へのサインインダイアログが表示される
Office 365 Business の契約で使えるデスクトップ版 Word を起動した時に次のようなサインインダイアログが表示されるようになってしまいました。
「なんだこれ」と思いググったところ、Microsoft の英語圏コミュニティで解決策が示されていました。
作業としては次のような感じ。
- Word で表示されるダイアログをバツで消してから「ファイル」→「アカウント」→「サインアウト」とたどって Office 365 からサインアウトする
- コントロールパネルから「資格情報マネージャー」を開く
- 「MicrosoftOffice15_Data」または「MicrosoftOffice16_Data」で始まる資格情報を「資格情報コンテナーから削除」
- 必要に応じて Word からサインインする
これで件のサインインしてっていうダイアログが出てこなくなります。
debian で VS Code が起動できなかったのでライブラリをいじった
さくらのクラウドに X 環境構築してローカルから接続して開発とかどうだろうって遊ぼうとしたら VS Code が起動できなかった時のメモ。
環境は次の通り
- debian 8.6
- Visual Studio Code 1.7.2
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にあるのかと作者の人に尋ねてみましたが、どうやら無いようだったので作ってみました。
@toshi_a mikutter起動した瞬間ろき氏をブロックするプラグインありませんか
— ぞあ.::1 (@k_zoar) 2016年10月26日
ブロックするプラグインはないことと同時に mikutter プラグインの中でブロック関係の処理をしているプラグインを教えていただいたのでそれを参考にしています。
@k_zoar それは多分無いけど、ntddkを意図せずブロックしていないかチェックするmikutterプラグインはあるよ https://t.co/FfhlkT8SwV
— 死因: フィリスのアトリエ (@toshi_a) 2016年10月26日
このプラグインでは mikutter が起動した段階でブロックリクエストを送ります。
ブロックリクエストは、すでにブロックしているユーザーに対して行ってもエラーにならないようなので、ブロックをチェックせずにリクエストを送ることができました。
プラグインがこの形になってから数時間経っていたのですが、mikutter で認証しているアカウントと、ブロックの状況を確認しているアカウントが違っていたので「ブロックできていない」と思ってしばらく悩んでいました。
確認重要…。
なお、自分はろき氏をフォローもブロックもしておりません。ご了承ください。
Zabbix サーバーを仮想マシンから実機に移動する
ちょっと仮想マシンを別のことに使いたくなったので、Zabbix サーバーを実機に移動してみました。
今までだとまっさらな環境からスタートするのですが、今回は保存されているデータごとごっそり移動してみた記録です。
ざっくりとした移行プランは次のような感じ。
- 新サーバーに Zabbix と MySQL をセット
- 旧サーバーの Zabbix を停止
- 旧サーバーのデータベースをエクスポート
- スクリプトを新サーバーにコピー
- 旧サーバーをシャットダウン
- 新サーバーへデータベースをリストア & Zabbix Server の再起動
- 新サーバーの IP アドレスを旧サーバーのものにセット
クッソ長いので注意。 あとパスワードは適当な文字列なのでちゃんとセットしないとひどい目に遭います。
続きを読むQGIS の QTiles プラグインを使えるようにした話
タイルサーバーの画像を拾ってきて結合して使いたかったのですが、 QGIS の QMetaTile プラグインは動かないし、 QTiles
は一覧にないし…だったので QTiles
を Github から取ってきて使えるようにしてみました。
環境は 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)を無効にしておかないとエラーが出るっぽい。
とりあえずウチの環境ではこれで動いたった。