2009-04-18

ソフマップのアドエス買取査定が変

iPhoneをうっかり手に入れてしまったので、それまで使ってきたアドエス(Advanced/W-ZERO3[es])は処分することにしました。
ざっくり調べてみたところ、ヤフオクで売るよりも高値になる確率が高そうだったので、ソフマップへ。
(運が良ければヤフオクのほうが高値が付くようだけど、平均落札額と比べるとソフマップのほうが良かった)

査定結果は、満額なら7,000円のところ欠品2点で6,000円。USBケーブル-300円、アプリケーションCD-700円。
確かにUSBケーブルは忘れてました。でもCDなんてもともと箱から出しゃしないし、欠品のはずがないんだけど…?

とりあえず家に帰って探してみました。
USBケーブルは、引き出しに何本も入っていて、正直なところどれがアドエスに付属していたのか分からないのですが、まあどれでも機能的には一緒ですし、それっぽいものを持って行くことに。
CDはやっぱり見つかりません。

というわけで再びソフマップに行き、箱の内容を確認。ほらCD入ってるじゃないですか。CDは元々この1枚しか同梱されていなかったはず。
ところが店の人曰く、何がいくつ同梱されていたかはソフマップとしてデータベース化されており間違いはないと。取説に「CD-ROMに収録のアプリケーションマニュアル」と書かれているのに、このCDのラベルは「Getting Started CD」とあるだけで「アプリケーションCD」とは書いてない。だから他にあったはずだと。

いやいや、だったらちょっとここ見てください、取説の同梱品一覧のところ、「CD-ROM」としか書かれていません。CDが2枚入ってるならそう書いてあるはず。
さらに、こっちの分厚い取説の…ほら、アプリケーションマニュアルについて「付属のCD-ROMに収録されている」としか書かれていない。「どのCDに」という説明がないってことは、CDは最初から1枚しかなかったはず。このCDの中身を確認してみていただけません?

ここでお店の人が奥に入っていって数分。やっとこちらの言い分が通りました。欠品無しの満額査定7,000円。
ソフマップの査定用データベースに、本来存在しない「アプリケーションCD」なるものが登録されていたようなので、お店の現場の人を責めてもしょうがないのですが、何だかなあ。
しかし、これまでソフマップでアドエスを売った人は、みんな「アプリケーションCDが欠品」と“ありもしないもの”を要求されて700円減額されてきたのでしょうか…? だとしたら気の毒な話です。

お詫びに何かサービスしてくれるかとちょっぴり期待しましたが、特に何もなし。まあ、いちゃもんつけに来たわけじゃないからいいんですが。

買取金額は、現金はなくポイントで貰うと10%増しになります。でもソフマップって滅多に利用しないからポイントで貰ってもなあ…でも10%の差は大きいし、と迷ったのですが、ビックカメラのポイントで貰うこともできると判明。(ビックカメラ店舗内にあるソフマップだけかも?)
ビックのポイントで貰っても10%増し。ビックポイントはSuica電子マネーに交換できるので、ほとんど現金みたいなものです。というわけで無事7,700ポイント受け取りました。
(なおビックポイントで受け取る場合は、中古の日でも+15%にならず+10%のままのようです)

それにしてもアドエス、7,700円ですか。買ったときは……いくらで買ったっけと思い出してみたら、「実質0円」でした。とはいえ契約してから24ヶ月経ってなかったので、月々の割引1,096円×残り9ヶ月を受けられなくなり、「実質9,864円で買った」と言えるのかもしれません。
だとすると、端末代金は15ヶ月使って、9,864-7,700=実質2,164円。1ヶ月144円でレンタルしたと考えると、激安でした。

2009-04-17

Debianでデフォルトのエディタを変更するには

vipw とか crontab -e とかでファイルを編集するとき、Debianではデフォルトがnanoというエディタになっています。
nanoは画面最下行に基本的なコマンドの一覧が表示されるので、使ったことがなくても設定ファイルを編集して保存して終了するくらいなら何とかなります。でも指がviに慣れちゃってるので、よし終了! と思ってふと気付くと終了してないうえに変なところに ZZ って書いてある…という羽目によく陥ります。(ZZ=viで「保存して終了」コマンド)

