■
USBメモリの自動マウント
1.カーネルがUSBデバイスが検出すると、/proc/sys/kernel/hotplugに記述されている動作をする。
(デフォルトでは/sbin/hotplugと記述されている。/sbin/hotplugはシェルスクリプト)
2./sbin/hotplugはデバイスの種類を判別してetc/hotplug/[デバイス].agentを起動する
(USBの場合は/etc/hotplug/usb.agentを起動する)
3.usb.agentが各種USBデバイスを判別して必要な処理を行う。ただしデフォルトでは
マウスとキーボードくらいにしか対応していない。
/etc/hotplug/usb.agentもシェルスクリプト
4.usb.distmap、usb.handmap、usb.usermapからデバイスの種類を判定する。
5.必要なローダブルモジュールをロードする
(hotplug.functionのload_device)
6.デバイスに応じて/etc/hotplug/usb以下のSubsystemプログラムが実行される。
プログラムがなければ実行されない。
USBメモリの場合は/etc/hotplug/usb/usb-storageが実行される。
7.デバイスが切り離された場合には、REMOVERと呼ばれるプログラムが起動
これは、/etc/hotplug/usb以下のSubsystemプログラムで用意しておく
■
[俺メモ]
PHP+PostgreSQL
・PostgreSQLインストール
# apt-get install postgresql postgresql-server postgresql-libs postgresql-devel pgperl
でインストール。他にもインストールするよう言われるのでそれもインストール。
phpと連携させるためのパッケージも必要。
# apt-get install php5-pgsql
でインストール。
・ユーザpostgres(1)作成
# useradd postgres
$ su - postgres
/home/postgres/.bash_profile
に以下を追加。
export USERNAME BASH_ENV PATH LESSOPEN
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=/usr/lib/pgsql
export PGDATA=$POSTGRES_HOME/data
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
保存したら変更を反映。
$ source /home/postgres/.bash_profile
・PostgreSQL用ディレクトリ作成
# mkdir /usr/local/pgsql
# chown postgres.postgres /usr/local/pgsql
・データベースクラスタ作成
# su - postgres
$ initdb
・設定ファイル編集
$ cd /usr/local/pgsql/data
$ cp pg_hba.conf pg_hba.conf.org
$ vi pg_hba.conf
pg_hba.conf------
host all all 127.0.0.1 255.255.255.255 trust
-
-
-
-
- -
-
-
-
を追加(既にあれば追加しなくて良い)
・PostgreSQLサーバ起動
$ postmaster -i -D /usr/local/pgsql/data &
(rootから実行する場合は
# su - postgres -c "postmaster -i -D /usr/local/pgsql/data &"
)
・PostgreSQL用ユーザ(2)作成(どこで使うのかよく分からん)
$ createuser hex --encrypted
「データベース作成を許可するか?」にyes、
「ユーザの追加を許可するか?」にnoを選択。
(削除はdropuser
)
・データベース作成
$ createdb -W -E EUC_JP -O hex hesdb
-S
パスワードを設定。
(削除はdropdb
)
■
プロファイルの場所を無理矢理変更する
前の日記でプロファイルの場所を変更できると書いたが、実は条件があって、
作成してから一度もログオンしていないユーザのプロファイルの場所は変えられない。
以下が理由。
作成されたユーザアカウントのプロファイルの場所等の情報は、レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
の下に記録されるが、アカウントが作成された時点では記録されず、
初回ログインの時に自動的にレジストリに記録され、ユーザプロファイル用のフォルダが作られる。
レジストリに記録されてなければ当然編集できないので、編集するには一度ログインする必要がある。
ただし、絶対にログインする必要があるかというとそうではなくて、新しいユーザ用の情報を
こちらが勝手にレジストリに書き込むことは可能。
とはいえ適当に書き込んでもうまくいかない。理由はSIDという、ユーザに一意に与えられる数字のせい。
SIDはユーザを識別するための数字で、ユーザアカウントが作成される時点に付けられる。
ユーザのログオン時、Windowsは認証が成功するとそのユーザのSIDと同じ値のキーがレジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
にあるかどうか確認し、(S-1-5-21-1236...65543-1034のようなやたら長い値)あればそれを参照し、無ければ新しくキーを作成する。
そこで新しいユーザを作成した時に、新しいユーザに割り当てられるSIDを予測してレジストリに適切な値と共に
新しいユーザ用のユーザプロファイルの場所を追加してやると、新しいユーザの初回ログインの時から
こちらが指定したプロファイルの場所を使用させることができる。
(それだけのためにこんなに手間かける必要があるのか、というツッコミはさておき)
作成した新しいユーザにはどのようなSIDが割り当てられるのかというと、前回作成したユーザのSIDに1足した値。
前回作成したユーザのSIDがS-1-5-21-1236...65543-1034ならば新しいユーザには
S-1-5-21-1236...65543-1035が割り当てられる。
注意点が二つあって、
・SIDが割り当てられるのはユーザ作成時であること。(ユーザの初回ログオン時ではない)
・作成されたユーザには必ずSIDが一つ割り当てられ、たとえそのユーザを一度削除して再び同じ名前で
ユーザを作成したとしても再び同じSIDが割り当てられることはないこと。
以上の二つに注意しながら、次のような手順で新しいユーザ用にレジストリを書き換える。
1. レジストリエディタを開き、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList\
まで移動する。
2. 既にあるユーザ用のレジストリキーをエクスポートし、適当な名前で保存する。
3. エクスポート元のキーの名前を、新しいユーザに割り当てられるであろうSIDに変更する。
4. その下のSIDの値のどこかに1を足す。(どこに1を足したらいいかは忘れた。)
5. 同じくProfileImagePathの値をこちらの指定するパスに変更する。
6. 最後にエクスポートしたレジストリキーをインポートする。
これで新しいユーザでログオンし、5で指定した場所にユーザと同じ名前のフォルダができていれば成功。
■
自サーバでCGI
Webサーバの設定ファイル/etc/httpd/conf/httpd.conf
を編集する。
まず、
#AddHandler cgi-script .cgi
のコメントアウトを外す。これでWebサーバ上でCGIが使用可能になる。
安全のため、CGIが使用可能なディレクトリを制限する。
...
の後くらいに
Options Includes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
を追加。これで/home/httpd/vote
ディレクトリ以下でCGIが使用可能になる。
他のディレクトリでも使用可能にするにはOptionsでExecCGI
を指定すればよい。
31さん提供のCGIを利用するときにつまづいた所
1.FTPでCGI用ファイルを転送するときにバイナリモード転送してしまうとその後上手く動かない
VineLinuxで使えるFTPクライアントのlftp
はデフォルトがバイナリモードなので、
アスキーモードを指定しないといけない。
> get -aあるいは> mget -aのように-a
オプションをつけるとアスキーモードでの転送ができる。
2.perlのパスが違う
31さん提供のCGI用ファイルにはperlのパスが/usr/local/bin/perl
となっているが、
VineLinuxでは/usr/bin/perl
である(# which perl
で確認できる)ため、
全ての.cgiファイルの先頭に書かれているパスを
#!/usr/local/bin/perl
から
#!/usr/bin/perl
に直す必要がある。
USBメモリを使えなくする
レジストリエディタでHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\usbstorのStartの値を3から4にする
IPSecで通信
2つのマシン間でIPSecによる通信を行う。
マシンA 192.168.120.1
マシンB 192.168.120.101
・FreeS/WANをインストール
ここでRPMパッケージを(カーネルのバージョンを確認して)ダウンロード
インストールは特に問題なし
・設定
マシンAの/etc/ipsec.conf
#
config setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
#
conn %default
type=transport
right=192.168.120.1 /*rightに自分のアドレス*/
authby=secret /*事前共有鍵による認証*/
pfs=no
#
conn sample
left=192.168.120.101 /*leftに相手のアドレス*/
auto=start
マシンBの/etc/ipsec.conf
config setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
#
conn %default
type=transport
right=192.168.120.101
authby=secret
pfs=no
#
conn sample
left=192.168.120.1
auto=start
・事前共有鍵ファイルの編集
/etc/ipsec.secrets
: PSK "yokohama"
・起動
/etc/init.d/ipsec start
これ以降暗号化通信