2005年11月アーカイブ

Crontabを編集

| | コメント(0) | トラックバック(0)

 昨日のntpの件があるので今日はcrontabを編集。
普通は使用するユーザーでcrontab -eで編集。ちなみに現在登録されている内容を見るのはcrontab -l

# crontab -e

下記のように追加して
0 * * * * /usr/sbin/ntpdate 133.100.9.2

# crontab -l

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab installed on Tue Nov 29 21:14:30 2005)
# (Cron version -- $FreeBSD: src/usr.sbin/cron/crontab/crontab.c,v 1.22 2004/09/14 19:01:19 dds Exp $)
0 * * * * /usr/sbin/ntpdate 133.100.9.2

こんな風にファイルができます。
出来たファイルは/var/cron/tabs/rootです。rootの部分は作成したユーザーです。
これはFreeBSDの場合ですが、Redhatだと/var/spool/cron/rootという風に保存されるディレクトリが違います。

また、システムで使用するcrontabは/etc/crontabです。
とりあえず出力

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11 * * * * operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0 * * * * root newsyslog
#
# Perform daily/weekly/monthly maintenance.
1 3 * * * root periodic daily
15 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time. See adjkerntz(8) for details.
1,31 0-5 * * * root adjkerntz -a

見たかぎりlinuxと同じような構成の部分がありますね。daily,weekly,monthlyの部分がBSDではperiodicを使い、/etc/periodic/以下にdaily,weekly,monthlyのディレクトリがあってその中にスクリプトを置いています。redhat linuxの場合は/etc/の下にcron.daily, cron.weekly, cron.monthlyとディレクトリがあってその中にスクリプトが入っています。

 今気づいたのがサーバーの時計が3分遅れていること、サーバーの時計が狂っているのは致命傷なのですぐに対策します。
 運よくntpdateは入っていたのでこれを利用。

# ntpdate 133.100.9.2

 …とおもったらうまく行かない。ファイヤーウォールだな。

# vi /etc/ipf.rules
#ipf -Fa -Z -f /etc/ipf.rules

ちなみに使用しているのは123番ポートです。
あとはcrontabかな

中間報告

| | コメント(0) | トラックバック(0)

 とりあえず中間報告として、サーバースクリプトの互換性はまったく問題なし。WindowsとBSDで同じものが使えています。但し、FLASHクライアントにまだ例外処理関係のバグが残っていて修正中。
 判りやすく大雑把なリストにすると以下の通り。

◎サーバー構築(FreeBSD)…終了、すでに稼働中
◎サーバー構築(Windows)…終了。開発・デバッグ用に使用中。
○データーベース(Win)…構築完了(UNICODEでのテストはまだ)
◎データーベース(BSD)…構築完了(UNICODE問題なし)
○ログインサーバープログラム…DBの例外処理を残し完了(現在はDBエラーでプログラムが終了する)
△ゲームサーバープログラム…コマンド処理未作成
▲FLASHクライアント…ログイン・アカウント作成・チャット部分のみ、例外処理必要
×キャラクターデザイン…全く手をつけてない
×BGM/効果音…全く手をつけてない
×サービスシェルスクリプト(BSD)…全く手をつけていない

その他
×サーバープログラムのC++言語への移植…余裕無し
×DirectXクライアント…ずっと先

キャラクターデザインが手をつけてない状況なので公開はもうすこし先になりそうです。
どうもXML-Socketで例外が発生したときに多重接続をしたり、動作がロックしてしまったりするので困っている状況です。サーバー側でDBエラーの処理が中途半端なせいもあるけど…。DBの制約は大事だけど結構アプリへの仕様制約が発生するのでキツイなぁ。

 去年と違ってテーマもあり制作していながら間に合わず。流石に12/4までに見れる状態にするのは難しいのでslash up参加は見送りました。(ネットゲーに企画変えた時期が遅すぎたな…)飛び入りの方はどこに参加しようか含めて考え中。年末に開催されるイベントは今のところこんな感じかな。

slash up 01 冬の陣
http://muzo.jp/up/01/

2005年度紅白 闇鍋祭
http://flash-rw.com/

FLASH2ch - 裏紅白2005
http://2005.flash2ch.jp/

一週間も風邪でマジヤバイ…。風邪って寒いとひくんじゃなくて、過労で体力無いときにひくんですね。今回は真昼間仕事中にやられました。 orz....

 本当はサーバーの前段に設置したいのですが余裕ないのでサーバーに組み込み。なぜ前段にしないといけないのかというとDos攻撃によって回線がパンクするだけならまだしもログでパーティションがパンクしたりCPUの過負荷でデーターが破損したりと二次災害の危険があるからです。

 ファイヤーウォールの設定はカーネルの再構築かカーネルモジュールの組み込みが必要になるので慎重に作業を進めてください。(リモートで接続できなくなっても保証できませんよ)

