2009年8月アーカイブ

昔から、暗号とか秘密とかが好きで、pgpとかhttpsとかsshとか、実際に守るものがあるかどうかは別にして、使えるようにしています。(下手の横好きなので、暗号のアルゴリズムとかはさっぱりですが)
最近、Poderosaと言うWindows用のターミナルエミュレータが会社で流行っているので、ちょっと調べてみたときに、自分がやっているssh関連の設定についてまとめておいた方が良いかと思ってエントリにしました。(結局puttyに落ち着いたんですが)

sshとは

ssh とは、secure shell の略で、昔のtelnetに替わるものです。telnet はログイン時にパスワードが平文でネットワークを流れますし、ログイン後の通信も全てそのまま流れます。(もっとも、最近のFreeBSDのtelnetはパスワードが平文では流れません) sshのメリットを挙げます。
  • 通信路が暗号化されます。
  • ログイン時に、パスワード認証だけでなく鍵を使った認証ができます。
  • ホスト間の認証があるので、DNSに攻撃を受けたりしても間違ったホストにログインすることが防げます。
  • ログインするだけでなく、リモートでのコマンド実行(昔のrshの機能)や、ファイル転送(rcp/ftpの機能)もできます。
  • ポートフォワードと言う機能を使って、暗号化されていないプログラムの通信を暗号化したり、firewallを超えることができます。

ssh のバージョン

sshのバージョンと言う場合、ssh のプロトコルのバージョンと、ssh の server/client のプログラムのバージョンを分けて考える必要があります。
ssh のプロトコルには、1 と 2 があります。(1.5とかもあった気がするけど・・・) 中身が知りたかったらRFCをあたってください。
ssh の実装にはいろいろありますが、私が使っているのはFreeBSDなので、openssh と言うプログラムになります。私のFreeBSD 7.1には 5.1 が入っています。

ssh server の設定

FreeBSD の ssh server は /usr/sbin/sshd です。関連する設定ファイルは、/etc/ssh/sshd_config と /etc/rc.conf または /etc/inetd.conf です。
まずは、/etc/ssh/sshd_config の設定。修正している箇所だけ抜き出します。(FreeBSDのデフォルトの sshd_config は、中身がみんなコメントアウトされていて、どんな設定項目があるかと、デフォルト値がどうなっているかを見ることができます。)
#Port 22
#Protocol 2,1
ListenAddress 127.0.0.1
ListenAddress 192.168.0.2
AllowGroups sshd
ChallengeResponseAuthentication no
PasswordAuthentication no
Port
sshdがListenするポートです。デフォルトから変えた方が安全と言う意見もありますが、私はデフォルトのままにしています。
Protocol
受け入れるプロトコルのバージョンを指定します。SSH Version 1 を受け入れたくない場合は、Protocol 2 と書きます。
ListenAddress
複数のネットワークインターフェイスを持っているときに、特定のアドレスのみでListenしたいときに記述します。必要なければ省略してかまいません
AllowGroups
sshでログインできるユーザを特定のUnix group に所属するメンバに限定したい場合に指定します。
ChallengeResponseAuthentication
チャレンジ・レスポンス認証を許可するかどうかを指定します。FreeBSDではPAMを使うかどうかです。インターネットからアクセスするマシンでは禁止するべきです。
PasswordAuthentication
パスワード認証を許可するかどうかを指定します。ChallengeResponseAuthenticationと合わせて禁止します。
rc.conf は、sshdを使用する場合は以下の行を追加します。
sshd_enable="YES"
私は、sshd を rc から起動するのではなく、inetd から起動しているので、rc.conf には上記の記述はありません。inetd から起動するには、inetd.conf に以下の記述をします。
ssh     stream  tcp     nowait/0/5/7    root    /usr/sbin/sshd          sshd -i -4
sshdをデーモンにしないでinetdから起動するメリットは、sshdに対する総当り攻撃やDDOSを緩和することです。参考: sshdをinetdから起動する
nowait/0/5/7 の部分でこれを制御しますが、この設定だと一つのIPアドレスから、1分間に最大5回までの接続を受け付けることを意味します。6回目以降からはinetdがはじいてくれます。最後の7は、同じホストからの同時接続を7に制限するという意味です。
他に気にするファイルとしては、/etc/ssh/ssh_host*_key にマッチするいくつかのファイルがあります。
これらのファイルは、クライアントがこのサーバを識別するための鍵ファイルになります。サーバのリプレースや、OSの再インストールなどでこれらのファイルが変わってしまうと、クライアントから「サーバが偽者!?」と疑われてしまうので、必要ならばバックアップを取っておきましょう。

