さくらインターネットを退職します

先日最終出社日を迎え、人が全然いないオフィスで一人デスクを片付けてきました。

いわゆる退職エントリというやつです。新卒入社して3年ちょっと(学生時代のアルバイトも含めると6年ちょい)勤めたさくらインターネットを6月末付で退職することになったのでご報告です。

どんな会社だったのか

レンタルサーバVPSクラウドなど、インフラサービスを幅広く提供している会社です。 (一部の)データセンターを自社で持ち、空調や電力といったファシリティの管理から各種コントロールパネルのデザインの開発まで自社で行っており、 インフラを使うだけでなくサービスとして提供している、というところに惹かれて入社したという経緯があります。 良い意味で色んな分野の尖った人材が集まっており、あちこちのコミュニティやカンファレンスのスポンサーとか支援も積極的に行っている点が良かったです。

他にも良い点は色々あって、緊急事態宣言より前からちょくちょくリモート勤務してたし、日によって定時の30分前には帰れる割に残業代が固定で20時間分支給されるし、 副業するのに上司の許可とかいらないし、有給も制度上入社時20日付与ですが、なんだかんだで諸々合わせると30日近く付与された年もありました。

どんなことをしたのか

Slackに絵文字をコツコツ追加して、気づいたら自分の絵文字が2000個を超えていました

カッコつけて誇張表現してる部分もありますが、詳しくはLinkedInにまとめています。

アルバイト時代は石狩データセンターで物理サーバの構築作業の一部を主にやっていました。 届いたサーバを開梱して設置・設定・配線をしつつ、その業務で使うWebアプリケーションを作り変えたりしていました。 何度か石狩DC見学会に同行して、美味しい海鮮丼を食べてファシリティの知識を勉強したりしていました。

新卒で入社して、最初の一年半ぐらいは大阪の本社で主にレンタルサーバVPSといったホスティング系サービスの監視対応や深夜のメンテをしていました。 24/365のシフト制で出勤時刻が7時だったり14時だったり22時半だったりしました。 休みが土日ではなく平日に来たり、夜仕事をして朝帰るのが体力的にキツかったりしましたが、 深夜手当が出たり自由な時間が多かったり、そこのチームでしかできない経験が積めたりしたのでよかったです。

あと大阪はメシが美味くて居酒屋もハズレが少なかったです。知らんけど。

そのころ学生時代からお世話になっている大先輩のid:notchi590からインフラ入門の書籍を執筆の話をいただき、一緒に執筆しました。

イラスト図解でよくわかる ITインフラの基礎知識

イラスト図解でよくわかる ITインフラの基礎知識

その後色々あってさくらのVPSのインフラ寄りの運用とか開発とかをやるようになりました。 ホストサーバの構築から障害対応・サポートまで、インフラに関わる色んな仕事を経験しました。

運用系で深く印象に残っているものだと、監視システムを改修して「手作業のぬくもり」を減らしたり、 CPUの脆弱性が発表された際に、その脆弱性のサービスへの影響がどういったものなのか、 緩和策を取るとパフォーマンスにどういった影響を与えるのか評価してサービスとしての対策を検討する、とかもやっていました。 学生時代からセキュリティには興味があって、このタスクでもCVEとか各種の情報収集が楽しかったです。

開発系だとスタートアップスクリプトのシェア機能を提案したり、 SSH公開鍵の登録機能のインフラまわりの開発を行いました。

その他、新卒採用イベントに参加したり、新しくチームに入られた方のサポートを行ったり、 大学で講義をしたり、地元のテレビ局のローカルニュース番組の取材を受けたりしていました。

何を学んだのか

技術的なものは多くて数え切れません。 ハードウェア周りもミドルウェア周りも業務をこなしていく中で、特にストレージや仮想化のあたりの知識や経験が身についたし、 まだまだ勉強しなきゃいけないと感じています。

「好きなことを仕事にすると仕事とプライベートの境界が曖昧になってつらい」という話をよく目にしますが、僕はその辺をポジティブに捉えていて、 業務と趣味でうまくフィードバックのサイクルを作って、気になることに何でも挑戦することにより技術と知識が広く深いものになりました。 学生の頃はPerlCGIとHTMLを書くのが精一杯だったのですが、今ではpythonフレームワーク使いつつAPI作ってWebアプリを作ったり、 Dockerでアプリケーションをコンテナ化したり、Ansibleで構成管理したり、テスト書いてCIで回したりしています。