まずは、カーネルに組み込まれているか確認

# kldstat
Id Refs Address Size Name
1 7 0xc0400000 63070c kernel
2 16 0xc0a31000 568dc acpi.ko
3 1 0xc15af000 15000 linux.ko

# kldstat -v | grep ip
106 ips/ipsd
107 pci/ips
119 miibus/ciphy
160 ppbus/plip
# kldstat -v | grep fw
91 fwohci/firewire
92 pci/fwohci
93 cardbus/fwohci
94 firewire/fwe

カーネルモジュールがあるか確認

# find / -name ipl.ko
/boot/kernel/ipl.ko

設定ファイルがあるか確認

# find /etc -name ipf.rules

いきなり有効にするとSSHが切断されるので
ipf.rulesを編集してlocalhostとSSHの経路のみ確保。
ifconfigコマンドでインターフェースを確認を忘れずに

fxp0:WAN
lo0:localhost

# プログラム本体があるかどうか
# which ipf
/sbin/ipf

# vi /etc/ipf.rules

rc.confに記述を追加
# vi /etc/rc.conf

ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipmon_enable="YES"
ipmon_flags="-D /var/log/ipf.log"


/boot/loader.confに記述を追加(最小環境では空でした)
ipl_load="YES"

モジュール組み込み
# kldload ipl

上手くいったかな?すぐに確認
# kldstat
Id Refs Address Size Name
1 8 0xc0400000 63070c kernel
2 16 0xc0a31000 568dc acpi.ko
3 1 0xc15af000 15000 linux.ko
4 1 0xc1aa0000 2a000 ipl.ko

とりあえず切断はされていない。

運命の再起動
# reboot

SSHでまったく問題なしに入れた。
ここまで楽にできると本当にファイヤーウォールが機能しているか不安だ。

PostgreSQLが起動しているのでtelnetで不正アクセスしてみる。
反応しました、全然機能していません。orz...

起動しているか確認
# /etc/rc.d/ipfilter status
ipf: IP Filter: v4.1.8 (416)
Kernel: IP Filter: v4.1.8
Running: yes
Log Flags: 0 = none set
Default: pass all, Logging: available
Active list: 0
Feature mask: 0x10f

フィルターの確認(-iはイン、-oはアウト)
# ipfstat -i
# ipfstat -o

全然フィルタリングされていませんでした。orz...
設定ファイルの修正
# vi /etc/ipf.rules

設定を反映
# ipf -Fa -Z -f /etc/ipf.rules

 必要なサービスは揃ったので最後の仕上げにセキュリティ強化を行う。
元々無駄は省いていたが残っているのが下記の項目

・不要なユーザー/グループの削除
・ログイン時のメッセージを削除
・SSHでログインできるユーザーを制限(posrgresとかでログインされないようにする)
・ファイヤーウォールでポートの制限をする

ユーザー管理は特に説明の必要はないですね。余計なユーザーアカウントがあるとクラッキングの対象にされます。BSDだとgameユーザーとかあるので消しましょう。

ログイン時に出るメッセージによってOSの種類やバージョンがバレます。すぐに編集しましょう。
対象になっているファイルは/etc/motdです。

SSHユーザーの制限は/etc/ssh/sshd_configにAllowUsersの項目を追加し
AllowUsers user1 user2のようにスペースを開けて記述します。

ファイヤーウォールは個別に紹介。

 前回makeに失敗してパッケージでいれてしまったPerlですが、PostgreSQLを入れる際にgmakeが無かったという発見もあったので再度ソースからコンパイルに挑戦することにしました。

 そういうことでパッケージのPerlを削除します。
# pkg_info
linux_base-8-8.0_6 Base set of packages needed in Linux mode (only for i386)
perl-5.8.7 Practical Extraction and Report Language

# pkg_delete perl-5.8.7

 次にPerlと必要モジュールのダウンロードをします。今回の構成はProject-mmo用のゲームサーバーとしての構築なのでDBIやDBD::Pgの他にFLASHクライアントからのデータを処理するXML::Parserが必要になります。

Perlとモジュールの配布元
http://www.perl.com/CPAN/

Configureで問答するのはイヤなのであらかじめ用意されているconfigure.gnuを利用。
# tar zxvf perl-5.8.7.tar.gz
# cd perl-5.8.7
# ./configure.gnu
# make
# make install

make時に一部errorの表示があったがお構いなし。(後々解析して影響が無いか調べないといけないな)
Perlのインストールが終わったらこれからインストールするモジュールが既に組み込まれていないか確認する。

# find `perl -e 'print "@INC"'` -name '*.pm' -print

DBIのインストール

