Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2008-11-14 (Fri)

bashでexportした配列をリストアップしたい

envだとbashの配列はexportしてても表示されない。

$ cat source-me
v1='hehe'
V1='kareshi ga'; export V1
A1=('bash' 'wo' 'tukatteita.'); export A1
A2[0]='wakare'
A2[2]='tai...'
export A2

$ env - bash -norc -noprofile -c '. source-me; env' | egrep -v -e '(OLD)?PWD' -e SHLVL= -e _=
V1=kareshi ga

が、declare -x だと出てくる。

$ env - bash -norc -noprofile -c '. source-me; declare -x' | egrep -v -e '(OLD)?PWD' -e SHLVL= -e _=
declare -ax A1='([0]="bash" [1]="wo" [2]="tukatteita.")'
declare -ax A2='([0]="wakare" [2]="tai...")'
declare -x V1="kareshi ga"

2008-11-13 (Thu)

ApacheのAllow, Denyディレクティブでand条件したい

追記: 2008-11-14

コメントで id:yasui0906 さんに教えてもらったように、

SetEnvIf X_CLIENT_TYPE "^(DoCoMo|EZWeb|ThirdForce)" is_mobile=1
SetEnvIf x-up-subno "XXXXXXXXXXXXX\.ezweb\.ne\.jp" my_ktai
SetEnvIf is_mobile "^$" !my_ktai

Order Deny,Allow
Deny  from all
Allow from env=my_ktai

な風にした方が env!= の列挙よりスマートです! 自分もこっち使うようにしました。



たとえば、自分の携帯電話(au)からのアクセスだけ許可したいときは、

CIDRFile "/usr/irori/etc/ip.d/[a-zA-Z]*"
SetEnvIf X_CLIENT_TYPE "^(DoCoMo|EZWeb|ThirdForce)" is_mobile

SetEnvIf x-up-subno  "XXXXXXXXXXXXX\.ezweb\.ne\.jp" my_ktai

なふうに、「携帯電話」はmod_cidr_lookupを使って判定して環境変数is_mobileをセットして、「自分の」はリクエストヘッダx-up-subnoが自分の携帯のサブスクライバIDと一致すれば環境変数my_ktaiをセットしておきます。

で、

Order Deny,Allow
Deny  from all
Allow from env=is_mobile AND env=my_ktai

みたいにAND条件でAllowしたいところなんですが、Allowの列挙はORになるのでできません。

くまったなーと思って mod_authz_host.c のソースをちら見してみると env=! なんていう否定表現があるではないですか。

なのでこれを使うと、

Order Allow,Deny          # 最初は全部拒否
Allow from all            # とりえず全部許可して、
Deny  from env=!is_mobile # 携帯じゃないのは拒否
Deny  from env=!my_ktai   # さらに、自分のじゃないのは拒否

な感じで実現できます。

他にもできる方法があったら教えてください><


ちなみに、Allow, Deny ディレクティブで env=! が使えるのは、Apache 2.2.10 と trunk だけのようです。2.2.9や現時点の2.0系では使えません。

あと、ドキュメントには英語版には記載されてますが、日本語訳の方には記載されてないので気をつけてください。

2008-11-12 (Wed)

ブータブルなUSBメモリを作ってみた

4GBで2000円ぐらいのUSBメモリを2つ買ってきて、

  • レスキュー用
    • sshd、fdisk、mkfs.*、shred、tcpdumpとかそのへんのツールが入ってるやつ
  • インストール用
    • 光学ドライブがないマシンにUbuntu 8.04 Server Editionを入れるのに

なブータブルなUSBメモリを作ったメモ。

レスキュー用

UNetbootinを使うと、CD用のISOイメージからぺろっとブータブルなUSBメモリが作れる。

なのでまずは中身がubuntu-8.04.1-desktop-amd64.isoなブータブルUSBメモリを作る。

UNetbootinでUSBメモリを作った後、isolinuxからsyslinuxへのリネームを忘れずに。

mv syslinux.cfg syslinux.cfg.bak
mv isolinux/isolinux.cfg isolinux/syslinux.cfg
mv isolinux syslinux

