# 今回のこの記事はUbuntu8.04 with Windowsのtftpdを使ったPXEインストール方法です。
# Ubuntu8.10 with Ubuntu8.10 dhcp3+tftpdの記事は以下のURLをご覧ください。
# http://filly.dip.jp/eq/index.php?e=19

オイラのDynabook SS1600再活用のためEMOBILE契約をしたが
VineLinux4.2ではkernelおじさんが古くて
EMOBILEの接続機器(D02HW)にうまく対処できない。

Seed化するか自前kernelビルドする必要があったりで面倒なので
長年付き添ったVineLinuxに別れを告げてUbuntu化することにした。


でだ、Dynabook様は外付けCD/DVDドライブでブートするまではいいんだが
その後召喚されるLinuxのブートローダと仲が悪いらしく
折角CDからブートしたのに自分の生まれ元の外付けのCDを認識してくれない。
生んでくれた親を他人扱いするとは何事かッッ!

と憤っても仕方ないので…


Windowsマシンにtftpdを入れてFTP,DHCPサーバになってもらい、
PXEブートでチャレンジしてみた。

[拾い物]
こんなかんじのブツを拾ってくる。

1.ftp.iij.ad.jpからFTPでこのディレクトリをがっつり持ってくる。
/pub/linux/ubuntu/archive/dists/hardy/main/installer-i386/20070308ubuntu40.4/images/netboot/

別にiijじゃなくてもいいんだけどなんとなくiijよく使うので。

2.tftpdを拾う。
http://tftpd32.jounin.net/
最新版が tftpd32.326.zip のようなのでこれを取得。


[Windowsマシンと既存ルータ]
1.拾ったnetbootディレクトリをc: 直下かどこかに置いておく。
日本語ファイル名が入るとイヤな予感がするので避ける。
今回はc:netboot とダイレクトに置くか。

2.tftpdも解凍してどこか適当なところに。

3.tftpdを起動。

4.tftpdウインドウの下のSettingを押して以下の項目をいじる。
・項目 BaseDirectoryには c:netboot と入力。
・項目 Global SettingsはTFTP ServerとDHCP Serverにチェック。
・項目 Advanced TFTP OptionsにはPXE Compatibilityをチェック。
これ以外の項目はいじらないでいいと思う。
チェック中にほかの項目が変化しても気にしないでいい。
入力の際、英語ソフトなのではバックスラッシュに見えるが気にしない。

5.Settingのウインドウを閉じてtftpdの法のDHCP Serverというタブを選んで項目をいじる。
一時的にDHCPサーバになってもらうってだけなので割と適当でもいいけど
普段自宅のルータで割り振ってる設定にしておくのが無難かもね。
・項目IP pool starting addressは自宅のルータがクライアントに普段割振してるIPの一番先頭のIP。
・項目 Size of poolはIP pool starting addressから何個IPをホストを割り振るか。10とかでいいんじゃね?
・項目 Boot Fileはpxelinux.0と入力。
・項目 WINS/DNSは自分が普段使ってるDNSサーバを入力。
・項目 Default routerは普段使ってる外とつながってるルータのIPを入力。
・項目 Maskは普段使ってるネットマスクを入力。
全部設定し終えたらSaveボタンでこれらを保存。
tftpdのウインドウは閉じないで常駐しておいてもらう。

6.普段使ってるルータの設定を確認してDHCPサーバとして動いてるならそれを無効にする。
一応無効にしてもtftpdのDHCPサーバが動いてるか見ておいたほうがいいかも。

7.Dynabook様を有線LAN接続して電源ON、ネットブートを選ぶ。

8.そのままいくとubuntuインストーラが起動してくれるのであとは指示通りに動く。
言語選択やキーボード選択画面まで来れば以降tftpdが起動している必要はないので
普段使ってるルータのDHCPを有効にしてtftpdは終了してよろしい。

9.ネット上からArchiveを落としてくるときメチャクチャ待たされたりとか、
ReiserFSを選ぶとgrubが起動しなかったりとか細かいところはここに考慮しつつ
インストールを進めて終わらせる。
とりあえず安定してから次のパッケージを入れるのが得策かと思うので
OpenSSHとUbuntu desktopだけとか最小限で入れて
後からまとめてガツガツ入れるのがいいかも。
Nikon Coolpix S5を解体して液晶を取り出す方法とか。
多分S6,S7,S7c,S8あたりは
共通設計だと思うんで同じ方法で出来るかもしれん。

あ、これをマネすると
メーカー保証とか受けられなくなる可能性もあるので
覚悟のない人は絶対にマネしないでね。

1.バッテリとSDカードは外しておく。基本やね。

2.底面のネジを取る。
バッテリ蓋とは逆に一つあるネジは
三脚固定の周り3つと一見同じだけど
微妙に違うので退避しておくときに要注意だ。

