読者です 読者をやめる 読者になる 読者になる

NDS 第50回勉強会に参加しました

地元新潟で最も愛している勉強会がついに50回を迎えました。

第50回勉強会(2016/12/10) - 長岡 IT開発者 勉強会(NDS)

これもひとえに云々...

今回の発表

第10回 コンテナ型仮想化の情報交換会@東京ではなしたGoでつくるLinuxコンテナの再演をさせていただきました。

結果としては40分でも時間が足らずに話しきれませんでした。 見積もり&練習不足を痛感。申し訳ないです。

2016年の発表を有終の美で飾ることはできなかったのが心残りです。2017年も精進しなければ!!!!

NDS振り返り

はじめてNDSに参加したのは第23回でした。もう5年も前なんですね。感慨深いものがあります。

思い返すと@neko_gata_sさんが新潟に引っ越してくるタイミングで声をかけていただいた のがきっかけでNDSを知り、これまでにつぎのような発表をさせていただきました。

NDSという最高の発表の場をお借りできたことを嬉しく思います。

主催の@civicさんをはじめ、NDSを通して出会えたたくさんの方々にこの場を借りて感謝致します。

@nemuzukaさんが良いこと書いてます

@nemuzukaさんの参加レポートが大変良いです。本当に良い。

自分を「客観的に評価できる」場があるのは、人として成長できる「伸びしろ」を作り出すのに良いことだと思います。

NDSは参加するたびに新しい伸びしろを作り出す、そんな勉強会です。 近隣にお住いのITエンジニアの方々、ぜひNDSに参加して一緒に成長の「伸びしろ」を作りだしていきましょう!

あと個人的に、Linuxに詳しい方の参加を心よりお待ちしております。

第10回 コンテナ型仮想化の情報交換会@東京で発表してきました

10月29日に開催された「第10回 コンテナ型仮想化の情報交換会@東京」に参加し、 「GoでつくるLinuxコンテナ」という内容で発表させていただきました。

スライドはこちら。

ライブコーディングで作った(はず)のコードはこちら。一部内容が違いますが、概ね同じものです( ^ν^;)。

git.io

いつもはWeb系のカンファレンスや勉強会に参加しているのですが、今回は普段よりも低レイヤーを扱う方々が多く、 いつマサカリを飛ばされるのだろうと緊張しきりでした。

発表では時間の見積もりが甘かったうえに練習不足&緊張が相まって個人的に納得がいかない内容となってしまいましたが、聴いていただいた方々に好評価をいただき、なんだか複雑な気持ちです。精進しなきゃなぁ。

不明な点や疑問ががございましたらブログのコメントやTwitterなどでお声がけください。

今回の発表ではとても貴重な経験をさせていただきました。 主催の@ten_forwardさんには大変感謝しております。 お声がけいただき、本当にありがとうございました。

つぎの機会があれば、十分な準備をして発表に望まさせていただきます!!

YAPC::ASIA Hachioji 2016 mid in Shinagawa で発表してきました

YAPC::ASIA Hachioji 2016 mid in Shinagawa で発表してきました

7/2, 7/3に開催されたYAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa に参加して「つくって学ぶLinuxコンテナの裏側」というタイトルで発表させていただきました。

github.com

前日までに何回か発表練習をしたのですが40分に収まらず悩んでいたところ、 同僚から 「想定聴講者を"中級者"にしているじゃないですか。基本的なところはバッサリと飛ばしちゃっていいいんじゃないですかね。」 という 素晴らしいアドバイスを頂き、当日はなんとか40分に収まりました(1分ほど延ばしていただきましたが)。感謝。