一つ大事なのは、何度も障害の対応をしているうちに、障害対応の「嗅覚」を身に着けました。 言語化するのが難しいのですが、障害対応をしていると「何かいつもと違う」「ここがちょっと変」という感覚があるかと思います。 これにいち早く気づけるので、より早くトラブルを収束に繋げられている気がします。 隣の席の同僚兼先輩にはいつも勝てなかったですが😂

技術以外にも価値観とか、仕事の仕方で学んだことも多かったです。

  • ブラウザからはシンプルに見えるサービスでも、裏では多くの人が支えていて、その苦労の上に成り立っている。
  • 機械は必ず壊れるし、障害は時々起きる。(ご迷惑をおかけする事ではあるが)お客様はその点を理解してくれているし、起きた際に情報を早く正確に出すなど誠意を持って対応することで信頼関係が生まれる。
  • 技術を使って人の仕事を楽にしたり減らしたりすることは、その過程も含めて結構楽しい。

これらは今後エンジニアをやっていく上で大事にしていきたいです。 そして最近はこんなことを考えています。

転職に至ったきっかけ

経験を積むにつれて漠然とより成長できる環境を求めていたように感じます。 さくらインターネットという会社が好きだし、今の仕事をしながら学ぶことも多いし、 社内にも全然違う技術や新しい事に積極的に取り組んでいる部署もいくつかあるのですが、 今までと違う環境で経験を積んでみたいと思うようになりました。 ぶっちゃけコレといった転機はなかったのですが、ちょっと大きめの仕事をやり終えて、 達成感を味わいつつ、転職をすることにしました。

さいごに、これからについて

沢山の優秀な方々と仕事ができ、圧倒的に成長できた3年間でした。 社内外問わず関係者の皆さん、お世話になりました。

詳しい話は後日公開するつもりですが、次の会社が7月1日からなので一ヶ月まるごとお休みです。 付与日数が多かったこともあって使い切れない有給が4-5日ぐらい残ってしまったんですが、次回への反省ですね。

干物リストを貼ってみようと思います。 ポチって頂けると励みになります。

https://www.amazon.jp/hz/wishlist/ls/2DT9393YKAKLD?ref_=wl_share

named-chroot が chrootしてくれず "open: /etc/named.conf: file not found" と主張してくる件

お久しぶりです。
最近はCentOS6のサーバをCentOS7にリプレースするタスクに主に注力しておりました。

f:id:chamaharun:20160904125856p:plain

対象サーバ8台のうちにDNSサーバも入っており、構築中にハマった点を記しておきます。
chroot環境なのにchroot内の/etc/named.confを参照してくれず困りました。

/etc/sysconfig/named にもchrootしてるよーって書いていますが、

[root@ns2 etc]# cat /etc/sysconfig/named
OPTIONS="-4"
ROOTDIR="/var/named/chroot"

systemctl start named-chroot すると起動しません。

[root@ns2 etc]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2016-09-04 12:29:25 JST; 11min ago
  Process: 18080 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=1/FAILURE)

 9月 04 12:29:24 ns2.charakoba.com systemd[1]: Starting Berkeley Internet Name Domain (DNS)...
 9月 04 12:29:25 ns2.charakoba.com bash[18080]: open: /etc/named.conf: file not found
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: named-chroot.service: control process exited, code=exited status=1
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: Unit named-chroot.service entered failed state.
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: named-chroot.service failed.


そこで、/usr/lib/systemd/system/named-chroot.service を覗いてみることにしました。

# Don't forget to add "$AddUnixListenSocket /var/named/chroot/dev/log"
# line to your /etc/rsyslog.conf file. Otherwise your logging becomes
# broken when rsyslogd daemon is restarted (due update, for example).

