あなたの OS X で、はじめてみよう! “h2o”

December 5th, 2014 by naoya | No Comments | Filed in day

この記事は、h2o Advent Calendar 第四日目の記事です。

まず、h2o を実際にサーバ上で使うために、h2o は OS X に対応しているので、OS X 上で h2o をはじめてみましょう。

最初にインストール。これは、homebrew-headonly を使うと、次のように簡単にインストールすることができます。なお、Homebrew がインストールされていることが前提です。


$ brew tap homebrew/headonly
$ brew install homebrew/headonly/h2o

そうすると、最新の h2o が $HOMEBREW_ROOT/Cellar/h2o/HEAD にインストールされます。$HOMEBREW_ROOT/bin/h2o に symlink をはるので、まずはサンプルの設定ファイルで起動してみましょう。


$ cd [Homebrew のキャッシュパス]/cache/homebrew/h2o--git/
$ h2o -c examples/h2o/h2o.conf

さっそく、別のターミナルあるいはブラウザから、動作確認してみましょう。
サンプルの設定ファイルでは、HTTP は 8080 と HTTPS は 8081 ポートで起動する内容になっています。


$ curl localhost:8080

<!DOCTYPE html>
<html>
<header>
<title>Welcome to H2O</title>
</header>
<body>
<p>Welcome to H2O – an optimized HTTP server</p>
<p>It works!</p>
<body>
</html>

ちゃんと HTTP 接続できましたね!
h2o を停止するには、Ctrl-C コマンドを入力します。

サンプルの設定ファイルでは、次のようになっています。

# to find out the configuration commands, run: h2o --help

listen: 8080
listen:
  port: 8081
  ssl:
    certificate-file: examples/h2o/server.crt
    key-file: examples/h2o/server.key
  hosts:
    default:
    paths:
      /:
      file.dir: examples/doc_root
    access-log: /dev/stdout

YAML 形式の設定ファイルで、とてもシンプルな設定ファイルになっていますね。

h2o –help をすると、設定ファイルで指定できるパラメータが分かりますので、ここから設定できるパラメータを勝手に日本語訳してみました。

listen: リクエストを受け付けポートの設定(listen:  あるいは、次のようにマッピングによる設定ができます)
  port: 待ち構えるポート番号あるいはサービス名
  host: 待ち構える IP アドレス
  ssl: SSL を使用するかどうか(デフォルト: none)、使用する場合は certificate-file と key-file を指定する

hosts: ホストごとのマッピングを設定します

paths: URL パスのマッピングを設定します

request-timeout: リクエストを受け付けたときのタイムアウト秒です(デフォルト 10 * 1000 秒)

limit-rquest-body: リクエストボディの最大サイズ(デフォルト: 無制限)

http1-upgrade-to-http2: HTTP/2 へのアップグレードを可能にするかフラグ(ON あるいは OFF、デフォルト ON)
http2-max-concurrent-requests-per-connection: HTTP/2 ストリームの内部で処理される最大リクエスト数(デフォルト: 16)

max-connections: 最大接続数(デフォルト: 1024)
num-threads: ワーカーのスレッド数(デフォルト: 1)

access-log: アクセスログのファイル名、マッピング情報の場合はフォーマットとの組み合わせで設定することができます、| から始まる場合はパイプの設定をすることができます、デフォルトのアクセスログフォーマットは。、「"%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""」です

file.dir: 公開するディレクトリのパスです
file.index: インデックスを示すファイル名です
file.mime.settypes:  MIME タイプの設定です
file.mime.addtypes: 追加する MIME タイプの設定です
file.mime.removetypes: 削除する MIME タイプの設定です
file.mime.setdefaulttype: MIME タイプのデフォルト設定です

proxy.reverse.url: アップストリームの URL です(HTTP のみサポートされています)
proxy.keepalive:: Keepalive を有効にするかどうかです(デフォルト:OFF)
proxy.timeout.io: アップストリームの I/O タイムアウトミリ秒です(デフォルト: 5000 ミリ秒)
proxy.timeout.keepalive: アイドル接続のタイムアウトミリ秒です(デフォルト: 2000 ミリ秒)

