2013年6月28日金曜日

Vagrantでパケアナ #pakeana 16

第16回「ネットワークパケットを読む会(仮)」で話した。

PC上のVMで他人に迷惑をかけずに実験をするための方法を考えたので、突っ込みをください。


Vagrant packana16-otahi from Hiroshi Ota


※init.shの最終行は2013/06/29追加。これがないと、HostOnlyNetwork以外はIPパケットがでない。

@twovs さんの「how to GET GET」はあとで役に立つと思うので、メモしておく。

2013年6月26日水曜日

Private Proxy Settings

Background

いくつかの企業ではproxyサーバ経由でhttp(s)クライアントが 企業の外にあるサーバにアクセスする必要がある。 場合によっては、proxyサーバはusername/passwordの認証を要求する。 http(s)クライアントによっては、認証ありのproxyサーバを使えない場合もある。

Purpose

ここでは複数のhttp(s)クライアントのproxy設定を削減するためのproxy設定を提供する。

layout. proxy can use upstrem proxy

Note

  • 権限に従って設定してください

Specs

  • proxyサーバはlocalhost/hostonlynetworkにのみサービスを提供する
  • proxyサーバは上流proxyサーバのusername/passwordのペアを保持する
  • proxyサーバはインターネットへのアクセスに上流proxyサーバを使う

How-to run

  • Git clone
    • %git clone https://github.com/otahi/private_proxy_settings.git
  • Modify squid.conf for your own environment
    • %vi squid.conf
  • Install squid
    • eg[mac].
      • %brew install squid
    • eg[cygwin].
      • %apt-cyg install squid
  • Put squid.conf to right place
    • eg[mac].
      • %cp squid.conf /usr/local/etc/
    • eg[cygwin].
      • %cp squid.conf /etc/
  • Create a directory
    • %sudo mkdir -p /var/cache/squid/
  • Change owner a directory and a file for nobody
    • %sudo chwon nobody:nobody /var/cache/squid
    • %sudo chwon nobody:nobody /var/log/squid.log
  • Create cache directory
    • eg[mac].
      • %sudo /usr/local/sbin/squid -z
    • eg[cygwin].
      • %/usr/bin/squid -z
  • Run squid
    • eg[mac].
      • %sudo /usr/local/sbin/squid
    • eg[cygwin].
      • %/usr/bin/squid
  • Run squid as a daemon
    • eg[mac].
      • %sudo /usr/local/sbin/squid -k shutdown
      • %sudo install -oroot -gwheel squid.plist /Library/LaunchDaemons/
      • %sudo launchctl load /Library/LaunchDaemons/squid.plist
    • eg[cygwin].
      • TODO check cygserver

How-to use a proxy server

Set envirionment variables or browser settings

set environment variables for the proxy(for local application)

eg.

export HTTP_PROXY=localhost:3128
export HTTPS_PROXY=$HTTP_PROXY
export FTP_PROXY=$HTTP_PROXY
export http_proxy=$HTTP_PROXY
export https_proxy=$HTTP_PROXY
export ftp_proxy=$HTTP_PROXY

set environment variables for the proxy(for VMs)

eg[192.168.100.1 is a proxy server in a hostonlynetwork].

export HTTP_PROXY=192.168.100.1:3128
export HTTPS_PROXY=$HTTP_PROXY
export FTP_PROXY=$HTTP_PROXY
export http_proxy=$HTTP_PROXY
export https_proxy=$HTTP_PROXY
export ftp_proxy=$HTTP_PROXY

2013年6月22日土曜日

hbstudy#45「serverspecが拓いたサーバテストの世界」に参加してきた

開催概要

  • hbstudy#45
  • 2013/06/21(金) 19:00〜
  • ハロー会議室新宿
  • 第45回: serverspecが拓いたサーバテストの世界

