2007年10月25日

ライブ CD 上で Apache を動作させる場合の注意点について

Ubuntu のようにライブ CD で動作可能な Linux の場合、一定( 256 バイト?)以上のサイズの静的ファイルを Apache が読み出せないという不具合に遭遇することがあります。例えば、

It worked.

という動作テスト用の index.html は表示されるのに、普通の index.html は表示されないなどです。

これは、ファイルシステムが sendfile システムコールをサポートしていないことが原因の可能性があります。

Apache の設定ファイルで以下の項目を設定してください。

EnableSendfile Off

http://ids-nile.engr.colostate.edu/manual/ja/mod/core.html#enablesendfile

https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/95393

posted by 熊猫さくら at 21:46| Comment(0) | TrackBack(0) | Linux

Ubuntu に Java をインストールする場合の注意点について

Ubuntu で Sun の Java パッケージ( sun-java6-bin sun-java6-jre )をインストールする場合には、 インストールの前にダミーのシンボリックリンクを作成しないと正常にインストールできない場合があります。

sudo ln -s / /cow

strace java をすれば判りますが、 /usr/lib/jvm/ というパス名を検索すべきなのに何故か /cow/usr/lib/jvm/ というパス名を検索してしまうため、

Error: could not find libjava.so
Error: could not find Java 2 Runtime Environment.

というエラーで終了してしまうのです。

http://ubuntuforums.org/archive/index.php/t-323117.html

posted by 熊猫さくら at 21:36| Comment(0) | TrackBack(0) | Linux

alien で armadillo-9 用の deb パッケージを作成する方法について

rpm ファイルと deb ファイルの相互変換を行ってくれる便利な alien コマンドですが、たまに自動変換に失敗するケースがあるようです。

armadillo9:/usr/src/rpm/RPMS/armv4tl# alien -k ccs-tools-1.5.1-1.armv4tl.rpm
Package build failed. Here's the log:
dh_testdir
dh_testdir
dh_testroot
dh_clean -k -d
dh_installdirs
dh_installdocs
dh_installchangelogs
find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \
        xargs -0 -r -i cp -a {} debian/ccs-tools
dh_compress
dh_makeshlibs
dh_installdeb
dh_shlibdeps
dh_gencontrol
dpkg-gencontrol: error: current build architecture arm does not appear in package's list (armv4tl)
dh_gencontrol: command returned error code 65280
make: *** [binary-arch] Error 1
find: ccs-tools-1.5.1: No such file or directory

rpmbuild により作成された rpm では armv4tl として扱われているのに対し、 alien で deb に変換しようとすると armv4tl ではなく arm として扱おうとするため、問題になるようです。
そんな時は、 debian/rules ファイルをちょっと修正してやると動くようです。

# cd ccs-tools-1.5.1
# emacs debian/rules
BeforeAfter
-dh_shlibdeps
dh_gencontrol
-dh_shlibdeps
sed -i -e 's:armv4tl:arm:' -- debian/control
dh_gencontrol

編集したら手動で debian/rules を実行します。

# debian/rules binary-arch
posted by 熊猫さくら at 21:27| Comment(0) | TrackBack(0) | Linux

2007年10月06日

VMware Player で ISO イメージファイルを切り替える方法について

OSのインストール中にCDの交換を求められる場合があると思います。
実際にCDに焼いてからインストールする場合はそのままCDを交換すればいいのですが、 ISOイメージファイルのままインストールする場合には仮想マシンの設定ファイルを編集しなければいけません。

VMware Workstation の場合には、仮想マシンが起動中であってもCDのアイコンをクリックすることで プロパティ編集画面が表示されるため、使用するISOイメージファイルを変更することができます。

しかし、 VMware Player の場合には、プロパティ編集画面を表示するインタフェースが無いため、 仮想マシンが起動中に使用するISOイメージファイルを変更することができません。

でも、 VMware Player の場合には、ウィンドウ右上の x ボタンを押すことで仮想マシンをサスペンド状態に することができます。そのため、以下のような順序でプロパティを変更することで、ISOイメージファイルを切り替えることができます。