ssh client の設定(openssh)

クライアントの設定で最初にやることは、鍵ペアを作成することです。
> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_dsa): ←そのままEnter
Created directory '/home/hoge/.ssh'.
Enter passphrase (empty for no passphrase): ←鍵につけるパスフレーズを入力
Enter same passphrase again: ←パスフレーズを再入力
Your identification has been saved in /home/hoge/.ssh/id_dsa.
Your public key has been saved in /home/hoge/.ssh/id_dsa.pub.
The key fingerprint is:
61:6b:20:12:fc:a8:31:95:bf:37:42:85:cf:b1:38:85 hoge@sv.wizard-limit.net
The key's randomart image is:
+--[ DSA 1024]----+
| ... o           |
|  +.E +          |
| ..+.*.oo        |
|o ..*.+o o       |
| + . o  S        |
|.   o o.         |
|     o .         |
|                 |
|                 |
+-----------------+
ssh-keygen は、特別なオプションをつけなければ ~/.ssh/ に自分用の鍵ペアを作成してくれます。最低限必要なオプションは -t だけです。-t の後には鍵のタイプを指定します。rsa1(SSH Version 1用のRSA鍵。identity/identity.pub), rsa(SSH Version 2用のRSA鍵。id_rsa/id_rsa.pub), dsa(SSH Version 2用のDSA鍵。id_dsa/id_dsa.pub)から選びます。
サーバがVersion 1しか対応していない等の特別な理由がない限りは、Version 2 用の鍵を作ります。RSA にするか DSA にするかはお好みで。
この過程で、~/.ssh ディレクトリが作成され、秘密鍵ファイルと公開鍵ファイルが作成されます。
試しに同じマシンにログインしてみます。
> cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
> ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
DSA key fingerprint is 8d:78:c0:28:ad:2e:cc:83:de:e2:7e:78:a7:34:46:39.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (DSA) to the list of known hosts.
Enter passphrase for key '/home/hoge/.ssh/id_dsa':
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 7.1-RELEASE-p7 (FALSE) #1: Sat Aug  1 14:17:46 JST 2009

Welcome to FreeBSD!
>
最初の cat は、~/.ssh/authorized_keys ファイルに、公開鍵を登録しています。
ホストAからホストBにログインするとき、ホストB の ~/.ssh/authorized_keys ファイルにある公開鍵とペアになる秘密鍵がホストA の ~/.ssh にあるときに、初めてログインが可能になります。今回は同じホストにログインするので、そのまま cat でファイルに追加(この場合は作成)しています。
はじめてのサーバにログインする場合、「こんなサーバ知らないから接続できないよ」と言うメッセージが出ます。本来はここで表示されるサーバ鍵のフィンガープリントを見て、正しいことを確認してからyesを入力します。
一度yesを入力すると、~/.ssh/known_hosts にサーバの公開鍵が登録されます。先ほどサーバの設定をしたときの /etc/ssh/ssh_host*_key に対応するものです。
サーバ側の鍵が変わったり、サーバが偽者だったりして~/.ssh/known_hostsとの間に矛盾を検出すると、ssh でログインしようとしたときにエラーが出ます。
サーバ側の鍵が変わっている場合は、~/.ssh/known_hostsから該当サーバのエントリを削除します。(単なるテキストファイルです)
これで、クライアント側の基本的な設定はおしまいです。秘密鍵のファイルと、authorized_keysは大事なファイルなので、扱いに注意します。
秘密鍵(id_dsa/id_rsa)は絶対に他人に渡ってはいけませんし、authorized_keys は他人が書き換え可能ではいけません。

ssh client の設定(putty)