# tar zxvf DBI-1.48.tar.gz
# cd DBI-1.48
# perl Makefile.PL
# make
# make install

DBD::Pgのインストール
# tar zxvf DBD-Pg-1.41.tar.gz
# cd DBD-Pg-1.41
# perl Makefile.PL
# make
# make install

ここまでは順調だったがXML::Parserについてはperl Makefile.PLを実行した段階でexpatが必要と警告が出て止まる。

XML::Parserインストールの前にexpatをインストール
http://sourceforge.net/projects/expat/

# tar zxvf expat-1.95.8.tar.gz
# cd expat-1.95.8
# ./configure
# make
# make install

XML::Parserのインストール

# tar zxvf XML-Parser-2.34.tar.gz
# cd XML-Parser-2.34
# perl Makefile.PL
# make
# make install

これで完了。用意したゲームサーバースクリプトも動作できました。

入手したソースアーカイブのチェック
# md5 postgresql-8.1.0.tar.gz
MD5 (postgresql-8.1.0.tar.gz) = 644b50b88cd2b93e465bb8ff30da09ed

FreeBSDの最小構成ではgmakeが入ってないのでmake時に失敗するためgmakeをインストール。

ftp://ftp.gnu.org/gnu/make/

# tar zxvf make-3.80.tar.gz
# ./configure
# make
# make install

postgresグループとユーザーを作成する。このとき出来るならばgidとuidを70にセットする。
これはアーカイブを解凍したときにchownを省略できるため。(元々postgresのuid/gidは70で定義されているみたい)※意味がわからなければ解凍後chownでpostgresにしてください。

今回はpwコマンドを初めて使ったので(というかリファレンス不足でpwコマンドの詳細が不明)uidとgidは後から編集しました。

# pw groupadd postgres
# pw useradd postgres -m -d /usr/local/pgsql -g postgres -s /bin/tcsh

## -g グループ
## -s シェル
## -d ホーム
## -m ホームが無ければ作成

パスワードを設定
# passwd postgres

uidを編集(vipwを使わなくて vi /etc/passwdでもOKです)
# vipw

gidを編集
# vi /etc/group

uid/gidが変わったのでホームディレクトリの所有者・グループを修正。
# chown -R postgres:postgres /usr/local/pgsql

解凍
# tar xzvf postgresql-8.1.0.tar.gz

postgresユーザーに切り替え( - をつけるとログインするユーザーのプロファイルを使用します)
# su - postgres

コンフィグレーション
% cd /usr/local/src/postgresql-8.1.0
% ./configure --enable-multibyte=EUC_JP --with-perl

--enable-multibyte=EUC_JP 日本語を使用するとき必要。コードセットはEUC
--with-perl Perl用Pgライブラリをコンパイル

コンパイル
% make

インストール
% make install

環境変数の設定(csh,tcshの場合)
% vi ~/.login

下記を追加

------------------------------------------------------------
# PostgreSQL
setenv PG_HOME "/usr/local/pgsql"
setenv PATH "${PATH}:${PG_HOME}/bin"
setenv PGLIB "${PG_HOME}/lib"
setenv PGDATA "${PG_HOME}/data"

if ($?MANPATH) then
setenv MANPATH "${MANPATH}:${PG_HOME}/man"
else
setenv MANPATH "/usr/man:/usr/local/man:${PG_HOME}/man"
endif

if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${PGLIB}"
else
setenv LD_LIBRARY_PATH "${PGLIB}"
endif
------------------------------------------------------------

環境変数の変更を適用(csh,tcshの場合)
source ~/.login

データディレクトリの作成
% mkdir /usr/local/pgsql/data

データの初期化
% initdb /usr/local/pgsql/data

テスト
% postmaster -D /usr/local/pgsql/data

問題なければ起動
% postmaster -i -S -D /usr/local/pgsql/data

-i TCP/IP経由で接続する場合に使用。現在多くのサーバーシステムでは必須。
-S サイレントモード(バックグランドで起動)
-D [ディレクトリ] データディレクトリを指定

最小構成以外でLinuxやBSDを入れている人は、rpmやportsのpostgresが混入していないかチェックしてください。既に起動していてポートが使えなかったり、バージョンやディレクトリ構成の差異によって予期せぬ不具合を起こします。(違う場所のinitdbやpostmasterを呼び出したりなど)

自動起動(FreeBSD)
ここからはまたrootに戻って作業

ソースに起動ファイルがあるのでコピーする
# cd /usr/local/src/postgresql-8.1.0/contrib/start-scripts
# cp freebsd /usr/local/etc/rc.d/postgres.sh

オプションやパス等が正しいか確認する。(ここでは-iを追加)
# vi /usr/local/etc/rc.d/postgres.sh