例えば、実際設定例は、次のようになるようでしょう。file.index だけ設定をすると「in command file.index, argument cannot be a scalar」エラーがでてしまい、設定することができませんでした。

listen:
  port: 8080
  host: 127.0.0.1

max-connections: 1024
num-threads: 1

request-timeout: 1
hosts:
  default:
    paths:
      /:
        file.dir: /var/www/default
    access-log: 
      path: "|/usr/sbin/rotatelogs /var/log/h2o/access_log-%Y-%m-%d 3600"
      format: "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""
  localhost:
    paths:
      /:
        file.dir: /var/www/localhost

h2o は、日々進化しているので、今後の進化に目が離せませんね。
現時点では、パフォーマンスが必要な静的ファイルの処理や、中間プロキシとして使うといいのかなと考えています。

あと、h2o の実装方法については、HTTP2 カンファレンスの動画、約3時間1分くらいから作者の @kazuho さんの講演があるので、実際にどうやって高速なコードを書くのか、その技術を詳しく解説しているので、興味のある人は要チェックだと思います。僕も拝見しましたが、とても勉強になりました。

Tags:

「第3回さくら石狩DC見学ツアー~さくらの夕べin石狩~」にいってきた

December 3rd, 2014 by naoya | No Comments | Filed in day

「第3回さくら石狩DC見学ツアー~さくらの夕べin石狩~」(北海道)を開催いたします」に行ってきました。
毎年開催されているこのツアー、今年で3回目になりますが、今年はなんと6倍のもの倍率ということで、かなり人気のあるツアーでした。

詳しいツアーの内容は、他の参加社の方ががかれているブログなどを参考してもられば、当日の様子が分かるかと思いますので、僕は個人的なツアーに感想を書いてみたいと思います。

s1

このツアーは、さくらインターネットさんが 2011 年 11 月に開設された石狩データセンターを見学するツアーでした。

早朝、羽田空港に集合したのですが、新しいデータセンターを見学するのは非常に勇気が必要だったので、一杯先にいただいておきました。ツアーのスタッフさん曰く「前代未聞」とのことで、大変失礼しました。。。

s2

それはさておき、石狩データセンターの詳しい位置は、機密事項とされており、Google Maps や Streetview 上にも、その情報はありませんでした。
データセンターという性質上、これは当然のことだといえるでしょう。

さっそく、石狩データセンターへ到着後、名物「石狩丼」をいただきました。右上にあるのは、「やまわざび」というとても辛いわさびなので、食べるときには注意しましょう。

s3

お昼をいただいたあと、さっそく1号棟を見学させていただきました。1号棟は、最初に石狩データセンターとしてオープンしたところになります。
1号棟を見学させていただいた感想は、

  • エリアごとに、ラックの冷却方式が変更している(これは、よりより冷却性能を求めているため、実際に試しているということ)
  • 現在の空棟状態をリアルタイムに可視化している(指標は、PUE を指標の一つとしていました)
  • ラックは、黒色で、クールな印象をうけました
  • ネットワークスイッチ・サーバは、すべてメーカー製で、特にサーバのメーカーはバラバラだった(コストのバランスで都度サーバメーカーを選定しているとのことです)
  • ケーブリングがなかなかきれいでした、個人的にも業務でケーブリングなどを行うのですが、専用のケーブリングキット?のようなものを実際に使っているのは初めて見ました、あわせてケーブルのラベルの付け方もとても参考になりました。ケーブルのラベルは、タイラップものを使っていて、個人的にはテプラ派なのですが、タイラップの方が見やすいかもしれないなあと思いました。
  • ケーブルの色がほぼすべて同じでした。個人的にはケーブルの色はわざとバラバラにするのですが、さくらインターネットさんの場合はすべて同じケーブルの色でした。同じケーブルの色ですと運用上、間違えることがありそうなのですが、そんなこともないのでしょうか?
  • エリア自体がとても静かでした。僕がいつも作業をしているデーセンターは、とても爆音でヘッドフォンがほしいところなのですが、エリアの使用利率が 9 割以上を超えているのが信じらないくらい静かでした。気温もそこまで寒いこともなく、現場でのオペレーションの負荷もそれほど大きくないのではないかと思いました
  • 一部のラックに HVDC(高電圧直流)を採用して、電力の使用効率を上げているとのことでした。

