2015-05-10: ごかつとおか 連休最終日: GW まとめ, gentoo-build

連休最終日… 起きたら 21 時だったよ…

今年の GW はいろいろやろうと思ったけど達成したのはネットワーク再構築と gentoo-build くらいでした。うーん Docker 環境 (Kubernetes 環境) の整理とかもしようと思ったんだけどなあ…。

あとはまあちょっと外に出たり同人誌即売会行ったりとかってのもあったりしたから、こんなもんなのかも。

gentoo-build

https://github.com/sorah/gentoo-build

設定された内容に沿って stage3 展開して最低限のパッケージ、カーネルビルド、grub2-install をしてくれるシェルスクリプト郡を作った。

packer に無駄に対応した結果当初の目的を忘れたけど AWS AMI や Vagrant box (virtualbox) ができたので良しとした。検証しやすくなったかなあ…

もともと自分でセットアップ用のめちゃくちゃ長いシェルスクリプト (秘伝のタレ) があったので、それを整理して systemd や packer, cloud-init, vagrant に対応させつつみたいな感じでつくった。今後の gentoo 環境セットアップでは自分はこれを使うつもり。

おまけ: Packer の amazon-ebs で 0 から AMI を作成する

Packer の amazon-* 系 builder は空っぽのファイルシステムからの構築に対応してない。

というわけでいろいろと考えた結果、適当な source_ami を作業用として起動、cloud-config を user_data に突っ込んでおく。cloud-config 内 bootcfg により /sbin/init 起動前に rootfs を tmpfs にコピー・switch_root ・ root EBS をアンマウントした後に /sbin/init を起動する、というのを仕込んで一度インスタンスを再起動させる。あとは 2 回目に起動してきたインスタンスは root EBS をマウントしていないので、その状態で /dev/xvda とかに対して mkfs とかいろいろやってやれば良い、という事に気付いたのでそんな感じでやっています。

詳細: Building AMI from scratch using packer amazon-ebs builder - blog.sorah

Published at 2015-05-10 23:59:59 +0900

2015-04-15: ドキュメントの件

http://yoshiori.hatenablog.com/entry/2015/04/14/171326

実際にちゃんと日程決めて 1 日なるべくドキュメンテーションする日にしようという事にしてやりました。
ターゲットは主に社内の各種サービス。内部 API とかライブラリとか、そういう類の。

「今日はみんなこれをやる」と決めると、やるかー、っていう気分になるじゃん。いろいろやらなきゃいけないタスクはあるけど、それは置いておいて みんなで やるという空気にするとわたしはやるかーってなる。一人でやるぞーってなるより、やるかー! ってなるんだよな。

どこをとりあえず見ればいいか分かりにくい、ドキュメントのある場所がまちまち、そもそもドキュメントがない! という状態を改善していく。具体的には

  • 置き場所がバラバラ
    • 基本的に、概要や運用寄りの情報は社内 Wiki に統一。みんなだいたい、まずここを検索するような習慣があるから
    • Pull Request して実装の変更とともにレビューできたほうがよい、API リファレンスとかは Git リポジトリに突っ込んで管理。GitHub Enterprise の web view を通して読む (Markdown)
  • どこを見ればいいのか分かりにくい
    • Wiki ページ先頭を見て概要と、Getting Started / Tutorial 的ページへのリンクを置いておく
      • Getting Started ページにもだらだらと書かない、細かい tips はリンクなどに留めて別のところに置いていてスッキリさせる
    • 加えてページを分割する、1 ページにだらだらと書かない
    • Tutorial も体裁を整えて見やすく
  • そもそもドキュメントがない
    • 概要しかない…
    • outdated がすぎる…
    • というわけで書く。

…とはいうもののまだ完璧になっている訳じゃないのでこれからも精進が必要だしわたしも自分の管轄するところで書かれていないドキュメントを書かなきゃならない…。

しかし社内ブログに載せられたやつも自分の口頭での発言がテキストに起こされていた…ってやつなんだけど、これはさすがに美化されすぎなきがする。こんな綺麗な口調で言った覚えはない…ないぞ…

あとはドキュメントを書く習慣を付ける、第三者から見てわかりやすいドキュメントを書くみたいなのはいまだに下手だなぁと思ってるので、なんか良い文献や方法などあったらおしえてくださいませ。