環境変数 EDITOR に vi って書いておけばいいことは知っていましたが、Debianのレベルでデフォルトのエディタを変更する方法を調べてみました。次のコマンドで、システムにインストールされているエディタのうち、どれをデフォルトにするか選べます。
# update-alternatives --config editor

2009-04-06

Debian(lenny)のネットワークインストールでハマらないために

Debian GNU/Linux 5.0(lenny)のインストールをネットワークブートで行おうとしてちょっとハマったので、メモを残しておきます。
Debianの前バージョン(etch/4.0)の場合は「DNRH-001にDebian EtchをPXEネットワークブートしてインストール」等で説明されているとおりですが、一番のハマりどころが現バージョン(lenny)で変わっているようだったので。

概要

インストーラ(ブートイメージ)が格納されているファイル「netboot.tar.gz」をWindows上で展開するときは、展開ツール(解凍ソフト)が「シンボリックリンクをどう処理するか」に注意する必要があります。
(私が常用している展開ソフトはシンボリックリンクの処理が適当だったためハマりました。もしかしたらWindows用の展開ソフトは基本的にムリかもしれません)

以下、Windowsマシンをサーバーにしてネットワークインストールを行う手順と、上記問題の解決方法です。

ネットワークインストールって何?

まずそもそも「ネットワークインストールって何?」という話から。
PCにLinuxをインストールする場合、まずはインストーラーを起動しなければいけません。
Windows用アプリケーションの場合はWindows上でインストーラーを起動しますが、Debian GNU/Linuxの場合、インストーラーはWindowsのソフトではないのでWindows上で起動することはできません。(Windowsからインストーラーを起動できるLinuxディストリビューションもあるようですが)

じゃあどうするかと言うと、ポピュラーなのは「インストーラーをCD/DVD-Rに焼いて、PC電源投入時に(HDDでなく)CD/DVDから起動する」という方法です。ただ、ノートPCの場合はCD/DVDドライブが付いていなかったりします。
そういうときのために最近は「USBメモリ/HDDにインストーラーを書き込んで、そこから起動する」という方法もよく使われます。しかし今回私がDebianを入れようとしたのは古いPCで、USBメモリからの起動に対応していませんでした。

そんな場合でも、マシンが「ネットワークブート」に対応していれば大丈夫。インストーラーをネットワーク越しにダウンロードして起動する、という離れワザがあるのです。

Debianインストーラーのネットワークブート・基礎情報


ネットワークブートによるインストールについては、次のサイトで公式の情報が得られます。
TFTP ネットブート用ファイルの準備(Debian GNU/Linux インストールガイド)
要は、ネットワーク越しにインストーラーをダウンロードするわけですから、その配信元のサーバーを用意しましょうという話です。

Trivial File Transfer Protocol (TFTP) は、 ブートイメージをクライアントに提供するために用います。理論的には、どんなサーバでも、どんなプラットフォームでも、 これらのプロトコルを実装してさえいれば利用できます。 この節では、SunOS 4.x, SunOS 5.x (Solaris), GNU/Linux での例を示します。

……というように、「どんなプラットフォームでもOK」と書かれていながらWindowsでの例が載ってなかったりするのですが、Windowsでも大丈夫です。

用意するもの


◇Debianをインストールしたいマシン(以下「クライアントPC」と呼びます)
◇インストーラーを配信するWindowsマシン(以下「サーバーPC」)
◇インターネット環境
◇サーバーソフト Tftpd32 (後でインストールしますが、とりあえずダウンロードだけしておいてください。zip版で問題ないですが、インストーラーが好きならexeのほうでもOKです)
◇Debianインストーラー(これから説明します)

ネットワークインストール用Debianインストーラーの用意


