Logical Rabbit.

さくらのVPS

購入検討中の書籍メモ (2016.09)

…という名目のアフィリエイトリンク集。実際に買うか、いつ買うかは未定だけど気になっている本。全て電子版あり。実際に買ってレビューする気になったら別記事に分けると思われ。

ユーザーストーリーマッピング

実装技術というよりその1段上、ハンドリングとかディレクション系の本と理解。個人事業もしくは零細企業規模の職場でシステム開発をすると、どうしても発注主の意図を汲みつつ方向性をまとめたり調整したりする必要が発生するので、たぶんまとめて全体を把握した後、後々まで読み返すような使い方になるんじゃないかなー、と期待してます。

未購入(物理書店で軽く内容把握)、AmazonのほかオライリーのEbook Storeで販売中。

開眼!JavaScript

発行はかなり前なんだけどそういえば未読だったし、JavaScriptはどうしても「なんとなく」で使って覚えてしまっている部分が多いので、たまに基本を読み返すのに良いかな、と思った次第。ページ数も少なく、気になるところだけ流し読みするのにも良さそうだし。詳細は「JavaScript」とかをあたることにして、全体の復習はこちらで随時行う方向で。

未購入(物理書店で軽く内容把握)、AmazonのほかオライリーのEbook Storeで販売中。

現場でかならず使われているjQueryデザインのメソッド

個人事業やるようになって、やはりjQuery等でお手軽かつ見目良くWebサイト開発する需要は高いなぁと思うと同時に、自分自身のデザインバリエーションが少ないことを痛感してます。なにせ今まで「動けばよい」の世界というか「チェックマトリックスでテストできることが最優先のデザイン」の世界だったので「画面幅によってデザインが変わる」ような一般的な設計とは縁遠かったわけで(設計書どおりのデザイン配置にならないのはバグなので、画面幅を強制固定するのが正道、TABLEレイアウトこそ至高、の世界)。

デザイン(動き)さえ分かれば技術的には自分で考えて実装できると思うのですが、まあ使えるスペアタイヤがそこに転がっているのに使わない手も無いだろうと。

ということでサンプル集的な用途を期待。Webで色々見つけてくるのも、技術検証とか著作権確認とかが面倒になってきたから。

未購入(物理書店で軽く内容把握)、Amazon kindle版あり。

さくらのVPSをOS更新したい…という話。

現状このWebサイト等を公開運用している「さくらのVPS」は、OSがCentOS6.x系。そろそろCentOS7.xにしたい。あとリバースプロキシとかも一度再設定したいところ。

OS更新は面倒くさいし、どうせ6.xから7.xは色々変わるのでOS再インストールからやってしまいたいのだけど、いかんせんWebサイトを公開運用しているので長いこと止めるわけにもいかない。どこかに仮サーバーを設置しないと。

で、仮サーバーとして「さくらのVPS」を使うか「さくらのクラウド」を使うか、はたまた「ConoHa」に逃げるか。できれば同じさくらインターネット上のサービスを使ったほうが、仮移設時の問題が少ないように思う。「さくらのクラウド」にはVPSのイメージを元にクラウド側を構築する機能があるので、先ずこれで仮移設してしまえばよさげ。あとはDNS切り替えの問題とか。

問題は料金。

  • 「さくらのVPS」は初期費用がそこそこかかる。現在と同一プランだと月額972円+初期費用1,620円(合計2,592円)
  • 「さくらのクラウド」は初期費用は無いけど利用料金がそこそこかかる。VPSと同等で試算すると、14日利用で2,478円、月額3,132円…の筈。これ単一サーバー稼動の場合はネットワーク等のオプション要らなかったよな…?
  • 参考までに「ConoHa」は初期費用なし、月額900円または時間あたり1.3円。14日利用だと1.3円×24時間×14日=436.8円。このはたんサイキョー。

なお「さくらのVPS」は現在「2週間無料お試し」があり、まあ今回用途だと2週間もあれば用は済むので「お試し」だと言い張れば無料で使うこともできる。が、お試しではないし色々お世話になっているところなので、きちんと支払いをしておきたい。