サーバはFreeBSDでも、作業マシンがWindows と言うのは良くあるパターンです。
sshに対応したWindows 用のターミナルエミュレータはいろいろありますが、私のオススメはputty です。英語が苦手な人は、PuTTY ごった煮版を使うと良いでしょう。
putty を使って鍵ペアを作成するには、puttygen.exe を使います。GUIなので難しいことはないと思いますので詳しい説明は省きますが、鍵の種類を選択して生成してパスフレーズをつけて保存するだけです。
putty の秘密鍵ファイルは *.ppk で openssh のものとは形式が違います。
「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」と言うテキストボックスがありますので、その内容をコピーしてサーバの ~/.ssh/authorized_keys に追加します。
サーバにログインするには、putty.exe を使用します。
putty を起動すると設定ダイアログが開きますので、ホスト名を入れて、接続-データにユーザ名をいれ、接続-SSH-認証の「認証のためのプライベートキーファイル」にputtygen.exe で作成したppkファイルを指定します。
セッションに名前をつけて保存しておくと便利です。参考: svn+ssh on Windows

proxy経由の接続

クライアントとサーバの間に firewall があって、なんらかの proxy が提供されている場合、以下の手順で proxy 経由の接続ができます。
  1. connect.c と言うプログラムを探してきて、コンパイルします。(なんでこれopensshに標準で入っていないんだろう?)
    私の場合は、~/bin/connect に置きました。
  2. ~/.ssh/config に以下の記述を追加します。
    Host proxy経由で接続したいホスト名
    ProxyCommand $HOME/bin/connect -S proxyホスト名 %h %p
    
    proxyホストが socksサーバの場合は上記の通り -S オプション。http proxyの場合は -H オプションを使います。
putty の場合は、接続-プロキシに設定があります。

ssh agent の使用(openssh)

ここまでの設定だと、sshでログインするたびに鍵のパスフレーズを聞かれます。
一度ログインしているのに、同じパスフレーズを何度も入力するのは苦痛なので、代わりに覚えてくれるプログラムがあります。それが ssh-agent です。
最初にログインしたときに、ssh-agentを起動します。
> eval `ssh-agent`
Agent pid 74374
eval を忘れないようにします。これで、ssh-agentが起動して、環境変数SSH_AUTH_SOCK が設定されます。
次に、ssh-agent に鍵を登録します。
> ssh-add
Enter passphrase for /home/hoge/.ssh/id_dsa:
Identity added: /home/hoge/.ssh/id_dsa (/home/hoge/.ssh/id_dsa)
これで、ssh-agentに鍵が登録されました。試しに、localhost にsshしてみると、パスフレーズなしでログインできることがわかります。
ssh-agentは、最初に起動したシェルが終了すると終了します。ssh-agent -k で明示的に殺すこともできます。
X等を使用している場合は、~/.xinitrcや~/.xsession で ssh-agent を起動しておくと便利です。(知識が古くてすいません。最近のGNOMEやKDE等のデスクトップ環境だと、.xinitrcや.xsessionは使わないような気がします)

ssh agent の使用(putty)

putty の場合は、pageant.exe を使います。
pageant.exe(pagentでないので注意)をスタートアップ等に入れておくと、タスクトレイに常駐します。右クリックして「鍵の追加」を選ぶと、ssh-addと同等のことができます。ssh-addと違って、明示的に鍵ファイルを指定する必要があります。

agent forwarding

今、sshでログインしようとしているときに ssh agent が使われるかどうかと、ssh agentを使ってログインした後に再度 agent が使えるかどうかは分けて考える必要があります。
  • openssh では、以下の条件を満たすときに agent が使用されます。
    1. ssh-agent が起動している。
    2. ssh-agent にログインに必要な鍵が登録されている。
    3. 環境変数SSH_AUTH_SOCKにssh-agentと通信するのに必要なソケットのパスが設定されている
  • putty では、以下の条件を満たすときに agent が使用されます。
    1. pageant が起動している。
    2. pageant にログインに必要な鍵が登録されている。
    3. puttyのセッションの設定で、接続-SSH-認証の「Pageantを使って認証する」にチェックが入っている