サーバーとなるPC上での作業です。
  1. Debian配布サイトから netboot.tar.gz をダウンロードします。日本に住んでいるなら例えばここ
  2. 適当なディレクトリに展開します。と言っても「日本語(マルチバイト文字)が含まれるディレクトリ」「スペースが含まれるディレクトリ」は避けたほうが無難です。C:\temp\ あたりが良いかと。
  3. さて今、ディレクトリ構成は次のようになっていると思いますが、ここからがポイント。
    ├ debian-installer (ディレクトリ)
    ├ pxelinux.0
    ├ pxelinux.cfg
    └ version.info
    
    「pxelinux.0」ファイルのサイズが0バイトになっていたり、「pxelinux.cfg」がディレクトリではなくファイルになっていたり(しかも0バイト)という場合は、下記作業を行ってください。
    1. 「debian-installer\i386\pxelinux.0」(こちらは0バイトではないはず)を、0バイトの「pxelinux.0」に上書きコピーします。
    2. 0バイトの「pxelinux.cfg」ファイルを削除して、同じ名前の(pxelinux.cfg)フォルダを作成します。
    3. 「debian-installer\i386\boot-screens\syslinux.cfg」を、先ほど作った「pxelinux.cfg」フォルダにコピーします。
    4. いまコピーしてきた「syslinux.cfg」を「default」にリネームします。(default.cfgではないので要注意)
    5. ディレクトリ構造が以下のようになったか確認します。
      ├ debian-installer (ディレクトリ)
      ├ pxelinux.0 (15KBくらいのファイル)
      ├ pxelinux.cfg (ディレクトリ)
      │ └ default (150バイトくらいのファイル)
      └ version.info
      
  4. これでDebianインストーラーの準備は完了です。
※細かい解説:
なぜ上のような作業が必要だったかというと、tarアーカイブ内にシンボリックリンクで格納されていたファイルを、Windowsの展開ソフトが正しく処理できなかったためです。XPまでのWindowsにはシンボリックリンクがなかったので(参照:Windows NT/2000/XPでシンボリックリンクが利用できるという誤解)、処理できなくても仕方ありません。Vistaだったら(シンボリックリンクに正式に対応しているらしいので)大丈夫なのかもしれませんが、環境がないので分かりません。
ちなみに、netboot.tar.gz の中はこんな風になっています。
% tar tzvf netboot.tar.gz
drwxr-xr-x root/root         0 2009-01-24 01:44 ./
drwxr-xr-x root/root         0 2009-01-24 01:44 ./debian-installer/
drwxr-xr-x root/root         0 2009-01-24 01:44 ./debian-installer/i386/
-rw-r--r-- root/root   5884850 2009-01-24 01:44 ./debian-installer/i386/initrd.gz
-rw-r--r-- root/root   1468016 2009-01-24 01:44 ./debian-installer/i386/linux
-rwxr-xr-x root/root     15820 2009-01-24 01:44 ./debian-installer/i386/pxelinux.0
drwxr-xr-x root/root         0 2009-01-24 01:44 ./debian-installer/i386/pxelinux.cfg/
lrwxrwxrwx root/root         0 2009-01-24 01:44 ./debian-installer/i386/pxelinux.cfg/default -> ../boot-screens/syslinux.cfg
drwxr-xr-x root/root         0 2009-01-24 01:44 ./debian-installer/i386/boot-screens/
-rw-r--r-- root/root       152 2009-01-24 01:44 ./debian-installer/i386/boot-screens/syslinux.cfg
(※他boot-screenns内省略)
lrwxrwxrwx root/root         0 2009-01-24 01:44 ./pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
lrwxrwxrwx root/root         0 2009-01-24 01:44 ./pxelinux.0 -> debian-installer/i386/pxelinux.0
-rw-r--r-- root/root        55 2009-01-24 01:44 ./version.info
etchの場合は debian-installer/i386/pxelinux.cfg/default は実体を持つファイルでしたが、lennyではboot-screens/syslinux.cfgへのsymlinkになっているため、etchと同じ方法では問題が解決しません。