無料お試し期間中でも決済をすれば支払いはできる筈なのだけど、"お試し期間中であっても、会員メニューより「本登録(決済)」いただくと、すぐに本サービスを開始することができます。なお、すぐに本サービスを開始いただいた場合でも、2週間は無料でご利用いただけます。"とあり、これ決済して2週間以内に解約するとどうなるんだろう…的な疑問も。

また"さくらのVPSの最低利用期間は3ヶ月"なので、2週間程度の利用目的でも3ヶ月分費用が発生してしまう。3ヶ月+初期費用だと4,536円。これを考えると「さくらのクラウド」で1ヶ月利用したほうが良いか。

「さくらのVPS」をもう1台契約、新契約のほうに移設後DNS切り替え、旧契約を解約という方法もあるのだけど、現契約は年間契約にしているため次の更新は2017年5月末…。今解約するのはもったいない。

結論としては、「さくらのクラウド」を試しに使いつつ1ヶ月以内でVPS側を再セットアップ、というところかな。VPSをそこそこ長く使っているとこの手の問題は出て来る筈なので、何か便利なサービスがあっても良いと思う今日この頃。

Google Apps Scriptで開発するときの備忘録。

最近クラウドワークスでのお仕事でいくつか Google Apps Script を使用したのだけど、なかなか使える良い子であると同時に癖もある奴なのでいつも使うパターンをメモするなど。

スクリプトの実行時間は1回あたり6分

仕様的には Quotas for Google Services を参照。

細かい処理をちょいちょいとこなす程度であれば気にする必要はないのだけど、大量のファイルとかを扱い始めるとハマる。というかハマッた。

対策としては「6分以内に終わらせる」もしくは「6分超えそうだったら一度中断し、改めて再開させる(中断・再開が可能なつくりにする)」の2パターン。ただこの制限値に引っかかるような処理をさせると結構動きがトロいのも分かるので、第3のパターンとして「Googleの外でやる(普通のサーバー上でGoogle APIを呼び出す)」を考えに入れておくべきなのかと思った。

処理を一度中断し、自動で再開させるのは Properties + Trigger 、ところにより JSON

いくつかググって、最終的には Google Apps Scriptで5分の壁(タイムアウト)を突破するを参考にしつつ自分なりのパターンを作ることにしました。

  • スクリプトの処理開始時刻を保存しておき、開始後何分経ったかを随時チェック

  • 開始後6分を超過する前に十分な余裕をもって中断処理に入る

  • スクリプトの処理に必要なデータは Properties Service に格納する

  • ただし Properties はString value しか扱えないので、構造化データなどを格納したい場合は JSONフォーマットに変換して格納する

    • Propertiesへ格納する際は JSON.stringify()
    • Propertiesから復帰する際はJSON.parse()

    なお当初Base64を使おうとしていたのは秘密だ(待て)

  • スクリプトを終了後自動的に再開させるのは Script ServiceClockTriggerBuilder クラス。

  • 前述のBlogでも言及されていたし実際うまくいかなかったのだけど、Triggerで「after(durationMilliseconds)」があるくせにセットしてもちゃんと発動しない。…というか発動するのかもしれないけど「(plus or minus 15 minutes)」などとのんびりしたことを言われてしまっては使うわけにはいかんがな。せめて単位をsecondsにしてくれ…。

    everyMinutes(n) で毎分起動→起動後に多重起動防止のためトリガーを削除 のパターンでいきませぅ。

    ただ、ここはむしろトリガー追加+削除を繰り返すより、別途キューを用意しておき、毎分キュー確認→なにかあれば実行、何もなければ休眠、のほうがスマートな予感。

参考資料など。まー私が使ってるのはオライリーが販売しているPDF版ですがねハハハ(これはこれでよりによって「String」の項にしおりが設定されていないという痛恨のバグがある)。

DELLの25インチモニター U2515H を購入した。

購入してから10日、概ね安定してきたようなのでレビューを書いてみるなど。結論としては、もう一枚買っても良いかもなー、的な。

ディスプレイ モニター U2515H。通称ゆーちゃん(違う)

スペックとしては25インチIPSノングレア、WQHD(2560x1440)、sRGB99%です。これで5万円弱なのでかなり安い印象。27インチフルHD超になると10万円くらい見ておかないといけないので、ちょっと二の足を踏んでいたところなのでした。