(1)仮想マシン内でCDがアンマウントされたのを確認する。

(2)ウィンドウ上部の「CD-ROM (IDE 1:0)」というアイコンをクリックして切断する。

(3)ウィンドウ右上の「 x 」というアイコンをクリックして VMware Player をサスペンドする。

(4)テキストエディタで .vmx ファイルを編集する。

ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "Asianux-30-ia32-disc1-200708291645.iso"
 ↓
ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "Asianux-30-ia32-disc2-200708291645.iso"

(5).vmx ファイルをクリックして VMware Player を再開する。

(6)「CD-ROM (IDE 1:0)」というアイコンをクリックして再接続する。

(7)仮想マシン内でCDがマウントされたのを確認する。

posted by 熊猫さくら at 13:58| Comment(0) | TrackBack(0) | Linux

2007年09月18日

シリアルコンソールを使ってカーネルのログを取得する方法について

カーネルの起動時には大量のメッセージが表示されるので、 読みたいと思っても読むのが追いつかないことがよくあります。 そんな時は、コンソールの出力をシリアルにも出力すると便利です。 VMware を使えば、シリアルへの出力をファイルに保存することができます。

VMware の設定ファイル(*.vmx)に以下の内容を追加します。 serial0.fileName の部分は適当に変えてください。

serial0.present = "TRUE"
serial0.fileType = "file"
serial0.fileName = "/tmp/serial.txt"

GRUB のコマンドラインに以下の内容を追加してから起動してください。

console=tty0 console=ttyS0,9600n8

/sbin/mingetty や /sbin/getty などは /dev/tty1 〜 /dev/tty6 等を使うため、コンソールからログインした後の操作はシリアルには出力されませんが、コマンドの出力を /dev/ttyS0 にリダイレクトしてやることでシリアルに出力することができます。

カーネルのコンパイルが終わったら echo "Kernel Compile Done" > /dev/ttyS0 みたいな処理が実行されるようにすれば、 http://kumaneko-sakura.sblo.jp/article/4957514.html でサスペンドしてよい状態になったことをホストに通知するための手段としても使えますね。

http://arika.org/diary/20070626 が参考になると思います。

posted by 熊猫さくら at 20:28| Comment(2) | TrackBack(0) | Linux

2007年09月06日

SuSE のパッケージアップデートが遅い場合の対処法について

OpenSuSE 10.1 や 10.2 ではパッケージのアップデートをチェックするために novell-zmd というサービスが稼動しています。しかし、データベースが壊れると novell-zmd から起動される parse-metadata というプロセスが長時間(数十分〜数時間)にわたってCPU使用率100%という状況に陥ってしまいます。データベースが壊れていなければ数分以内に終わる処理なので、いつまで待ってもCPU使用率が下がらない状況が生じている場合には以下の操作を試してみると良いと思います。

service novell-zmd stop
rm -f /var/lib/zmd/zmd.db /var/lib/zmd/zmd.db-journal
service novell-zmd start

詳しくは https://bugzilla.novell.com/show_bug.cgi?id=255871 を参照してください。

その他に、効果のほどは不明ですが、

rug set max-downloads 5
rug set http-timeout 30

というチューニングができるようです。

posted by 熊猫さくら at 21:01| Comment(0) | TrackBack(0) | Linux

2007年08月10日

VMware 上の Fedora Core 6 で 2.6.22 カーネルを使う場合の注意点について

カーネル 2.6.21 以降では VMware 仮想マシンのハードディスクドライバとして使用されている lsilogic によるエミュレーションが正常に動作しないため、ハードディスクを認識することができず、システムを起動することができません。カーネル 2.6.21 や 2.6.22 を使う場合には、仮想マシンの設定ファイル(*.vmx)を開いて lsilogic を buslogic に変更してください。

scsi0.virtualDev = "lsilogic"
 ↓
scsi0.virtualDev = "buslogic"