Published at 2015-04-15 01:49:12 +0900

2015-04-12: しがつじゅうににち: draft-ietf-httpbis-http2-17 ある程度読んだ, PERSONA3 THE MOVIE #3 みた

draft-ietf-httpbis-http2-17

メモとりながらある程度読み終えた。 https://github.com/sorah/h2/blob/master/note.ja.md

これで仕様をよく把握してないのに波に乗ってる奴を殴りに行ける。

http-2 gem (igrigorik 氏による pure ruby 実装) があるけど理解のために実装までしようと思っている。HPACK が面倒くさいかなあくらいの気持ち。

RFC およびそれ相当の文章を全編通してちゃんと読むのちゃんとやった事なかったけど、こんな冗長なものなんだろうか。まだ draft だからこれから RFC editor とやらが頑張るんだろうか。Frame Type WINDOW_UPDATE の解説でまた Flow Control の解説しはじめなくてもいいし、ここでいきなり新情報でてくるし、ちゃんと Flow Control の節でやってほしいなあなどと思いながら読んでいたのだった。

PERSONA3 THE MOVIE #3 Falling Down

それとなく感想を述べると「エヴァかな?」って思いました。

P3 未プレイなので新鮮な気持ちで見ています。ところで P5 いつでるんだろう。

あとはトレイラーで亡国のアキトが流れてたけど、5 月のつぎ 7 月にまたやるっぽくて、急にスパンが 1 年から 2 ヶ月くらいになって「まじか」という感想を持った。1 年に 1 回やる映画という認識だったのに…。