非DELLの汎用モニターアームで使っていますが、標準装備のディスプレイスタンドもかなり使いやすそうではありました。ただ今の机環境だと、机にスタンドで置いてしまうと画面と顔との距離が近すぎてしまうので…。

解像度は十分です。Teraterm + tmuxで使っていますが、フォントサイズ14ptで縦70行(プラスviのステータス行+tmuxのステータス行)表示できます。フォント10ptだと流石に少し見づらいか。また、Windowsキー+横キーで画面半分に寄せても、tmuxの縦2列で77桁出てます。普段はフル画面縦2列を基本にしていますが。

ハード面の機能も使い勝手が良いです。まず背面のディスプレイスタンドは工具なしで付け外しが可能。ツメで止まっているので、斜めに差し入れて垂直に戻すと自動的にロックされ、外すときはボタンを押して斜めにすれば外れます。

スタンドを止める場所は一段くぼんでいて、その中にVESAマウントのネジ穴が、ネジ付で収まっています。ネジを外してモニターアームを取り付ければ完了。しかしアーム側に付いていたネジが余ったぞ(汗) 写真を見る限りDELL純正のモニターアームならばスタンドと同様に工具レスで取り付け・取り外しできるようなので、そちらを買ったほうがまとまりが良かったかも知れませぬ。うちには既にモニターアームが3つ転がっていたので、純正品を買うのは止めたのですが…。

入力端子はHDMI×2、DisplayPort×1、mini DisplayPort×1、その他USB 3.0 HUBが付いています。D-SUBとかDVIが無いのはまあ致し方なし。DP-MiniDPのケーブルが同梱されているので、DisplayPort対応のビデオカードだと最強の組み合わせかもですね。うちはHDMI出力なのでHDMIに入れていますが。

当初モニタがノイズ出まくったりブラックアウトで点滅したり、特にMikuMikuDanceとかをフル画面で出すと頻繁にブラックアウトするのでビデオカードへの高負荷が原因、買い替えかなぁと思っていたのですが、ビデオドライバを最新に更新し、HDMIも切り替え機を通さず直結したら安定稼動になりました。おそらく最大の原因はHDMI切り替え機と思われ。先代はHDMIが1ポートだけだったので切り替え機を通していたけど、今回は2ポートあるので切り替え機が使えなくても特に困ることは無いでしょう。

なおビデオカードはNVIDIA GeForce GTX750 DDR5 2GBです。これをHDMI(WQHD)、DVI(UXGA)、D-SUB(フルHD)の3画面出力で使用中。

DELLが基本的にネット直販で現物を見ることが出来ないのと、公式ストアでも海外からの発送になって衝動買いに向かないところなのですが、Amazonにプライム対応即納品があったので(しかも公式ストアより安い)、こちらでポチることにしました(事前に横浜ヨドバシカメラのDELL売り場行ったのだけど、該当品が無かった…)。

CentOS 7 でコマンドラインからBluetooth接続を操作する

bluetoothctl を使えばイイっぽい。root権限が必要っぽい?

コマンド自体はbluezパッケージに入っています。特にインストール指定した記憶は無いので、X Windowとか入れてやれば入ってくるもの、かも。ところでこのパッケージ名、なんかトイレに置くだけのアレを連想するのはあたしだけですかね…?(ヤメロ)

$ yum info bluez
インストール済みパッケージ
名前                : bluez
アーキテクチャー    : x86_64
バージョン          : 5.23
リリース            : 4.el7
容量                : 3.7 M
リポジトリー        : installed
提供元リポジトリー  : base
要約                : Bluetooth utilities
URL                 : http://www.bluez.org/
ライセンス          : GPLv2+
説明                : Utilities for use in Bluetooth applications:
                    :         - hcitool
                    :         - hciattach
                    :         - hciconfig
                    :         - bluetoothd
                    :         - l2ping
                    :         - rfcomm
                    :         - sdptool
                    :         - bccmd
                    :         - bluetoothctl
                    :         - btmon
                    :         - hcidump
                    :         - l2test
                    :         - rctest
                    :         - start scripts (Red Hat)
                    :         - pcmcia configuration files
                    :
                    : The BLUETOOTH trademarks are owned by Bluetooth SIG, Inc.,
                    : U.S.A.