感想

  • 宮下さんを見習って、子供と一緒にがんばろうと思う。
  • まずは自分の担当するところでまずは試してみよう。
  • 最後にテストを回すというスタイルから、できあがったときにはテストは終わっているという状態にしていきたい。

全体まとめ

  • serverspecは
    • 機能が欲しい人が実装するという基本
    • puppet, chefとかの仕組みと疎結合
      • できあがったserver自体をテストするので
    • 「読みやすい、書きやすい、わかりやすい」を大切にしている
    • spechelperを書き換えればいろいろできる
  • 気軽にpull requestしてほしい
  • やりたいことがあれば各自実装を!

追加情報(2013/06/23追加)

paperboy&co. Technical Manager 宮下 剛輔さん [twitter: @gosukenator]

serverspecの位置づけ、serverspecとは、使い方

  • 宮下さん @gosukenator
    • paperboy&co
      • ロリポップなどのレンタルサーバなどで有名
  • サーバプロビジョニングとは
    • いろいろな領域が含まれる(大きくは3つ)
      • Application Service - Orchestration
        • 方法
          • Capistrano
          • Fabric
        • テスト
          • 外から見る
            • zabbix
            • Nagios
      • System config - Configration(きょうはここが中心)
        • 方法
          • puppet
          • chef
        • テスト
          • serverspec
            • サーバ自身を見る
            • パッケージとかもみる
      • os, vm - BootStrapping
        • EC2
        • OpenStack
    • 監視とは継続的なテストである @kazuho
    • Zabbixとかあれば、serverspecいらない ともいえなくはない
      • Zabbixで継続して監視ししながら実装できるのであれば
  • System configとテスト
    • これまでは?
      • shell script?
      • 実際のサービスの確認だった?
  • Configuration Management Framework(CMF)
    • puppet
    • chef
    • ansible
      • orchestrationも含んでいるツール
  • CMFとテスト
    • これまでは?
      • shell script?
    • 界隈のツール
      • シンタックスチェック
        • foodcritic
        • knife cookbook test
      • ユニットテスト
        • chefspec
          • 実際のサーバでやるのではない
          • chefの正当性を確認するためのツール
        • rspec-puppet
      • 結合テスト
        • Minitest Chef Handler
        • Cucumber Chef
        • Test Kitchen
        • rspec-system
          • puppet用
        • serverspec
          • puppetでもchefでも
    • なぜ serverspecを作ったの?
      • 余計な機能が多い
      • chef,puppetなどのツールに依存している
    • TestKitchenと合わせると良さそう
    • そもそもserverspecが必要なの?
      • 一度だけ書いて、修正しないなら不要
      • マニフェスト、レシピを継続的に更新するなら必要
        • これの自動化のために必要
      • テストコードの書きやすさ、読みやすさも重要
      • テストツールのシンプルさが重要
        • なので、serverspec
  • serverspecについて
    • サーバのテストを「簡潔に」書くための仕組み
      • RSpecで書く
        • 読みやすい
          • 最近expectで書くのがよいとされている→少し読みにくい
      • しかし、shouldのほうが見やすい
        • serverspecではshould全部のオブジェクトにshouldメソッドをつける必要がないのでよい
    • serverspecはshellからコマンドたたいているだけ
    • コマンドのパターン
      • ローカル
      • ssh接続
        • エージェントをいる必要はない
        • コマンドを実行するだけなのでテスト対象にはrubyすらいらない
  • severspecのはじめかた
    • # yum install rubygems
    • # gem install serverspec rake
    • # serverspec-init
      • ssh or local?
      • ファイル、ディレクトリができる
    • # rake spec
      • .rspec で–colour で色つく
      • –format S で文字列で表示
      • まさにテスト駆動でできる