(前回: #2 Midsummer Knight's Dream 日記 2014/06/21)

Published at 2015-04-12 23:59:59 +0900

2015-03-10: さんがつとおか: 365 days streak, c4.8xlarge on CentOS 6, マンガボックスなにこれ?

365 days streak

わりと 2014 年は平日に (自分名義の自分のプロダクトだけど) github.com へコードを push していたので気付けば 365 days streak になっていた。

EC2: c4.8xlarge を CentOS 6 で 36 vCPU で起動する

c4.8xlarge は vCPU が 36 個ある。これが古いカーネルだと Xen の PVHVM 対応のバグで、panic なり soft lockup なりして起動しない。

workaround として出た当初というか今もドキュメントには cmdline に maxcpus=32 つけて起動するように EC2 のドキュメントに書いてあるんだけど、4 vCPU が余るよねーという問題があった。

最近リリースされた kernel-2.6.32-504.8.1.el6.centos.plus.x86_64 ではその問題の修正パッチがバックポートされているので上げると 36 vCPUs で起動できる。centos.plus がついているパッケージをいれるのが重要 (--enablerepo=centosplus)。最初 2.6.32.-504.8.1.el6 普通に入れて「あれー?」ってなっていた。

しかし別に c4.8xlarge をフルで活用できるわけじゃないし、パフォーマンス目指すのであれば可能なら Ubuntu なり新しいカーネルを持ったやつのほうがいいと思う。2.6.32 もうつらいよー。

マンガボックス

"境界のないセカイ" という作品が気になって、これがここで連載してるので使ってみたんだけどあまりにも酷すぎてビックリした。

  • Web 版で作品紹介リンク押すとなぜかトップページに飛ぶんですが…………なんなの…
  • Web 版で各話リスト https://www.mangabox.me/reader/231/episodes/ が見れるのはなぜか Android の UA のみ
  • アプリに誘導するからアプリ DL したけど、そもそも読んでいた作品をどこから読んでいいかまったくわからない
    • どうやら初回起動時は検索 UI や設定画面へのリンクが無い?
    • どれか作品をよまなければいけない。しかし自分が読んでいた作品はその最初のリストに出てこないんだよな。全く何をすれば読めるのか分からなかった。
  • Android 版は各話リストがなんかおかしい。配信されている話が全部でてこない
    • Web 版で各話リスト見れるのはそれが理由なんだろうか…
  • アプリ DL リンク周辺に別にアプリへ飛ぶリンクがあるわけではない。ダウンロードボタンを再度タップすると普通にアプリ内のトップ画面に飛ぶ
    • 最初に何か作品を読まないかぎり通常の検索 UI や通常の配信作品リストが見れるビューにいつまでも飛べないので、本当にただ作品が読みたいだけなのに読めなくてうんざりする
    • Android からみると Web で他の配信話見れたけど、iOS だとこれどうしようもないのでは。
  • Web 版も Android 版も iOS 版もページめくりまわりの処理がつらい
    • まぁこれは目をつむれるレベル。他が酷すぎる

そして作品の紹介がしたいのに作品紹介ページみたいな安定したリンク先がないんだよ! なんてこった…

とにかくただ気になった作品をよむためだけなのにプラットフォームのゴミさ加減にうんざりしてしまった。残念なプラットフォームでしか配信されてない良いなぁと思っている作品、本当につらい。作品も作者も何もわるくなくて、プラットフォームが悪。

Published at 2015-03-10 23:59:59 +0900

2015-02-16: にがつじゅうろくにち: #morisnite #生ハム原木ラーメン

寝坊。明日から ローソンのデレマスキャンペーン なのに大丈夫なんだろうか。ローソンいくために遠回りするんだょ…

生ハム原木ラーメン

#morisnite ラーメン2

A photo posted by Shota Fukumori (@sora_h) on

02/06 の #morisnite で 持ち帰ってきた生ハム原木の骨からラーメンつくるやつをやった。といっても調理は全部 @mirakui に任せて、わたしは家まで持ち帰って会社へ持っていくのと、後片付けだけをしたんだけど…

#morisnite ごちそうさまでした。

A photo posted by Shota Fukumori (@sora_h) on

平日昼間に人ってあつまるもんなんだなぁとおもった次第だった。みなさまありがとうございました。

gentoo の docker イメージつづき

Gentoo ベースの docker イメージ、だいたいこんな問題がある

  1. そもそも /usr/portage がでかいので普通に portage のデータを手元に持つとイメージが肥大になって死ぬ
    • portage をじゃあ持たないようにするしか… といってもじゃあどこからデータひいてくるんだよみたいな
  2. stage3 が実は地味にでかくて死ぬ
    • python 今なんか 3 種類くらいデフォルトで入ってるのね… みんな python 3 にしないから…
  3. 削除したところでイメージの肥大は解決しない
    • 差分で持ってるからね。しかたないね。

あきらめて以下のようにした

  1. dockemerge コマンドというのを手元のベースイメージに用意、portage-snapshot.tar.xz をダウンロードして展開して、emerge コマンドを叩いた後に /usr/portage と tarball を掃除するコマンド
    • これで /usr/portage でイメージは肥大しなくなるが遅い
  2. stage3 がでかい
    • base イメージからいらなそうな system package (udev) とかをとりのぞいておく
    • ついでに python が 3 つ入っていて厄介なので、とりあえず業界標準である python 2.7.x 以外を消す。portage が依存してしまっているので USE="python_targets_python2_7 -python_targets_..." emerge -v sys-apps/portage とかで依存を外しておく。
  3. squash する
    • base ビルドした後に docker run -d ... sleep 12h で仮のコンテナを上げて docker export ... | docker import - すると差分が全部潰れて軽量化される。差分は失う。
    • 普段遣いならまあこれで困らないのでは。

ということをしたら 500MB くらいになった。 https://github.com/sorah/gentoo-docker に Dockerfile 等々はあるけれど、docker push はまだしていません。

CI でビルド実行したいなあ。

アルミラック

同僚の @kani_b が引っ越している中、処分されそうになってたアルミラックを引き取った。丁度買おうかなあとおもってたスペースにだいたいぴったりだったのでよかった。

ただ、高さは足りないので数ヶ月後にはリプレースされているかも。でもまあとりあえず必要だったので引き取りました。

これをきっかけに部屋の大掃除も達成した。でもまだ片付けきれていない…

Published at 2015-02-16 23:59:59 +0900

2015-02-09: haproxy の優雅な再起動

tl;dr haproxy -sf による再起動では SO_REUSEPORT が使えないと瞬断が発生する。SO_REUSEPORT は Linux 3.9+ か、CentOS, RHEL 6 では最新のカーネルに上げると利用できる。


haproxy は自分自身の設定を reload するみたいな便利な機能はない。 そのかわりに、 -sf オプションへ既存の pid を渡して新しく起動してあげると、入れ替わってくれる機能がある。

なんだけど、なぜか手元の環境だと ECONNREFUSED とかが発生するタイミングがあったので調べた。環境によってはならないこともある。

まず、最近の Linux には SO_REUSEPORT がある。sockopt で SO_REUSEPORT をつけていると同じ port に対して複数の fd が bind する事が許容される (The SO_REUSEPORT socket option [LWN.net]) オプションで、haproxy は勝手に利用してくれる

haproxy は起動するとまず必要なポートの bind を試みる。SO_REUSEPORT が利用できない場合は初回の bind は成功しない。そのため、新 haproxy は SIGTTOU を旧 haproxy へ送信、tcp_pause_listener 関数を実行させる。一定時間ごとに bind を再試行し、成功したタイミングで SIGUSR1 を旧 haproxy へ送信する。

一方 SO_REUSEPORT が利用できる環境では、新 haproxy の初回 bind はあっさり成功する。そのまま旧 haproxy へは SIGUSR1 が送信される。これによってダウンタイム無しに haproxy の入れ替えが完了する。この場合 SIGTTOU は送信されない。

どちらの場合も既存のコネクションは触られないため維持される。SIGUSR1 を受け取った旧 haproxy は、既存のコネクションを全て処理した段階で終了する。

そして SO_REUSEPORT が利用できない場合、 SIGTTOU → bind (再試行) → SIGUSR1 の間に新規の接続に対する ECONNREFUSED が発生する模様。このへんの処理は src/haproxy.c:L1554-1577 にある。

実際、再現しない環境でも手で SO_REUSEPORT の利用箇所をコメントアウトしてビルドすると再現した。

対応としては、新しい Linux を使う (Linux 3.9 以降)。しかし実は SO_REUSEPORT は最近の RHEL 6 (CentOS 6 では 2.6.32-417.el6?) で手に入る最新のカーネルへバックポートされている模様。なので RHEL 6, CentOS 6 をご利用の方々もどうにかなる気はする。

もう一個としてはhaproxy を立ち上げる親プロセス側であらかじめ bind した fd を持っておき、それを haproxy に渡す方法。bind fd@30 とかすると haproxy 側から利用できる。

楽しくなってちゃんと真面目に書いた実装がこちら。いちおう、bind に失敗した時や haproxy -c に失敗した時は死なないようになってたりします。 https://github.com/sorah/sandbox/tree/master/ruby/haproxy-master


あとこれは未だに良く分かってないので TCP_LISTEN な fd に対する shutdown(2) の挙動・このコードの意味を教えてください。とりあえず accept(2) できなくなるというのは軽くカーネル読んで確認しました。

追記: @pandax381 さんが教えてくださいました!

(ただし Linux のばあい)

(記事タイトルの元ネタ: nginxの優雅な再起動 )

Published at 2015-02-09 23:59:58 +0900

2015-02-01: 私設インフラ業, ストライクウィッチーズ OVA 2

なんかいろいろやっていた。どようびは 23 時起床でどこかへ消えました。

私設インフラ業

  • zabbix の discovery をちゃんと書いたことがなかったので fluentd で書いてみた。めっちゃアイテムとトリガーが増えたけど… http://blog.sorah.jp/2015/02/01/monitoring-fluentd-with-zabbix
    • trigger の初回 OK (recover) メッセージなんとかならんのか、とずっと思っていたけど、Recovery message ON の状態で condition に "Trigger value = PROBLEM" 追加で回避できるらしい (情報ありがとうございます)。 http://twitter.com/qryuu/status/561788623754780672
  • fluentd を全ホストに導入した
    • 諸々のログ転送にちゃんとつかっていきたい (今のところ通知系と nginx ログくらいでしかつかってなかったので nginx ないホストとかには入っていなかった。)
    • 適当に他ホストでつかっていた puppet module 突っ込んで、設定ファイルを配置したら動いた。便利。過去のわたしはえらい。
  • fluentd の fluent-plugin-rewrite.gem を fluent-plugin-rewrite-tag-filter.gem にリプレースした。
    • fluent/* 配下にコードがあったから、というのが大きな理由
    • nginx のアクセスログを virtual host ごとにタグ分けるのにつかっている。
    • 今回の変更から、見知らぬホストは other とかいうタグをつけて一個にまとめた。なんかたまによくわからない host ヘッダつけてくる人がいるので…
    • ↑雑に sorah.jp とかのドメイン配下でやってたので sorah.jp 以下に適当なサブドメインつけてアクセスしてくるとやっぱり増えてしまうので、結局 LTSV で server_name:$server_name みたいなフィールドを増やして、それで分岐させるように変更した。
    • $server_name を log_format で見ると、server_name ディレクティブの第一引数になって便利。
  • glibc を上げたり…
    • なにが GHOST だ

fluentd の nginx まわりはいまのところこんな感じ。

<source>
  @id in:nginx
  type tail
  path /var/log/nginx/access.ltsv.log
  pos_file /var/log/fluentd/pos.nginx
  tag nginx.access
  format ltsv
  time_format %d/%b/%Y:%H:%M:%S %z
</source>

<match nginx.access>
  @id nginx.access:rewrite
  type rewrite_tag_filter
  rewriterule1 server_name ^((?:.+\.)?(?:sorah\.jp|sorah\.me|ajunk\.org|privs\.net|her)|localhost)$ nginx.access-sites.$1
  rewriterule2 server_name ^(.+)$ nginx.access-sites.other
</match>

<match nginx.access-sites.**>
  @id nginx.access-sites:copy
  type copy

  <store>
    @id nginx.access-sites:forest
    type forest
    subtype s3

    remove_prefix nginx.access-sites

    <template>
      @id nginx.access-sites:s3:__TAG__

      aws_key_id ...
      aws_sec_key ...
      s3_region ...
      s3_bucket ...

      path nginx/__TAG__/

      buffer_path /var/log/fluentd/s3.buffer.nginx.access-sites.__TAG__

      time_slice_format %Y%m%d
      time_slice_wait 10m
      utc
    </template>
  </store>

  # あとは file とか色々あるけど割愛
</match>

tmux の syncronize-panes にも限界があるなあという所で何か便利なソリューションを導入したい。Rundeck とかかなぁ。

次は nginx の discovery を書きたい。サイトあたりの rps とか response code 状況を勝手にグラフつくって出してほしいんだよなあ。

ストライクウィッチーズ Operation Victory Arrow Vol.2 エーゲ海の女神

vol. 1 に引き続き ('14/09/21) 見てきた。起床時間 (土曜 23 時) 的に、日曜夕方くらいには寝るつもりだったんだけど日曜夕方の枠でいくことになった

  • こんなパンツおおかったですっけ
  • 「このキャラ見たことない…」「小説版に出てきた気がする」「なるほどな〜〜」
  • フランチェスカの CV 斎藤千和だったのか。
  • シャーリーかっこういい。
  • 良い話だった。

角川シネマ新宿、前回もここでみたんだけど今回はめっちゃスクリーンちいさいし座席も少ないなぁと思ったらおおきい方の部屋ではラ! の SSA LV やってたみたい。どうでもいいけれど、ラ! のライブ一度くらいはいってみたい気がする (また揉めてて大変そう)

帰りはなぜか「Java は Vim でかくの辛い気がするけれど Go はメンタリティ java なのに vim-gocode とか godef のおかげでなんとか vim でもやっていけてすごい、というか無いとつらいんだけれど。型付きのエディタサポート最高〜」みたいな話をした。「なんで型がない Ruby のコードメンテできてるんですかねえ」「Ruby は 1 class 1 file の文化あるけど Go は 1 interface の関係物が複数ファイルに跨っていたりファイル命名規則が特になかったり、あとは異常に変数名省略してるからでは」などなど。

Published at 2015-02-01 23:59:59 +0900

2015-01-20: gocode とか整備していた, k8s に pull request を投げた

gocode を godeps とか gondler とかそういうツールと仲良くさせる

GoogleCloudPlatform/kubernetes で gocode がうまく動かなくてあれ〜ってなったので tips を書いた。

kubernetes に pull request を投げた

一週間ちょいくらい前に投げた issue へのパッチをいい加減に書いた。images GC を止めるための手段を用意した。 地味に開発環境用意するのが一番面倒だった。hack/* 系スクリプトの使い方覚えたりとか、あとはコード読んだりだとか… godep と gocode は便利だな。

GHE 2.1.0

Announcing GitHub Enterprise 2.1.0

モニタリングツールずっとまってた。

Published at 2015-01-20 23:59:59 +0900

2015-01-17: StarryDream* #stdr に行ってきた, Star!! の CD 予約した, SideM 特番, MBA11" (Late 2010) に Gentoo を入れる

休日だ。

StarryDream* に行ってきた

StarryDream* に行ってきた。ゲストに AJURIKA とちょこたんがいるというのに惹かれた。

「また声優かよ」とおもうじゃないですか、誤解しないでください、AJURIKA の方が目的としては大きくて、ちょこたんとかは見れたらいいな〜程度に思っていたんだけど、普通に最前近くにいる事ができてみれた。oath sign カバーめっちゃよかったし、かわいかったですね。

リアニの時も同様に最前にいたんだけど、すみぺが出てきた時の物理的圧迫による厳しさが印象に強くのこっていて不安だったけど全然平和な現場だった。

AJURIKA さんの時間は例によって最高だった。それとその前の薔薇さんの時間は懐かしさが多くてよかった。あの曲に PPPH を入れることになるとは〜系の出来事。曲きいたことあるレベルのも当然多かったしセトリがみたい気がする。あとは hirotch さんがシンデレラガールズ以外の曲を多くかけているの初めてみました。

どうでもいいけど stdr がスタドリにしか読めない。運営のみなさまがたお疲れさまでした、楽しかったです。

Star!! の CD を予約した

THE IDOLM@STER CINDERELLA GIRLS ANIMATION PROJECT 01 Star!!【初回限定盤CD+Blu-ray】
CINDERELLA PROJECT
日本コロムビア (2015-02-18)
売り上げランキング: 6

デレマス (アニメ) の OP であるところの Star!! を予約してきた。ただしイベントがある関係でまずは Tower Record で 2 枚予約。4k かぁ

明日かどこかで秋葉原でアニメイトでも予約する。横浜厳しい気がするけど。ついでに歌姫爆宴いきたいんだけど、今日の疲れもあるしスルーかなぁ…

(完全に 2 月に払うつもりでいたけど今月払う事になるとは思わなんだ… :money_with_wings:)

THE IDOLM@STER SideM ニコ生特番

寺島さんが場なれしているというのもあるけど、すごい楽しい特番だった気がする。Jupiter のキャスト方仲良すぎ… あとガミPが「346プロとか315プロとか3被り勘弁してくれ」とか言いだして面白かった。

新キャストも決まったみたいだし今後これも普通にコンテンツとしてどんどん強くなっていくんだろうなぁ。まれいたそ弟であるところの内田雄馬 さんが決定していて、姉弟でアイマスキャストすごいみたいな感じ。新キャストのみなさん、場なれしてない感じがすごい出ててかなり好感。たのしみ。

CD シリーズがどうやらはじまるっぽいし、価格感的には今の THE@TER HARMONY シリーズと同じ感じになるんだろうか。SideM 用の財布が必要になる予感がする。

MacBook Air 11" (Late 2010) に Gentoo を入れる

11" のマシン軽くてよいんだけど手元にあるのは Core 2 Duo で OS X そろそろ限界なので Gentoo を入れてみる事にした。今回は UEFI + systemd に挑戦。

  • インストールは systemrescuecd の USB stick から EFI で起動できるのでそれでやった。
    • WPA2 の Wi-Fi ネットワークへの接続は nmcli dev wifi connect <SSID> password <KEY> で出来た。
  • カーネルオプションは make localyesconfig をベースに iptables 周り全部有効、docker で要求されるやつ全部有効, Mac 向けにいくつかいれた。なんか覚えてないので後で忘備録もかねて .config 上げるか。
  • ブートローダは GRUB2. EFI よくわからない上に Mac っていう特殊ハードだし、Arch の wiki にも gentoo の wiki にも書いてあるが分かりにくくて緊張感たかかった。
    • 結論としては sda1 (disk0s1) を /boot/efi にマウントして grub2-install --target=x86_64-efi /dev/sda を実行、OS X のリカバリで起動して Terminal から sudo mkdir /Volumes/efi && sudo mount -t msdos /dev/disk0s1 /Volumes/efi した上で sudo bless --folder /Volumes/efi/EFI/gentoo --file /Volumes/efi/EFI/gentoo/grubx64.efi で大丈夫だった。
  • systemd のブート爆速すぎる...

まだ X とかは入れてない。どうせサーバーじゃないからサービスレベルは大したことないので、実験場代わりにこいつの構成管理から Itamae でも使ってみるかな。徐々に puppet から itamae によせたい。

ruboty-songinfo, ruboty-irc

ruboty-irc リリースした。なんか既存のがあったけど微妙なところがおおいし inactive なようだったし gem push されてなかったので適当に書き直してしまった。

あとは ruboty-songinfo を書いた。未 gem push。なんか適当なサイトから曲のメタ情報を引っぱってきてくれる handler。現状歌詞タイムのみ対応。作曲・作詞が誰か引くのに便利になった。

Published at 2015-01-17 23:59:59 +0900

2015-01-13: いちがつじゅうさんにち: GHEv2 の話, Jenkins の groovy script console 便利

GitHub Enterprise v2 の話

http://techlife.cookpad.com/entry/20150113/104500/ghe-v2

社の技術ブログに、いままでオフィスのしょぼいマシンで稼動していた GitHub Enterprise v11.10.xxx シリーズの installation を AWS 上に新規構築した GitHub Enterprise v2 へ移行した話を書いた。

はてブおもったより稼いでるけどみんな GHE の運用にそんな興味あるのかな…?

Jenkins の groovy script console が便利

Java 上のメソッドだいたい叩けるからドキュメントみながら適当にいじっていた。ラベルの整理とか (利用しなくなったラベルを全台から剥奪したり、ラベル状況みたり)、スクリプト一括置換とか。スクリプトに関しては run_ci.sh みたいなのをリポジトリにコミットしてる例もあるから完璧とはいかないけど。

// show node and labels
Jenkins.instance.computers.each() { cmp ->
  // assignedLabels
  println("${cmp.node.displayName}: ${cmp.node.labelString}”)
}
// replace labels in jobs
Jenkins.instance.items.each { job ->
  if ( ! job.assignedLabel ) return

  newLabelExpr = Label.parseExpression(job.assignedLabel.expression.replaceAll(‘foo’,’bar’))
  job.assignedLabel = newLabelExpr
  job.save()
  println("${job.displayName}: ${job.assignedLabel}")
}
// Replace build scripts
Jenkins.instance.items.each { job ->
  println("${job.displayName}:")
  list = job.buildersList
  builder = list.get(tasks.Shell) 
  if ( builder && (builder.contents =~ /FOO/) ) {
    println("match.”)

    newBuilder = new tasks.Shell(builder.contents.replaceAll(/FOO/, ‘BAR’))
    list.replace(newBuilder)
    job.save()
  }
  println("-")
}
// Grep label expression in all jobs
Jenkins.instance.items.each { job ->
  if ( ! job.assignedLabel ) return
  if ( ! (job.assignedLabel.expression =~ /java/) ) return

  println("${job.displayName}: ${job.assignedLabel}")
}

// remove specific label from all nodes.
labelToRemove = 'java'

labelAtomToRemove = new labels.LabelAtom(labelToRemove)

Jenkins.instance.computers.each() { cmp ->
  if ( ! cmp.node.assignedLabels.contains(labelAtomToRemove) ) return

  cmp.node.labelString = cmp.node.labelString.replaceAll("(^|\\s+)${labelToRemove}(\\s+|\$)",' ').replace(/^\s+/,'').replace(/\s+$/,'')

  println("${cmp.node.displayName}: ${cmp.node.labelString}")
}

Jenkins.instance.save()
Published at 2015-01-13 23:59:59 +0900

2015-01-13: 忘備録: Samba 4 AD ドメインコントローラ構築

Windows を再セットアップがてらそういえば LDAP 的な物に触ってみてもいいかもしれないと思って Samba 4 AD DC をセットアップしたので忘備録。ふつうの LDAP とはこれはこれでちょっと違うので難しいところがある。

そしてわりと面倒だった。Puppet manifest に落とすのが割とだるい気がしている。

... Continue Reading...
Published at 2015-01-13 02:46:22 +0900

2015-01-10: k8s 0.8.0, 2015 新春アニメ, デレマス アニメ#1

止まっちゃってたけど日記再開したい。ぼちぼち。

kubernetes 0.8.0

なんか出てたので試した。kube-proxy の iptables の扱いが変わってたり (chain が 2 つになった) した。例によって ebuild は sorah-overlay にあるので気になる人はお試しあれ。

後は skydns を使って services の portal IP を引く DNS サービス が入ったりしていた。まだ addons で自動設定とかされる訳じゃないみたいだけど。とりあえず起動してみて、内部 DNS にだけ portal_net への route を設定して stub-zone してみた。

ついでに kube-proxy へのアクセスをローカルネットワークとコンテナに絞る tip をブログに書いた。kube-proxy の listen するポートは把握できないし、DNAT か REDIRECT で destination IP は書き変わるしでちょっと面倒だった。結局 portal_net の宛先で mark つけてやるみたいな方法で解決。しかし kube-proxy への routing、一極集中する訳にもいかないから面倒くさいんだよなあ... 必要なマシンにだけ個別に設定して周る方向でとりあえずはどうにかする。

アニメ

  • アイドルマスターシンデレラガールズ: 後述
  • SHIROBAKO #13: 第2クール。ミニファンブックの通り企画段階の話をするっぽい。みゃーもりデスクがんばってほしい。
  • 冴えない彼女の育てかた #0: まだなんとも…
  • 幸腹グラフィティ #1: 飯テロ。おいしい物って不健康だよねえ。自炊頑張りたくなる…
  • 神様はじめました◎ #1: やっぱり神様はじめましては良いなあ。かわいいし格好いいしなあ。
  • ユリ熊嵐 #1: ナニコレ…ガウガウ。#3 くらいまではとりあえず見たいかも。
  • 艦隊これくしょん-艦これ- #1: キャラが多すぎて覚えられる気がしない。まあこれきっとデレマスでもそう思ってる人は一杯いるんだろうな。大井さんと北上さん差して「二人でいる時は声かけない方がいいっぽい」って言及してるのがおもしろかったです。
  • 暗殺教室 #1: OP が激しく動くやつだ… 渚くん(かわいい)の CV はまいまいなんだなー。フジテレビだけどノイタミナじゃない枠。久々?
  • デュラララ!!×2 承 #1: デュラララ!! 1期の内容も原作の内容ももうほとんど覚えてない。まあ見る。なんか携帯周りの描写が半年しか経ってないはずなのに…まあいいや。あとなんで深雪さん でてきてるんだ…痛車として。
  • アルドノア・ゼロ #13: 相変わらず俺TUEEEを感じる。
  • DOG DAYS″ #1: あの落下の仕方でよく無事でいられましたね…
  • アブソリュート・デュオ #1: まだよくわからない…

アニメ アイドルマスターシンデレラガールズ #1

涙腺やられるかなぁと思ってたけどその場ではやられずに、あとでじわじわきて涙目になる程度くらいだった。アニメ化発表の時は PV みながら涙腺をやられていました (日記 4/5)。しかし発表からあっというまに放送開始だなー。8ヶ月ほどって短い。

あのスタッフからくる安心感はあったけど、実際すごい描写細かいし、例によって 876 + 新幹少女から 765, Jupiter までカバーしていろいろ出してきたところは素晴らしいなあって。シンデレラプロジェクト外のアイドルとはどれくらい絡みがあるのかなぁ (それなりにあってほしい)。小日向ちゃん可愛かったね。 一話はしまむらさんがただ前向きで眩しいのと、うづりん回だった気がする。ぶい! 凛ちゃんもかわいいよ。

2 話も楽しみですね。

(そういえば作画ミスでままゆの服が消えている件、コラかと思ったら本当だった…。あと、NOMAKE の配信元が Akamai + Amazon S3 だった。デレマスでも AWS 使いはじめたんだなあ。)

Published at 2015-01-10 23:59:59 +0900