例えば MCO TK-BT01 キーボードを接続すると以下のような感じ。MACアドレスは各々XXとYYの羅列にマスク、hostnameはログインしている機体のホスト名が出ますが、一応マスクで。

$ sudo bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX hostname-0 [default]
[NEW] Device YY:YY:YY:YY:YY:YY MCO TK-BT01
[bluetooth]#
[bluetooth]# devices
Device YY:YY:YY:YY:YY:YY MCO TK-BT01
[bluetooth]# connect YY:YY:YY:YY:YY:YY
(ここでBluetooth機器側も接続待機にしませぅ)
Attempting to connect to YY:YY:YY:YY:YY:YY
[CHG] Device YY:YY:YY:YY:YY:YY Connected: yes
Connection successful
[bluetooth]#

connect <MAC ADDRESS> の時点でBluetooth機器側が接続待機になっていないと、以下のような感じになります。

[bluetooth]# connect YY:YY:YY:YY:YY:YY
Attempting to connect to YY:YY:YY:YY:YY:YY
Failed to connect: org.bluez.Error.Failed
[CHG] Device YY:YY:YY:YY:YY:YY Connected: yes
[CHG] Device YY:YY:YY:YY:YY:YY Connected: no
(以下yesとnoの繰り返し)

このコマンドmanがインストールされてないし --help してもろくな内容が出てこないのだけど、基本コマンド名だけで起動、対話的に操作するものっぽい。取り合えず [bluetooth]# help とやればサブコマンド一覧が出るので、それを見ながらやれば良さげ。

[bluetooth]# help
Available commands:
  list                             List available controllers
  show [ctrl]                      Controller information
  select <ctrl>                    Select default controller
  devices                          List available devices
  paired-devices                   List paired devices
  power <on off="">                Set controller power
  pairable <on off="">             Set controller pairable mode
  discoverable <on off="">         Set controller discoverable mode
  agent <on off="" capability="">  Enable/disable agent with given capability
  default-agent                    Set agent as the default one
  scan <on off="">                 Scan for devices
  info <dev>                       Device information
  pair <dev>                       Pair with device
  trust <dev>                      Trust device
  untrust <dev>                    Untrust device
  block <dev>                      Block device
  unblock <dev>                    Unblock device
  remove <dev>                     Remove device
  connect <dev>                    Connect device
  disconnect <dev>                 Disconnect device
  version                          Display version
  quit                             Quit program
[bluetooth]#

無線LANの感度を上げるために部屋の天井近くに配置した機体、基本はssh操作なのだけどたまーにコンソール(X Window)ログインする必要があって、BluetoothがあるからBluetoothキーボードで操作すればいいいや…と思っていたら再起動するとBluetoothのペアリングが消える? ので面倒くさかったのですが、これならまずsshでログインしてキーボードをペアリング、その後コンソールログインすれば良さげな感じ。

と言うわけでキーボード的にはミヨシのTK-BT01がおススメです。テンキーの無いコンパクトキーボードながら、トラックボールとホイールまで付いており、PC、Mac、Android、iOSのフルサポートという逸品。前機種にあたる専用ワイヤレスアダプタのときは不可能だった、トラックボールの取り外し掃除も簡単になりました…っ(これは嬉しい)

PRIMERGY MX130 S2にCentOS 7を入れたらハマった。

AMD CPUのPRIMERGY MX130 S2 にCentOS 7をいれてyum upgradeしたら microcode: failed to load file amd-ucode/microcode_amd.bin などと言う謎のエラーを吐いて起動しなくなっているお話(現在進行形) (解決したのでオチを追記)。

古の激安サーバー()であるPRIMERGY MX130 S2が職場に2台あるわけですが、うち1代のHDDがS.M.A.R.T.エラーを噴いて撃沈したのをいいことに、CentOS 7で再構築を始めたわけですよ。とりま、 yum upgrade でまるっと更新かけたわけですよ。 kernel が更新リストに入っていたから、何も考えずリブートしたわけですよ。

