月別: 2018年1月

gdb を使ったデバッグ

  • ふつうの Linux プログラミング」というほんでバグがある C のコード bug_head.c のデバッグ作業をするときに gdb というツールが紹介されていた
  • デバッグ時に gdb が役に立つので、ひとまずその流れを以下でみてみる

基本的なデバッグの流れ

流れを見た方がわかりやすいのでまず実例からみていく

以上のように gdb

  • エラーが出た際のスタックトレース
  • 該当部分のソースコード
  • 各変数の状態出力

などが手軽に行えるイカしたツールです。

参考にしたページ

  • https://qiita.com/aosho235/items/d0bc0191f76ec5bd1776

strace コマンドで遊ぶ

「ふつうの Linux プログラミング」という本をラビットハウス社で輪読しているが、その中で strace コマンドというものが出てきた。

man STRACE(1)

man によると strace とはシステムコールとシグナルをトレースできるツールのようだ

  • NAME: strace – trace system calls and signals
  • SYNOPSIS: strace [-CdffhiqrtttTvVxxy] [-In] [-bexecve] [-eexpr]… [-acolumn] [-ofile] [-sstrsize] [-Ppath]… -ppid… / [-D] [-Evar[=val]]… [-uusername] command [args]
  • In the simplest case strace runs the specified command until it exits. It intercepts and records the system calls which are called by a process and the signals which are received by a process. The name of each system call, its arguments and its return value are printed on standard error or to the file specified with the -o option.

hello, world の strace

ハロワの strace を見てみよう。テスト対象のコードを書く必要もない気がするけど、次のとおり。

コンパイルして、strace を実行してみる。ちなみに実行環境は CentOS 7。

write(1, "Hello, World!\n", 14Hello, World!) = 14 とあるように標準出力に Hello, World!\n という文字列を write(2) しているのがわかる。 -c オプションをつけるとなんかかっこいい感じに統計情報をだしてくれる。

-e オプションでトレースしたいシステムコールを指定できる

echo のソースコード

ハロワを出力するだけなら echo で良いので、echo の strace をみてみた

echo なんかもおんなじ感じの出力になったので、ソースコードを探しに南米へと飛んだ

なるほどな… と思ってソースコード探そうとしたら江添さんがすでにいろんなUNIX環境での echo のソースコードについて比較している記事が引っかかった。ふむふむ〜。で、実際のソースコードがこれ。意外にながくてクソだるですわ…。結局最後のほうで、fputs, putchar を呼び出している感じで、これらは内部でバッファリングして、write を呼び出しているので、システムコールの呼び出しは 1回なのだろうみたいな感じの模様。

macOS で dtruss を使う

macOS では strace の代わりに dtruss を使えば同じようなことして遊べそう。

logrotate のログ保持日数の変更

例えば以下のような fluentd ログの logrotate 設定が入っているとします。

この前提のもと、保持する世代を減らすために rotate の設定を 8 から 5 に減らす場合には注意が必要で、6世代目ファイルのみが削除され、6-8世代のファイルが残ってしまいます。簡単に次のようなコマンドで消しておくとよいかも。保持期間を増やすときはあまり問題は生じなそう?

各設定項目は man を見るのが一番良さそう。ソースコードはここでみれます。
ちなみに logrotate の状況は /var/lib/logrotate/logrotate.status で確認できます。

ファイルを掴みっぱなしになってるプロセスへの対応

  1. postrotate でシグナルをおくってやる
  2. copytruncate オプションをつける

copytruncate 便利ですね…

逝く年、くる年 (2017-2018)

去年のやつ→ https://53ningen.com/2016-no-owari/

2017年の振り返り

  • なんだかんだ去年書いてた願望みたいなの、わりと達成率たかめだったので、2018年の願望も書いておこうみたいな感じです。
  • 公開の場に書いておくと言い逃れができないけど、クズなので達成できなかったら言い逃れします

技術的なお話

2017年の年始の記事でいろいろ言ってた願望は以下のような着地となった

  • 「インフラ・ネットワークまわりの実践的な活動(仕事)を増やしたい」とのたまっていたが、以下のようなことをした
    • Ansible, Serverspec だいたい分かった(ホンマか?)(言い過ぎ)
    • どんどん下側に潜って行くぞという気持ちでやっている
    • ずっと放置していたアレコレを整理して、再構築したり、良き仕組みを入れたり、監視を入れたり、実現できた気がしてる(個人プロダクト)
  • 「iOSに関しては教育的資料を作って外向けに講座を開きたい(そして金とりたいなぁ…)」とのたまっていたが、以下のようなことをした
  • 「設計まわりのプリミティブな本をきちんと読み返したい」とのたまっていたが、以下のようなことをした
    • なにも実現できなかった、つらい
  • 「いろんな分野の仕事をするか…」とのたまっていたが、以下のようなことをした
    • まあ色々やってた
    • 求められて、できそうなだったら、ためらわずにやるみたいな感じでこれからもやっていきたみ