といったところです。1号棟のほぼすべての施設をみせていただき、新しいデータセンターということもあって、かなり高価な最新鋭の設備が備え付けられているのかなと思ったのですが、かなりさくらインターネットさんの独自の方式で行っており、ある意味手作り感のあるデータセンターでした。

見学が終わったあと、「さくらの夕べ in 石狩」と題して、さくらクラウドのかなり技術的な濃いお話をしていただきました。

s4

  • VPS とクラウドのシステムの違いについて(さくら VPS サービスは、プロタイプは田中社長が自ら作ったものがベースとなり、実際のリリースでは見た目は同じのままリリースされたとのこと)
  • OpenStack などの既存の仕組みは採用していない、独自システムで開発している
  • ネットワークまわりは、非常にシンプルなタグ VLAN のかけあわせ構成となっている

この他、非常にさくらのクラウドの中が分かるようなお話でした。貴重なお話ありがとうございました。

夜は、結婚式のような会場で、LT 大会が繰り広げました。今年は、最多の約 17 名の人が LT をやられたようです。僕もやっておけばよかったですね。。。

s5

さて、二日目です。二日目は、2号棟の概要のお話を聞かせていただいたあと、見学させていただきました。

  • 2号棟のスケジュールは、2013/01 施行、2013/11 開始の非常にタイトなスケジュールとなった
  • 1号棟での運用体験を踏まえて、さまざまな点が変更されていて、1号棟は外見は一緒だが中身が異なっている
  • 2号棟は、さくらクラウドの開発チームが運用しているとのこと(1号棟は、石狩 DC 現地の方がすべて運用されているとのこと)
  • 冷却は、1号棟の一部のエリアで採用していたホットアイルシャッターシステムのみを採用している
  • 1 ゾーンあたり、124 ラックとラック幅の狭いラックを採用して、ラック数を増やした(1号棟は、100 ラックとのこと)
  • ラック幅が狭いため、ケーブリングには苦労されたとのこと
  • ラック内の機器の配置について、ラック内の温度変化をシュミレーションできるソフトを導入して、シュミレーションした状態で実際の機器を設置している
  • 1号棟では、1U ハーフサーバの設置も考慮していたが、2号棟では 1U フルサーバのみ設置を前提した構成としている

2号棟も、他のデーセンターと比べると、さくらインターネットさんならでは独自の工夫が盛りだくさんで、とても刺激を受けました。

さくらインターネットさんで働く環境を直に見えることができたのは、個人的には非常に有意義でした。
実際のデータセンターはなかなか他の人にすべてみせることは難しいかと思いますが、さくらインターネットさんの職場環境やそこで働く社員の皆様の雰囲気を直に増えることができて、こちらも非常に有意義でした。
「自らのサービスを自ら創る」ことを素晴らしさを改めて実感しました。

とても短い報告となってしましたが、この企画を準備いただきましたさくらインターネットの広報の方を中心した社員の皆様、現地を案内していただいた石狩 DC センターのスタッフ・開発部・研究所のスタッフの皆様、気さくなお話をたくさんしていただきました田中社長、本当にありがとうございました!参加者の皆様、にもお礼を申し上げます。ありがとうございました!!!

また、来年も開催される予定と聞いていますので、さくらインターネットさんのサービスを普段から使っている人(僕は、個人的にはさくら VPS サーバを使っています)、クラウドが動いている実際のデータセンターが見たい人、クラウドサービスが動いている実物を見ないと信用できない方、エンジニアだけではなく、こういったことに興味がある人は、来年応募してみるべきだと思います。

Tags:

[書評] サーバ/インフラエンジニア養成読本 ログ収集〜可視化編

December 2nd, 2014 by naoya | No Comments | Filed in day