serverspecについて

  • serverspecが生まれた経緯
    • 2007年 puppetを使い始めた
    • puppetで構築は自動化できた
    • テストをどうするか?
    • テスト報告を簡単に作りたい
    • Assurerというperlツール作った
      • テスト駆動サーバ構築! 2007年
      • 面倒。。
        • レポーティング機能をつけたので重くなった
      • 実用にいたらなかった
    • puppetのマニフェストのリファクタリングをしようと思った
    • テストが必要だろう
    • rspec-testはモジュール型になっているマニフェストのテストにしか使えない。。
      • モジュールかされていないものにはテストがかけない
    • マニフェストをテストではなくて、実際のサーバの状態をテストすればよい
    • @hibomaがやっていたこと をパクッてgem化した
    • sshでできるように、rubyなくていいようにした
    • local実行、OS判別などを追加してもらった
  • なにができる?
    • いろいろマッチャがある
    • 任意のコマンドがたたける
    • sshのときはstderrとstdoutが混ざる
  • serverspec.orgをみて
  • サポートOS
    • サポートしている
      • Redhat系
      • Debian
      • Gentoo
      • Solaris
      • Darwin
    • サポートしていない
      • BSD
        • 利用者がいないから??
      • Windows
        • 以前移植しようとしている人がいたがまだpull requestがきていない。。
  • serverspecはsudoしてrootで実行している
    • sshのみ
    • Localではsudoはしない(たたくときにできるから)
  • パスの追加設定もできる
    • spec helperで
    • システムが違うとだめだから
  • 一部パスを追加することもできる
  • precommandでテストコマンドの前に実行して&;&で実行できる
    • 今後サポートするかは不明
  • サーバーごとにディレクトリを掘る
  • ロール単位とかもできるserverspec.orgのadvanced tipsにある
  • テストを常に実行する環境を作りたかった
    • Ukigomo
      • IRCでもできる
  • 一部を変更したときに全体を壊していないことを確認できる
    • CIできる

serverspecのコントリビュータを増やすための話(メモれていない。。)

  • プログラムの内部の話 github-mizzy/serverspec
    • fileの例(コードを読むと結構わかりやすい気がした。)
    • beinstalledの例
  • serverspecのテストの話(十分理解はできなかった。。)
  • 全部実装していなくてもpull requestしてほしい
    • 作業中の場合はWIP(work in progress)とつけておく
    • 自分のOSで動けばOK(他のOSを気にしているときつくなるので)
    • お気軽にpull requestしてください

まとめ

  • 読みやすい、書きやすい、わかりやすい
    • 簡潔
      • 簡潔さ重要
  • 要件が変わる
    • 継続的なテストが必要
    • テストも複雑になる
      • 簡潔にし続ける

質問

  • Q. ユーザーはサーバに対して固定?
    • spechelperが固定になっているが、対応付けすればOK
  • Q. このユーザーはこれができて、このユーザーはこれができない というのはできない?
    • 基本はやりたい人が実装してもらえれば。。
    • コマンドをかけるので、sudoを使ってコマンドで書いてもよいかも
  • Q. paperboyも実運用で使っている?
    • まだあまりない
  • Q. 量が多くなると、時間かかる?
    • RSpecの並列化ができるのではないか?

イベント告知(馬場さんより)

  • 立て続きにあるので、各自確認を
  • hbstudy#46 トラブル☆しゅーたーず#06 ~chain reaction~
    • 日時: 2013/6/29(土) 13:30~20:00
    • 会場: ニフティ株式会社 ラウンジ&会議室
  • hbstudy#47 July Tech Festa 2013 コードの中のインフラ(Infrastructure as Programming)
    • 日時: 2013/7/14(日) 10:00~21:00
    • 会場: 産業技術大学院大学(AIIT)
  • hbstudy#48 インフラ+セキュリティ=楽しい? 他2本
    • 日時: 2013/7/19(金) 19:00~21:30
    • 会場: ハロー会議室 新宿 B+C (東京都新宿区西新宿1丁目5-11 新宿三葉ビル6F)
    • DeNA茂岩さん がいろいろとお話を。