これでUSBでブートするとUbuntuのインストーラが上がるので、Try Ubuntu without any change to your computerを選択すればUbuntuが起動する。

fdiskとかshredとかは入っているけど、sshdが入ってない。ここでaptitude install openssh-serverしても起動しなおすと消えちゃう。毎回installするのはめんどいしネットワークが使えないとsshdが入れられないのはまずい。

でどうするかというと、LiveCD用の仕組みで、変更をUSBとかに記録しておくのがあるので、これをブータブルUSBメモリでも使えばOK。

まず、UNetbootinでISOをコピーする前に、予めパーティションを切っておく。

  • sdb1 800MB
  • sdb2 残り全部

な感じで。

で、sdb1 にUNetbootinでISOをコピってマウントして、

のinstall_usb.shを参考に、syslinux.cfgをいじってブートパラメータに「persistent」を追加する。あと、initrd.gzの中のscripts/casperから,mode=755の部分を削除する。

sdb2のファイルシステムLinuxでネイティブで使えるやつにすればOK。ext2, ext3, xfs, reiserfsとか。キモは、ラベルを「casper-rw」にすること。なんでもいいわけじゃなくこのラベルにしないとだめ。自分はext2にしたので、

mkfs.ext2 -L casper-rw /dev/sdb2
とか、mkfs済みなら
tune2fs -L casper-rw /dev/sdb2

な感じで。詳しくは前出のUbuntu Weekly Recipeを参照のこと。

これでaptitude installとかしたものはsdb2に書き込まれるので、次に起動したときもちゃんと残ってる。あとXは起動しなくていいので/etc/rc2.dからgdmを削除したりもろもろの調整をやっておく。


インストール用

最初、 UNetbootin で ubuntu-8.04.1-server-amd64.iso をUSBメモリにコピってみたんですが、インストーラは立ち上がりいけるかと思いきや、途中で cdrom が見つからないと泣かれたり、手動でmountしようと思ったらこの時点ではisofsとfatのドライバしかないとか、fatでmountしたらシンボリックリンクがただのファイルになってるとか長いファイル名がちょんぎれてるとか、なんかそんなこんなでインストールできず。

結局、

を参考に、またパーティションを2つ切って、sdb1には

zcat boot.img.gz > /dev/sdb1

で書き込んで、sdb2はext2とかでmkfsして、ごろっとubuntu-8.04.1-server-amd64.isoのファイル1個だけをコピーしておいた。

hd-media/boot.img.gzに収録されているインストーラは、他のパーティションにある*.isoなファイルをみつけてインストールを開始するので、このUSBメモリがあればネットワーク要らずでUbuntu Server Editionがインストールできます。

が、インストールされたカーネル関係がのきなみ-genericだったので、あとで手動で-serverなのに入れ替えました。

2008-11-08 (Sat)

先週のおハマり

  1. ニューマシンをknoppixのCDで立ち上げる
  2. fdisk, mkfs, 適当なところにmount
  3. んで、sshdを上げる
  4. 隣のサーバで、tar -C / --exclude '/procとか/sysとか要らないとこ' -cpf - . | ssh new_machine 'tar -C / -xpf -' などとする
  5. あとは chroot /mnt/root grub-install とかすれば複製完了。

のはずが、

  • grub-installが実行できない

この理由は簡単で、ブートしたknoppixi386で、複製元になったサーバはx86_64だったため。とりあえず手元にあった x86_64なUbuntu Desktop Editionで起動してgrub-installしてOK。あとで、knoppix-x86_64-v5.1.1CD-20070412.iso を焼いた。(v5.3.1でx86_64なのはまだないっぽい)

で、ブーートしたら、UUID関係の個所でのきなみエラーが出たり意図しない動作。具体的にいうとこんな感じ。

  • /etc/fstab : UUID=... をやめてデバイス名かLABEL=を使う
  • /boot/grub/menu.lst : 同上
  • /etc/blkid.tab : ファイルを削除して、blkidコマンドを実行して作り直す

と、

  • /etc/udev/rules.d/70-persistent-{cd,net}.rules : これがあるとeth0のはずがeth1とかになるので消す。