どういうネットワーク構成にするか

さて、次はインストーラーをサーブ(提供)するサーバーの準備ですが、その前にネットワークインストールの間どういうネットワーク構成にするかを考えておきます。
というのも、サーバーPCではDHCPとTFTPという2つのサービスを提供するのですが、既存のネットワーク上でうっかりDHCPサーバーを起動してしまうと、ネットワーク上の他のマシンがインターネットに出られなくなってしまう可能性があるからです。

特に、「管理者が自分ではなく、他の人も利用しているネットワーク」(職場とか学校とか公衆無線LANとか)の場合、変なDHCPサーバを立ち上げようものならネットワーク管理者を怒らせることは間違いないので、そういう接続はLANケーブルを引っこ抜くとかしてから作業に臨みましょう。

上でもリンクしたDNRH-001にDebian EtchをPXEネットワークブートしてインストールでは既存のネットワークにうまくなじむDHCPサーバの設定方法が紹介されていてスマートです。ただし、多少DHCPの知識がないと厳しいかも。
また、ネットワークインストールを手順を説明するサイトで一番多いのは「ネットワーク内で既に動いているDHCPサーバ(たいていの場合はルータのDHCP機能)を止めましょう」というもので、これも堅実です。
が、ここでは別解として強引な方法を紹介しておきます。サーバーPCとクライアントPCを直結する別のネットワークを作ってしまうという方法です。

  1. サーバPCとクライアントPCを有線LANで直結します。「サーバーPC⇔ハブ⇔クライアントPC」がベストですが、クロスケーブルで文字どおり直結でも構いません。
    なお、「クロスケーブル」ではない普通のLANケーブル(ストレートケーブル)でPC同士を直結しても、たぶん通信できないので要注意。
  2. サーバーPC側のポート(インターフェース)に適当なプライベートIPアドレスを割り当てます。混乱を防ぐため、いつも使っているネットワークとは変えておきます。例えば家庭内LANが192.168.0.* で構成されているなら、192.168.1.1 とか。
    割り当てる手順は下記。
    1. コントロールパネル→ネットワーク接続→ローカル エリア接続→プロパティ
      (有線ポートが複数ある場合は「ローカル エリア接続 2」とかかもしれないので注意)
    2. インターネット プロトコル(TCP/IP)→プロパティ
    3. 次のIPアドレスを使う(S)→IPアドレス入力

      サブネットマスクは自動で入力されます。後は空欄のままでもOK。

この方法の場合、サーバーPCのネットワークインターフェースが有線ポート1つ(無線ゼロ)しかない場合、Debianインストーラーが起動するまではサーバーPCからインターネットにつなげなくなるので要注意です。
(Debianのインストール途中でネットワークケーブルを挿し替えるので、その後はインターネットにつながります)

Debianインストーラーをネットワーク越しに提供するtftpサーバーの用意