…カーネルパニックみたいな状態になって起動どころかCTRL+ALT+DELすら受け付けない状態になったわけですよ(汗)

電源断して起動時に1つ前のkernelを指定したところ無事起動したので、dmesg.oldを見たところ、最後のメッセージが冒頭の “microcode: failed to load file amd-ucode/microcode_amd.bin”。

で、このメッセージでGoogle検索してみると、以下のバグトラックが出てきた。どうも同じ現象っぽい。

0007331: Failed to load file microcode_amd.bin

実際、 /lib/firmware/ の中に amd-ucode/ というディレクトリ自体が存在しないのでそりゃファイルのロードもできないよね、という状態ではあるのだけど、今一つ分からないのが、今回の現象が意図的に行われたのか誰かのミスなのか、というところ。

英文なんで斜め読みで取り敢えず解決方法だけ探してる状況なのですが、解決方法自体はまあ、バグトラックに言及があるURLからmicrocode一式をダウンロードして入れてしまえば良さげです。

ただ仮に今回の現象が意図的なもので、今後kernelにはこのファイル群が入らないとなると、このサーバー機はCentOS 6止まりにしておくとか、運用終了も考えたほうが良い気がします。ただ、意図的な足きりならば、この手のバグトラックは割と早い段階で開発当事者の人が出てきて「そいつはもうサポート外だ」で 終わると思うんですよね。なにやら話題は継続している様子だし、足りないファイル入れておしまいなら早々にバグフィックス版が出てもよさそうなのに、1年以上もスレッドが続いている。

そして何より気にかかるのが、PRIMERGY MX130 S2を買った、CentOS入れたという日本語記事はわりとGoogle検索にひっかかるのに、このバグに遭遇したという日本語記事が出てこない。みなさんなんで大丈夫なの??

ともあれ、明日(というか今日)出勤したら、問題のファイル群を押し込んで経過観察する予定。

[2015.12.29 追記]

いや本当は12/17に解決していたのだけど、記録する暇が無くて…。

結論。microcodeは関係なかった。つか然るべきファイルを置いてみても「ファイルが無い」というエラーは出ていないもののフリーズする現象は止まらず。再度ググったところ、以下と同じ現象だった模様。

Kernel 3.10.0-327 issue on AMD Neo processor

同じ方法で対策してみたところ、安定稼働するようになりました。その後本格的なシステム構築を始めて仕事納めの12/25まで24時間動作続けています。

しかしclocksource_done_bootingってなんだろう…。名前から察してタイマー割り込み系かしら。

ruby-2.1.7 の make test で TestException#test_machine_stackoverflow_by_define_method が出たときの対処。

TestException#test_machine_stackoverflow_by_define_method でググって見つけた issue の修正内容を適用してみたら改善できたのでメモ。

ruby 2.1.7 で見つかって ruby 2.2.0 で対策されていたので、今出ているruby 2.1.7パッケージには反映されていない、と言うことなんだろう、多分。

問題のissueは Bug #9739 。以下は修正個所の転記(何かの拍子に原典が消えてしまうと困るので)。

diff --git a/configure.in b/configure.in
index f52e0ba..078f9ba 100644
--- a/configure.in
+++ b/configure.in
@@ -2782,7 +2782,7 @@ if test "$with_dln_a_out" != yes; then
            rb_cv_dlopen=yes],
    [cygwin*|mingw*], [
            : ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'}
-           XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
+           XLDFLAGS="$XLDFLAGS -Wl,--stack,0x01200000,--enable-auto-import"
            DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
            : ${LIBPATHENV=""}
            rb_cv_dlopen=yes],

修正後、念のため make clean ; ./configure ; make までやったら make check でエラーが無くなった。

ConoHaのownCloudとオブジェクトストレージでオンラインストレージを作る(後編)

ConoHaのownCloudとオブジェクトストレージでオンラインストレージを作る(前編)の続き。いよいよオブジェクトストレージと連結し、Windowsの同期バックアップストレージとして運用しますよ。

ownCloudのデータ保存領域をオブジェクトストレージにする

ownCloud のドキュメントに設定のサンプルがあります。ただ、一部項目の入れ替えが必要となりますので注意。

