タグ

ブックマーク / openlab.dino.co.jp (41)

  • オレオレrpmパッケージの作り方(ビルド編)

    こんにちわ。arashoです。今回は前回のエントリに引き続きrpmパッケージのビルドのコツや効率よくパッケージングを行う小ネタなどを書いてみたいと思います。 パッケージのビルドオプションについて RPMのパッケージングには意外と時間がかかります。rpmbuildコマンドでソースコードの展開からパッチの適用、コンパイル、テンポラリディレクトリへのインストール、パッケージングをやっているので巨大なソフトウェアではコンパイルに時間を取られたりします。 そこで、rpmbuildにはいくつかビルドに便利なオプションが備えられています。-bp -bc -bi -bl --short-circuitです。それぞれのオプションはmanから引用すると -bp <specfile> の %prep (ソース展開と patchの適用) まで実行 -bc <specfile> の %build (%prepと

  • オレオレrpmパッケージの作り方(基本編)

    こんにちわ。arashoです。毎度インフラ周りのネタばかりですが、最近rpmのパッケージを作る機会が多いので、一度まとめとしてrpm関連の事を記載してみたいと思います。というわけで、今回は作業環境の構築と基的なビルドの方法から。 rpmにはおおざっぱに言うと2種類あります。rpmとsrpmと呼ばれるもので、前者は実行形式のバイナリ、後者はrpmを作るためのソース(Source)が収められています。srpm -> rpmの流れですね。 rpmビルド作業環境の準備 まず、rpmを作るにはsrpmをほげほげできる環境を用意します。rpm-buildパッケージ(と依存するパッケージ)をインストールしましょう。 次に、設定の変更です。Redhat系ではデフォルトでだと/usr/src/redhat以下にsrpmはインストールされてしまうので、自分が自由にインストールできるよう設定を変更します。

  • autotest で Symfony + Lime を自動テストする — ディノオープンラボラトリ

    ruby 界隈でよく使われている自動テストツール autotest の Symfony + Lime 用スタイルを書いて公開しました。 プロジェクトのローカルルールに合わせてあるのですが、軽く手を入れれば他のプロジェクトでも、また Symfony や PHP 以外でも使えると思います。 TDD で書いていないと不安が高じて動悸と息切れが始まる red-green-refactoring を唱えなさいとじっちゃに言われた growl の red を見ないとコードが先に進まない よくある話だと思います。 まずテストが無いと何も始まらない!書いたテストはがんがん自動実行して使い倒したい! となるとやはり、自動テストの出番ですね。 インストール手順 autotest コマンドをインストールします。rspec + autotest + インストール辺りでぐぐってください。 mac の人は a

  • Subversionのブランチ操作をgit並に簡単にする — ディノオープンラボラトリ

    svnとgit両方使うようになりました。するとgitの便利さに感嘆する一方、svnのブランチ操作の面倒臭さが際立ってきました。特に、ブランチ操作ではgitは素晴らしく例えば以下のような例をご覧いただくとその差は一目瞭然かと思います。 ブランチ一覧を得る git branch svn list http://example.com/svn/branches ブランチを作る git branch mybranch svn cp http://example.com/svn/trunk http://example.com/svn/branches/mybranch -m 'create mybranch from trunk' 以上のように、svnはブランチをブランチとして扱っていないためとても面倒なコマンドを打たなくてはなりません。これではとてもsvnのブランチなんて使ってられないのでとっと

  • PHPで最小の整数を得る方法 — ディノオープンラボラトリ

    PHP 4.4.0以降およびPHP 5.0.5以降では、最大の整数が定数PHP_INT_MAXとして定義されています。 $ php -r 'var_dump(PHP_INT_MAX);' int(2147483647) 64bit環境では次のような結果になります。 $ php -r 'var_dump(PHP_INT_MAX);' int(9223372036854775807) ところで、最小の整数が必要な場合はどうすればいいのでしょうか。実は最小の整数は定数定義されていないのですが、次のようにすれば取得できます。 $ php -r 'var_dump(~PHP_INT_MAX);' int(-2147483648) 64ビット環境でも同様です。 $ php -r 'var_dump(~PHP_INT_MAX);' int(-9223372036854775808) ここで利用した~とい

    aki77
    aki77 2009/07/21
  • dsvn.el + subversion 1.6が変だったのでパッチを作りました — ディノオープンラボラトリ

    たかはらです、いつもながら小ネタですいません。 以前、arashoが紹介してくれたdsvn.elを便利に使っていたのですが、先日Subversionを1.6.1にバージョンアップしたらステータスバッファのファイル名の認識を誤るようになり、先頭に空白が一つ入るようになりました。 dsvn.elが古いのか?と思い以下の最新版を試したのですが結果は同じでした。 wget http://svn.collab.net/repos/svn/trunk/contrib/client-side/emacs/dsvn.el svn statusの出力の解釈に失敗しているようだったので、dsvn.elのファイルの中身を以下のように書き換えたところ動作するようになりました。 --- dsvn.el.orig 2008-12-02 23:46:43.000000000 +0900 +++ dsvn.el 2009

  • 続・$HOME/.ssh/configを活用していますか? — ディノオープンラボラトリ

    以前の記事「$HOME/.ssh/configを活用していますか?」では、設定ファイルを少し頑張って書けば普段のSSHライフが随分変わりますよ、と紹介しました。今日はその続編です。前回よりマニアックな設定を紹介します。 2段以上先のサーバにログインする Dynamic Forward機能を使う 共通設定をまとめて書く 2段以上先のサーバにログインする 目的のサーバにログインするために、踏み台的なサーバを経由しないと入れない環境があります。例えば、dmz経由でないとDBサーバにログインできない環境、というのは良くある構成でしょう。 このような場合に、ProxyCommandパラメータが利用できます。 上の設定で「ssh db1」とすると、sshでdmzに接続し、dmzから192.168.0.201へログインします。これを利用するには踏み台サーバにncコマンドが必要ですが、大抵の環境にインスト

    aki77
    aki77 2009/05/29
    『マニアックな設定を紹介』
  • lgrepコマンドで再帰的に日本語をファイル検索する — ディノオープンラボラトリ

    lgrepコマンドをご存知でしょうか。日語対応ページャlvの付属品で、対象ファイルの文字コードを推定して日語文字列をうまく見つけてくれるという、優れもののgrepです。 古いプロジェクトだと、プログラムはEUCだけど静的ファイルはSJIS、なんてことがあると思います。そんなときに大活躍です。 grepした結果の文字コード変換も勝手にやってくれるので、grep結果をnkfする必要もありません。至れり尽くせりですね。 そんなlgrepコマンドにも弱点があります。grepで言う-r(再帰的にファイルを検索)オプションが無いのです。どこに書いてあるかわからないエラーメッセージを探す、なんてときに-rは必須ですよね。無いなら作ってしまえ、ということで作ってみました。 alias lgrep-r="find . -type d -name .svn -prune -o -type f -print

    aki77
    aki77 2009/05/19
    『alias lgrep-r="find . -type d -name .svn -prune -o -type f -print | xargs lgrep"』
  • 講習会「文字集合と文字エンコーディング」を開催しました — ディノオープンラボラトリ

    「文字集合と文字エンコーディング」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。文字集合という単語を知っている必要はないですけど、少なくともUTF-8とShift_JISとでは扱える文字の種類数が違うことだけは伝えたかったので、その意味では目標が達成できたと思っています。 まとめ 文字集合とは、扱える文字の集合 JIS X 0208なら6000文字くらいの日語の文字 UCS-2なら60000文字くらいの世界中の主要な文字 文字エンコーディングとは、文字の集合をバイト列に直す方式 Shift_JISはJIS X 0208(など)を1〜2バイトにする UTF-8はUCS-2を1〜3バイトにする 文字エンコーディング関連のツールを使いこなそう nkfやlvを使いこなそう 日語を探すならlgrep 最終兵器:hexjaで16進ダンプ ムービー

    aki77
    aki77 2009/05/18
    文字コード
  • svn diffで-wオプションを使う

    こんにちは。hnwです。カレー部の部員が3日連続で同じカレー屋に行ったそうです。いくらカレーが好きでも限度があるだろう、と思いますね。私は常識人なので、せいぜい月・水・金と同じ店には1日おきにしか行きません(以上全て実話です)。 さて、今回はsvnコマンドの話題です。バージョン管理といえば昔はCVSで決まりでしたが、最近はSubversionが流行ですよね。この2、3年でCVSからSubversionに移行した方も多いのではないでしょうか。ディノでも2年ほど前に、それまでCVS管理していた全リポジトリをSubversionに移行しました。 Tracの導入やHTTPS+basic認証+クライアント証明書によるアカウント管理の導入など、移行についてはメリットの方が大きかったのですが、多少の戸惑いもありました。中でも私が一番精神的にダメージを受けたのは、私がcommitの前に必ず打つコマンド「c

    aki77
    aki77 2009/05/06
    外部のdiffコマンドを利用
  • Emacsでシンボリックリンクを開いたときの質問を消す方法

    今日はEmacsに関する小ネタです。英語の元ネタがusenetのcomp.emacsにありました。 Emacsを使っていると、下記のメッセージが出ることがあります。具体的には、シンボリックリンクをEmacsで開こうとして、なおかつシンボリックリンク先がSubversion管理されている場合に、以下のように質問されます。 “Symbolic link to SVN-controlled source file; follow link? (yes or no)”

  • cronでは「毎月第1月曜日に実行」ができない — ディノオープンラボラトリ

    社内の技術メモに「cronでは第1月曜日に実行などはできないので、実行されるスクリプト側で条件判定しないとダメ」というような記述がありました。一体どういうことでしょうか。 crontabの書式は「分 時 日 月 曜日 コマンド」です。また、数字はハイフンで範囲指定ができます。下記のように指定すれば毎月第1月曜日の午前3時にコマンドを実行できそうな気がします。 0 3 1-7 * 1 /path/to/command/execute-only-1st-monday しかし、これは期待通りには動きません。「1日から7日までの期間の唯一の月曜日」を指定したつもりが、実際には「1日から7日のすべて、または日付に関係なく月曜日」と解釈されます。マニュアルにも書いてあるのですが、「日」と「曜日」が両方指定された場合、OR条件になるのです。 ネット上を探すと、これでハマって試行錯誤した人が複数いるようで

    aki77
    aki77 2009/04/08
    『「日」と「曜日」が両方指定された場合、OR条件になるのです。』
  • cronでエラーメールの送り先を指定する方法 — ディノオープンラボラトリ

    cronは良く使うツールの一つだと思いますが、何故かトラブルの思い出がつきまとうのは僕だけでしょうか。今日はそんなcronの便利な機能を一つ紹介します。 cronで実行するコマンドの作法 はじめにcronスクリプトの作法を紹介します。cronは決められた時間が来るとコマンドを自動実行する仕組みですが、自動実行するコマンドは下記の条件を満たすべきです。 正常終了した場合は標準出力/標準エラー出力に何も出力しない 異常終了した場合は標準出力/標準エラー出力にエラーメッセージを出力する というのも、cronで実行したコマンドが標準出力・エラー出力に1バイトでも出力した場合、その内容がメールで送信されます。僕は異常時だけメールを受け取る使い方が一番スマートに思えます。 もしくは、次のような使い方も考えられます。 コマンドのログは標準出力に出力し、ローカルのログファイルに追記する 異常終了した場合は

  • ディノオープンラボラトリ — Emacsでサーバ作業を行う際の注意点

    Emacs使いの人はサーバ作業の際もEmacsを使うことが多いかと思います。ところが、Emacs使いはvi使いの人より少しだけ気をつけることがあるんです。今回はそんな内容をまとめてみました。 バックアップファイルに注意 Emacsは標準設定だと元のファイル名に「~」を付加した名前でバックアップファイルを作ります。普段は便利な機能なんですが、サーバ上の作業だと困ることもあります。 例えばWebサーバで公開中のPHPファイルを直接編集する場合、index.phpを編集したらバックアップとしてindex.php~ファイルが作成されてしまいます。標準的なWebサーバの設定ではindex.php~はtext/htmlとして出力されてしまいますので、一つ前のバージョンのPHPソースコードが全世界に公開されてしまいます。 また、特定ディレクトリ以下の全ファイルを処理対象にする処理があった場合、バックアッ

    aki77
    aki77 2009/02/26
  • MacPortsのコマンド逆引き一覧

    MacPortsというのは、BSDのportsを参考に作られたMacOSX用のパッケージングシステムです。同様のパッケージングシステムとしてはFinkもありますけど、好きな方を使えばいいと思います。ちなみに、ディノ社内のMacユーザーの中ではMacPortsの独占状態になっています。私は最初Finkを使っていたんですが、話が合わないのが寂しくてMacPortsを使うようになりました。 さて、そのMacPortsですが、私が長年rpm&yumに慣れきっていたせいか、「こうしたい時どうするんだろ?rpmコマンドなら出来るの知ってるんだけど」みたいなことが良くあります。これは結構ストレスです。そこで、逆引き形式の一覧表を作ってみました。リファレンスマニュアルを見れば全部書いてあることなんですけど、意外と便利なんじゃないかと思います。少なくとも私は自分で便利でした。(さすがにもう覚えましたけどね)

    aki77
    aki77 2009/01/10
  • session.el + minibuf-isearchが便利すぎる

    毎回便利なEmacs Lispをチマチマ紹介していますが、今回ご紹介するsession.elも優れものです。挙動が地味なので素晴らしさが伝わらないかもしれないと危惧していますが、Emacs使いの人は騙されたと思って使ってみてください。 更に言うと、session.el単体だと「少し便利かな」くらいなんですけど、minibuf-isearchと組み合わせると並外れて便利になります。 この組み合わせで使っているEmacs使いは多いと思うのですが、意外と知名度が低い気がしたので改めて紹介します。 session.elは、ざっくり言うとミニバッファの履歴をファイルに保存するものです。つまり、Emacsを終了しても、次回起動時にC-x C-fの履歴が復元されます。M-x grepの履歴や、kill-ring、検索/置換の履歴、各ファイルにおけるカーソル位置なども保存されるので、Emacsを終了させる

    aki77
    aki77 2009/01/06
  • dsvn.elでemacsでsubversion

    こんにちわ。arashoです。 emacs使いの皆さんはsubversionを使用するときは何を使っているのでしょうか? シェルからコマンドラインベースでったりpsvn.elだったりでしょうか。 普段emacsを使っている身ですが、物覚えが悪いせいでpsvn.elのコマンドを覚える気になれず、今まではシェルを使用していました。 最近知ったのですが、ありえるりあさんのブログエントリでdsvn.elを知り、使用してみて使い勝手が良かったので紹介します。 基的にはpsvn.elと変わりはないというのですが、何がよいかというと、初心者に優しいのです。 以下の画像をご覧ください。 これは、M-x svn-statusしたあとに?で表示されます(右端が赤いのは行末の余白を目立つようにしているためでdsvn.elとは関係ありません)。初心者にはありがたい機能ですね。 あとは下段のヘルプを見なが

  • Flymakeのススメ(PHP版 , JS版)

    Emacs使いなら普通に使ってるよね、ってな素晴らしいEmacs Lispの一つにFlymakeというのがあります。これは名前の通り、Emacsでファイル編集中にon the flyにmake(設定次第で何でも)してくれるEmacs Lispです。makeしてエラーが出た場合には、エラー箇所をハイライトしてくれます。typo などがあれば瞬時に気づくことができますので、開発効率がアップします。 青くハイライトされているのがwarning、赤はエラーの意味です。 PHPJavaScriptも他の方が設定を公開されていますけど、社内で設定を紹介したところ、「Warningに別の色が付いたりしないんですね」などと言われたので、ムキになってWarningにも色を付けてみました。そんなわけで、他の方の設定とはひと味違うと思います。実はPHPに関して言うと滅多にWarningが出ないので、便利になっ

  • ディノオープンラボラトリ — zshユーザーが普通にtrampを使う方法

    久々にEmacsの話題です。trampって便利ですよね。ローカルのEmacsでssh先のファイルを編集したり、sudoしてroot権限で編集できたりするのは素晴らしいと思います。trampの素晴らしさを知らない人は、下記サイトなどを参照してください。 tramp version 2.1.14 ユーザーマニュアル Emacsでリモートサーバ上のファイルをrootで編集する - 高原芳浩のKeep-Alive ところで、zshをログインシェルにしているとtrampが上手く動かない現象に出くわします。具体的には、「/sudo::/etc/hosts」などを開こうとして下記のように怒られることがあります。 tramp: Waiting 30s for remote `/bin/sh’ to come up... apply: Couldn’t `exec env ‘ENV=’ ‘PS1=$ ‘

  • 続・Emacsでタブ・全角スペース・行末の空白文字列を目立たせる

    以前、「Emacsでタブ・全角スペース・行末の空白文字列を目立たせる」という記事を書きましたが、その続報です。同じ事をするのにjaspace.elを使った方がいい感じに思えてきたので、紹介します。 jaspace.elというのは、おまけ for GNU Emacsで配布されているEmacs Lispです。jaspace.elの存在はEmacsでタブ・全角スペース・行末の空白文字列 - bobchinの日記で教わりました。ありがとうございます。 以前紹介したやり方に比べ、jaspace.elには下記のようなメリットがあります。 minor-modeなので、mode-lineがにぎやかになる M-x jaspace-mode-offとするだけで、色が着いていない状態に簡単に戻せる 空白文字に色を付けるだけでなく、任意の文字を重ねて表示させることもできる M-x customizeで設定できる

    aki77
    aki77 2009/01/04