大変遅くなりましたが、@yoshi_ken さんから、サーバ/インフラエンジニア養成読本 ログ収集〜可視化編を献本させていただきました。

この本は、Fluentd、Elasticsearch、Kibana、について現場での実際の使われ方などについて書かれたムック本になります。
Fluentd といえば、最近 Google の Kubernetes と Compute Engine の標準のログコレクタに採用されたことで有名ですよね。

この本は、大きく分けて特集4に別れていますので、それぞれの感想を書かせていただきます。

【特集1】

第一章 はじめに
この本の構成概要になります。

第二章 サービス改善に必要なこと
なぜ、サービス改善に「ログ」が必要なのか、コーヒーショップのエンジニアになった視点から書かれています。改めてサービス改善での「ログ」の重要性が分かるよう内容となっていました。

第三章 なぜ可視化なのか
「ログ」を分析し、意志決定するためになぜ可視化が必要なのかについて書かれている章でした。可視化、重要ですが、どのような可視化するか、状況によって大きく異なってくるので、自ら創り上げたいものです。

第四章 ログデータ入門
具体的なログデータとして、どのようなログデータがあるのか、第二章のコーヒーショップを例にとって説明されている章です。
ログデータも、ウェブサービスごとにまったく異なっているため、事前にサービスをリリースする前にどのようなログをとっておいたのかよいのか、すぐには使わない情報でも、将来的に必要となってくるログデータもあわせて、最初に整理しておくことの重要性に気がつかれます。
特にログは、実際にウェブサービスをリリースしたあと、既存のログを変更するのは、なかなか難しいことが多いので(※実際に個人的なにもこの事象に遭遇したことがあります)、事前のログの整理もウェブサービスの成功の一つになってくるのではないかと思います。

第五章 はじめての Fluentd、Elasticsearch、Kibana
実際に vagrant 経由で、Fluentd、Elasticsearch バージョン 1.2.1、Kibata バージョン 3.0.1、を動作させて、ログを流し込むまで、具体的なインストールの例が書かれています。最初に Fluentd、Elasticsearch、Kibana、をはじめるにはとても分かり記事でした。こちらにソースコードがありますので、参考にするといいでしょう。
ちなみに OS X の場合は、td-agent のセットアップは、Homebrew Cask 経由 brew cask info td-agent で簡単にセットアップできるのでお使い下さい。

第六章 Elasticsearch と Kibana を超えて
この章では、実際のウェブサービス「インターネット広告サービス」の実際のサービスを例にとった、とても実践的な解説で必読です。

第七章 まとめと参考文献
Fluentd、Elasticsearch、Kibana、をはじめるための参考文献の紹介です。

【特集2】

第一章 ログ収集の目的とミドルウェアの特徴
現在存在するさまざまなログ収集ソフトウェアの特徴について解説されている記事です。改めて、Fluentd との違いを知るにはよい記事です。

第二章 はじめてみよう Fluentd
特集1の第五章と少し内容が重複していますが、こちらは Fluentd にフォーカスしたアーキテクチャーの開設から始まり、インストール方法、さらに詳しい設定方法が解説されている記事です。特に設定が非常に詳しく解説されており、この記事を読めば、Fluentd の設定の詳細をよりよく理解できるでしょう。

第三章 Fluentd 設計のコツ
Fluentd を実際の環境で構築・運用するためのノードのデザインパターンについて解説されている記事です。自分でこれから Fluentd をあるウェブサービスに導入する場合、どのような Fluentd ノード構成にすればよいのか、それを指南してくれる記事です。

第四章 Fluentd 運用ノウハウ
Fleuntd 構築・導入したあとは、運用が必要となります。この章では、Fluentd の死活・リソース・性能監視の具体的な方法、ログの欠損を防ぐための具体的な工夫など、Fluentd を導入する上で具体的な解説がありますので、Fluentd ユーザは必読です。

第五章 逆引き Fluentd プラグイン
Fluentd には、さざまなプラグインがありますが、各カテゴリ別に各 Fluentd プラグインの解説がされている記事です。プラグインの逆引きリファレンスとして、とても参考になります。