起動時に Do you want VMware Workstation to change the adapter type for scsi0:0 disk? と質問された場合、 Yes と答えます。

Fedora 7 のインストーラでは 2.6.21 カーネルが使われているので、インストール前に上記の変更を行う必要があります。

Fedora Core 6 でも昨日 2.6.20-1.2962.fc6 から 2.6.22.1-32.fc6 にアップデートされたので、再起動したら起動できないという上記の問題に遭遇します。
以下は、私が行った対処法です。

yum -y update で 2.6.22.1-32.fc6 カーネルをインストールします。

2.6.20-1.2962.fc6 で起動している間に /etc/modprobe.conf を開いて scsi_hostadapter を BusLogic に変更します。

alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
 ↓
alias scsi_hostadapter BusLogic

2.6.22.1-32.fc6 カーネル用の initrd を作り直します。これで、 initrd に BusLogic ドライバが含まれるようになります。

mkinitrd -f /boot/initrd-2.6.22.1-32.fc6.img 2.6.22.1-32.fc6

シャットダウンします。

poweroff

仮想マシンの設定ファイルを開いて lsilogic を buslogic に変更します。

scsi0.virtualDev = "lsilogic"
 ↓
scsi0.virtualDev = "buslogic"

仮想 CPU を1個しか割り当てていないシステムではこれで動くはずです。

私の環境( ThinkPad X60 )では仮想 CPU を2個割り当てています。その場合、ハードディスクの認識前に処理が先に進んでしまい、 kernel panic になるため起動できませんでした。

何故かカーネルのコマンドラインで nosmp を指定しても効果がありません。そのため、仮想マシンの設定ファイルを開いて仮想 CPU を1個にしました。

numvcpus = "2"
 ↓
numvcpus = "1"

これでとりあえず起動できました。ログインして、ハードディスクを認識させるためのスリープ処理を加えるために initrd を修正します。

mkdir /tmp/initrd
cd /tmp/initrd
zcat /boot/initrd-2.6.22.1-32.fc6.img | cpio -id

init を開いて BusLogic.ko をロードした後に sleep 10 を挿入します。

insmod /lib/BusLogic.ko
mkblkdevs
 ↓
insmod /lib/BusLogic.ko
sleep 10
mkblkdevs

念のため別名で initrd を作成します。

find . -print0 | cpio -o0 -H newc | gzip -9 > /boot/initrd-2.6.22.1-32sleep.fc6.img

シャットダウンします。

poweroff

仮想マシンの設定ファイルを開いて仮想 CPU を2個に戻します。

numvcpus = "1"
 ↓
numvcpus = "2"

grub の画面では /boot/initrd-2.6.22.1-32.fc6.img の代わりに /boot/initrd-2.6.22.1-32sleep.fc6.img を指定してください。

これで起動できると思います。起動できたら、 /boot/initrd-2.6.22.1-32sleep.fc6.img を /boot/initrd-2.6.22.1-32.fc6.img にリネームしてください。

posted by 熊猫さくら at 12:12| Comment(0) | TrackBack(0) | Linux

2007年08月08日

CentOS5 での libXtst.so.6

VMware WorkStation 6 を CentOS 5 にインストールしたら、 /usr/bin/vmware-config.pl の実行時に libXtst.so.6 が見つからないという警告が出ました。

http://rpmfind.net/linux/rpm2html/search.php?query=libXtst.so.6 を探しても見つかりません。他のディストリから持ってくるしかないかな〜と思いかけていたところ、正解を http://www.mokonamodoki.com/vmware-server-on-centos-5 で見つけました。

yum -y install libXtst
posted by 熊猫さくら at 21:55| Comment(0) | TrackBack(1) | Linux

GUI を使わずに VMware を操作する方法について

VMware 5.5 以降では vmrun というコマンドが使えるようになっています。これを使うと、コンソールや ssh セッションから仮想マシンの起動/停止などを操作することができます。

コンソールや ssh セッションのように DISPLAY 環境変数が設定されていない場合には予め設定しておく必要があります。

export DISPLAY=:0.0