実行権を与える
# chmod 755 /usr/local/etc/rc.d/postgres.sh

これで自動起動の設定は完了です。iオプションを有効にしているので外部からの接続が制限できているかpostgresユーザーになって下記のファイルを確認します。

# su - postgres
% less /data/pg_hba.conf

------------------------------------------------------------
# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
------------------------------------------------------------

デフォルトではこのようになっておりlocalhost以外からは接続できないように設定されているようです。これだけでは安心できないので前段にファイヤーウォールを設置した方が良いと思います。

 UNIX系どっぷり生活ですが(仕事でLinux、自宅でBSD)運用上よく使う管理コマンドをメモ。

# top

起動しているプロセスの一覧とCPU、メモリーの使用率を表示。
サーバーが重いなと感じたらまずこれを使いましょう。

# ps

起動しているプロセスの一覧、-xでシステムプロセス、-auで全てのユーザーのプロセスを表示。
全プロセスを確認するときはps -auxと入力。ここではサービス等が正常な状態で起動しているかどうか等をチェックする。

# df

パーティションの使用率を表示。 -hオプションでK(キロ)・M(メガ)・G(ギガ)等単位をつけて表示してくれるので便利です。

# du

ディレクトリの使用量を表示。du -sk * とするとカレント直下のディレクトリの使用量を表示。

# netstat
TCP/IPでサービスを行っているサーバーなら必須のコマンド。-nでポート番号を数値に変換。基本はnetstat -lnで使用しています。

# ipcs
共有メモリ内の使用状況を表示。サービスをkillコマンドで強制終了させた場合にゴミが残っていることがあるのでそのときはipcrmで駆除。

ドキュメント整理

| | コメント(0)

 開発休止期間もあったせいか、仕様の整合性に問題を発見したので、一度全てのドキュメントを集めて仕様の整理と開発の進捗確認を行いました。

 UNIXメインで開発を始めるとついついドキュメントがテキストオンリーになるクセがでますね。
最終的にテキストファイルのまま整形して印刷しても問題ないものにしてしまう。

 学生の頃、情報工学担当の教授が配布する教科書・プリント・試験問題用紙・解答用紙全てがUNIXで書いたテキストファイルの印刷物だったのは異常に感じたが、少し気持ちがわかる気がしてきた。

 だって、どんな悪条件でも作成・配布できるのとコピペの二次利用がしやすいからね。

この前ダウンロードしたPerl-5.9.2は安定バージョンでないことを知り、安定版の5.8.7をダウンロードしてコンフィグ→コンパイルとしましたが途中でエラー発生。ここであまり時間を割く余裕が無いのでsysinstallからPerl-5.8.7を探してインストールしました。完敗。

出来た内容が以下の通り
server# ls /usr/local/bin
a2p perl-after-upgrade pod2man
c2ph perl5 pod2text
cpan perl5.8.7 pod2usage
dprofpp perlbug podchecker
enc2xs perlcc podselect
find2perl perldoc prove
h2ph perlivp psed
h2xs piconv pstruct
instmodsh pl2pm s2p
libnetcfg pod2html splain
perl pod2latex xsubpp

これくらいなら許せる範疇です。因みにperl5はシンボリックなんでこれをperlに名前を変えれば直ぐにPerlスクリプトを使用できます。/usr/binにもperlとperl5のシンボリックリンクがありました。
という事で、サーバーの作業は一旦休止してProject-mmoへ引継ぎます。

ps -auxとするとgettyが大量に出ていたので/etc/ttysを編集してgettyを0と1を残して全てコメントアウト、さらにシリアル接続は使わないので全てコメントアウトして再起動。
また、secureをinsecureにすると直接rootでログインできないように設定できます。

全ユーザーのプロセスを表示
# ps -aux

コンソールの設定ファイル
/etc/ttys

さらに、カーネル再構築の前に現状を把握しようとkldstat -vで読み込まれているカーネルモジュールとモジュール内の項目を表示。特にサウンド等の無駄デバイスは組み込まれていないようでした。軽量化しようにもあまりパフォーマンスに影響しないような気がしたのでこのままにします。
それも、sys内にカーネルの設定ファイルが無かったので、sysinstallでインストーラーを立ち上げソースを取得しました。但し、現在のカーネルの設定ファイルではないのでこれにファイヤーウォールを追記して再構築すると元のカーネルより巨大になってさらにノートPC特有のデバイスが組み込まれない事故を起こしそうなので途中でやめました。

使用しているカーネルモジュールの確認
# kldstat

詳細
# kldstat -v

カーネル設定ファイルの取得方法
# sysinstall
Configureを選ぶ→Distributionを選ぶ→src→sysを選択→install