[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Requires=named-chroot-setup.service
Before=nss-lookup.target
After=network.target
After=named-chroot-setup.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/var/named/chroot/run/named/named.pid

ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi'
ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS

ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'

ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'

PrivateTmp=false

[Install]
WantedBy=multi-user.target

環境変数を読み込んでるっぽいところを発見しましたが、パスの前に"-"がついてるのが気になったので

EnvironmentFile=-/etc/sysconfig/named


"-"を削除してみました。

EnvironmentFile=/etc/sysconfig/named

その後

$ systemctl daemon-reload
$ systemctl start named-chroot

するとちゃんと動くようになりました。

[root@ns2 named]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2016-09-04 13:06:15 JST; 4min 33s ago
  Process: 19239 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 19312 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 19309 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 19314 (named)
   CGroup: /system.slice/named-chroot.service
           └─19314 /usr/sbin/named -u named -t /var/named/chroot -4

 9月 04 13:06:15 ns2.charakoba.com named[19314]: sizing zone task pool based on 3 zones
 9月 04 13:06:15 ns2.charakoba.com named[19314]: set up managed keys zone for view internal, file '/var/named/dynamic/3bed2cb3a3acf7b6a8ef408420cc...f.mkeys'
 9月 04 13:06:15 ns2.charakoba.com named[19314]: command channel listening on 127.0.0.1#953
 9月 04 13:06:15 ns2.charakoba.com named[19314]: managed-keys-zone/internal: journal file is out of date: removing journal file
 9月 04 13:06:15 ns2.charakoba.com named[19314]: managed-keys-zone/internal: loaded serial 2
 9月 04 13:06:15 ns2.charakoba.com named[19314]: zone 11.168.192.in-addr.arpa/IN/internal: loaded serial 2011062001
 9月 04 13:06:15 ns2.charakoba.com named[19314]: zone charakoba.com/IN/internal: loaded serial 2011062001
 9月 04 13:06:15 ns2.charakoba.com named[19314]: all zones loaded
 9月 04 13:06:15 ns2.charakoba.com named[19314]: running
 9月 04 13:06:15 ns2.charakoba.com systemd[1]: Started Berkeley Internet Name Domain (DNS).
Hint: Some lines were ellipsized, use -l to show in full.

ICTトラブルシューティングコンテストの運営をしてきました

ICTSC5運営技術ブログ icttoracon.net

にも書いた通り、第5回ICTトラブルシューティングコンテストの運営をしてきました。
この記事の読者の中には、インフラ系でない方もいらっしゃると思うので、概要を少し詳しめに書きます。

ICTトラブルシューティングコンテストとは何か

僕達が毎日当たり前のように利用している、SNSソーシャルゲーム・通販サイトなどは、
PCやスマートフォンからインターネット回線を通じて、
その会社が用意した通信設備内にあるサーバーと通信します。
手元の端末からの要求を受けたサーバーは、要求に応じた処理を行い、
再び手元の端末へとデータを返します。

ところが、途中経由する回線や通信相手のサーバーに不具合が起こる事があります。
これらの障害は一般的には、
「インターネットにつながらない」「サーバーが応答しない」「うまく表示されない」など、
手元の端末でエラーメッセージという形でよく目にすることがあると思います。
多くの場合、こういった障害は、機器の故障・設定のミス・サイバー攻撃などにより起こります。
これらの障害に対処する技術を競うのがトラブルシューティングコンテストです。

利用者としては「使えてて当たり前のインフラが突然使えなくなり不便であったが、
時間を置くといつの間にか使えるようになっていた」としか感じることが無いかもしれません。
しかし実際の現場では、こういった分野に詳しいエンジニアが昼夜問わず対処を行っているのです。

キックオフミーテイングからホットステージまで

11/1に東京・六本木でキックオフ・ミーテイング(顔合わせ)に参加してから、
2/14〜のホットステージ(現地準備作業)までの間、
月に1度程度の運営委員・学生スタッフ参加のオフラインミーティング
月に1度の学生スタッフによるブートキャンプ(会場下見や機材確認などのオフライン作業)などがありました。
オフライン・ミーティングは、学生スタッフの多くは東京・大阪の学生なので、
東京と大阪にあるCsicoのオフィスを借りてテレビ会議システムで繋ぎ、
北海道の僕と福岡のカさんはPCからリモート参加していました。

この間、運営・参加者用NTPサーバーの構築用ansible-playbookの作成、
自分が出題する問題の作成と調整、他の出題者へのサーバー提供などを行いました。
スタッフ同士の連絡は主にSlackを使って行い、コードの管理はGithubを使っていました。

ホットステージからコンテスト当日まで

2/14〜2/26までの2週間、コンテスト会場での現地準備を行いました。
僕は私用のため途中から参加したのですが、会場設営作業、問題の出題準備などを行いました。
そのほか、普段行っているデータセンターでアルバイトの経験が
サーバーやスイッチのラックマウント作業や配線・整線作業に活かせたのではないかと考えています。
コンテスト当日は風邪を引きつらかったのですが、参加者の誘導などのスタッフ業務や出題した問題の採点を行いました。

問題の出題に関して

基本的にはサーバー系の問題を作るチームとネットワーク系の問題を作るチームに別れて作業していました。
僕が出題したのは一日目の3問目、「掲示板が機能しない!」です。
詳しい講評は後日公開されると思うのでここでは割愛しますが、
「蓄積型XSS脆弱性がある掲示板にHTMLタグを含む投稿が行われ、
掲示板が正常に機能しないから何とかしてくれ」っていう問題です。
参加チームの1/3が解答を提出してくれて、難易度としてもまあまかな、と思っています。

参加して得たもの

一番は他のスタッフや参加者の方との出会いが大きいと思います。
何日も寝食を共にしてるうちにスタッフ内での共通言語が生まれたりしました。
また、業務や趣味でサーバー構築やネットワーク構築など、
普段同じような事をやっているので、日頃抱えてる悩みを打ち明けたり、
技術的な壁にぶち当たったときに相談できる相手が増えました。

技術的な面では、ansibleとの出会いが大きかったと思います。 これはNTPサーバーの構築で使いました。というか試行錯誤してるうちに覚えました。
以前は自宅のサーバー構築をシェルスクリプトで行っていて、
シェルスクリプト生成・ホスティングサイトを作ったり

chamaharun.tk

していましたが、ansible-playbookならVMをイメージから展開する際も
イメージ内にシェルスクリプトを配置する必要が無いのでメンテナンスが楽になりそうです。

最後に

トラブルシューティングの問題を出す以上、あえて出題に必要なトラブルは起こすが、
それ以外のトラブルは起こしてはならないという縛りがあります。
これは意外と難しく、意図したトラブルが起きず、想定外の障害が発生したりします。
こうなると運営スタッフがトラブルシューティングしなければならず、
ホットステージ期間中からトラブル続きで本当に開催できるか不安になったりもしましたが、
他の凄腕エンジニアな運営スタッフの血の滲むような努力のおかげで、
なんとか大会を運営することができました。
僕自身初めての参加でしたが、得るものが多く充実した半年間だったと思います。
スタッフのみなさん、参加者のみなさん、そして応援してくださったみなさん、本当にお疲れ様でした。

2015年に参加した勉強会など

この間、といっても随分前のことだけど、
@tomio2480師匠が旧こばやし亭に泊まりに来て、目の前でブログを更新してた。

tomio2480.hatenablog.com

それを思い出して、参加したコミュニティ・勉強会などの活動をまとめておこうと思う。
(☆印は、登壇したり、LTしたり、スタッフだったりしたことを表す。)

5/30 Ohotech 特盛 #12☆ //Webアプリケーションを作った話をした
6/13 OSC2015 Hokkaido //OpenWebBoardをもらった
6/14 CTF for ビギナーズ 2015 札幌☆ //@yagihashoo師匠がイケメンだった
8/12 とみおとごはんたべる in SAPPORO //ごはん美味しかった
8/20-22 YAPC::Asia Tokyo 2015 //「みんなぁ、飲んでるかぁ〜!」
9/12 PyCon mini Sapporo 2015 //さくら師匠がpython消してた
9/26 第22回北海道情報セキュリティ勉強会 //マイナンバーのお勉強ができた
10/17 でじぽろ #1'☆ //話はgdgdだったけど新鮮な勉強会だった
10/26 ホワイトボックススイッチユーザ会 第二回勉強会 //時代の先取りって感じだった
11/7-8 第4回石狩DC見学ツアー~さくらの夕べin石狩~☆ //LTで姫の話をした
11/21 HPH 2015 林業×IT アイディアソン in ENIWA☆ //初めてアイディアソンを体験した
11/22 #01 札幌x86アセンブラ勉強会 in 北海道CTF勉強会 //初めての読書会、アセンブラ辛かった

今年も後半に集中しているなぁ。
11月とかバタバタしていたなぁ。

その他、現在来年2月に行われる某コンテストの学生運営メンバーをやってるなど。