仮想マシンを起動するには以下のように実行します。

vmrun start /path/to/vmx_file

仮想マシンをサスペンドするには以下のように実行します。

vmrun suspend /path/to/vmx_file

http://kumaneko-sakura.sblo.jp/article/3659845.html では GRUB のデフォルトエントリを power off に設定することでシャットダウンする方法を紹介しましたが、上記のように vmrun で操作する場合にはデフォルトエントリを power off に設定してはいけません。

http://kumaneko-sakura.sblo.jp/article/3392253.html ではバッチ処理のために複数のゲストを順番に実行する方法について紹介しましたが、 power off できなくても vmrun コマンドを用いてサスペンドできるので問題ないことが判りました。
あとは、ゲストでのバッチ処理が終わってサスペンドしてよい状態になったことをどうやってホストに通知するかですね。ホスト側で top を実行して低負荷状態が数分継続したらゲストをサスペンドさせるという方法でも十分なのかもしれません。

posted by 熊猫さくら at 21:45| Comment(0) | TrackBack(2) | Linux

2007年07月16日

ssh の環境変数を渡す機能を利用した不正ログイン対策について

ssh プロトコルバージョン2では、必要に応じて環境変数を渡すことができるようになっています。幾つかの環境変数はセキュリティ上の問題を引き起こす可能性があるため、デフォルトでは環境変数を受け付けないようになっています。
しかし、例えば以下のように設定すると、 CERBERUS_MAGIC という環境変数を受け渡せるようになります。

# echo AcceptEnv CERBERUS_MAGIC >> /etc/ssh/sshd_config
# echo SendEnv CERBERUS_MAGIC >> /etc/ssh/ssh_config
# service sshd restart
# export CERBERUS_MAGIC="Konyanyachiwala"
# ssh localhost
Last login: Mon Jul 16 19:45:22 2007 from xxx.xxx.xxx.xxx
# echo $CERBERUS_MAGIC
Konyanyachiwala

環境変数という形で任意の追加情報を渡せるということは、ケロちゃんチェックで使うこともできるということを意味しています。例えばログインシェルを

#! /bin/sh
if [ "$CERBERUS_MAGIC" != "Konyanyachiwala" ]
then
    echo "You don't have permission to login."
    exit 1
fi
unset CERBERUS_MAGIC
exec /bin/bash "$@"

のようにして使うこともできるわけです。
上記のようなログインシェルの場合、クライアントは

# export CERBERUS_MAGIC="Konyanyachiwala"
# ssh nonrootuser@example.com

のように予め環境変数を設定してからアクセスする必要があります。そのため、上記のログインシェルが設定されたアカウントは ssh ログイン専用となります。(環境変数が設定されないのでコンソールログインには使えないのです。)
間違えて root ユーザに上記のログインシェルを設定すると痛い目にあいますよ。(笑)

scp や sftp の場合には、1バイト目から scp や sftp プロトコルのデータがやり取りされることを前提としており、サーバとクライアントが同期している必要があるため、ケロちゃんチェックを行うことが困難です。
しかし、環境変数という形を使えば、標準入出力を使うことなくクライアント側からサーバ側にケロちゃんチェックに対応していることを伝達することができます。環境変数の内容は、非対話的な操作による認証を行うためのユーザ認証用データとして使っても、対話的な操作による認証を行う際の scp や sftp プロトコルのデータの始まりを示すためのプリアンブルとして使っても構いません。

posted by 熊猫さくら at 20:28| Comment(0) | TrackBack(0) | Linux

2007年06月22日

ThinkPad X60 の無線LANドライバ(続)

http://kumaneko-sakura.sblo.jp/article/4236061.html の続きです。

アクセスポイントを借りることができたので、やっと接続できるところまで確認できました。

yum -y install kernel-devel
tar -zxf madwifi-ng-r2488-20070620.tar.gz
cd madwifi-ng-r2488-20070620
make -s
make -s install

再起動すると kudzu により自動的に /etc/modprobe.conf の修正と ifcfg-ath0 の作成が行われます。

Fedora 7 では最初から /etc/sysconfig/network-scripts/ifcfg-ath0 という名前で作成されました。

CentOS 5 では /etc/sysconfig/network-scripts/ifcfg-ath0 ではなく /etc/sysconfig/network-scripts/ifcfg-wifi0 という名前で作成されてしまいますので、 /etc/sysconfig/network-scripts/ifcfg-wifi0 をテキストエディタで開いて DEVICE=wifi0 を DEVICE=ath0 に書き換えてください。

CentOS 5 ではカーネルに対して nosmp を指定して起動しないと、 ifup ath0 を試みた後に iwlist ap を実行してもアクセスポイントが表示されませんでした。

Fedora 7 では、カーネルに対して nosmp を指定しないとHDDを認識できないため起動できませんでした。( Fedora 7 のインストール時に引っかかるので注意してください。)

WPA の設定ファイル( /etc/wpa_supplicant/wpa_supplicant.conf )は、以下のようになっています。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

network={
  ssid="アクセスポイントのSSID"
  scan_ssid=1
  key_mgmt=WPA-PSK
  psk="アクセスポイントに設定している事前共有鍵"
}

wpa_supplicant -Bw -D madwifi -i ath0 -c /etc/wpa_supplicant/wpa_supplicant.conf を実行してから ifup ath0 を実行します。
wpa_supplicant の実行を忘れると ifup ath0 が失敗します。
wpa_supplicant はデーモンとして動作するので、終了させたい場合は killall wpa_supplicant を実行します。

これで、オタワではワタワタしないで済むといいなぁ。

posted by 熊猫さくら at 21:35| Comment(0) | TrackBack(0) | Linux

2007年06月03日

ThinkPad X60 の無線LANドライバ

Linux では無線LANを使えるようにするのに苦労するケースが多いそうですが、 CentOS には ThinkPad X60 用の無線LANドライバが含まれていないために無線LANを使えず、4月のサンフランシスコ出張ではネットワーク接続に難儀しました。あちらでは無線LANが常識のようです。

で、6月のオタワ出張でも有線LANが使えない可能性が高いので、LANポート用無線子機を探してみたのですが、電圧が100V専用のものばかりでした。外国では電圧が100Vとは限りませんからねぇ。

そんな中、耳寄りな情報が見つかりました。 ThinkPad のいくつかの機種では ath_pci というドライバを使っており、 madwifi というパッケージに含まれているとのこと。早速 SourceForge.net からダウンロードして、インストールしました。

yum -y install kernel-devel
tar -jxf madwifi-0.9.3.1.tar.bz2
cd madwifi-0.9.3.1
make -s
make -s install

これで解決・・・かと思ったら、もう少し続きがありました。

http://www.clustcom.com/content/view/69/32/ によると、ThinkPad X60 に対応するためにはスナップショット版を使う必要があったのです。

tar -zxf madwifi-hal-0.9.30.13-r2351-20070519.tar.gz
cd madwifi-hal-0.9.30.13-r2351-20070519
make -s
make -s install

これで認識されるところまで来ましたが・・・接続テストを行う環境がありません。(^x^;;

posted by 熊猫さくら at 22:13| Comment(0) | TrackBack(0) | Linux

2007年05月02日

特定のカーネルだけをコンパイルする方法について

Fedora Core 6 用のカーネルをコンパイルする時に使用する SPEC ファイルには、特定のカーネルだけをコンパイルするための条件分岐が定義されているようです。

例えば、 xen カーネルだけを作成したい場合は、

rpmbuild -bb --target i686 --without up --without smp --without pae --without kdump --without debug --without doc --without headers kernel-2.6.20-1.2948.fc6.spec

のように指定します。 "%define with_XXX" で始まる行の XXX の部分を指定します。

posted by 熊猫さくら at 20:06| Comment(0) | TrackBack(0) | Linux

2007年04月29日

ThinkPad X60 に CentOS 4.4 をインストールする場合の注意について

私は ThinkPad X60 に CentOS 4.4 をインストールして使っていますが、2つ悩みがありました。

1つは、 CIFS 経由での書き込みアクセスが異常に遅い(通常5MB/s〜10MB/s出るはずが64KB/s〜1MB/s程度しか出ない)という問題です。

これは、 CIFS モジュール側ではなく e1000 ドライバ側の問題のようです。 CentOS 4.4 で使われている e1000 のバージョンは 7.0.33-k2-NAPI ですが、 http://sourceforge.net/projects/e1000 からバージョン 7.4.35-NAPI をダウンロードしてインストールすることで、通常の速度が出せるようになりました。

もう1つは、 AC 電源ケーブルの抜き差しや画面の出力先の切り替えを行おうとすると、システムがフリーズしてしまうという問題です。

これは、 NMI watchdog の問題のようです。カーネルのコマンドラインに nmi_watchdog=0 というパラメータを指定してやることで回避できるようになりました。これを見つけるまでは、 AC 電源ケーブルを抜き差しするためにシステムをわざわざシャットダウンしてやらなければいけないという、まるでデスクトップみたいな状況でした。(^x^;

posted by 熊猫さくら at 22:08| Comment(0) | TrackBack(0) | Linux

2007年04月05日

GRUBを使ってPCの電源を切る方法について

/sbin/poweroff コマンドでシャットダウンしても Power Down というメッセージが表示されるだけで電源をオフにする所まで行かずに止まってしまう環境に遭遇することがあるかと思います。私は ThinkPad X60 上で SMP 対応の CentOS 4.4 カーネルを稼動させていますが、 /sbin/poweroff コマンドで電源を切ることができません。

/sbin/poweroff で直接電源を切ることができないのであれば、電源を切るためだけのカーネルがデフォルトで選択されるように GRUB を設定しておき、 /sbin/reboot で再起動させることにより間接的に電源を切ることができないかなと思い、MLで質問してみました。
すると http://mail.nl.linux.org/kernelnewbies/2007-04/msg00023.html で予想外の方法を教えてもらったので紹介します。

なんと、 GRUB 自身の中に電源を切るための halt コマンドが備わっていたのです。

つまり、 /boot/grub/grub.conf の中に

title Power Off
    halt

というエントリを追加し、そのエントリがデフォルトで選択されるようにしておくだけでよいということでした。

http://kumaneko-sakura.sblo.jp/article/3392253.html では VMware で複数のゲストを順番に実行する方法について紹介しましたが、その時の前提条件であった「ゲストが poweroff コマンドによって電源断できること。」という条件を「ゲストのデフォルトエントリが( GRUB の) halt コマンドを実行するように設定されていること。」という条件に置き換えることができるのです。
SMP 対応カーネルを動作させている故に電源断ができないという問題を解決でき、夜間バッチが可能になりました。\(^^)/

posted by 熊猫さくら at 21:41| Comment(2) | TrackBack(0) | Linux

2007年03月21日

cat を使わずにテキストファイルを読み出す方法について

普通、テキストファイルの内容を表示する際には cat コマンドや less コマンドを使います。
例えば、 README を読む場合には、

cat README

のようにします。しかし、 cat コマンドや less コマンドが使えないという状況もあるかもしれません。(具体的には、プログラム自体が存在しなかったり、強制アクセス制御により実行が禁止されているといったケースです。)そんな時でも、 bash を実行することができるのであれば、以下のようにして内容を表示することができます。

exec 4<README; while read -u 4; do echo $REPLY; done

4 というのはファイルディスクリプタ番号で、 0 〜 1023 の間の未使用の数値を指定してください。

ちなみに、 TOMOYO Linux ではプログラムの実行時には読み込み権限のチェックはしません。これは、読み込み権限のチェックを行うようにすると、上記の方法によりプログラムの内容を読み出すことができるようになってしまい、スクリプトファイルの中に機密情報を埋め込めなくなってしまうためです。

posted by 熊猫さくら at 20:18| Comment(0) | TrackBack(1) | Linux

2007年02月22日

VMware で複数のゲストを順番に実行する方法について

VMware でいろんなディストリビューションのカーネルをコンパイルしていますが、一度に全てのゲストを並列実行させられるだけのCPUもメモリも無いので、1個ずつ順番に行っています。しかし、コンパイルが終わったゲストをシャットダウンして次のゲストを起動するために人手が必要になってしまっては夜間バッチができません。

幸い、 VMware には -x と -q という起動オプションが存在しているため、以下の条件を満たせば自動的に切り替えできます。

条件は、以下の2点です。
(1)ゲストの起動時に「ハードウェアが見つからない」などのダイアログが表示されないようになっていること。
(2)ゲストが poweroff コマンドによって電源断できること。

準備としては、ゲストを起動して、バッチコマンド(例えば rpmbuild や make-kpkg )を開始した直後にサスペンドさせます。バッチコマンドが始まった瞬間に応答が遅くなってしまうのを避けるために、バッチコマンドの開始前に sleep 10 とかを入れておくとサスペンド操作がスムーズに行くかもしれません。また、バッチコマンドの終了後に poweroff が実行されるようにしておきます。これをゲストの数だけ繰り返します。

準備ができたら、全ての VMware を閉じます。

その後、仮想マシンを順番に実行させるスクリプトを作成します。

Linux の場合はこんな感じです。(runvmware.sh)

#! /bin/sh
for i in "$@"
do
  vmware -x -q $i
done

chmod 755 runvmware.sh; ./runvmware.sh /var/vmware/*/*.vmx みたいに使います。

Windows の場合はこんな感じです。(runvmware.bat)

@ECHO OFF
FOR /F "usebackq tokens=2 delims==-" %%I IN (`FTYPE VMware.Document`) DO SET VMware=%%I
:START
IF "%1"=="" GOTO END
START "" /WAIT %VMware% -x -q %1
SHIFT
GOTO START
:END

コンテキストメニューの「送る」に登録するか、 runvmware.bat の上に *.vmx をドラッグ&ドロップして使います。

VMware Player の場合は -x と -q は不要ですので、 VMware Player しかインストールされていない環境ならば START "" /WAIT %1 のように省略できます。
VMware Player では右上のXボタンを押して閉じると自動的にサスペンドしてくれるので便利ですねぇ。

posted by 熊猫さくら at 05:47| Comment(0) | TrackBack(0) | Linux

2006年10月28日

余談:カーネルソースのパーミッション

http://www.atmarkit.co.jp/flinux/rensai/watch2006/watch10a.html によると David Wagner さんがカーネルのソースのパーミッションが 0666 なのは良くないのではないかと指摘したそうです。

実は、熊猫も http://lkml.org/lkml/2005/12/2/34 で質問したことがあります。

まぁ、 root で作業すべきではないのでしょうけど、 lxr をしようとしたらパーミッションの設定がおかしくて一般ユーザでは読めないファイルがあったという経験もあります。

なので、 TOMOYO Linux のカーネル構築手順書では、 root ユーザのまま tar で展開した直後に
find -print0 | xargs -0 chmod go-w --
するようにしています。

posted by 熊猫さくら at 12:12| Comment(0) | TrackBack(0) | Linux

2006年10月10日

個別環境に認証情報を残さないための Squid の設定について

インターネットへのアクセスにユーザ認証が必要なプロキシを必ず経由しなければいけない環境において、 http_proxy などの環境変数にユーザ認証のための情報を含めたくない場合への対処法です。
注意:私は Squid には詳しくないので、鵜呑みにするのではなく、他のサイトの情報も確認してください。

通常は http_proxy などの環境変数に認証情報と一緒にプロキシサーバを指定しますが、そのようにするとヒストリ機能や設定ファイルや /proc/PID/environ 等から認証情報が丸見えになりやすい状況になってしまいます。そこで、認証情報を環境変数に指定するのではなく、認証情報を追加して上流プロキシサーバへ転送してくれるプロキシサーバを用意して、環境変数にはそのプロキシサーバの情報だけを指定します。

まず、他人がHDD上のファイルを参照してしまう心配の無い環境(例えば Windows XP )に Squid をインストールします。そして、 squid.conf の

# TAG: cache_peer

というセクションの末尾に、以下のように cache_peer を指定します。

cache_peer 上流プロキシのIP parent 上流プロキシのポート番号 3130 no-query no-netdb-exchange login=上流プロキシの認証で使うユーザ名:上流プロキシの認証で使うパスワード

こうしておけば、 squid.conf にアクセスされるかパケットを盗聴されない限り、認証情報が他人に見られないようにできます。

次に、アクセス許可の指定ですが、例えば以下のように指定します。

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
acl host1 arp アクセスを許可するホスト1のMACアドレス(例:00:0C:29:12:34:56)
acl host1 arp アクセスを許可するホスト2のMACアドレス
acl host1 arp アクセスを許可するホスト3のMACアドレス
acl local-servers dst 上流プロキシを経由しないネットワーク(例:192.168.0.0)/ネットマスク(例:255.255.255.0)
always_direct allow local-servers
never_direct allow all
http_access allow host1

誰でも自分のユーザ名とパスワードで上流プロキシにアクセスされては困るので、MACアドレスで制限を掛けます。なお、MACアドレスによる制限は同一ネットワークセグメント上でないと使えません。

「GET はできるのに POST ができない」場合は never_direct allow all を忘れているものと思われます。 POST の場合はデフォルトでは上流プロキシを経由しないで直接目的のサーバにアクセスしようとしてしまうようです。しかし、上流プロキシを経由しないとアクセスできない環境の場合は never_direct を指定する必要があります。

また、目的のサーバがローカルアドレスの場合、上流プロキシを経由しないで直接目的のサーバにアクセスしなければいけない場合もあります。そのような場合は、 acl dst で上流プロキシを経由しないサーバを定義し、 never_direct allow all よりも前に always_direct allow を指定する必要があります。

posted by 熊猫さくら at 20:27| Comment(0) | TrackBack(0) | Linux

2006年09月26日

FC6 でカーネル rpm を作成する際の注意点

Fedora Core 6 で kernel-2.6.18-1.2693.fc6.src.rpm から rpmbuild でバイナリパッケージを作ろうとした時に起こりそうなトラブルへの対処法です。

通常は、

rpmbuild -bb --target i586 /usr/src/redhat/SPECS/kernel-2.6.spec

と実行するだけでカーネル rpm を作成することができます。
しかし、 http://kumaneko-sakura.sblo.jp/article/696897.html で述べたように、デフォルトの .config ファイルでは CONFIG_DEBUG_INFO というオプションが有効になっているため、大量のディスク領域(約 2.5 GB?)が必要となります。

そこで、 /usr/src/redhat/SPECS/kernel-2.6.spec を開き、以下のように CONFIG_DEBUG_INFO= で始まる行を # CONFIG_DEBUG_INFO is not set に変更してやるための行を挿入することで、ディスク領域を節約することができます。

# now run oldconfig over all the config files
for i in *.config
do
  mv $i .config
  Arch=`head -1 .config | cut -b 3-`
  sed -i "s/CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/" .config
  make ARCH=$Arch nonint_oldconfig > /dev/null
  echo "# $Arch" > configs/$i
  cat .config >> configs/$i
done

しかし、 Fedora Core 6 ではこれだけではエラーになってしまいます。
FC6 では、以下のように %define _enable_debug_packages 0 という行も追加してやる必要があるようです。

%ifarch %nobuildarches
%define buildup 0
%define buildsmp 0
%define buildpae 0
%define buildxen 0
%define buildkdump 0
%define _enable_debug_packages 0
%endif

%define _enable_debug_packages 0

#
# Three sets of minimum package version requirements in the form of Conflicts:
# to versions below the minimum
#
posted by 熊猫さくら at 21:36| Comment(0) | TrackBack(0) | Linux