カーネル設定ファイルの場所(/sys -> /usr/src/sys のシンボリックです)
/usr/src/sys/i386/conf/GENERIC
/sys/i386/conf/GENERIC

カーネルモジュールの置き場所
/boot/kernel/

昨日買ったといえ中古ノートだけあってメモリーが128MBしかない、起動したときは80MBあったのに何故かもう2MBしか余ってない。サービスなんかまだインストールすらしてないのに…。これにDB入れようなんて考えているからヤバすぎ、さらにマザーが440BXだから対応メモリー売ってなくてもっとヤバすぎ。
 サーバー用途なので、サウンドとかUSBとかいらないものが沢山組み込まれているしDB入れたら一応FWが必要になるのでカーネル再構築が必要な状態です。

 いろいろと試行錯誤しましたが、リナザウやpscpからはフツーにscpでファイル転送できるのにWinSCPだけは失敗する。OpenSSHとのバージョンも関係あるのだろうか、bash入れてもWinSCP用の設定を入れてもダメだったのでWinSCPが新バージョンに付いてきてくれないと結論をだし諦めました。まぁこうなれば日本語環境のないサーバーで徹底的にコーディングしますよ。えぇ

 まず、ココを読まれた方にお伝えしたいことがあります。
Perlはソースからインストールするメリットがわかりません。
特にカスタマイズするものではないので特にソースコンパイルに興味が無ければパッケージからインストールしてください。

今回のサーバー構築はスペック的にも厳しいものがあるので、使わないサービスは一切入れないこととパッケージインストールはせず意地ででソースコンパイルという名目もあるので、Perlもソースからコンパイルします。

Perlはhttp://www.perl.com/CPAN/src/より入手。実はWindowsからpscpを使って転送しました。

コンフィグ
./Configure

コンパイル
make

インストール
make install

これだけだと超カンタンに見えますが、実はコンフィグが対話式で沢山の質問に対してyesかnoで答えなければいけません。あまりに面倒なのでデフォルトでいいやと[Enter]連打したら…。

> cd /usr/local/bin
> ls
a2p5.9.2 h2ph5.9.2 perldoc5.9.2 pod2text5.9.2 s2p5.9.2
c2ph5.9.2 h2xs5.9.2 perlivp5.9.2 pod2usage5.9.2 splain5.9.2
corelist5.9.2 instmodsh5.9.2 piconv5.9.2 podchecker5.9.2 xsubpp5.9.2
cpan5.9.2 libnetcfg5.9.2 pl2pm5.9.2 podselect5.9.2
dprofpp5.9.2 perl5.9.2 pod2html5.9.2 prove5.9.2
enc2xs5.9.2 perlbug5.9.2 pod2latex5.9.2 psed5.9.2
find2perl5.9.2 perlcc5.9.2 pod2man5.9.2 pstruct5.9.2

ちょっとまて─────!
こんなんじゃ使いにくいだろボケ───!

という事でやり直しです。 orz....

リモートでSSHログインが出来ないから、BSDマシンがDHCPだとダメなのか?hosts.allowに書いてないとダメなのかとやってみましたが、実はローカルでやってもダメだった。そこで出たエラーが

PAM: authentication error

何ですかねこれ?

ググッてみたらこの文章。
Note: The configuration defaults for sshd(8) have been changed. SSH
protocol version 1 is no longer enabled by default. In addition,
password authentication over SSH is disabled by default if PAM is
enabled.

翻訳したらこうなる。
注意: sshd(8)のための構成デフォルトを変えました。 セキュアシェル (SSH)

プロトコルバージョン1はデフォルトでもう可能にされません。 さらに、PAMが
有効にされるなら、SSHの上のパスワード認証はデフォルトで無効にされます。

何ー!?仕様変更でパス認証が無効になっているのか?

/etc/ssh/ssh_config内において
PasswordAuthentication yes
を有効にした時点でサーバー自身からsshログインは可能になった。
さらに、/etc/ssh/sshd_configも同様に設定すると、リモートからログインが出来たーー!!

 さっきSSHログインできなかったのはWindows側のFWとやっぱりBSDはrootのリモートログインをデフォルトで許してないようだ。そういうわけでwheelグループでユーザーを作成してみる。

コマンドはadduserです。これがRed Hat Linuxだとuseraddです。

# adduser
Username: hogehoge
Fullname:
Uid (Leave empty for default):
Login group [hogehoge]: wheel
Login is wheel. Invite hogehoge into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin)[sh]: tcsh
Home directory [/home/hogehoge]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: ********
Enter password again: ********
Lock out the account after creation? [no]:
Username : hogehoge
Password : *****
Full Name :
Uid : 1001
Class :
Groups : wheel
Home : /home/hogehoge
Shell : /bin/tcsh
Locked : no
OK? (yes/no): yes

