ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

Haconiwa のrpm/debパッケージを配布開始しました

packagecloud を使っております。

便利です。一応 CentOS >= 7 / Ubuntu Trusty / Ubuntu Xenial / Debian jessie で利用できると思います。

パッケージをインストールすると3つのバイナリが入ってきます。

haconiwa

haconiwa コマンド本体です。READMEにあるようなhacoファイルを解釈してコンテナを立ち上げたりできます。まあ の通りです。debootstrapなどでルートファイルシステムを作っておためしください。

hacorb

haconiwa コマンドと大体同じmgemが入った、mrubyのバイナリそのものです。個々のmgemの機能を直接組み合わせて、Rubyでプログラムを書いたりできます。

$ hacorb -e 'p Process::Sys.getuid'
1000

これはこれで少し面白いと思うので、興味があって何かしたい場合は、個別のmgemのREADMEをご参照ください。ちなみに haconiwa revisions でコア以外の依存mgem(ついでに組み込まれたmrubyのリビジョンも)がわかったりします。

$ haconiwa revisions
mgem and mruby revisions:
--------
MRUBY_CORE_REVISION     97283faa16d2e69a27de891e5a6695bf370cb4c3
mruby-argtable          6c281979b82941a17936347abcbb5c76d368257f
mruby-capability        fa1e553258362547a6393830ae55d2310700a6f3
mruby-cgroup            5d5573bae88f8f742b90f9464b7534be55ad8a3e
mruby-dir               0c3c538855dd15208d34fee96b13675e564bb4b6
mruby-exec              16451d728533584b55233f4ef3fab0da892e31e2
mruby-io                93d481d4b49829e37b1f501c7307663c6327dfab
mruby-mount             dabaa7c487e09a878893d06573500e851cb20364
mruby-namespace         f5dbc47b3174a117e26d5ff6e21c1322a650e45f
mruby-process           e532ff8837ebed35bdc03f26aed6a9105bbd7c44
mruby-process-sys       925f227d36edebc5accde2ff9a2497a91cc7d954
mruby-procutil          14b3a7bc66bc290af1f2fec339e73eb5cd5ace0c
mruby-resource          ed74671bd4c653434367ec8fb05e094d2b2cff20
mruby-signal            2aff41b5dffb1ab233141472fa8a0a456b703ef0

hacoirb

上で紹介した hacorb の対話環境です。rubyに対するirbですね。入っているmgemは同じなので、コンテナ要素を気軽に(?)試せるかと。

以下はUTSの隔離のサンプルです。

p = Process.fork { Namespace.unshare(Namespace::CLONE_NEWUTS); Procutil.sethostname 'udzura.example.com'; system 'hostname' }; Process.waitpid p
# udzura.example.com
# => 13903
system 'hostname'
# localhost
# => true

実用というか、勉強に便利かもしれない。


ということで、パッケージになってアンインストールも気軽にできるようになって、haconiwaをより気軽に試せますね!!知人は仕事で使っているベアメタルのDebian(sid)にhaconiwaを早速突っ込んでいました。

何卒ご贔屓ください。

Enjoy jailing~

Emacsでmrubyをそこそこ快適に書く

こんにちは、これはEmacs記事です。みなさんはEmacs記事...ではないですよね...。

Haconiwaのおかげですっかりmruby人間になって久しい id:udzura です。

で、宣伝はこんなくらいにしておきまして、なんとなく流れでセットアップしたEmacsによるmruby環境をこの辺で整理しとこうと思ったので、書きます。というか、ほとんどC言語を書くための環境...。平成が終わるとか終わらないとか言っている2016年にEmacsC言語を書く環境の記事を書きます。

なお僕は C言語をまともに書いて2ヶ月ぐらいだったり、あと普通にカーソルキー使う人間だったりするので、その辺りは優しく突っ込んでいただければと...思います...。

何はともあれggtags、その他インストール

続きを読む

HaconiwaでDockerのsshdコンテナを利用してみる

こんにちは。これは技術記事です。みなさんは、技術記事ですか?

まず、 Haconiwa の近況報告なんですが、この度 mruby で書き直し、ひとまず MRI 版と同じ程度の機能までは実装できました。

github.com

これに伴い、Linux用のバイナリを配布する形にインストール方法を変更しました。また、今後MRI版の開発(haconiwa-mri とプロジェクトをリネーム済みです)は積極的には行わない予定です。何か機能追加したい際は mruby 版の方へPRを!

(一応、MRI版のリリース記事は以下です)

udzura.hatenablog.jp


ということで、今日はこのmruby版のHaconiwaを用いて、Dockerのsshdコンテナを再利用してsshdを立ち上げてみる手順を紹介します。

続きを読む

mruby便利tips: 利用しているmgemのリビジョンを知りたい

mgemは、 mgem: 指定にしても github: 指定にしても基本的にgitリポジトリをチェックアウトして持ってくるようになっている。なので、チェックアウトした段階でのリビジョンが知りたいことがある。

build_config.rb に以下のようなモンキーパッチを書いておくと、

module MRuby
  module HookGemRevision
    def gem(gemdir, &block)
      gem = super(gemdir, &block)
      if File.exist? gem.dir + "/.git"
        print "#{gem.name}: revision="
        sh "git --git-dir #{gem.dir}/.git rev-parse HEAD"
      end
      gem
    end
  end

  class Build
    include HookGemRevision
  end
end

MRuby::Build.new do |conf|
  toolchain :gcc
  # ...
end

その時点でチェックアウトしている mgem のリビジョンを(可能な場合に)表示してくれて便利かもしれない。

$ rake
cd mruby && MRUBY_CONFIG=/Users/udzura/.ghq/github.com/udzura/mruby-argtable/build_config.rb rake all
mruby-argtable: revision=d0077ef2504be4cb3ae8e855dfe88a532fb6997b
mruby-dir: revision=0c3c538855dd15208d34fee96b13675e564bb4b6
CC    src/array.c -> build/host/src/array.o
CC    src/backtrace.c -> build/host/src/backtrace.o
CC    src/class.c -> build/host/src/class.o
CC    src/codedump.c -> build/host/src/codedump.o
CC    src/compar.c -> build/host/src/compar.o
CC    src/crc.c -> build/host/src/crc.o
...

(コアにこんな感じの機能が入ってもいい気がするが、どういうやり方があるか考え中...)