ですが、思い返すと大事なことも言い忘れていたし、やりたかったデモもできずじまいでした。 もう少し計画的に話せればよかった。

  • yapCyet another pachimon Container の略であること
  • yapCは今回の説明をするためのリファレンス実装であること
  • パラメータが環境変数なのは、getoptsつかったりコマンドラインオプションを自前でパースするのが面倒だったので手抜きしたため
  • YAPC_CPU_QUOTA=50000CPU使用率が50%になるのはcpu.cfs_period_usのデフォルト値が100000のため
  • プロセスがforkする際に親プロセスのケーパビリティセットが子プロセスにコピーされる
  • プロセスのケーパビリティはcapsh --printでも確認できる
  • yapCではInh/Prm/Eff/Bndすべて同じケーパビリティセットにして制限を徹底する
  • setuid(2)やファイルのケーパビリティを利用しない場合は--drop=allでも良いかもしれない
  • dockerで用意したcentosのルートファイルシステムを利用したコンテナのデモ ができなかった
  • ネットワークの分離のデモではdockerのようなネットワーク構成(ブリッジ+veth)にしている
  • デモではコンテナ内でIPアドレスを割り当てているけどホスト側で割り当てることももちろん可能
  • コンテナ内から外部につなげるにはNATの設定が必要
  • straceの使い方
  • 実行中のプロセスの名前空間に入る方法
  • 既存の運用に合わせたコンテナ実装の話

とかとか。細かいところを挙げればもっとたくさん話したいことがありました。

あとで動画がアップされると思うのですが、テンパっている様子を生暖かく見守っていただけるとありがたいです。

スライドは頑張って作ったので、多くの方に見ていただければ嬉しいなーなんて思っています。

発表後には、穴が空くほど(?)繰り返し読んだLXCで学ぶコンテナ入門の著者である@ten_forwardさんに声をかけていただいたり、はてな@shiba_yu36さんとお話できて「発表してよかったなぁ」とつくづく思いました。

gihyo.jp blog.shibayu36.org

クロージングでは得票数が6位だったことが聞けてとても嬉しく思っています。投票していただいた方々、本当にありがとうございました!

@uzullaさんをはじめスタッフの皆様、大変お疲れ様でした。 最高に楽しいカンファレンスでした!!!

NDS 第45回勉強会に参加してきました

第45回勉強会

スライドはこちら。

ネタに困った時にDockerの話するの、そろそろ卒業しないと...

今回の勉強会は半ば「今日帰ってすぐに始められる〜」だったのですが、コマンドやランタイム、ミドルウェアなど、簡単にお試しできる環境を用意するのにもDockerはオススメです。

Docker Toolboxで雑にDocker実行環境を用意して、下のような雑なコマンドで「今日帰ってすぐに始められる〜」を実践しましょう。

$ docker run --rm -it -v `pwd`:/work -w /work perl /bin/bash

root@59501df5ade5:/work# perl -v
This is perl 5, version 22, subversion 0 (v5.22.0) built for x86_64-linux
...

ターミナルを分割して開き、ローカル側でコード編集、コンテナ側で実行...なんて感じにすると捗るかもしれませんね。

f:id:hayajo_prpr:20151207171644p:plain

懇親会では前日のモンハン夜更かしが祟って、ところどころウトウトしてしまいました。 モンハンほどほどにしないと仕事や勉強会に影響が出てしまいますが、ブシドーランス楽しくてやめどきがわかりません。

f:id:hayajo_prpr:20151207171953p:plain

2016年はPerlとGo成分を多めに、発表の機会を増やしてく所存です。

YAPC::Asia Tokyo 2015 に参加してきました

まずは...

諸事情で「今回の参加は欠勤&旅費全額負担かなー」と覚悟していたのですが、会社から全面的にサポートして頂きました。

本当に感謝しています。ありがとうございました。

所感

トークの内容は他の方々が詳しくまとめてくださっているので割愛。 感じたことだけ。

  • Perl6のリリースが楽しみ!
  • Consulの導入を検討しよう
  • golangツール、知らなかったので学ばねばなー
  • SwiftではProtocol(golangのinterfaceのようなもの)を使えば良いっぽい
  • システムの構成要素が細分化・多様化してきている今こそ、基礎的な知識や技術をしっかりと身につけねば!

Perl6、本当に楽しみです。

YAPCの思い出

YAPCは今回で5回目の参加です。