adduser: INFO: Successfully added (hogehoge) to the user database.
Add another user? (yes/no):no
Goodbye!

 やっと、後継サーバーを購入したので早速インストールします。別に新しいものでなくても良かったのですが、将来のことも考えネットワークインストールをする事に(そうなると最新のイメージファイルでないと都合悪かったりします)。

 サーバーのスペックは前回との違いを簡単に書いておきます。

項目:前回 → 今回
筐体:ATX → NOTE
CPU:Celeron 1GHz → PentiumIII 800MHz
RAM:PC133 128MB(256Mbit) → PC100 128MB(128Mbit)
HDD:30GB → 20GB
Optical:DVD-ROM → CD-ROM
UPS:無し → 内蔵バッテリー

コメント:やっぱり自宅に置くなら停電耐性があって夜でも静かなノートPCじゃないとダメですね。ATXで同じ環境性能を求めたら場所と予算ぶっ飛びます。

インストールの作業内容については続きに書きます。ある程度溜まったらTOPメニューにページを設置します。

 ほぼ速報の勢いなので詳細の情報が見つからないですが、不正アクセスにより顧客情報がネットに流出しその中にはクレジット情報も含まれていて実際に被害が発生して漏洩が発覚。
(情報元は日経新聞朝刊)

 なんか思いっきり不正アクセスと書かれていましたが、何処がどう不正アクセスなのかウェブ関連の技術者から見ると疑わしいです。

 予想としては、実装がアホすぎる順番に予想すると

1.顧客情報をドキュメントルート以下にファイル保存

 これは、設計段階でタブーな実装です。設計時には直接アクセスできないようにApacheにsuexecを適用してアクセス権を制限していても、サーバーを入れ替えた際にApacheにsuexecを適用しわすれさらに付け焼刃的な対処でアクセス権を緩めるなどで公開状態になります。またディレクトリにパスワード掛けていたが移行時に再設定を忘れたとか、indexesオプションを間違って有効にしたとか。
 まさか今時こんなミスはないと思いますが、原因がこれなら不正アクセスではないので100%流出された会社の責任ですね。

2.内部の担当者が利用するツールにセキュリティを掛けていなかった。

 以外にあるのがこれ、ページ更新等の管理ツールは利用者が特定されているせいもあってデバッグが疎かになりがちです。URLだけ非公開で実は何処からもパスワード無しでアクセス可能とかありますので注意。

3.DBへのアクセスが可能だった。

 可能性としては低くなりますが、ファイヤーウォール等で防御していない例です。
ここまで来ると内部関係者の可能性が高くなってきます。

3.CGIの欠陥を見抜かれた。

 一番最悪なのはフォーム入力したテキストをコマンドの一部やDBの検索に使用している例、これはプログラム設計上の欠陥です。いくらサーバープログラムで頑丈な設計をしていてもCGIにホールがあれば最悪事態を招きます。だってノーパスでtelnet提供しているのと同じですから。

4.人間系の問題

 サーバーもシステムも完璧なら、最後のホールは内部関係者しかいないですね。
流出情報と引き換えに金銭を要求してくる場合や壊滅的な損害を故意に起こそうとされた流出はこの系統が多い気がします。

結果はどうなのか…

今日もバタンきゅ~

| | コメント(0)

 …ごめんなさい。死ぬほど眠いです。

 最終的に予算3万円程という条件で決定しました。そこで調べた内容では次の通り

CPU PentiumIII 600~800MHz
RAM 128~256MB
HDD 20~30GB
FDD 有り
CD どうでもいい

こんなところです。

ボージョレ 2005

| | コメント(0)

 結局昨日はそのまま寝てしまった…orz
今日ボージョレが解禁という事で味を確かめてる最中です。う~ん。最近4年間でランク付けると

2003 >> 2005 = 2002 > 2004

かなー。

 ローディング画面→アカウント作成→ログインの部分を制作します。メイン画面はチャットのまま、その後にキャラクターとか動きを実装予定。

 Macromedia STUDIO8 FLASH LIVEが東京・大阪で開催されるようです。

MUZO
http://www.muzo.jp/

 ここ数ヶ月ずっと計画しているが正直予算がない…前回の反省点として五月蝿い・UPSが無い・防塵対策に失敗がある。その全てを対処したサーバーを組もうとしたら結構な見積りに…。

 ところで、そんなにコスト高になるのならと中古ノートPCで検索をかけたところ価格コムにかかったわけですが、今はかなり安くなっているんですね。PentiumIIIでも3万円で買えるなんて…。そういうわけで、今度は5年振りにノートPCにUNIX系OSを組み込むことにしました。但しノートの場合に問題になるのが最初のインストール時にどのデバイスから起動できるかどうか、要するにCD-ROMで起動できなくてFDD無かったら最悪だということ。あと最大限にチューニングしたいので全てセルフコンパイルでカーネルから構築する予定。この経過はBSDのページで2台目構築メモとして掲載予定。

 尚、ウェブシステム開発用サーバーとして開発するのでDNSとMailは最初入れない予定です。

 以前から、ネット上の画像掲示板で何ともいえない癒しを提供してくれましたが、本になっているとは初めて知りました。元々学内生協の掲示版でネット上の物は学生が面白画像として無断転載していたのが流行ったと思う、確か1年前ぐらいには流れていたかな。

 ネット上のは10種類ぐらいしか見たこと無いので、一度全部見てみたいなー。