【特集3】

第一章 データストア入門
データストアを格納するためのさまざまソフトウェアの解説記事です。

第二章 Elasticsearch の基礎
Kibana のバックエンドに Elasticsearch が採用されていますが、この Elasticsearch についての概要について解説記事です。Elasticsearch を実際に始める前に読んでおくと、よいでしょう。

第三章 Elasticsearch のはじめ方
Elasticsearch のインストール方法から、設定方法、そして実際の使い方(データの追加方法や検索方法)まで、詳しく解説されている記事です。この記事を読みながら実際に試せば Elasticsearch が分かる記事となっています。

第四章 運用 Tips
Elasticsearch クラスタを運用する上での Tips について書かれている記事です。個人的には、これから Elasticsearch クラスタを運用することになりそうなので、必読です。

第五章 インデックス管理ツールと激選プラグイン
Elasticsearch も Fluentd と同様にさまざまなプラグインがありますが、よく使われる・便利なプラグインについての解説記事です。

第六章 elasticsearch-hadoop
elasticsearch-hadoop という Hadoop クラスタと連携させるためのライブラリについての解説記事です。
Hadoop クラスタと連携できることは知らなかったので、とても参考になりました。

【特集4】

第一章 Kibana の基礎知識
Kibana の概要記事です。

第二章 インストールと設定
Kibana のインストール方法と設定方法です。この記事を読めば、Kibana を簡単にセットアップすることができそうです。

第三章 ダッシュボードとパネル操作
Kibana の Web GUI であるダッシュボードの操作方法についての解説記事です。Kibana の Web GUI は英語のため、日本語で解説されており、非常に分かりやすい記事です。

第四章 データのフィルタリング
Kibana をよりよく使いこなすには、データのフィルタリングを必須となりますが、フィルタリングをする方法について解説されている記事です。

第五章 基本的パネル
Kibana のさまざまな可視化としてのパネルについて解説されている記事です。

第六章 パネルのスタイルとダッシュボードの運用
パネルの表示方法についての解説です。

第七章 Fluentd によるデータ入力
fluentd-plugin-elasticsearch を使って、Elasticsearch にデータを投入する方法について解説されている記事です。

この本は、これから Fluentd、Elasticsearch、Kibana をはじめてみる人はおすすめの本です。Fluentd だけ使い方という人もとても参考になる本なので、まだ読んでいない人は要チェックな本です!

@yoshi_ken さん、ご献本、ありがとうございました!

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
鈴木 健太 吉田 健太郎 大谷 純 道井 俊介
技術評論社
売り上げランキング: 17,280

Tags: , , ,

OS X (10.9) で PHP 5.6.2 で pgsql を組み込もうとしてはまったお話

November 14th, 2014 by naoya | No Comments | Filed in day

OS X 10.9 で、pgsql 入りの PHP 5.6.2 を自分でコンパイルしてインストールしようとしたところ、結果いうと make の最後のリンクに失敗してしまってインストールできませんでした。

公式サイトから、PHP 5.6.2 をダウンロードして、次のような configure してみました。なお、事前に postgresql などは homebrew 経由で事前にインストール済みです。
インストール先は、homebrew 以下になっていますが、これは試験的なインストールのためです。