ConoHaオブジェクトストレージを契約する

  1. ConoHa管理画面の「オブジェクトストレージ設定」 を開く
  2. 「ディスク容量」バーの右端にある設定アイコンをクリック
  3. お好みでディスク容量をセット。最低100GBからなので、予め使う容量が分かっているのでなければ、とりま100GBでよろしいかと。容量セット後から課金スタートです。

ConoHaオブジェクトストレージのAPI情報を確認する

APIユーザーにパスワードを設定します。既にある場合はテナント名、パスワード、エンドポイントURLを確認。

  1. 左側グローバルメニューの上から7つめ「API」をクリック
  2. 「APIユーザー」の右側「+ユーザー」ボタンをクリック
  3. 適宜パスワードをセット。ConoHaアカウント自体、ownCloud管理者、ownCloud運用VPSのroot(権限を持つ)アカウント等とはパスワードを変えておいたほうがより安全かと思われ。
  4. パスワードの他、画面上段の「テナント情報」内「テナントID」と「エンドポイント」内「Identity Service」の情報も確認。

ownCloudにオブジェクトストレージの情報をセットする

/var/www/htmi/owncloud/config/config.php に以下の内容を追加します。’dboassword’等と同じ階層になるよう注意。

'objectstore' => array(
  'class' => 'OC\\Files\\ObjectStore\\Swift',
  'arguments' => array(
    'username' => ←APIユーザー名
    'password' => ←APIパスワード
    'container' => 'owncloud', ←任意のコンテナ名(別途作成が必要)
    'region' => ← Identity Service URLの identity と conoha.io の間にあるサブドメインを指定。認証情報の endpoints.region としても得られます
    'url' => ← Identity Service のURL
    'tenantId' => ←テナントIDをセット
    'serviceName' => 'Object Storage Service' ←ConoHa APIのエンドポイント名
  ),
),

ハマった点としては tenantIdがありました。ownCloudのサンプルコードでは tenantName を使用しており、ConoHaのAPI情報にも「テナント名」があるのでてっきりコレかと思ったのですが、「テナントID」のほうを渡してやらないとConoHaの認証エンドポイントから他のエンドポイント一覧が提供されないという罠。しかも tenantName があると tenantId を書いてあっても無視される。…というのを ownCloud のソースコードを追いかけまわしてようやく見つけましたよ…。

ConoHaオブジェクトストレージにコンテナを作成する

コンテナは自動では作成されない模様。 autocreate オプションは true にしてみても反応しないし、ソースコード中には「テスト用」的なコメントがあったのでどこかで無効化されているんだろうな。ともあれ、仕方ないので node.js でコンテナ生成だけ実行するスクリプトを書きました。gistにテンプレートがありますので宜しければどうぞ(以下)。こちらでの注意としては、認証URL(AuthURL)にバージョン番号が入らない点があります。node.jsは v5.2.0-linux-x64 を使用していますが、ほぼ同一の JavaScript を他のサーバーでかなり前に入れた v0.12.7 で動かしていたりしますので、概ね動くかと思われ。しかし node.js のバージョン番号はよく分からん。なんで1年も経たないうちにこんなに上がるんだ。

Windows 7 との同期

できれば WebDAV でスマートにいきたいのですが、HTTPS にしないといけないようです(レジストリをいじればいけるっぽい)。後々ちゃんとしたSSL証明書を取得する方向でいきたいので、今回はひとまず ownCloudの公式デスクトップアプリを使うことにします。

  1. owncloud.org の ダウンロード画面 から「Desktop Clients」をクリック、Windows用インストーラをダウンロード
  2. さくさくとインストール(これといった選択肢もありませぬ)
  3. さくさくと起動すると、サーバーアドレスを入力する画面が現れますので、http:///owncloud/ を入力(結局ここでもHTTPS問題が発生…致し方なし)
  4. ユーザ名とパスワードを入力
  5. サーバー側の同期対象フォルダ、ローカル側の同期対象フォルダを選択

あとはローカル側に作成された同期フォルダにがつがつとモノを入れていけば同期されるようデス。

ファイルの行先を確認など。