生協の白石さん

 予定が少し変更になっていましたが本日よりエントリーが出来るようになりましたね。MUZOメールマガジン見て確認。
といいつつこちらは全然出来てなくてヤバイのでエントリーどころではないのですが…。

MUZO フラッシュエンターテイメント
http://www.muzo.jp/

 現在、仕様をまとめて設置上の問題が無いか検討中。負荷関連は実際に動かしてみるまでわからない部分がありました。それはサーバーではなくクライアント側でFPS遅延が発生した場合のラグです。
 実を言うと丁度作ろうとしたものに相似しているFLASHコンテンツを発見。それで遊んでみたらFPS不足で追い出される始末。

参考サイト(FLASH Player8が必要)
STICK ARENA (棒人間のオンラインバトルゲーム)
http://www.xgenstudios.com/play/stickarena/

 ヤバイヤバイヤバイ…。別件で脳みその空きが足りないので考える余裕ないです。

今日はお休み

| | コメント(0)

 昨日から体調が悪くてかなり参ってしまった。しっかり寝て復帰します…。

 先日まで回線の品質によってloadMovieが成功したり失敗したりしているものだと思いtraceを大量に書き込んでデバッガに掛けて見たところプログラム的には動作に問題なかった。なのに読み込みファイルが更新されない場合がある・・・。
 この問題で2日間悩んでいたが、もしかするとキャッシュ?ということでIEのキャッシュを調べたらファイルが存在。これかーと判ったもののキャッシュを無効にするってどうやるの状態。そこでググるのですが、ポピュラーな解決策はgetTime()でユニークな数値を発生させて?以降のダミー引数としてリクエストを投げるという方法。もちろんブラウザのキャッシュには大量のゴミが発生することのなるがこれは仕方ないかも。これで一段落したので、MMO開発に復帰します。

 買いましたよ!この前WPCで見つけたMOBA。購入したのは九十九電器の本館、でも探すのには困りましたね。「バッテリー」だけじゃダメだし、「携帯電話・PDA」と言ってもダメだった。結局「iPodの外部バッテリー」て聞いたら携帯プレーヤーのコーナーを教えてもらって、そこにありましたよ。でもAU用のチップは置いてなかった。でも、USB充電器自体は持っているのでMOBAにUSBソケットつければ携帯電話を充電できました。黒を購入したが、付属ケーブルは全て白だった… orz..

 また、電源アダプターは邪魔なのでUSB充電ケーブルと前に買ったUSB-100Vの変換アダプタで対応。
3200mAhの大容量型でもZaurusよりも小柄なのがニクイね。

http://www.valuewave.co.jp/moba/

 前々から楽しませてもらっているのですが、紹介してなかったのでここで紹介。

個人サイトだと思うのですが、たくさんFLASHゲームが置いてあって結構面白い。
特に「そこ、あぶない」はシステムは簡単に作ってあるそうですが名作だと思う。

別のコーナーにFLASHゲーム制作時のフレームについての検証もありました。
一部のゲームは遊んだことある方多いのでは?思いますが是非是非言ってくだされ。

http://www12.plala.or.jp/nextframe/flash.html

 引き続き過負荷なFLASHを作っていますが、やはり貧弱なネットワークを使用したりすると直ぐにフリーズします。そもそもloadMovie()自体に戻り値が無いのには驚いた。一応イベントとしてonClipEvent (data)がありますが、完全に読み込みが完了しなくてもネットワーク環境が悪いと発動するらしい。さらに対処するためにgetBytesLoaded()とgetBytesTotal()を使って同じ値になったときに読み込み完了と見なす事は可能だが、何と処理の速いPCではgetBytesTotal()が0でセットされたときに判定に持ち込む場合があり読み込み前に完了判定される場合があるという…。そういうわけでもう一段条件を入れてgetBytesTotal()が0以下の時は無視する処理を入れる必要がある。

 では、読み込み自体が失敗した時は?