php-5.6.2$ ./configure --prefix=/opt/boxen/homebrew/Cellar/php56/5.6.2 --localstatedir=/usr/local/homebrew/var --sysconfdir=/usr/local/homebrew/etc/php/5.6 --with-config-file-path=/usr/local/homebrew/etc/php/5.6 --with-config-file-scan-dir=/usr/local/homebrew/etc/php/5.6/conf.d --with-iconv-dir=/usr --enable-dba --with-ndbm=/usr --enable-exif --enable-intl --enable-soap --enable-wddx --enable-ftp --enable-sockets --enable-zip --enable-shmop --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-mbstring --enable-mbregex --enable-bcmath --enable-calendar --with-zlib=/usr/local/homebrew/opt/zlib --with-ldap --with-ldap-sasl=/usr --with-xmlrpc --with-kerberos=/usr --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr/local/homebrew/opt/freetype --with-icu-dir=/usr/local/homebrew/opt/icu4c --with-jpeg-dir=/usr/local/homebrew/opt/jpeg --with-png-dir=/usr/local/homebrew/opt/libpng --with-gettext=/usr/local/homebrew/opt/gettext --with-libedit --with-unixODBC=/usr/local/homebrew/opt/unixodbc --with-pdo-odbc=unixODBC,/usr/local/homebrew/opt/unixodbc --mandir=/usr/local/homebrew/Cellar/php56/5.6.2/share/man --with-mhash --with-curl=/usr --with-snmp=/usr --with-bz2=/usr --with-openssl=/usr --with-xsl=/usr/local/homebrew/opt/libxslt --with-apxs2=/usr/sbin/apxs --libexecdir=/usr/local/homebrew/Cellar/php56/5.6.2/libexec --with-mysql-sock=/tmp/mysql.sock --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --enable-pcntl --enable-zend-signals --enable-dtrace --disable-phpdbg --enable-opcache
php-5.6.2$ make
...
Undefined symbols for architecture x86_64:
"_lo_lseek64", referenced from:
_zif_pg_lo_seek in pgsql.o
"_lo_tell64", referenced from:
_zif_pg_lo_tell in pgsql.o
"_lo_truncate64", referenced from:
_zif_pg_lo_truncate in pgsql.o
ld: symbol(s) not found for architecture x86_64

そして、homebrew-php という、PHP に特化した Homebrew をラップしているものがあったので、試しにこれでインストールしてみました。


$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
$ brew install php56 --with-apache --with-pgsql
...

この方法だと、pgsql を組み込んでインストールすることができました。
実は、最初に紹介した configure オプションは、この PHP5.6 Formula でインストールしたときの configure とまったく同じものだったのですが、なぜか同じ configure オプションでもインストールできませんでした。おそらく、make するときの環境変数の設定まわりできっと Homebrew がよきにやってくれているようなのですが、すこしソースコードを追った感じだと具体的な原因は分かりませんした。

実はいままで phpenv + php-build の環境で使って開発をしていたのですが、そもそも PHP をまったく切り替えることがないし、phpenv けっこう重いので、これを気に homebrew-php に切り替えて phpenv + php-build を使うのはやめることにしました。

これで、PHP まわりのローカル環境の開発がスッキリしました。あわせて、msgpack や redis などもあるので、インストールしてさくっと組み込むことができました。

そして、ここまでのインストールもオプション付きでインストールするのが面倒、いつもローカルで使っている PHP の設定が include_path の設定がないなどがあったので、オリジナルの my-php56 を書いてみました。次のコマンドを使うと、さくっと今まで設定したものがインストールして、かつ php.ini の設定をしてくれるので便利だと思います。


$ brew tap n0ts/myformula
$ brew install my-php56

最後に homebrew 経由で curl や libxml2 が入っていると、apachectl -t でエラーになることがありますが、これは envvars だけの問題で動作はするので、気になる人は次のように直しておくとよいでしょう。


--- /usr/sbin/envvars-std 2014-01-16 10:08:32.000000000 +0900
+++ /usr/sbin/envvars 2014-11-13 07:35:17.000000000 +0900
@@ -20,6 +20,8 @@
#
if test "x$DYLD_LIBRARY_PATH" != "x" ; then
DYLD_LIBRARY_PATH="/usr/lib:$DYLD_LIBRARY_PATH"
+elif test "x$HOMEBREW_ROOT" != "x" ; then
+ DYLD_LIBRARY_PATH="$HOMEBREW_ROOT/lib:/usr/lib"
else
DYLD_LIBRARY_PATH="/usr/lib"
fi

日々使っている開発環境も、細切れ時間を見つけて、ちゃんとメンテナンスしていくのも重要なことですね

Tags: ,

su で expect を使って簡単に root になる方法

October 6th, 2014 by naoya | No Comments | Filed in day