さて、ネットワーク構成が決まったら、次はインストーラーをサーブ(提供)するサーバーの準備です。これもサーバーPC上での作業。

  1. ダウンロードしておいた Tftpd32 をインストールします。zip版をダウンロードした場合は適当なディレクトリに展開すればOK。ただし日本語(マルチバイト文字)の含まれたディレクトリにインストールするとうまく動かないという話もあります。(スペース入りのディレクトリは大丈夫)
  2. tftpd32.exeをダブルクリックするなどして起動します。(この時点でいきなりDHCPサーバが適当な設定で起ち上がってしまいます。繰り返しですが「自分が管理者じゃないネットワーク」にはつながっていないですよね?)
  3. Windowsファイアウォールの確認画面が出たら「ブロックを解除する」を選択します。

    うっかり「ブロックする」にしちゃった人は、コントロールパネル→Windowsファイアウォール→例外から「Tftpd32」か「TFTP server」を探して「削除(D)」。
  4. Tftpd32が起動するので、ウィンドウ下部の「Settings」を押して設定画面へ。
  5. 設定します。
    • Base Directory:さっきnetboot.tar.gzを展開したディレクトリを指定。
    • Global Settings:「TFTP Server」と「DHCP Server」のみチェック。
    • DHCP Optopns:基本オフ。(別にオンでも動くけど)
    • Advanced TFTP Options:「PXE Compatibility」と「Allow '\' As virtual root」をオン。
  6. 「OK」を押すと「Tftpd32を再起動してね」と表示されるので

    ウィンドウ右上の[×]ボタンで閉じて、もう一度起動します。
  7. 再起動したら、今度は「DHCP server」タブの内容を編集します。
    • Current Directory:先ほど設定したディレクトリになっているか確認。
    • Server interface:クライアントPCと接続しているインターフェースのIPアドレスを選択。
      クロスケーブルで直結する場合は、選択肢にIPアドレスが現れませんが気にせず続行。(クライアントPCと接続してクライアントPC側が動作していないと、WindowsがIPアドレスを利用させてくれないため)
    • IP pool starting address:DHCPサーバが配布するIPアドレス範囲の先頭。ネットワーク内の既存アドレスとぶつからないように設定。よく分からなければ「サーバーIPアドレスの1つ次」で多分OK。
    • Size of pool:DHCPサーバが配布するIPアドレス数。1でもいいのだけど、何かの設定を失敗してやり直すときにIPアドレスが足らなくなっても面倒なので、適当に10くらいにしておく。
    • Boot File:「pxelinux.0」と指定。
    • WINS/DNS Server、Default router:「0.0.0.0」のままでOK。
    • Mask:「0.0.0.0」のままだとエラーになるので「255.255.255.0」に。
  8. 「Save」ボタンを押して設定を保存します。

Debianインストーラーをネットワーク越しに起動


これで準備は整いました。クライアントPCを「ネットワークブート」モードで起動します。
ネットワークブートの方法は機種によって違うので、マニュアルを見てください。キーボードの特定のキーを押しながら起動するとか、起動時に表示されるメニューから選ぶとか、BIOSで設定するとか、いろいろです。

ネットワークブートすると、まずはDHCPでIPアドレスを取得しようとするはずです。クロスケーブルで直結した場合は、「DHCPでIPアドレス取得中…」のような画面になってからしばらくすると、Tftpd32の「Server interface」欄で、クロスケーブルのサーバー側インターフェースのIPアドレスが選択できるようになりますので、すかさず選びます
IPアドレスを取得できたら、次いでTFTPでDebianインストーラーを取得・起動するはずです。

うまく行かない場合は、Tftpd32の「Log viewer」タブでログが見られますので、解決の助けにしてください。

クライアントPCでDebianのインストーラーの手順を進めていくと、ほどなくネットワークの設定に入りますので、サーバーPCとつないでいるケーブルをクライアントPCから抜きます。クライアントPCをふだん利用したいネットワークに接続しなおしてから、ネットワークの設定を続行します。
普段使いのネットワークもDHCPを利用する場合、つなぎなおした直後はDHCPでのIPアドレス取得に失敗するかもしれませんが、めげずにもう一度DHCPに挑戦するとIPアドレスを取れるかもしれません。

ここでクライアントPCをインターネットに接続できないと、Debianのインストールに必要なファイルを取って来られず、インストールが完了できません。ただし、有線でインターネットにつなぐ環境がなくても、インストーラーは無線LANを認識できるかもしれません。

後始末


最後に、サーバーPCのネットワークインターフェースの設定も元に戻します。

「IPアドレスを自動的に取得する(O)」に戻す場合、下のDNSの設定がつられて変わっちゃってるはずなので、こちらも「DNSサーバーのアドレスを自動的に取得する(B)」に戻します。

こんな感じですので、お皿かUSBメモリから起動できるんだったら、そのほうがネットワークインストールよりよっぽどかラクです。どちらにも対応していない古いサブノート/ミニノートPCをお使いの方か、ちょっと目新しいことでもしてみるかという好奇心旺盛な方向け、といったところでしょうか。