chmodやchownのreferenceオプションを知った時は目から鱗だった話

元々ホスティング会社で働いていたので、その特性上ownerやpermissionを色々と弄る事が多く、数年前の社会人時代にchmodやchownをもっと楽に使えないかなぁと調べた時に目から鱗だったのがchmodやchownのreferenceオプションでした。

今回は単にreferenceオプション楽ですよね、という記事なのでご存知の方は退屈な記事だと思いますが、まわりに聞いてみた所意外と知られていなかったりしたので、ブログエントリにしておこうと思います。

referenceオプションを使うと、任意のファイルを指定することで、変更対象のownerやpermissionを指定したファイルと同じ設定にすることができます。

例えば、/bin/pingみたいなpermissionって僕は覚えられなくて通常の実行方法ではわりと面倒だと思うのですが、それと同じowner、permissionにしたい場合は、

[program lang=”bash” escaped=”true”]

$ ls -l /bin/ping
-rwsr-xr-x 1 root root 44168 May  7 14:51 /bin/ping
$ touch myprogram
$ ls -l myprogram
-rw-rw-r--  1 matsumotory matsumotory         0 Jun 22 21:10 myprogram
$ sudo chown --reference=/bin/ping myprogram
$ sudo chmod --reference=/bin/ping myprogram
$ ls -l myprogram
-rwsr-xr-x 1 root root 0 Jun 22 21:05 myprogram

[/program]

みたいな事ができるので、大変楽になります。本来は、chmodとchownを使いまわす際に755とかmatsumotry.matsumotryとか引数を書きなおして実行する必要があったのに対し、referenceオプションを使うとchownとchmodのown文字列とmod文字列を3文字変更するだけで達成したい変更処理が実現できるのも、キーボード的にも省エネで気に入っています。

というわけで、単なるネタ記事になってしまいましたが、どうぞreferenceオプションをよろしくお願いします。

Dockerとmrubyで迅速かつ容易にnginxとapacheの柔軟なリバースプロキシ構成を構築する

Docker Hubがアナウンスされて以来、焦ってDockerを触っている@matsumotoryです。

今日は早速mod_mrubyngx_mrubyをdocker buildに対応させました。これによって、Docker環境においてmod_mrubyを組み込んだApache httpdやngx_mrubyを組み込んだnginxを迅速かつ容易に連携させる事ができるようになります。

今日はその一例を紹介したいと思います。

続きを読む

Docker HubとGitHubを連携させてmod_mruby実行環境をDockerで簡単にデプロイ

Docker Hub公開のアナウンスがあったので、早速Docker HubとGitHubを連携させてmod_mrubyの実行環境をDockerイメージとして作った上で、それをMac上のVagrantで動くCoreOS内のDocker環境にデプロイしてみました。

本エントリではmod_mrubyとしていますがここは重要ではなく、自身が開発しているGitHubのアプリケーションに置き換えて読んで頂けると、便利さが見えてくるかと思います。

試してみると、非常に簡単にDockerイメージを作成できた上に、迅速にmod_mrubyの軽量な実行環境をデプロイできたので、その流れを簡単に紹介したいと思います。

続きを読む

インフラエンジニアの僕がキーボードのすぐ隣に置いておきたい本

本棚は自分の机のすぐ隣にあるのですが、なんとなく安心感とか勉強してる感とかを含め、思い立った時に手元ですぐ開いて調べたり暇つぶしにふと読みたい本ってありますよね。自分はインターネット、特にWebやインターネット基盤技術に関わる研究・技術者をやっているわけですが、自分の手元に置いておきたい本がやはりあります。

もちろん、手元に置くためのスペースは約20から30センチ程度なので、分厚い本を置くと数冊程度になってしまいますが、今日は「自分が現段階で持っている本のうち、キーボードのすぐ隣に置いておきたい本」8冊をなんとなく紹介したいと思います。

続きを読む

OSvのような環境でもサクっと動くmrubyのWebサーバ作った

OSvがとても面白いので色々いじっていると、結果的にmruby-simplehttpserverというWebサーバをmrubyで動かすためのmrubyモジュールができてしまいました。

これは、OSvのようにライブラリをがんがん入れられないような環境でも、とりあえずSocketとIOがあれば動くシンプルなWebサーバを動かすためのmrubyモジュールです。

そもそもOSvって何?という方はこの辺りを見るかsyuu1228さんに聞くのが良いと思います。簡単に言うと、これからの時代、ハイパーバイザにがんがん仮想マシンをデプロイする際に、その仮想マシンにリッチなOSがあまり必要ないケースって結構あって(例えばmemcachedだけが動いているVMとか)、OSvはそういう用途に省メモリかつCPUのオーバーヘッドを低減して高速に動作するまるでプロセスのように扱えるOSです。プロセスは言い過ぎましたが、仮想マシンにも関わらず起動はmruby使用の場合、1、2秒で起動するので非常に高速です。

で、通常はコアの上にJVMがのっていってその上にサーバ+アプリケーションが動く仕組みになっているのですが、そのJVMの部分を他のVM(言語処理系的な意味合いの)を載せ替える事もできて、そこにサクっとsyuu1228さんがmrubyのVMをのせるハックをして今では本家にもマージされ、コアの上でmrubyのVMを動くようにimageを作ればアプリケーションとしてmrubyで書いたコードが動くようになります。JVMもZFSも取り外しているのでかなり高速かつ軽量に動作します。

かといって、OSvはUbuntuとかそういうライブラリをどんどん入れられるようなリッチな環境ではないのですが、Javaアプリが動く程度にSocketやIO等は普通に動くのでそれにのみ依存したWeb機能を持ったmrubyアプリケーションサーバをつくろうと思った次第です。mruby-simplehttpserverを使えば、OSv上で動くmrubyでWebアプリケーションを容易に実装することができるようになりました。

このような特徴を持つOSvをうまく使えば、状態を持つデータはどこか別の場所に置いておいて、OSvやその上で動くアプリケーションをイミュータブルに動かしたりと、次の世代の使い捨てデプロイ手法を実現しやすくなるのではないでしょうか。そういう方向性でもOSvは興味深いOSだと思っています。

前置きが長くなりましたが、では実際に動かしてみましょう。

続きを読む