本当にちゃんとConoHaオブジェクトストレージに収まっているんでしょうか…?

  • owncloud をインストールした VPS の /var/www/html/owncloud/data/administraotr/files/ にはファイルが作成されていません
  • ConoHaオブジェクトストレージのディスク使用量を確認すると、イイ感じに増加しております

ということで、まあオブジェクトストレージには収まったかな、と。次の疑問は、具体的にどういうオブジェクトになっているのか、とか、メタデータとかどうなんですかね?といった点ですが。

あと、HTTPSは早めに対応しないとなぁ…。

ConoHaのownCloudとオブジェクトストレージでオンラインストレージを作る(前編)

ConoHa VPSに標準で用意されているownCloudアプリケーションサーバーとConoHaオブジェクトストレージを組み合わせて、Windows PCから同期可能なオンラインストレージを作る試み。まずはowncloudを起動するまで。

[2015.12.10] 追記

後編 も書きました。

レシピ

VPSとオブジェクトストレージを契約

  1. 清楚可愛いこのはちゃんと契約する
  2. 言語モードを「このは」にする(重要!)
  3. ConoHaチャージ(月額で最低金額1500円くらいかな)またはクレジットカードを登録する
  4. ConoHa VPSは次の仕様で組んでみた
    • vCPU 1個
    • メモリ1GB
    • 東京リージョン
    • イメージタイプは「アプリケーション」を選択(初期値)
    • アプリケーションは「その他」から「ownCloud」を選択、バージョンは8-x64固定
      • なお、ベースになっているOSは CentOS release 6.7 (Final) カーネルは 2.6.32-573.7.1.el6.x86_64 でした (2015.12.06現在)
      • owncloud自体は 8.1.3 がinstalled、yumで 8.1.4 が来ていますね(後程アップデートしませぅ)
    • rootパスワードをセット
    • 自動バックアップはお好みで。今回はアプリケーションサーバーとしてのみ使用するので、変更した設定さえ別途保管しておけば全体バックアップは不要かも。
    • ディスク容量は最低のSSD50GBで十分。これでも多いかも?
      • インストール後の空き容量は / が 51GB割り当て、47GB空きなのでがら空き…
    • 準備が整うまでは色々危ないので、取り敢えず接続許可ポートはすべてOff(コントロールパネルのブラウザコンソールで作業する)。なお、ここのポートはConoHa VPS外部のファイアウォールらしく、VPS側でSSHポートを22番以外にした場合は「すべて許可」一択となる。
    • SSHキーはお好みで新規作成するなり、手持ちをセットするなり
    • ネームタグもお好みで

あとは料金を確認して「追加」ボタンを押し、準備が整うまでこのはちゃんのお姿を堪能して待ちませぅ。

コンソールを開いてVPSの初期設定

  1. 左側「サーバー」から目的のサーバーを見つけ、ネームタグをクリック
  2. 「コンソール」アイコンをクリック(新しいWebブラウザ画面で仮想コンソールが開く)
  3. 画面が真っ暗ならEnterとか押してみる
  4. 作業アカウントを作る
    • rootで作業すると失敗が致命的になるし、rootでのSSHログインは拒否しておきたいので、通常作業するための作業アカウントを作り、sudo権限を与える
    • [注意!] ConoHaのコントロールパネルでセットした公開鍵は、rootアカウントに紐付けられています(/root/.ssh/authorized_keysに書き込まれる)。作業アカウントは別途キーを準備するなり、rootからキーを奪ってくるなりしましょう(rootのキーを移動した場合はパーミッションとオーナーに注意)。
  5. /etc/ssh/sshd_config を開いて編集
    • 「Port 22」のコメントアウトを外し、22番以外の未使用ポートに変更 (ポート22狙いのアタッカーが回避できます)
    • 「PermitRootLogin」を「no」に変更 (SSH経由でのrootログイン不可)
  6. /etc/sysconfig/iptables を開いて編集 (空だった)
    • -A INPUT -m state --state NEW -m tcp -p tcp --dport <SSH port> -j ACCEPT を追記
    • (owncloudのWeb画面を開くために)-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT を追記
    • あとはお好みで。基本的に全部 REJECT してホワイトリストのポートだけ ACCEPT すれば良いかと。
    • この辺りのことは覚えたところで、どうせ CentOS 7になればfirewalldに代わって役に立たなくなりますよ… (今回firewalldを探して10分くらい彷徨った…)
  7. sshdとiptablesを(再)起動
    • $ sudo service sshd restart
    • $ sudo service iptables restart
  8. ConoHaのコントロールパネルの「ネットワーク情報」をプルダウンさせ、「接続許可ポート」で「すべて許可」を選択(以後、ポートアクセス制御はVPS側のiptablesに委任)
  9. お好みのターミナルエミュレーターから接続できることを確認 (以降はターミナルエミュレーターから作業)
    • 念のため、rootでログインできないことも確認しませぅ
    • さらに念のため、ConoHaコントロールパネルのWebブラウザコンソールからはrootでログインできることを確認しませぅ
  10. 適当なタイミングで sudo yum upgrade でも打って最新環境にするべし