サイトで調べた未確認情報ではgetBytesTotal()が-1を返す可能性があるとか…もう信用できない範疇。使ってみると便利なloadMovieですが穴だらけの関数ですね。その他気がついたことは、読み込みを開始したときに対象のオブジェクトは内容を一旦削除されてしまう事。つまり画像を連続で取り込んで擬似的に動画にしようとしてもチラツキというかブラウザの再読み込み並みの酷さで画像の切り替えを行ってしまう。う~ん何かいい方法ないかなー。

 ちょっとしたことがきっかけですが、サーバーに負荷が掛かった場合を想定したFLASHを作って見ることにしました。主にデータの取得が出来なかった場合はどのように処理を回避すべきか…。課題が多いです。

 文化の日に何をしようかと、本来ならばproject-mmoを進めないといけないのですが、来週まで時間的余裕がなくて開発は一旦休憩。別に大きなニュースも無いのですが久々ACCSのページを見ているとヤフオクに海賊版ソフトを販売して逮捕される事例が追加されていました。著作権というと話題になるのは音楽業界の方ですが、海賊版の悪質度は明らかにソフトウェアの不正コピーだと思う。

 JASRACは媒体に何でもかんでも課金しようとして、PC業界を敵に回していますが、その反面ACCSさんは地味に活動してるなーって感じ。ACCSトップでは松本零士先生の声が聞けますって、ACCS理事とは知りませんでした。内容は創作についてのお話なので広い意味での著作権に関するメッセージです。

 ソフト開発者側でもある一人としては、もっと海賊版の取り締まりを強化して欲しいところ、喪黒福造を使ったCMの頃から呼びかけが積極的になっているのは判るのですが、この問題については管理する権限持たせては良いのでは?と思います。

 私個人として特に憤りを感じるのは、商用でソフトウェアを利用している法人・個人の不正コピーですね。著作権法自身は媒体の対応は時代遅れだとしても根底にある精神にはすばらしいものがあり、それは継承して欲しいものがあるので、例えば学生がソフトの学習目的かつ非商用で作品を制作するに当たってソフトを利用する場合は、自覚は持ってもらうだけであえて咎めはしないのですが、会社等で海賊版ソフトを商用利用している輩は脱税&ブランド偽造に匹敵する犯罪だと認識して欲しいところです。

 というか、そんな会社は強制解散させろよ。と思うくらいムカツク。

ACCSに期待しているのは、営利団体に対しての監視ですね。古物・派遣ビジネス等は免許が必要な位に、ソフト開発やデジタルコンテンツの制作会社は関係省庁の許可取って営業するくらいの体制を整えていいのではと思いますね。ACCS会員会社のソフトを利用する営利団体は届出が必要で、その際に使用するソフトウェアのリストを提出し、時々ガサ入れしてもらう。無届組織と違反が見つかった組織には刑事罰。

 殆どグチになってますが、これが本音。
さてSTUDIO 8買うまでに貯金はあと2ヶ月くらいかな…。

ACCS 社団法人コンピュータソフトウェア著作権協会
http://www2.accsjp.or.jp/

 昨日は午前中ずっと取引が停止していたようです。いつかはトラブルが起きてしまうことは仕方ないのですが、原因が余りにもお粗末だったので同業界の一人として悲しいです。数年前はマネジャーの無理解が主原因のシステムトラブルが多かったと思いますが、ここ最近は現場の単純ミスによる致命的な障害が起きているような気がします。私が感じる範囲では、現在開発現場の最前線にいる世代(私を含む)は熟練技術者から訓練を受けたことの無い人が多いのかもしれませんね。まさに間違ったリストラの弊害が表面化しているような気がします。経験が少ないのもありますが、数学力(特に論理と証明)が不足したPGをみるようになったのは別の原因かな?

 今日は、プログラミング作業開始前にカキコ。
タイトルの通り、3つのシステムで連携を行うためのテストプログラムを書きます。
具体的には次の通り、
1.クライアントを使って新規アカウント作成
2.ログインを行い認証
出来たらまたカキコします。

BREWで開発

| | コメント(0) | トラックバック(0)

 突然BREWに興味をもった昨今。理由は無償ツールでC/C++であるという点。PCにくらべ極めて低スペックなPDAや携帯電話の場合、Javaとか他の中間言語やインタプリタでアプリを動かすなんて論外だと考える人なのです(Javaに関してはVM事態が中途半端な実装のOSエミュレーターのようなものなのでPCでも使う気になれない。プログラム言語としては別にキライではないけどね)。
 それに比べるとBREWはかなりいい実装をしているかもと思い、だからと言っていきなりゲームを作るわけではありませんが、通信デバッガでも作ると面白いかなと何かを企んでいます。

QUALCOMM BREWホーム
http://brew.qualcomm.com/brew/ja/

このアーカイブについて

このページには、2005年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2005年10月です。

次のアーカイブは2005年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1