今回が最後ということで、過去のYAPCを振り返るとこんな感じでした。 YAPCでの出会いや学びに刺激を受けて今の自分がいるのだなぁ...と、しみじみ感じますね。

YAPCという素晴らしいイベントに感謝しきりです。

2011年

  • @neko_gata_sさんに誘われてYAPCに初参加
  • テックカンファレンスへの参加も初めてで、とにかくすべてが輝いていた

2012年

  • LTソンで喋る。すごく緊張して何話したかよく覚えていない
  • CPAN Authorデビュー

2013年

  • Acme大全に拙作モジュールが載る
  • 隙間時間でモンハンばかりやってた...orz

2014年

  • Hubでたくさんのスターエンジニアの方々と話せた
  • Top 10 Kwalitative Japanese authors 2014で名前呼ばれた!

YAHC開催

YAPC終了後、@neko_gata_sさん、@kazuphさんという、YAPC登壇者お二方に囲まれてYAHCが開催されました。

YAHCは「おいしい食事を囲んで私の老害トークを延々と聞かなければならない」という、アメとムチなイベントです。

以下アメ写真。

f:id:hayajo_prpr:20150822194117j:plain f:id:hayajo_prpr:20150822200311j:plain f:id:hayajo_prpr:20150822232452j:plain

YAHC、お二方のおかげでYAPCの最後を飾る最高のイベントになりました。

ありがとうございますありがとうございますありがとうございます。

ssh + su環境でServerspec/Specinfraを利用するためのバックエンドを書いた

こんにちは。業務都合上、サーバー運用ではsudoが使えずsuでrootになって作業を行わなければならないhayajoです。

Specinfraのsshバックエンドはsudoでのコマンド実行を前提としているため、suでrootになって運用しているサーバーに対してSpecinfra/Serverspecを実行するには少々手間がかかります。(Specinfra.configuration.disable_sudo + run_commandでexpect実行とか)

そこでSSH + suでのコマンド実行を行うSpecinfraバックエンドを書きました。

Specinfraでの使用例はこんな感じです。

require 'specinfra'
require 'specinfra/helper/set'
require 'specinfra/backend/extension/ssh_su'
require 'highline/import'

include Specinfra::Helper::Set
include Specinfra::Helper::Os

host = ARGV[0]

set :host, host
set :backend, :ssh_su

options = Net::SSH::Config.for(host)
options[:user] = ask("Enter ssh user: ")
options[:password] = ask("Enter ssh password: ") { |q| q.echo = false }
set :ssh_options, options

set :su_password, ask("Enter su password: ") { |q| q.echo = false }

puts Specinfra::Runner::run_command('whoami').stdout
puts Specinfra::Runner::run_command('cat /etc/passwd | grep `whoami`').stdout

set :os, os
if Specinfra.configuration.os[:family] == 'redhat'
  puts Specinfra::Runner::install_package('epel-release').stdout
end

puts Specinfra::Runner::install_package('nginx').stdout

モジュールをrequireし、バックエンドにssh_suを指定して使います。Serverspecで使用する場合も同様です。

configurationはsshバックエンドとほぼ同様で、sudo*のものをsu*に置き換えてください。

suのパスワードプロンプトはデフォルトで"Password: "を想定していますが、ロケールを変更した場合など、対象サーバーのプロンプトと異なる場合はsu_promptを設定して調整してください。

suで運用する環境は減ってきていると思うので需要はあまりないとは思いますが、そのようなホストに対してSpecinfra/Serverspecを実行したい場合は使ってみてはいかがでしょうか。

不具合がありましたらGihubのIssuやプルリクエストをお願いします。

Mojolicious::Plugin::Web::Auth 0.05 をリリースしました

OAuth 1.0(A) 関連の実装を修正しました。

これで TwitterDropbox の認証が Hypnotoad の他に Starman や Starlet でも動作するようになったはずです。

ご確認ください。

Mojolicious-Plugin-Web-Auth-0.05

Thanks id:kechiya

Mojolicious::Plugin::Web::Authの使い方を教えてください - 鈍足ランナーのIT日記