3.バッテリ蓋を開けて見える小さいネジを外す。
これは小さくて行方不明になりやすいので注意。

4.左右のアルミフレームを外す。
底面からはがすと外れやすいぞ。

5.ストラップホールのない方はこんな感じになってる。
$No More Pain.-Coolpix S5 3
写真で白の部分を止めているネジ4つは他と大きさが違うかもしれんので
一応区分けした方がいいかも。
見た目でもやや黒っぽいので区別できないこともない。
特に注意すべきは一番左のネジと右の白部分ネジのすぐ左のネジ。
写真ではやや見辛いが小さい部品が一緒に挟まってて
うっかり落とすと探すのが大変。
部品の表裏を覚えておきつつ慎重に取り外そう。
また、このチビ部品をはさんでいる2つのネジと中央の1つのネジを外すと
黒色のフレームがはがれ落ちる。
小さい部品は早めに取っておいてこの衝撃に備えよう。


6.ストラップホールある方はこんな感じ。
$No More Pain.-Coolpix S5 2
5のときと同様に白の部分を止めてるネジはやや黒みがかったネジで
区別しておいた方がいいかも。
また、ストラップホールのネジのうちの片方のネジと
写真右のネジは5と同様のメチャクチャ小さい部品をはさんでいる。
表裏の向きを覚えておきつつ慎重に取り出すべし。
また、写真右のネジはその部品と一緒に黒い大きめのフレームも一緒に取り外される。
びっくりしないで慎重にこのフレームも外そう。

7.液晶のないほうの部分がチョウツガイになってるので
リボンを切らないように慎重にエイヤと剥がしてみよう。
$No More Pain.-Coolpix S5 3

今回は液晶の取り外しが目的なので余談になるが
受光部とかをいじるときはリボンをこのように外すことになるだろう。
$No More Pain.-Coolpix S5 4


8.液晶は接着テープのようなもので固定されている。
やはりリボンに気をつけて慎重に剥がしてみよう。
$No More Pain.-Coolpix S5 5

9.液晶ユニットには2つのリボンがついている。
$No More Pain.-Coolpix S5 6
写真右上の二つがそれなんだけどちょっと撮影ミスった。

右の太い方はリボンのツメを起こして取り出すタイプ、
左の方は左右の押さえをスライドさせて緩めるタイプ。
それぞれ基盤やリボンを痛めないように慎重に緩めてリボンを外そう。

10.最期に液晶を交換するなら交換して元通りにする。
注意するべきは左右のアルミフレームを戻すとき。
力ずくで戻そうとするとフレームの内側のネジに接触する部分を削ぎとってしまい
ネジがつかなくなる可能性がある。
// 文字列作成
StringBuffer sb = new StringBuffer("ぶきや ぼうぐは もってるだけじゃ やくにたたないぞ!");
sb.append( System.getProperty("line.separator") );
sb.append("ちゃんと そうびを するんだ。");

"rn"や"n"といった改行文字はプラットフォーム依存のもの。
ちゃんとそのプラットフォームに適した改行コードをつかうなら
System.getProperty("line.separator") を利用すべし。
いっつも困ってる気がするのでメモ。

$ mysql -u [USER_NAME] -p
指定ユーザ、パスワードつきでログイン

> show databases;
データベース一覧を見る。

> use [DATABASE_NAME];
利用するデータベースを選ぶ。データベース一覧を参考にするよろし。

> show tables;
選んだデータベースのテーブル一覧を見る。

> desc [TABLE_NAME];
> describe [TABLE_NAME];
> show fields from [TABLE_NAME];
> show columns from [TABLE_NAME];
テーブルのカラム(列名)を見る。
どれでも同じだと思う。

> grant all privileges on [DATABASE_NAME].* TO [USER_NAME]@localhost identified by ‘PASSWORD’ with grant option;
> grant all privileges on [DATABASE_NAME].* TO [USER_NAME]@”%” identified by ‘PASSWORD’ with grant option;
> flush privileges;
[DATABASE_NAME] へのアクセス権利を持つ [USER_NAME]という名前のユーザの追加。
一行目はlocalhostのみ、二行目はあらゆるホストからのアクセス許可。
grant all privileges on *.* TO [USER_NAME]@localhost; とかやると最強ユーザが作れる。

> grant select, insert, update, delete on [DATABASE_NAME].* to [USER_NAME]@localhost identified by 'PASSWORD';
ユーザへのアクション許可変更。
これならselect,insert,update,deleteを許可してる。

> drop user [USER_NAME];
ユーザの削除。

> set password for [USER_NAME]=password(‘PASSWORD’);
ユーザのパスワード変更。

> alter table [OLD_DATABASE_NAME] rename as [NEW_DATABASE_NAME];
テーブル名の変更。


あー、疲れたからこの辺で。