ログインした後に再度agentが使えるかどうかは、ログイン後に上記条件が満たされている必要がありますが、デフォルトでは満たされていません。
これを満たすようにする機能がagent forwardingです。(X11を使用している場合は、ForwardX11および-Xオプションも調べておくと良いでしょう)
agent forwardingを有効にするには、以下の設定を行います。
  • openssh の場合は、以下のいずれかを行います。
    • sshを実行するときに、-A オプションを指定する
    • ~/.ssh/config で、ForwardAgent yes を設定する
    • /etc/ssh/ssh_config で、ForwardAgent yes を設定する
  • putty では、接続-SSH-認証の「エージェントフォワーディングを認める」にチェックします。
GNU screen を使用していると、環境変数 SSH_AUTH_SOCK の内容が古い状態になってしまって、せっかくのssh agent がうまく利用できない場合があります。
今回調べていて行き当たったのが、以下の記事です。
仙石浩明の日記: ssh-agent を screen の中から使う方法
set agent = "$HOME/tmp/ssh-agent-$USER"
if ($?SSH_AUTH_SOCK) then
	if (! -S $SSH_AUTH_SOCK) unsetenv SSH_AUTH_SOCK
endif
if ($?SSH_AUTH_SOCK) then
	if ($SSH_AUTH_SOCK =~ /tmp/*/agent.[0-9]*) then
		ln -snf "$SSH_AUTH_SOCK" $agent && setenv SSH_AUTH_SOCK $agent
	endif
else if (-S $agent) then
	setenv SSH_AUTH_SOCK $agent
else
	echo "no ssh-agent"
endif
unset agent
上記は.cshrc用の記述なんですが、とても良くできています。
  1. 環境変数SSH_AUTH_SOCKが設定されていて、対象のファイルが存在していてソケットでない場合はSSH_AUTH_SOCKを未定義にします。
  2. 環境変数SSH_AUTH_SOCKが設定されていて、/tmp/*/agent.[0-9]* だったら~/tmp/ssh-agent-$USER にシンボリックリンクを作成して、SSH_AUTH_SOCKはリンクを指すようにします。
  3. 環境変数SSH_AUTH_SOCKが設定されていなくて、~/tmp/ssh-agent-$USERにソケットが存在したらSSH_AUTH_SOCKを設定します。
  4. 全てを満たさない場合は、ssh-agentが動いていないと判断します。
screen を使っているかどうかにかかわらず、上記設定によって常に SSH_AUTH_SOCK は ~/tmp/ssh-agent-$USER か未設定のどちらかの状態になり、設定されていてssh-agentが動いていれば agent が利用できるのです。
同じマシンで同一のユーザが複数のagentを動かさない限り問題ないはずで、そんな使い方はまずしないと思います。(と、言いつつ、agent forwarding と組み合わせたら微妙かも知れない・・・→新しいソケットが増えてリンク先が変わったけど、無駄なだけで問題はないはず→と思ったけど後からできたソケットが消えるとリンク先がなくなっちゃうな。forwardを使う場合は要注意。)

control master

もう一つ私の~/.ssh/config に入っている設定。
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
これをやっておくと、同じホストと通信するときに新しいsshのコネクションを張らない。(代わりに、~/.ssh/master-%r@%h:%pへの接続が増える)
最初の方にあった inetd で接続数の制限をしている場合などに、この方法なら接続数が増えないので、リソース的にお得らしいです。
参考: OpenSSHのセッションを使い回す(OpenSSH ControlMaster) - jitsu102の日記

中学を卒業して高校に進むと、帰宅部になった。
Wizardryと出会ったのもこのころだ。
自作のワープロソフトを作った。プリンタは熱転写で、フォントも選べないものだったけれど。
コンプティークの誌上リプレイで、D&Dを知って学校でやったりした。
後は、当時はレンタルソフト屋さんがあって、武蔵小杉とか渋谷までゲームを借りに行った。
愛読書は電波新聞社のベーマガで、BASIC以外特に新しいことも学ばずに時は過ぎた。
その頃X1のFM音源ボードが発売され、日本ファルコムのYsと言うゲームが音楽が良いと評判だった。
両方手に入れた私は、期待に胸を膨らませてゲームを起動した。
確かに音は綺麗だけど、こんなもんかな~?と思ったらFM音源には対応していなかった。
当時ゲーム機としてはNECのPC-8801mkII SRが最強だった。
ファルコムはPSGの使い方も群を抜いて良かったけど、Ysのオープニングは曲自体が違った。
初めてのアルバイトで、アセンブラを買った。
トロンと言う映画が元になった、ライトサイクルと言うゲームが流行っていたので、アセンブラで作った。

3年になったとき、あまり学校に来ていなかった前の席の人が、来たと思ったら突然「久しぶりぶり」と言った。
それまでほとんど話したことがなかったし、面食らってなんと返事したか憶えていない。
とにかく彼との間に交流が生まれ、私は3年にして物理部と言う部活に所属した。
物理部と言っても、ちっとも物理はやってなくて、アマチュア無線とパソコンの部活だった。
ハムの免許を取ったのが、入部の前だったか後だったか憶えていない。
パソコンはMZ-80があった。この頃から愛読書がベーマガからOh!Xに変わった。
S-OSと言うOSがあることを知り、16進のダンプリストを入力した。アセンブラもテキストエディタもフリーのものがあり、ひたすら入力した。
今の人にはOSが雑誌に載っていて、手で入力したなんて信じられないだろうな。
当時はOSって言う概念すら一般的じゃなかった。

祖父が亡くなったとき、幾許かの遺産分与(?)があり、X68000とHDD、メモリ、Cコンパイラを買った。
HDDは、SASIと言うインターフェイスで40Mで10万くらいした。
メモリなんて、2Mで10万だ。
X68000のキャッチコピーは「パーソナルワークステーション」。
中身はMS-DOSクローンみたいなものだったけど、GNUのソフトがどんどん移植された。
gccやemacsを知ったのはこの頃だ。
フロッピーディスクはだいぶ一般的になったけど、雑誌に付くわけではないのでまだ16進ダンプは残っていた。
当時の一番の自信作はテンキーを16進キーボードに変えるチェックサム付きダンプエディタだ。
やがて満開製作所が電脳倶楽部と言うフロッピーの雑誌をだすが、それはまた別の話。

iPhoneのSIPクライアントを使いたくて、VPN周りの見直しを行った。
そもそも、pptp周りは過去に2回エントリを書いているのだけれど、現在の状況はそのときとは変わっている。
一番大きな違いは、当時はFreeBSDがpppoeクライアント&ルータ&pptpサーバだったのに対して、現在はフレッツのルータがpppoeクライアント&ルータで、FreeBSDはpptpサーバのみをやっていると言う事。
今回、動くまでにいろいろやったので、一通り書いてみるけど、どれかは不要かも知れないが組み合わせの検証をするのが面倒なのでそこまではやらない。
  • FreeBSDがルータではなくなったので、/etc/rc.conf で gateway_enable="true"をコメントアウトしてあったけれど、pptpサーバとしてIP転送が必要なので元に戻した。
  • /etc/ppp/ppp.conf で、pptpクライアントに割り当てるネットワークセグメントをLANのものとは分けた。(LANは192.168.0.0/24)
     set ifaddr 192.168.1.1 192.168.1.201-192.168.1.210 255.255.255.0
    
  • /etc/ipf.rules で、pptpが使用するtun0を通すようにした。
    pass out on tun0 all head 250
    pass in on tun0 all head 200
    
  • フレッツのルータRT-S300SEの設定で、静的ルーティングの設定と言うのがあるので、192.168.1.0/24宛のルーティングをFreeBSDのLAN側アドレス(192.168.0.2)に設定した。
後は、iPhoneのSIPクライアントでも設定があったんだけど、そちらはあまり大きな声で言いたくないのでここには書かない。

今回やっていて良くわからなかったのが、iPhoneのtracerouteの動き。3G回線と、VPNのppp0があるときに、-i オプションでppp0を指定してあげないと VPN側にtracerouteできなかった。(これのおかげで、設定はおかしくないのにうまくいっていないと思って随分設定を変えてしまった)
ルーティングテーブルは、defaultが2行あって、最初にVPN側が出てるんだけどなあ。
相方がゲーム用のデスクトップが欲しいと言うので、DELLのStudio XPS とか言うマシンを購入。
スペックは、Core i7-920(2.66GHz)、メモリ6G、ATI Radeon HD 4850、750GB SATA HDD (7200回転)、Windows Vista(R) Home Premium SP1 正規版 (日本語版) 64ビットと言った感じ。
8/2に注文して、8/14に生産完了&27日頃お届けのメール。8/15に届いて、8/16に出荷済みのメールが届いた。
さっそくセットアップして、まずはパーティションを切りなおす。Vistaは標準でパーティションの変更ができるんだけど、UIがわかりにくかったのでPartition Wizard Home Editionを使って切りなおした。(via パーティションのリサイズ・作成・コピー・変換・完全消去などが簡単にできるフリーソフト「Partition Wizard Home Edition」 - GIGAZINE)
相方の目的は、Rappelzが快適に動いてプレイ動画がストレスなく記録できること。
しかし、動かして見ると思ったほどスムーズでない。
そこで、RappelzをRAMディスクで動かして見ることにする。
有名なGavotteは64bit版では動かなかったので、Schwarze SQ: Windows 7 x64でRAM Diskを使うを参考にDataram RAMDiskを使って見た。
まずは、RAMディスクの設定で3GBを確保する。設定ではNTFSが選べないので、Unformattedを選び、Vistaの記憶域の管理からNTFSでフォーマットする。
RappelsはJ:\Gpotateにインストールしてあったので、そのままRAMDISK(R:)にコピーする。
RAMDISKの設定で、起動時と終了時にイメージファイルをセーブ/ロードできる設定があるので、K: にイメージファイルを保存するようにしてやった。
続いて、J:\GpotateをGpotate.origにリネームして、mklink.exe でシンボリックリンクを張る。(Unixのlnと順番が逆)
> mklink /D J:\Gpotate R:\Gpotate
これで、J:\Gpotateにアクセスすると、R:\Gpotateの実体にアクセスされるので、普通にRappelzを起動してやれば、RAMDISKが使われる。
だいぶ高速化したけど、まだ遅い感じがするのはクライアントの作り上の限界か。

RAMDISKを導入する前に、RappelzをインストールするDISKとプレイ動画を録画するHDDを分けたら良いのではないかと考えて、HDDの増設を検討した。
ケースを開けてみると、ミニタワーで中はすかすかな癖に、HDDの増設スペースが狭い。
Radeon 4850と2台目のHDDがぶつかるのではないかと言う感じ。ぎりぎり入りそうな気もするけど・・・。
あとは、PSPのプレイ動画も録画したくて、ビデオキャプチャについて調べてみたけど、D端子入力で、PCI Expressで、ドライバ/アプリが64bit対応のものは見つけられなかった。PCIで32bitならいくつか選択肢がありそうだったんだけど。

最後に、VistaにWindows 7への無料アップグレード権がついていたので、Dellのページ(https://win7.dell.com/default.aspx)で申し込もうとしたんだけど、お客様の PC 情報の登録で、サービスタグを入力して「認証する」ボタンを押しても、そこから先に進まなかった。FirefoxでもIEでも同じだったので、サイト側に何か問題があると思われる。(と思ってググったら、いくつか同じ症例がひっかかった。時間を置いてやってみて駄目だったら、サポートに電話するくらいしかないらしい)

大学に入ると、ソフトウェア研究会と言うサークルに入った。
私の大学にはコンピュータ系のサークルが二つあり、固くない方を選んだつもりだったのだが、間違っていた。結果としては良かったが。
同学年の女の子はすべてもう一つのサークルに入り、ソフトウェア研究会は男しかいなかった。
学校の授業ではマックに触った。プログラムはまだなし。お絵描きソフトとか、ワープロ程度。
サークルは週に一度勉強会があり、プログラムを教えて貰った。
夏になると、サークルの合宿があった。福島の温泉で一週間、ほぼ毎日プログラミング。最終日だけ遊び。夜は飲み会。
この合宿が、中学校のVTR部が潰れた時に続いて2度目の人生のターニングポイントだった。
それまで、独学でCを学ぼうとしてもなかなか取っ掛かりがなくうまくいってなかった。
しかし、合宿で教科書にK&Rを指定され、4年生の先輩からポインタについて学ぶことができた。
目の前から急に霧が晴れる感じ。
普段は4年生は顔を出さないし、合宿で教えることもかなり異例だったんだと思う。しかし、私達の代はちょっと変わった奴が多かったので...。
合宿で流行ったのが、タイピング練習ソフト。みんな暇を見つけてはそればっかりやっていた。
それまでの私は我流のタイピングだったが、このソフトのおかげでちゃんとホームポジションに手を置くブラインドタッチをマスターした。画面だけを見てコードが書けると言うのは、想像以上に大切なことだ。
一年生はメキメキ腕を上げ、みんな先輩よりも早くなった。
この合宿でもう一つの大きな出会いがあった。4年生の先輩の一人が、シルバーのユーノス・ロードスターに乗って来たのだ。
それまで、私に取って車とは、親のワンボックスだけだった。車とは移動、輸送の道具だった。
ロードスターは、そんな認識を根底から覆す車だ。でもそれはまた別のお話。

合宿から帰ると秋の学園祭に向けて準備が始まった。
サークルでは、会員が作ったソフトの展示と販売を行う。
当時タケルと言う名前のソフトの自動販売機があったのだが、それをパクった「たけお」と言う箱があった。中に人が入って売り子をするだけのものだけど、なんだかとても良いアイディアに思えた。
私が所属した1年生だけで構成されたチームは、X68000で3Dテトリスを作ることにした。
メインはCで、ワイヤーフレームの描画エンジンはアセンブラだった。
プログラムが3人、絵を書く人、音楽を作る人、シナリオを書く人、部屋を提供する人。
毎日学校が終わると開発部屋に集まった。
できあがったものは私達には大夫満足の行くものだった。これが、最初のチームでの開発経験になった。
500円の値を付けたけど、もちろん内輪にしか売れなかった。

その頃、スティーブ・ジョブズがNeXTを発表した。当時のワークステーションの値段からは信じられないほどの安さで、MACHとか先進的でとても魅力的だった。(当時の私にはほとんど意味がわからなかったんだけど、とにかくエキサイトしたんだ)

2年になると、授業でプログラムが始まった。FORTRAN。
一年の校舎にあったマックではなく、富士通のメインフレームだった。
メインフレームのOSは、それまでの知識ではまったく扱えなかった。MS-DOSとは言わなくても階層構造のファイルシステムやコマンドインタプリタなんてパソコンでも実現できていたのに、メインフレームは違った。
言語自体は難しくなかったので、授業はいつも暇であまり面白くなかった。


3年になると、研究室に所属して、週に一度ゼミと言う授業があった。
私がいた数学系の学科の中で、比較的自由にコンピュータを触らせてくれると言う噂の研究室を選んだ。
その研究室には初代NeXTとSONYのNEWSがあった。(既にNeXTは2代目が出ていた)
当時メジャーだったのはPC-9801とWindows3.1だったけど、私はUNIXにのめり込んだ。
68020とか68030のCPUに、メモリは4Mとか8Mだったけど、Xが動いた。
研究室に顔を出すのは、週に一度のゼミの時間だけで良かったんだけど、休み時間も放課後も、ずっと研究室でワークステーションに触った。
いろいろなフリーソフトをコンパイルし、メールやネットニュースを見た。
NEWSもNeXTも、あまりメジャーとは言えなかったから、フリーソフトをコンパイルするのは結構大変だった。
今みたいにLinuxでconfigure&make一発とはいかなかった。
コンパイルエラーを追いかけ、ソースを修正した。
この経験が、のちに大夫役立っていると思う。

この頃、草の根BBSと言うのが流行っていたので、私も研究室で余っていた1200bpsのモデムを貰ってちょっとやった。
テレホーダイとか入ってなかったので、ちょっとだけ。
Nifty-SERVにも入った。

そして、MOSAICが登場した。
当時はgoogleもyahooもなくて、gooの前身かもしれないNTTのページ(名前を忘れてしまった。日本のWWWページとかそんなの)だけが情報に辿り着く術だった。

4年になると、学科の各研究室にSUNが配置された。ネットワークの管理をまかされたので、学科のサブドメインでメールのやりとりができるようにした。DNSが苦手で、設定を教えてくれない上位ドメインの管理者と喧嘩したりした。
計算機センターに侵入しようとしてアカウント停止されたりもした。
4年の授業で、COBOLがあったが、これだけは習得できなかった。

2009年8月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

このアーカイブについて

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

前のアーカイブは2009年7月です。

次のアーカイブは2009年9月です。

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

Powered by Movable Type 6.1.1