exepct 便利ですよね。expect を使うと、コマンドラインの対話を自動的に行うことが出来ます。

例えば、/home/foo/password に su のパスワードが書かれている場合、次のようなスクリプトを作成して実行すると一発で su することができます。


#!/usr/bin/expect -f

set password [exec cat /home/foo/password | head -1 | tr -s " " | cut -d " " -f 2]

spawn su -
expect "*assword:" { send "$password\r" }

interact

ポイントは、set で exec を使ってコマンドラインの実行結果をパスワードに入れているところ、上記の例であと /home/foo/password には複数行で各ユーザごとのパスワードがかかれていて、1行目に root のパスワードが書かれていることになります。
そして、interact で処理を継続しているところがポイントです。

また、expect 用のスクリプトを一から手動で作成するのは、すこし不便ですが、autoexpect を使うと expect を使うスクリプトを自動生成することができて便利です。
例えば、上記の expect のもとを作成する場合には、次のようにします。


$ autoexpect -c su
autoexpect started, file is script.exp
Password:
foo# exit
exit
autoexpect done, file is script.exp
$

そうすると、カレントディレクトリ以下に script.exp というファイルが生成されています。このファイルには、制御コードなどを含まれていたり、たくさんの分かりやすいコメントがかかれているので、ちゃんと整理して expect なスクリプトを作成すると便利です。

Tags: ,

久しぶりの veewee ではまった

October 3rd, 2014 by naoya | No Comments | Filed in day

こんにちは。
CentOS 7 がリリースされたので、手前味噌の Vagrant box を更新しようと思い立ちました。
ただ、せっかくなので、Packer の方がいいかと思って、veewee-to-packer gem をインストールして変換してみたのですが、ISO の CD ファイル名が何らかのハッシュ値.iso として packer_cache ディレクトリに入ってしまい、ダウンロードの時間がかかりそうだった点(ちなみに veewee だと iso ディレクトリの普通のファイル名.iso をチェックして、とても素直です)、今のところ Vagrant 用として使うだけ点、という点からわざわざ packer を使う必要はないという結論に勝手に追加しました。あと、veewee-to-packer gem はあまりメンテナンスされていないので、すこし template.json を修正する点もあったので、それも少し面倒でした。具体的に vmware を vmware-iso とするなど。

というわけで、みんな大好き veewee です。久しぶりにのぞいてみると、ちゃんとメンテされ続けているようで、ちょうど 10/1 に veewee 0.4.0 がリリースされていました。久しぶりに RubyGems にリリースされているので、ちゃんとメンテされているようで安心しました。

さっそく、VMware fusion 用の Vagrant box を作成した用途したところ、なぜか次のようなエラーが発生しました。なお、VMware fusion 7.0 です。