ownCloudの設定

  1. コンソールにログインするとwelcomeメッセージとして URLやらMySQLのパスワードやらが表示されるので、URLにアクセスする。
  2. 管理者アカウントを作成する
  3. 試しに適当なファイルをアップロードしてみる

たぶん通常アカウントを作って、そっちで使ったほうが良い…いや所詮プライベートストレージだからこのままでもいいか…な?

なおアップロードしたファイルは /var/www/html/owncloud/data/<アカウント名>/files/ に収まる様子。 (/var/www/html/owncloud/data/ 以下はapacheユーザー/グループ管轄、otherにアクセス権無し)

残項目

  • HTTPSアクセスにしたほうが良い気がするぞ
  • ポートをガチガチに塞ぎ過ぎてメールアラートも出なくなってるので、必要なポートを開けたい
  • ていうかちゃんとドメイン割り当ててメールサーバーも設定しておこう
  • 本題であるWindowsとの同期とオブジェクトストレージの使用はどうした

[2015.12.08] 追記

yum upgrade したのち reboot してそのまま気持ちよく作業を終えたところ、数日経ってからアクセスしたら owncloud がメンテナンスモードに入ってしまっているという仕打ちが発生。モード解除自体は /var/www/html/owncloud/config/config.php 内の ’maintenance’ を false にすればOKだったのだけど、なんでメンテナンスになったんだ…。しかも画面には「owncloudを再起動すれば解除されます」とある割に、 httpd をリスタートしても何も変わらんかったし。

もしかして yum upgrade で owncloud 自体が 8.1.3 から 8.1.4 にアップデートされたので、このタイミングで自動的にメンテナンスモードになるんですかね…?

あと数日放置してたら、案の定 httpd にアタッカーの皆さんからご訪問を受けておりました。幸い突破された様子は無かったけど、一度アクセス範囲を見直したほうが良さげ。

[2015.12.10] 追記

後編 に続く…!

CentOSを使用したリモート操作についての備忘。

CentOSで他のマシンをリモート操作することに関するメモ。必要に応じて追記されていると思われ。

コマンドプロンプトから他のマシンを起動する (Wak on LAN)

ether-wake <MAC address>

実行にはroot権限が必要。

CentOS 7 だと標準で導入されているっぽい? うちでは主要マシン向けに以下のようなシェルスクリプト書いてあります。(sudoで実行して機動確認のためにpingを打ちつづける)

#!/bin/sh

sudo /usr/sbin/ether-wake <MAC address>
ping <IP address>

リモートデスクトップ接続

EPELの xrdp パッケージ ( http://xrdp.sourceforge.net/ ) を導入します。

xrdp.x86_64 : Open source remote desktop protocol (RDP) server

以下のようなシェルスクリプトを書いておくと便利。この例ではフルHDモニタいっぱいに表示します。また、起動後コンソールを占拠されるのが嫌なのでバックグラウンドに回しています。

ポート番号は標準のままならば指定不要。うちの場合ブロードバンドルーターを介してINTERNETから繋ぐので、アタック対策も兼ねてポート番号を適当に割り当てています。としてINTERNET側のIPアドレスを指定、として割り当て済みの番号を指定すると、ルーター内でイントラ側の特定Windowsマシンに転送する次第。

#!/bin/sh

rdesktop -g 1920x1080 <IP address>:<port> &