で、ブーーートしたら、/ が read onlyになってる。おかしい。よく見たら

kernel: EXT3-fs: cannot change data mode on remount

って怒られてるし、たしかに mount -o remount,rw / できない。

「data mode」ってなんだろねーとしばらく悩んで、複製元サーバで実験的にジャーナリングのモードを変更したのを思い出した。

tune2fs -o journal_data_writeback /dev/sda1

で、ordered(デフォルト)からwritebackに変更してたのでした。

ニューマシンでmkfsするときはすっかり忘れてたのでファイルシステム的にはデフォルトのorderedなんだけど、(複製元サーバからコピーした)fstabにはdata=writebackと書いてあるので、モードが食い違ってremountが失敗してた次第。

いろいろハマった一週間。


あと一こ思い出した。tarでまるごとコピーかけて昼メシ行って帰ってきたら、コピー先のディスク食い潰しててびびった。/proc/kcoreはキケン!

2008-11-04 (Tue)

ここ数年の総括と

思い返すとことの発端はこのエントリだったんじゃないかと思います。

今、読み直すと自分でもハラハラする内容ですがw、ホテントリデビューに気を良くして職場のブログにも矢継ぎ早にエントリを書きました。

これをエサに釣れたのが、

で、このときがid:naoyaさんとのファーストコンタクトでした。その後、id:lopnorさん(当時はてなに在籍)やid:stanakaさんらとも情報交換をしつつなかよくさせてもらって今に至り、はてなさんとKLabのコンビで技術評論社さんから書籍も出しちゃったりしました。

おかげさまで好評をいただき、インフラ成金と指をさされる今日この頃です。

技評さんといえば、少し前の話になりますが、先のLinuxでロードバランサのブログエントリが編集者さんの目にとまり、『WEB+DB PRESS Vol.37』でDSASチームでLVSの特集を執筆したり(過去記事はWebで公開しています: Linuxロードバランサ構築・運用ノウハウ)、『WEB+DB PRESS』誌上でインフラ関係の連載も書かせてもらったりもしました。このほかにも技評さんのTさんOさんIさんD井さんにはいろいろとお世話になりました。今後ともよろしくお願いします><


もうひとつの大きな転機は、またちょっと話がさかのぼりますが、2006年7月に恵比寿で行われたYLUGの「カーネル読書会」でした。

もともと出不精な上にシャイなので、外部の勉強会に参加したのはこれがはじめてぐらいで、しかも知り合いに連れられてようやく参加したという体でした。もちろん本編はおもしろかったんですが、それよりなによりその後の懇親会で何人かの人とお話しできたのが自分の中でプラスになる出来事でした。

この懇親会でお話した中にグリーの藤本さんがいました。そのときはバタバタしていて二言三言交わすぐらいだったと記憶しているのですが、後日ずうずうしくもオフィスにおじゃまさせてもらい、うちではこんな感じで冗長構成、負荷分散してまっすーというおしゃべりをホワイトボードに絵を描きながらしてきました。そしてこれがきっかけとなり、2007年2月に行われたグリーさん主催のオープンソーステクノロジー勉強会でスピーカやらないかと声をかけてもらえました。

人前で何かをしゃべるなんて経験がなかったので、このときは数日前から緊張してカレーものどを通らないほどだったんですが、終わってみると「こんな自分でも人になにかを伝えられるんだ」ということに気づきました。以後、自社主催のKLab勉強会を立ち上げて自らしゃべったり外部の方をゲストで呼んでみたり、ほかの勉強会にもスピーカや聴者として参加するようになったのですが、グリーさんの勉強会でしゃべったという出来事がすべてのきっかけだったなぁと思っています。


と、こんな感じで振り返ってみると、外へのアウトプット重視にシフトし、そして活動した数年だったなぁと改めて再認しています。

そしてこの11月からは知り合いのスタートアップに参加することにしました。なにもかもないというのは、あらゆる意味で非常に不安ではありますが、それ以上に、その先にある何かに向けてのわくわく感のほうが大きくて、充実した日々を過ごしています。

そんな感じなんで今後ともよろしくおねがいします!!

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |