株式会社ロジステック株式会社ロジステック

By logistech

Linux on Deskpower インストールメモ(かなり古いです)

Linux on Deskpower インストールメモ          1999.3.11



●環境

[PC]
FMV Deskpower SE FMV-5120D5
(Specification)
CPU : Pentium120MHz (Upgrade 133MHz by motherbord switch)
Memory : 32MB SIMM
HDD(IDE) : First Master(/dev/hda) – 2GB
Second Master (/dev/hdc) – 1GB
HDD(SCSI) : SCSI ID=0 (/dev/sda) – 1GB
CD-ROM(ATAPI): Matshita CR-581-M (on IDE First Slave(dev/hdb))
Graphic cadd : ATI Graphics Pro Turbo PCI(atim64-CT) MACH64 215CT
VRAM 2MB, RAMDAC内臓
NIC : 3com EtherLinkⅢ Bus-Master(PCI Ethernet Adapter)
IRQ=09, I/O=7300-731F
SCSI : Adaptec AHA-2940U(PCI SCSI Contoroller)
Sound : Creative SoundBlaster16(plug&play)
IRQ=05, DMA=01,05, I/O=0220-022F,0330-0331,0338-038B
Keybord : 日本語109
Mouse : PS/2 (2 Button) IRG=12
Display : FMV-DP97Y2 Horizontal:30~65kHz Vertical:50~110Hz

[Linux Distribution]
Slackware3.5
+ PJE0.15m (in Run Book Third Edition)
+ XFree86-3.32

[Boot Manager]
System comander4.0(かなり愛用している)
1. IBM PC-DOS7.0 (IDE First Master Primary)
2. Windows98 (IDE First Master Primary)
3. Windows95 (IDE First Master Primary)
4. Linux3.5 (IDE First Master Primary) – LILO
5. Windows NT4.0 (SCSI)

●インストール

1. BootDisk, RootDisk の作成
Slackware CD-ROMを挿入し \SLACK350\BOOTDSKS.144にCD(Change Dir)

>RARWRITE aha2x4x.s A:

>RAWRITE COLOR.GZ A:

2. パーティションの設定
<計画1>
/(ルート) 32MB /dev/sda1
swap 64MB /dev/sda2
/var 64MB /dev/sda3
/usr 残り全部 /dev/sda4

*****************************************************************
IDE HDD に後づけしたSCSIハードディスクに /(ルート) を作成しても
LILOが起動しない。System Comannderは一応Linuxを認識し、メニューか
らLinuxを選択し起動をするのだがLILOの”LI”だけ表示されて止まってし
まう。これは、後述するLILOの設定で、LILOをMBRにセットしても
Root superblockにセットしても同じ現象である。
また、System Comannderの推奨ではLILOはsuperblockにインストールする
ほうがよいとあるので、NT4.0を外付けSCSIに移動し、LinuxをIDE First
のPrimariにセットすることとした。
*****************************************************************

<計画2>
/(ルート) 32MB /dev/hda4
swap 64MB /dev/hda5
/var 64MB /dev/hda6
/usr 残り全部 /dev/hda7

*****************************************************************
上記の計画で/(ルート)をPrimaryで確保するとこれで同一HDD内にPrimari
(基本)区画が4個できてしまい他のパーティションがきれなくなってし
まう。(もちろんLogicalで他のものを取ることもできない。)そこで、
/(ルート)をLogicalで取り、その他もLogicalでとればうまくいき、イン
ストールも正常にできる。が、再起動をかけたあとSystem Comanderが
Linuxを認識しない。どうやらLogical区画にインストールされたLinuxは
System Comannderに認識されないようだ。
したがって、/(ルート)はかならずPrimaryでインストールしなければな
らない。
*****************************************************************

<計画3>
/(ルート) 800MB /dev/hda4
swap 64MB /dev/sda2 (sda1は既にNTをインストール済み)

*****************************************************************
やむを得ずパーティションの切り分けを単純化し、/(ルート) 以下をIDE
のPrimaryにセットし、swapをSCSIに逃がした。
これで、インストールうまくいった。
*****************************************************************

実際の操作は以下の通り
#cfdisk /dev/hda ‘/(ルート)以下の確保
#cfdisk /dev/sda ‘swapの確保([Type]でfilesystemを82に)

3. インストーラーの実行
#setup

・キーマップはとりあえずus.mapを選択
・FATパーティションで起動時にマウントしておきたいもの設定
・ソフトウェアシリーズで日本語環境とバッティングするものについては
インストールしてはいけない。(参照:Run本 P.67~P.80)
・カーネルの種類は /cdrom/kernel/aha2x4x.sを選択
・Boot Disk念のため必ず作成しておく
・モデムの設定はcom2
・LILOの設定はSimpleを選択し、Root superblockに登録
・Network設定は次の通り
HOST NAME : fmv2
DOMAI NNAME : xyz.logistech.co.jp
LOCAL HOST IP ADRESS: 192.168.141.103
NETMASK : 255.255.255.0
GATEWAY IP ADDRESS : 192.168.141.254(rooter’s local address)
NAME SERVER ADDRESS : 192.168.141.100(DNS Server local address)
・マウスの設定はPS/2を選択

3.1 インストールの確認
再起動し、Linuxがうまく立ち上がるか確認する。

*****************************************************************
Linuxはうまく起動するが、pingが効かない(自己へのpingも不可)。
これは、3comNetwork Cardが認識されていないためで、次の処置をし
カーネルを再構築しなければならない。
*****************************************************************

(1) http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.htmlの
ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/3c59x.c から
3c59x.cをダウンロードする。
(2) /usr/src/Linux-2.0.34/drivers/net/3.59x.c を上記のものと入れ
替える。属性は chmod 644。

3.2 カーネルの再構築
*****************************************************************
ネットワークカード認識の為のカーネルの再構築であるがついでにサウ
ンド設定等もやってしまう。
*****************************************************************
#make config

[General Setup]
・Proseccer Type => Pentium
[Network device support]
・Ethernet(10 or 100Mbit) => Y
・3com ISA, EISA, and PCI cards => Y
・3c590/3c900 ceries… “Vortex/Boomerang” => Y (その他は’N’)
・PCI Ethernet adapter => Y
[Sound support]
・Sound Blaster(SB16) => Y
・I/O base for SB => 220(default)
・IRQ => 5
・DMA = 1, 5

#make dep ; make clean
#make zlilo
#make modules ; make modules_install

再起動後ネットワークが有効になっているか確認する

4. 日本語環境の構築
4.1 PJEのインストール
*****************************************************************
日本語環境の構築のためmanコマンド起動に必要なgroff等をインストール
しなかったため、manが読めない。したがって、X Windowより先にPJEを
インストールする。
*****************************************************************
(1) ezinst, konのインストール
PJEのCD-ROMを挿入し、マウントする。
#cd /cdrom/PJE-0.1.5/tgz/install
#sh ./jeinst.sh
(2) キーマップの変更
/etc/rc.d/rc.keymapファイルを次のように変更する

/usr/bin/loadkeys us.map ←インストール時デフォルト

/usr/bin/loadkeys j106-d k2esc-d c12c-d

(3) ezinstの起動
#kon
#cd /cdrom/PJE-0.1.5/tgz/packages
#/sbin/ezinst
起動メッセージが表示される
[パッケージ選択]
・パッケージリスト-canvase.lstを選択
・ルール-デフォルトのまま
・マニュアル-デフォルトのまま
[パッケージのインストール]
・パッケージの確認をし、インストール開始
・パッケージリストに対するコメントは入力後、行頭(何も書かれて
いない行の左端で[Enter]キーを押す。
(4) マシンの再起動

4.2 Cannaによる日本語入力
(1) CannaサーバーがLinux起動時に起動されるように/etc/rc.d/rc.local
に次の行を追加(PJEインストール時に追加されているはず)
# call canna
/etc/rc.d/rc.canna start

(2) ユーザーホーム設定ファイル
★以下の~/.bash_profileファイルを置く
# $HOME/.bash_profile

# enable 8bit characters
stty cs8 -istrip -parenb

# history
HISTFILE=~/.bash_history
HISTFILESIZE=100
HISTCONTROL=ignoreboth
HISTSIZE=100

# path
PATH=$PATH:$HOME/bin
export PATH

# aliases
alias bin=”cd ~/bin”
alias cp=”cp -i”
alias mv=’mv -i’
alias dir=”/bin/ls $LS_OPTIONS –format=vertical”
alias jvi=”jvim”

**********************************************************************
下記の文からKtermをX Windowメニューから起動した場合は、
.bash_profileが実行されない、したがって.bashrc(=.bash_profile)として
ホームディレクトリに置くこととした。
**********************************************************************
●参考:bash_profileの実行順
(http://ww1.cnet-na.ne.jp/u/ushikai/misc.htmlより抜粋)

また、bashがログインシェルになっている場合、/etc/profileの内容が始めに
実行されます。Debianではこの中でパスを切っていることが多いので注意して
ください。ちなみに、その後bashは、
~/.bash_profileを実行
~/.bash_profileが無く、~/.bash_loginがあれば ~/.bash_loginを実行
~/.bash_loginが無く、~/.profileがあれば、~/.profileを実行
ログアウト時には~/.bash_logoutを実行
という動作をします。
僕にはまだ完全に説明する能力はありませんが、とりあえずrootのログイン
シェルはbashにしておいたほうがいいようです。(エラーの解析などが簡単に
なるらしい)
**********************************************************************
(http://kubota.rcpom.osaka-u.ac.jp/students/kubota/comp/debiantips/site-prof.html)

●すべてのユーザーに共通の設定はどこに書くか(bash)

bashは、ログインシェルとして起動する時は、/etc/profile、~/.bash_profile、
~/.bash_login、~/profile の順で実行します。また、 ログインシェルが終了
する時には ~/.bash_logout が実行されます。

ログインシェルではない一般のシェルが起動する時には、~/.bashrc のみが実
行されます。

このことから、ログインシェルについては、すべてのユーザーに共通の設定は
/etc/profile に書けばよいことが分かります。 (ログインシェルとは、コン
ソール画面ならログインしたときに起動されるシェル、 X Window System
なら kterm -ls などで起動されるシェルのことです)。

しかし、コマンドラインから単に bash と入力して起動したシェルは、 ログイ
ンシェルとはなりません。 また、X Window System でウィンドウマネージャー
のメニューから起動したシェルも、 ふつうはログインシェルとはなりませんが、
Debian のメニューシステムで Xshells メニューのなかに自動的に作られる
Xterm や Rxvt などのメニュー項目については、 ログインシェルとして起動す
る設定になっているようです。

そこで、問題は、コマンドラインから bash とか kterm などと入力して起動し
たシェルです。これについては、 全てのユーザーに共通の設定を行う方法が
ありません。そこで、 複数のユーザーを抱えるシステム管理者として最善の
手はなにか、 ということになりますが、いま思い付くのは、各ユーザーの
.bashrc を /etc/profile へのシンボリックリンクにしてしまうことです。
しかしこの手は、一括的な手段ではないこと、ユーザーが .bashrc を書き換え
ると無効になってしまうこと、があります。(ふつう、 ユーザーが .bashrc を
書き換えるのは、 いままでの設定は残したうえで新たに設定を加えたいという
ことだと思うので)。

なにかいい手はないでしょうか。

なお、コンソール環境とX環境で共通の設定を使う も参照して下さい。
**********************************************************************

★以下の~/.Xresourcesファイルを置く
!kterm*VT100*translations: #override \
! Shiftspace: begin-conversion(_JAPANESE_CONVERSION)

Emacs*FontSetList: 14,16,24
Emacs*FontSet-14:-*-fixed-medium-r-normal–14-*-iso8859-1,\
-*-fixed-medium-r-normal–14-*-jisx0208-1983-*,\
-*-fixed-medium-r-normal–14-*-jisx0201-1976-*
Emacs*FontSet-16:-*-fixed-medium-r-normal–16-*-iso8859-1,\
-*-fixed-medium-r-normal–16-*-jisx0208-1983-*,\
-*-fixed-medium-r-normal–16-*-jisx0201-1976-*
Emacs*FontSet-24:-*-fixed-medium-r-normal–24-*-iso8859-1,\
-*-fixed-medium-r-normal–24-*-jisx0208-1983-*,\
-*-fixed-medium-r-normal–24-*-jisx0201-1976-*

***********************************************************************
参考:.Xdefaults と .Xresources
(http://www.mitene.or.jp/~naoto/linux/fileform/sjis/home/_xresour.html)

X は、起動方法により流れは違いますが、シェル・スクリプトの流れにしたが
って起動されます。通常は、この際に『xrdb コマンド』を使用してリソースファ
イルを読み込みます。起動のためのスクリプトの中に書かれている xrdb の
引数により .Xdefaultsを読み込むか、.Xresources を読み込むかが決定され
ます。
このスクリプトに『xrdb コマンド』が無い場合には、.Xdefaults を読み込みます。
現在は、~/.Xresources をリソースファイルとして使用することが多いようです。
[ 例 ]
$HOME/.xinitrc または $HOME/.xsession 内などで、
xrdb -merge $HOME/.Xresources ==> .Xresources を読み込む
xrdb -merge $HOME/.Xdefaults ==> .Xdefaults を読み込む
起動スクリプトの中に指定無し ==> .Xdefaults を読み込む
***********************************************************************

★以下の~/.xinitrcファイルを置く
#!bin/bash
userresources=$HOME/.Xresoureces
if [ -f $userresources ]; then
xrdb -merge $userresources
fi
#

# for kanji
if [ -x /usr/X11R6/bin/kinput2 ] ; then
/usr/X11R6/bin/kinput2 &
fi

# for japanese window manager
LANG=ja_JP.ujis
LC_CTYPE=ja_JP.ujis
export LANG LC_CTYPE

exec fvwm2 ←これがないとX起動に失敗する
afterstep

★以下の~/.inputrcファイルを置く
set convert-meta off
set meta-flag on
set output-meta on

☆テスト
xを起動し、KTermでjvim(日本語対応vi)を起動する。
Shift+Spaceで漢字変換モードになり、日本語が打てるか確認する
保存し、catで日本語がちゃんと見れるか確認する

*****************************************************************
これで無事KTerm上で漢字を扱えるようになったがX Windoww終了後に
.fvwm2rcファイルがHOMEにないよ!というエラーが出る。
.fvwm2rcの中身はよくわからないが /home/pjeにある.fvwm2rcを取って
きてとりあえずHOMEディレクトリに置く。これでエラーは出なくなる。
*****************************************************************

★PJEインストール時に作成される /home/pje から内容を変更せずに
そのままユーザーディレクトリにコピーするファイル
.login
.emacs
.kinput2rc
.fvwm2rc

5. Muleの設定
上記.emacsファイル及び.Xresourcesのフォント設定を確認する以外特に何もすること無し。

By logistech

Virtual Host サポート

Virtual Host サポート

関連事項:
Non-IP based virtual hosts

バーチャルホストとは?

たとえばあるインターネットサービスプロバイダが、smallcobaygroup というそれぞれ異なった組織のためにWebスペースを供給する www.serve.com という名のマシンを持っていると仮定します。普通はこれらのグループには www.serve.com のWebツリー上の一部が割り当てられます。結果、smallcoのホームページは次のようなURLになるでしょうし

http://www.serve.com/smallco/

また、baygroupのホームページは次のようなURLになります。

http://www.serve.com/baygroup/

しかし、美的感覚からいえば、両組織とも自分達のホームページがサービスプロバイダの名前の後ろにくっついたかたちになって呼出されるより独自の名前で呼出される方がいいでしょう。;ところが彼ら組織は、インターネット接続やサーバのセットアップを自分達ではしたくありません。

バーチャルホストはこの問題への解決策です。smallco と baygroup は、それぞれ
www.smallco.comwww.baygroup.orgという独自の
インターネットに登録した名前を持っているとします。これらのホスト名は両方とも
サービスプロバイダのマシン(www.serve.com)に対応しています。
これで、smallcoのホームページは今、次のURLになり、

http://www.smallco.com/

そして、baygroupはのホームページは、次のURLになります。

http://www.baygroup.org/

必要なシステム

HTTP/1.0プロトコルの制限で、WEBサーバーは各々のバーチャルホストに対して唯一のIPアドレスを持たなければなりません。それには、マシンが複数の物理的なネットワークコネクションを持つか、または、いくつかのOS上で実現されている仮想インターフェース(virtual interface)を使用すれば可能です。

Apacheのセットアップのしかた

マルチホストをサポートするためにApacheを構成する方法は2つあります。
1つは各々のホスト用に別個のhttpdデーモンを走らせる方法、もう一つはすべてのバーチャルホストをサポートする1個のデーモンを走らせる方法です。

マルチデーモンを使うとき:

  • 異なるバーチャルホスト間では、httpdの構成がかなり違います。たとえば、
    ServerType,
    User,
    Group,
    TypesConfig または
    ServerRoot
    の値がそれぞれ違うというように。

  • マシンのリクエスト処理はあまり多くはありません。

シングルデーモンを使うとき:

  • バーチャルホスト間でhttpdの構成が共有されます。
  • マシンは多くのリクエストに対応することになり、そして、動作している個々のデーモンでのパフォーマンスのロスが重要になります。

マルチデーモンのセットアップ

各々のバーチャルホストごとに別個のhttpdをインストール。
個々のインストレーションでは、デーモンがどのIPアドレス(またはバーチャルホスト)に対しサービスするかを決めるためのバインドアドレス(BindAddress)指定をコンフィグレーションファイルの中で設定します。

例.

BindAddress www.smallco.com

このホスト名はまたIPアドレスの代わりにもなります。

シングルデーモンのセットアップ

このケースの場合、一つのhttpdがすべてのバーチャルホストのリクエストに応えます。
コンフィグレーションファイルの中でのバーチャルホスト(VirtualHost)の指定は、
ServerAdmin,
ServerName,
DocumentRoot,
ErrorLog
TransferLog 構成の値を個々のバーチャルホストに対応した値にセットするために使用されます。

例.


<VirtualHost www.smallco.com>
ServerAdmin webmaster@mail.smallco.com
DocumentRoot /groups/smallco/www
ServerName www.smallco.com
ErrorLog /groups/smallco/logs/error_log
TransferLog /groups/smallco/logs/access_log
</VirtualHost>

<VirtualHost www.baygroup.org>
ServerAdmin webmaster@mail.baygroup.org
DocumentRoot /groups/baygroup/www
ServerName www.baygroup.org
ErrorLog /groups/baygroup/logs/error_log
TransferLog /groups/baygroup/logs/access_log
</VirtualHost>

このバーチャルホスト名はまたIPアドレスの代わりにもなります。


ServerType,
User,
Group,
StartServers,
MaxSpareServers,
MinSpareServers,
MaxRequestsPerChild,
BindAddress,
PidFile,
TypesConfig
ServerRoot
を除いて、ほとんどのコンフィグレーション指定をバーチャルホスト設定欄に書けます。

セキュリティ: どこにログファイルを書くかを記述するときは、もしもApacheをスタートさせたユーザー以外のだれかが、それらが書かれたディレクトリへの書き込みアクセスを行ったときに表出するいくつかのセキュリティ上の危険に注意すべきです。
詳細はセキュリティ情報(security tips)を見てください。

ファイルハンドル/リソース制限:


多くの数のバーチャルホストを使用するとき、もし各々のバーチャルホストが異なったログファイル記述すればApacheは有効なファイルディスクリプタを使い果たします。Apacheで使用されるファイル記述子の総数は、それぞれ異なったエラーログファイルごとに1つとすべての他のログファイル指定のための1つに加え、プラス内部用に使用される10-20個です。Unixオペレーティングシステムはプロセスで使用されるであろうファイル記述子の数を制限しています。制限は通常64個、一般的にはその数を増やすのはハードによる制限にかかってくるでしょう。

Apacheは要求時に制限数を増やすことを試みますが、次の場合にはそのようには働きません。:

  1. あなたのシステムがsetrlimit()システムコールを備えていない場合。
  2. setrlimit(RLIMIT_NOFILE)コールがあなたのシステム上で機能しない場合(Solaris 2.3のように)
  3. ファイルディスクリプタの要求数がハードの制限を超えた場合。
  4. あなたのシステムがファイルディスクリプタ上の他の制限を設けた場合。たとえば、スタンダードI/O上でのファイルディスクリプタの使用を256個以下に制限した場合のように。

問題発生時への対処:

  • ログファイルの数を減少させる; メインログファイルのログを除いてバーチャルホストの欄にログファイルを記述しない。
  • もしあなたのシステムが上記の1または2に該当する場合は、Apacheをスタートさせる前にファイルディスクリプタの制限を大きくする。
    次のようなスクリプトを使って、


    #!/bin/sh
    ulimit -S -n 100
    exec httpd

Apacheがルートプロセス用に割り当てられたリソースを使い果たし始めるという報告があります。これは “unable to fork”のようにエラーログの中でそれ自身をエラーとして見せます。これを引き上げる方法が2つあります。:


  1. httpdのまわりのcshスクリプトラッパーで”rlimit” を 512のような大きい数にセットします。
  2. http_main.c を main()からsetrlimit()を呼出しするように修正します。rlimit構造体の間に

    struct rlimit rlp;

    rlp.rlim_cur = rlp.rlim_max = 512;
    if (setrlimit(RLIMIT_NPROC, &rlp)) {
    fprintf(stderr, “setrlimit(RLIMIT_NPROC) failed.\n”);
    exit(1);
    }


    (“Aaron Gifford <agifford@InfoWest.COM>” のパッチに感謝します。)

後者はおそらくApacheの今後のバージョンでクリアになるでしょう。


By logistech

Apache Virtual Host 訳文(かなり古いです)

Apache non-IP Virtual Hosts

See Also:
Virtual Host Support


バーチャルホストとは

“Virtual Host”とは、1つのマシン上で複数のサーバーを外見上のホスト名によって区別されたものとして管理することを言います。 たとえば、ユーザーが余分なディレクトリパスを知る必要がないwww.company1.comwww.company2.comのようなかたちでアクセスできる自社のドメインを持つために、1つのwebサーバーを複数の会社で共有することがしばしば望まれます。

Apacheはその苦境を脱して適切にバーチャルホストをサポートした最初のサーバーの1つです。
しかし、基本になるHTTP(HyperText Transport Protocol)基準が、サーバーがホスト名で指定された場合にホスト名を決定するどのような方法も許可していない以上 、Apacheのバーチャルホストサポートは各々のサーバーのために個別のIPアドレスが必要でした。この手法(依然としてうまく機能している)を使用する場合においての資料は入手可能です。

だが一方で、利用できるIPアドレス空間が小さくなってきていることやドメインの数が増え続けていることから、上記の文書に記述されているアプローチはもっともエレガントな解決策ではないし、いくつかのマシン上では実現が困難です。HTTP/1.1プロトコルはサーバーが自分自身が呼ばれる名前が何なのかを認識する方法を持っています。
Apache 1.1およびそれ以降のものは伝統的な”ホスト名ごとのIPアドレス”という方法と同様にうまくこの手法をサポートしています。

新しいバーチャルホストサポートを使う利点は事実上サーバーの数に制限がないこと、設定と使用の容易さ、ハードウェアーとソフトウェアの追加がいらないことです。 主な不都合点はユーザーのブラウザがプロトコルのこの部分をサポートしていなければならないことです。 多くのブラウザ(Netscape Navigator2.0 とそれ以降のものも含む)の最新バージョンでは対応していますが、逆に、特に古いブラウザの場合が多いのですが対応していないブラウザも多数あります。これは問題を引き起こしますが、1つの解決策を後述しています。

non-IP Virtual Hostsを使うには

新しいバーチャルホストを使用するのはきわめて簡単で、表面上は古い方法と同じように見えます。 単純にApacheファイルのコンフィグレーションファイル(たいていhttpd.confsrm.conf)の1つに次のようなコードを付け加えます。:

    <VirtualHost www.apache.org>
    ServerName www.apache.org
    DocumentRoot /usr/web/apache
    </VirtualHost>

もちろん、他の指定も<VirtualHost>のセクションに追加することができます(また追加すべきです)。この作業を行うために確認しておかなければならないことは、www.apache.orgのDNSのエントリーポイントがメインサーバーのIPアドレスと同一であるということだけです。任意に、簡単に<VirtualHost>エントリーの中にIPアドレスを使用できるでしょう。

さらに、多数のサーバーが1つ以上の名前でアクセス可能になってもよい。たとえば、Apacheのサーバーがapache.orgでもftp.apache.orgでもアクセスされるようにしてもよいし、複数のIPアドレスが同一のサーバを差すようにしてもよい。実際、apache.orgにあるすべてのアドレスがサーバーによってピックアップされるようになっています。これは<VirtualHost>セクションに置いたサーバーエイリアス(ServerAlias)の指定で可能です。たとえば:

    ServerAlias apache.org *.apache.org

注) ワイルドカードの *, ? が使用できます。

いつもはドメイン名を含まないローカルユーザーのサーバーになるときにも、同様にサーバーエイリアスを必要とするかもしれません。 たとえば、もし、ローカルユーザーが”www” または “www.physics”とタイプすることに慣れ親しんでいたら、ServerAlias www www.physics を追加する必要があるでしょう。サーバーはそれらの名前解決のためにクライアントが使用するドメインが何なのかを知ることは不可能です。
なぜならクライアントはリクエストの中にその情報を入れていませんから。

セキュリティに関する考察

Apacheはすべてのバーチャルホストが、Host:ヘッダー(すべてのIPインターフェースを通過した)経由でアクセス可能になることを許します。それらが異なったIPインターフェースを使用するために構成されている場合にでもです。
たとえば、もしwww.foo.comのための設定の中にwww.bar.comのためのバーチャルホスト項が含まれており、かつ、www.bar.comが別個のIPインターフェースであれば、このような場合non-Host:-header-supporting browsers(Host: ヘッダーをサポートしていないブラウザ)はApache 1.0以前の場合のようにそれを使えます。。もしwww.foo.comへのリクエストが作成され、そしてそのリクエストがヘッダーHost: www.bar.com を含んでいる場合には、www.bar.comからのページが送られるでしょう。

これは、もしファイアーウォールまたはルーターの内部からのようなIP-layerコントロールをもとにした特殊なサーバーへのアクセスをコントロールしている場合には、セキュリティ上心配です。仮に、上述した例のwww.bar.comprivate.foo.comと呼ばれているイントラネットサーバー の代わりだったとすると、
foo.com に使用されているルーターは内部のユーザーにprivate.foo.comだけをアクセスさせます。Host:private.foo.comヘッダーを送った場合には、明らかに、Host:ヘッダー機能は、www.foo.comにアクセスしただれかにprivate.foo.comを捕らまえることを許しています。もしIP layerで、この方針を構築するためだけにこの条件が存在するだけなら、Apacheによって使用されるすべてのセキュリティコントロール(すなわち, allow, deny from, etc.)が一貫して期待されということに注意するのは大切です。

古いブラウザとの互換性

最初に言及したように、大半のブラウザは新しいバーチャルホストが正しく機能するために必要としているデータを送りません。 これらのブラウザは、いつもサーバーのメインページへ送られるでしょう。 逃げ道(予備システム)はありますが、いささか扱いにくいです。:

www.apache.orgの例を続けるのに(注:Apacheのwebサーバーは実際この方法では機能していません)私たちは新しいServerPath指定をwww.apache.orgのバーチャルホスト内で使うでしょう、次の例のように:

    ServerPath /apache

これは何を意味するのでしょうか? これは”/apache“で始まるどんなファイルのためのリクエストでもApacheのドキュメントのなかで捜せるだろうという意味です。これはつまり、そのページがすべてのブラウザにとってhttp://www.apache.org/apache/としてアクセス可能ということです。けれども新しいブラウザはまたそれをhttp://www.apache.org/としてもアクセスできます。

この働きを作るために、あなたのメインサーバーのページ上にhttp://www.apache.org/apache/へのリンクを置き、(注意:http://www.apache.org/は使ってはいけません – これはエンドレスループを招きます)
それから、virtual hostのページの中で、完全に関連づけられたリンク(e.g. “file.html” または “../icons/image.gif“)を使うか、/apache/で始まるリンク(e.g. “http://www.apache.org/apache/file.html” or
/apache/docs/1.1/index.html“)を使うかを確定します。

これにはちょっとした訓練が必要です。しかし、これらのガイドラインを守ることはたいていの場面において全てのブラウザ(古くても新しくても)であなたのページがうまく動作するのを保証するでしょう。新しいブラウザがhttp://www.apache.org/を呼出したときには、それらは直接アパッチのページに接続されるでしょう。古いブラウザはメインサーバーからリンク上のクリックによって、http://www.apache.org/apache/へ飛び、そしてそのページにアクセスするでしょう。


By logistech

ASP.NETで外部スタイルシート(StyleSheet.css)の変更が反映されない

ASP.NETで外部スタイルシート(stylesheet.css)の変更が反映されない

●環境
VisualStudio2005 ASP.NET2.0

●現象
外部StyleSheet.cssをリンク利用している場合、
例: <link href=”StyleSheet.css” rel=”stylesheet” type=”text/css” />

StyleSheet.cssファイルを編集して、実行しても変更が反映されない。

●原因
VisualStudio2005が、スタイルシートのテンポラリファイルを見ており、そのテンポラリファイルがリアルタイムで更新されないため

●対応
<方法1>
スタイルシートのファイル名をいったん変更してコンパイルし、また戻してコンパイルする。

<方法2>
インストールドライブ:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files以下にStyleSheet.cssがあるので、それを直接編集する。

By logistech

ASP.NET2.0 自動トランザクションのトラブルシュート

ASP.NET2.0 自動トランザクションのトラブルシュート

※ローカルの開発環境ならうまくいくのに、リモートのDBサーバーだとうまくいかないetcの場合

●トランザクションは既に暗黙的または明示的に、コミットまたは中止されています。 (HRESULT からの例外: 0x8004D00E) 

上記エラーの原因として、次の2つが考えられます。

1.クライアント側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
2.ファイアウォールでMSDTCプログラムとポート135が許可されていない可能性があります。

1.クライアント側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
下記手順に従いMSDTCを有効にします。
<対策>
a.  [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。  
b.  [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに dcomcnfg.exe と入力し、[OK] をクリックします。  
c.  [コンポーネント サービス] ウィンドウで、[コンポーネント サービス]、[コンピュータ]、[マイ コンピュータ] を順に展開します。  
d.  [マイ コンピュータ] を右クリックし、[プロパティ] をクリックします。  
e.  [マイ コンピュータのプロパティ] ダイアログ ボックスの [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。  
f.  [セキュリティの構成] ダイアログ ボックスで、[ネットワーク DTC アクセス] チェック ボックスをオンにします。  
g.  このコンピュータで、リモート コンピュータからの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [受信を許可する] チェック ボックスをオンにします。  
h.  このコンピュータからリモート コンピュータでの分散トランザクションの実行を許可するには、[トランザクション マネージャ通信] の [送信を許可する] チェック ボックスをオンにします。  
i.  [トランザクション マネージャ通信] の [認証を必要としない] をクリックします。  
j.  [セキュリティの構成] ダイアログ ボックスで [OK] をクリックします。  
k.  [マイ コンピュータのプロパティ] ダイアログ ボックスで [OK] をクリックします。  


2.ファイアウォールでMSDTCプログラムとポート135が許可されていない可能性があります。
<対策>
下記手順に従いファイアウォールを設定します。

a.  [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。  
b.  [ファイル名を指定して実行] ダイアログ ボックスで、[名前] ボックスに Firewall.cpl と入力し、[OK] をクリックします。  
c.  クラシック表示のコントロール パネルでは、[Windows ファイアウォール] をダブルクリックします。  
d.  [Windows ファイアウォール] ダイアログ ボックスの [例外] タブをクリックし、[プログラムの追加] をクリックします。  
e.  [プログラムの追加] ダイアログ ボックスで、[参照] をクリックし、Msdtc.exe を見つけてダブルクリックします。このファイルは、デフォルトで :\Windows\System32 フォルダに置かれています。  
f.  [プログラムの追加] ダイアログ ボックスで [OK] をクリックします。  
g.  [Windows ファイアウォール] ダイアログ ボックスで、[プログラムおよびサービス] ボックスの一覧の [msdtc] チェック ボックスをオンにします。  
h.  [例外] タブの [ポートの追加] をクリックします。  
i.  [ポートの追加] ダイアログ ボックスで、[ポート番号] ボックスに 135 と入力し、[TCP] をクリックします。  
j.  [ポートの追加] ダイアログ ボックスで、[名前] ボックスに例外の名前を入力し、[OK] をクリックします。  
k.  [Windows ファイアウォール] ダイアログ ボックスの [プログラムおよびサービス] ボックスで、手順 j. で入力した例外の名前の横にあるチェック ボックスをオンにし、[OK] をクリックします。  


●パートナー トランザクション マネージャにより、リモート トランザクションまたはネットワーク トランザクションのサポートが無効にされました。 (HRESULT からの例外: 0x8004D025) 

DBサーバー側で、MSDTCのセキュリティ構成が受信できる状態になっていない可能性が考えられます。
上記1.に従い、MSDTCのセキュリティ設定を変更します。


●タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
DBそのものに接続できていません。下記原因等なんらかの障害が考えられます。
・DBサーバーが動作していない
・DBとの接続処理が正しくない
・ファイアウォールでDB接続が禁止されている

参考:http://support.microsoft.com/kb/839279

By logistech

ASP.NET DataGridのページングのカスタマイズ

ASP.NET DataGridのページングのカスタマイズ

●目的
DataGridは、デフォルトでページング機能を持っている。
しかし、これは、モードが、「[次へ]、[戻る]ページボタン」か、「ページ番号」のどちらかしか持っていない。
ここでは、ページ番号と[次へ]、[戻る]ボタンの両方を設置する方法を説明する。
————— こんな感じにしたい —————
                      <前へ 1 2 3 4 5 次へ>

●方法
(1) VisualStudioのデザイナーで通常の方法でページング機能を追加。
   モードは「ページ番号」にしておく。
   HTMLコードでは次のようになる。

   <PagerStyle Font-Size="Small" HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>

(2) VisualStudioのコード編集で以下のとおりプログラムを追加する。

    Private Sub DataGrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemCreated
        If (e.Item.ItemType = ListItemType.Pager) Then
            Dim pager As TableCell = e.Item.Cells(0)

            Dim btnBeforetPage As LinkButton = New LinkButton
            AddHandler btnBeforetPage.Click, AddressOf BeforetPageOnCLick
            btnBeforetPage.Text = "<前へ"
            pager.Controls.AddAt(0, btnBeforetPage)

            '体裁を整えるためスペースを空ける
            Dim lit1 As Literal = New Literal
            lit1.Text = "  "
            pager.Controls.AddAt(1, lit1)

            '体裁を整えるためスペースを空ける
            Dim numControls As Integer = pager.Controls.Count
            Dim lit2 As Literal = New Literal
            lit2.Text = "  "
            pager.Controls.AddAt(numControls, lit2)

            numControls = pager.Controls.Count
            Dim btnNextPage As LinkButton = New LinkButton
            AddHandler btnNextPage.Click, AddressOf NextPageOnCLick
            btnNextPage.Text = "次へ>"
            pager.Controls.AddAt(numControls, btnNextPage)
        End If
    End Sub

    Private Sub BeforetPageOnCLick(ByVal sender As Object, ByVal e As System.EventArgs)
        If (DataGrid1.CurrentPageIndex > 0) Then  '最初のページ以上戻らないように
            DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex - 1
            DataGrid1Bind() 'データバインド(適宜ご対応ください)
        End If
    End Sub

    Private Sub NextPageOnCLick(ByVal sender As Object, ByVal e As System.EventArgs)
        If (DataGrid1.CurrentPageIndex < DataGrid1.PageCount - 1) Then  '最後のページ以上進まないように
            DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex + 1
            DataGrid1Bind() 'データバインド(適宜ご対応ください)
        End If
    End Sub

●補足
「デリゲートとイベントを使ったコールバックと通知」
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dnguinet/htm/drguinet05292001.asp
によると、コントロールのイベントハンドラの結び付けは、VB.NETの場合はVB.NETの作法に従うべきとある。(下記参照)

    Public Sub New()
        myTimer = New Timer()
        ' we could omit WithEvents from myTimer's declaration and
        ' use the below line instead:
        '     AddHandler myTimer.Tick, AddressOf myTimer_Tick
        ' but since we have WithEvents, all we have to do is
        ' use the Handles clause when we declare the event-handling method
    End Sub

これに従うならば、
(1) [次へ]のボタンコントロールをクラスの変数としてWithEvents付で宣言する。
     Protected WithEvents btnNextPage As LinkButton = New LinkButton
(2)これによって、コードエディタの上部のドロップダウンリストにbtnNextPageがリストアップされる。
(3)上記ドロップダウンリストでbtnNextPageを選択し、右の窓でclickイベントハンドラーを選択する。
(4)イベントハンドラー関数を以下のとおり記述する。

    Private Sub btnNextPage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNextPage.Click
        If (DataGrid1.CurrentPageIndex < DataGrid1.PageCount - 1) Then
            DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex + 1
            DataGrid1Bind() 'データバインド(適宜ご対応ください)
        End If
    End Sub

とすることで同様の機能が実現可能になるが.....
しかし、なぜか(まだ原因を追究していないが)ページングボタンをグリッドの上下に配置するとうまく動作しない。

●蛇足
ページャコントロール部がDataGridの枠線内に囲まれていていや(格好悪い)という方のために

    Sub Page_Load()内で(Page_Load以外のどこでも適当な場所でよいが)
        DataGrid1.BorderStyle = BorderStyle.None    'データグリッドの外枠を消す
    
    Sub DataGrid1_ItemCreated内で
        Dim pager As TableCell = e.Item.Cells(0)
        pager.BorderStyle = BorderStyle.None        'ページャーコントロール部の外枠を消す

とすればよい。

参考資料:
http://www.atmarkit.co.jp/fdotnet/dotnettips/072modpager/modpager.html

By logistech

ASPでのOracle接続(不具合対策)

ASPでのOracle接続(不具合対策)

●環境
OS:Windows2000
HTTP Server:IIS5.0
DB:Oracle9i Release2 (Oracle9.2)

●現象
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
指定されたドライバはシステム エラー 5 (Oracle in OraHome92) のため読み込めませんでした。

●原因
Oracleのインストーラーが実行ファイルに対して適切な権限を設定できていない?

●対応
1. Oracle本体のインストールフォルダー(ORACLE_HOME)の下のora92フォルダーのプロパティを開く
2. セキュリティタグを選択し、名前:Authenticated Usersを選択
3. アクセス許可の窓で[読み取りと実行]の許可チェックをオフオンする(最初にオンになっていると思うがいったんオフにしてから再度オンにしないと再設定されない)
4. コンピュータを再起動する。

By logistech

WebアプリケーションにおけるCommandパターンの採用について

WebアプリケーションにおけるCommandパターンの採用について

代表的なフレームワークであるStrutsでは、MVCの仕組みにCommandパターンを
利用している。
Strutsのメリット、デメリットについては他の文献に譲るとして、Webアプリ開発に

おいて独自のフレームワークを自社開発する場合、Commandパターンを採用すべきか

どうかについて私見を述べる。

そもそもCommandパターンは、Commandを抽象オブジェクトとして一括管理し、例えば

Undo、Redo処理や複数Commandの一括処理等を行うのに適した仕組みをフォローする。

これは、お絵かきソフト等のローカルで動作するプログラムでは、確かに有用だが

Webアプリではどうだろうか?

WebアプリではUndo、Redoの機能はあまり一般的ではないし、処理自身も1セッション

でやりきる単発パターンの繰り返しとなる。

確かに基本ページから全てを掌握できる小規模なシステムにはCommandパターンはうまく

利用できるかもしれない。しかし、大規模かつページ遷移が複雑なWebアプリに採用すると

逆にパターンに縛られ融通が利かなくなる。また、チーム開発においても単体開発・テスト

がやりにくい環境になるように思う。

By logistech

MySQL5からMySQL4へのダウングレードの方法 for Debian Etch

MySQL5からMySQL4へのダウングレードの方法 for Debian Etch


●ダウングレードの背景
Debian Sargeをapt-get upgradeでEtchにアップグレードしたことに伴い、
MySQLのバージョンが4から5に変更なった。
その影響から(SQLの文法が変更になっている為)、ZenCartにおいて下記のエラーが発生するようになってしまった。
1054 Unknown column ‘p.products_id’ in ‘on clause’

下記URL等を参考にZenCartを修正するのも考えたが、かなりの工数であることが予想されたため断念し、結局MySQLをダウングレードすることに相成った。
http://blog.livedoor.jp/blog4taka/archives/50340118.html

●MySQLのダウングレードの手順

参考:http://mytso.net/server/debian-etch-und-mysql-41/

1.データベースのバックアップ
mysqldump -u root –password=’*****’ –opt test > /var/tmp/test.sql

2.コールドバックアップ(必須ではありません)
# /etc/init.d/mysql stop
# cd /var/lib
# tar czvf mysql5.tar.gz mysql

3.データベースを退避
# /etc/init.d/mysql stop
# cd /var/lib
# mv mysql mysql_bak

4.MySQL5を削除
# apt-get remove mysql-common
# apt-get remove libapache2-mod-php4(依存関係からこれも再インストールが必要)

5.ソースリストを編集
# vi /etc/apt/sources.list

最下行に下記行を追加し、既存のソースリストはコメントアウト
deb http://debian.mytso.net/etch/ /

6.PHPとmysql-server-4.1のインストール

apt-get update

apt-get install libapache2-mod-php4
apt-get install mysql-server-4.1 mysql-client-4.1 mysql-common-4.1 libmysqlclient14
apt-get install php4-mysql

7.データベースをリストア
mysqladmin -u root -p
mysql> select version(); ちゃんと4.1になっているかバージョンを確認
mysql> create database test;
mysql> quit

mysql -u root –password=’*****’ test < /var/tmp/test.sql 8.phpを有効にする ln -s /etc/apache2/mods-available/php4.conf /etc/apache2/mods-enabled/php4.conf ln -s /etc/apache2/mods-available/php4.load /etc/apache2/mods-enabled/php4.load 9.アパッチの再起動 /etc/init.d/apache2 restart

By logistech

Debian Etchでの初回 apt-get upgrade 時に出るメッセージ

Debian Etchでの初回 apt-get upgrade 時に出るメッセージ

ささいなことですが、ちょっと引っかかったりしますので。

●現象
てDebian Etchをインストール後初めてapt-get upgradeを事項した場合、処理中に以下のメッセージがでて止まる。

Configureing linux-image-2.6.18-5-686
・・・・・・・
・・・・・・・
I repeat: you have to reboot in order for the modules file to be created correctly. Until you reboot, it may be impossible to load some modules. Reboot as soon as this install is finished (Do not reboot right now, since you may not be able to boot back up until installation is over, but boot immediately after). I can not stress that too much. You need to reboot soon. )

●対応
「tab」キーを押し、<ok>に移動した後、「enter」を押す。
upgradeが無事完了すれば、再起動する。

1 2