その他色々

  • ゆいかおり
  • シンデレラ石川の当日に高熱だして行けなくなってほんと辛かった
  • 絵が描けないのに漫画で夏コミに出る
    • もう二度と絵はかかない
    • でも一応持ち込み分がなくなったので手に取っていただいたみなさまほんと感謝…。
  • ご注文はうさぎですか? Dear My Sister 公開
  • Wake Up, Girls! のファンになった
    • Wake Up, Girls! をちゃんと追うきっかけとなった「あんハピ」「灼熱の卓球娘」といった作品にちゃんと出会ってた2016年の自分に感謝している
    • 新参者なのでベラベラ語る内容もそんなにないんだけど、魅力がたくさんあるユニットに出会ってその良さに気づけたことで、毎日がただただとても楽しい
    • 本当にありがとうございます
  • 本場のクリスマスマーケット行ってきた
    • ごちうさ Advent Calendar 2017 の記事にしてまとめるのでちょっと待っててね(大遅刻)
  • 冬コミ落選
    • 回収できない Adobe 税が重くのしかかる

2018年、こうなるといいな

去年に引き続き書いてみた。

  • 行ったイベントの記憶をちゃんと留めておける仕組み作り
    • 良かったイベントのあと、語彙力を失って「よかった…」って終わっちゃうの悲しいので、なんか楽しみつつ、記憶に残るような取り組み、やっていきたい
  • アプリケーションレイヤーよりも低いレイヤーの泳ぎ方を鍛えたい
    • 知識と知識を体系的に、有機的に繋げて、素早く正確な判断と対応ができるようになりたい
    • そのためにもやっぱり基礎的な知識のうち漏れている箇所を埋めるのと、実際の案件にあたって経験を積むという両方向からやっていく感じが必要そうに思えるんですけどみなさんどう思います?(人に丸投げ)
    • 詳解システム・パフォーマンスとかSRE本とかを読みたい
  • public な GitHub での活動を増やしていきたい
    • 何かひとつ、大きめのリポジトリのソースコードを8割くらい読む
    • あわせて小さめのリポジトリを5つ選んで全容を把握する
    • おしごと GitHub (Enterprise) は 3,810 Contributions で着地
    • 外に出せるコードとか、コミュニティに返せるものを返していきたい
  • いい加減な英語をそろそろなんとかしないと滅亡する
    • GitHub OSS 開発を通しながらエンジニア英語を覚えたい
  • どんなものでも良いので個人で運営しているサービスをひとつ増やす
    • 動いてるシステムの保守・運用作業によってフレッシュな情報を維持できる側面がある気がしてる

 去年に比べて、あまり特定の技術分野とかアプリケーションというよりも、システムを作ったり面倒見たり、声優さんと結婚するための何かを求める傾向に変わっている気がする。ゆるゆると生きてゆきたい。

読む本

もうすでに読んだ本も含めてもう一度読み直したり色々

Apach と nginx への HSTS 設定

HSTS(HTTP Strict Transport Security)とは?

  • SSL に対応しているウェブサーバーへの HTTP リクエストに対し、サーバー側がレスポンスヘッダに SSL 通信が可能であることを表すデータを付与することにより、ブラウザに HTTPS での通信を行うことを促す仕組みを HSTS とよぶ
  • RFC6797 で定義される: https://tools.ietf.org/html/rfc6797
  • 301 でリダイレクト先を指定する際、そのリダイレクト先が改ざんされていないことを保証できない欠点を補える

技術的な仕組み

  1. ユーザーが HTTP リクエストを対象サーバーに送る
  2. サーバーは https エンドポイントへ301リダイレクトレスポンスを返す
  3. https エンドポイントはレスポンスヘッダに 以下を付与しブラウザに HTTPS で通信を行うことを促す
    • Strict-Transport-Security "max-age=31536000; includeSubDomains"
    • ここで max-age はブラウザ側に当該ドメインが HTTPS 通信に対応しているという事実をキャッシュする長さ(秒)である
    • includeSubDomains をつけるとサブドメインを含めて、HTTPS 通信に対応しているということを伝達する
  4. HSTS に対応しているブラウザは、その後対象ドメインに対してはデフォルトで HTTPS を見に行く

注意点

  • 誤った設定であろうと、一度 Strict-Transport-Security ヘッダーを受け取ったHSTS対応のブラウザは max-age の時間分、対象ドメインにHTTPでリクエストを送ろうとしても HTTPS に切り替えてしまう
  • 誤設定の可能性を考慮すると、最初の設定の max-age は短くしておき、作業ミスがあった際の影響を小さく留めておくとよい

Apache, nginx への設定

  • 基本的にはレスポンスヘッダに Strict-Transport-Secutiry を追加するだけ
    • Apach は mod_header モジュールを用いて、レスポンスヘッダを追加
    • nginx は add_header ディレクティブで、レスポンスヘッダを追加

Apache

nginx

動作確認

preload の登録

https://hstspreload.org/ で登録する

chrome での処理のされ方

307 でリダイレクトがかかる模様

ssllabs での確認

https://www.ssllabs.com/ssltest/analyze.html?d=53ningen.com で見れば HSTS が有効になっていることがわかる