$ bundle exec veewee fusion build my-centos7
...
.../lib/veewee/provider/vmfusion/provider.rb:34:in `split': invalid byte sequence in US-ASCII (ArgumentError)
...

どうも、system_profiler SPApplicationsDataType コマンドの出力から VMware Fusion のバージョンを抽出する部分でアスキー文字以外が含まれているというエラーのようです。

veewee の issue をみてみると、ちょうど同じ内容の報告が 2013 年にあったようです。この issue に書いてあるようなコードを fork した veewee に変更してちゃんと動作して CentOS 7 の Vagrant box を作成することが出来ました!ちなみに Homebrew cask でインストールしているときは、/Application/VMwae\ Fusion.app の symlink を貼った方はいいです。Packer も /Application 以下をチェックしていますので。いちお、pull-request を送っておきました。(※こちらマージされました!)

同じ問題で悩んでいる方は、次のような Gemfile を書いておくと便利です。

source 'https://rubygems.org'

gem('vagrant',
git: 'https://github.com/mitchellh/vagrant.git',
tag: 'v1.6.5')

gem('veewee',
git: 'https://github.com/jedi4ever/veewee.git')

来週は、CentOS 7 の kickstart ファイルを作成するときにはまったことについてアウトプットしていけたらと思います。

Tags: ,

Oracle JDK をダウンロードするスクリプト

August 18th, 2014 by naoya | 1 Comment | Filed in day

Oracle JDK のアップデートがあるたびに、それぞれのサーバに手動で Oracle の JDK ダウンロードページからダウンロードするのがめんどくさいので、即興のシェルスクリプトを書いてみた。

JDK 7 および 8 の、Linux x64 版の rpm と tar.gz に対応しています。

もちろん、事前にダウンロードする際には、BCL For Java SE に同意の上、使用してください。

また、当然のことながら、Oracle JDK ダウンロードのウェブページが変わってしまった場合は動作しないので、その旨割り切ってお使い下さい。

Tags: ,

新しい Google Noto Font をインストールする

July 17th, 2014 by naoya | No Comments | Filed in day

Google、オープンソースの日中韓フォントNoto Sans CJK を無料配信。Adobe と共同開発 – Engadget Japanese のとおり新しい Google Noto CJK Font がリリースされましたね!

さっそく、homebrew-font に Pull Request を送ったので、取り込みまれているので、次のようにするばすぐにインストールすることができます。


$ brew tap caskroom/fonts
$ brew cask install font-noto-sans-japanese font-noto-sans-korean font-noto-sans-s-chinese font-noto-sans-t-chinese

さっそく、Chrome のメインフォントに設定してみましたので、しばらく使ってみようかと思います。
Linux 上でも使えるみたいなので、これは本当に素晴らしいことですね。

Tags:

Homebrew で pyenv を使っていると fontforge がインストールできない問題

June 6th, 2014 by naoya | No Comments | Filed in day

Homebrew で pyenv を使っているとき、次のように python 拡張を有効にした fontforge がインストールできません。


$ brew install --with-python fontforge

ちなみに “–with-python” を指定しないとインストールすることができますが、homebrew 経由で ricty がインストールできないので、”–with-python” は必須です。

こんなときは、pyenv を一時的に system python を使うようにしてから、インストールすると大丈夫でした。


$ cd /tmp
※ cd しなくても、忘れずに .python-version を削除しても大丈夫です
$ pyenv local system
$ brew install --with-python fontforge

ricty をインストールする場合は、手動で fontforge をインストールしなくても依存関係で自動的にインストールされます。


$ brew tap sanemat/font
$ brew install --dz ricty

–dz を指定すると、Adding straight single and double quotes to Inconsolata のフォントになるので、個人的には Inconsolata-dz の方が好みです。

さらに ricty には、powerline パッチもあてることができるのですが、2014/06/07 時点ではエラーが出てしまいます。この件は、issue をたてておきましたので、修正されるまでしばらく待ちましょう!

Tags:

Emacs on OS X Mavericks 10.9 で distnoted プロセスが暴走する問題の解決方法

June 5th, 2014 by naoya | No Comments | Filed in day

最近、どうも OS X Mavericks 10.9 で使用していると、distnoted というプロセスが CPU 使用率 100% 近くまでになってしまう現象になっていました。

ずっと、VMware Fusion の仮想サーバ 2 台ほど常時起動の環境だったので、そのせいかなと思っていましたが、どうも Emacs に原因があったようです・・・。

何とならない対策できないものかと調べたところ、emacs 24.3でdistnotedを暴走させないパッチ+inlineパッチのビルド手順です。sakito.jpの手順を修正したものです。 が見つかりました。

この手順で、早速 Emacs にパッチをあてたところ distnoted というプロセスが CPU 使用率 100% 近くまでになる現象が収まったような気がします。

これはさっそくということで、homebrew の myemacs という独自の homebrew formula を書いてみました。

公式の Emacs Formula でも同じパッチが一つあたっているようですが、独自に作ってみました。

使い方は、次のように実行するだけです。


$ brew tap n0ts/myformula
$ brew install myemacs

そうすると、~/Applications に Emacs.app と $HOMEBREW_PREFIX/bin に emacs がインストールされます。

これでしばらく常時使用して様子を見たいと思います。
何気なく、普段ずっと使っている道具の調子がおかしいときは、定期的にチェックするようにしたほうがよさそうですね。

Tags: ,