2004/8/28

FreeBSD 5.2.1でUSBディスクを使う(FreeBSD)

はじめに

FreeBSD 5.2.1-RELEASEで動作しているマシンにUSBのフラッシュメモリやHDDを接続し、マウントしました。

条件としては以下の二つを挙げました。

  • Windowsフォーマット(FAT/FAT32)のものをマウントする
  • 日本語ファイル名も正しく表示させる

今回の設定を行うと、ひょっとしたら最近のデジカメ等(大容量記憶装置として認識するかも)もFreeBSDマシンに繋げる事ができるかもしれません。

カーネルの設定確認

GENERICカーネルをそのまま使っている人は問題ないと思いますが、一応確認しましょう。

以下の記述が/usr/src/sys/i386/conf/GENERIC(若しくは現在のconfファイル名)に含まれているか確認してください。

options         MSDOSFS         # MSDOS Filesystem

device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          usb             # USB Bus (required)
device          ugen            # Generic
device          umass           # Disks/Mass storage - Requires scbus and da

device          scbus           # SCSI bus (required)
device          da              # Direct Access (disks)

足りない行があれば追加して、カーネルを再構築してください。

# cd /usr/src
# make buildkernel KERNCONF=GENERIC
# make installkernel KERNCONF=GENERIC
# sync;sync;reboot

rc.confの設定

カーネルを再構築しただけではUSBデバイスは認識してくれません。/etc/rc.confに以下の行を追加して再起動します。

usbd_enable="YES"

OS再起動後、dmesgで起動ログを見ると、以下のような記述が見つかると思います。これがあればUSBデバイスを認識する準備が出来ました。

usb0:  on uhci0
usb0: USB revision 1.0
uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered

必要なportsのインストール

今回は日本語対応のlsコマンド「japanese/jls」をインストールします。

packageからでも、portsからでもいいのでインストールしてください。以下にはportsからのインストール方法を記します。

# cd /usr/ports/japanese/jls
# make install clean

USBデバイスの認識確認

それではFATでフォーマットされている適当なデバイスをUSBポートに差し込んでみましょう。

続いてusbdevsコマンドで認識されているか確認します。

# usbdevs
addr 1: UHCI root hub, Intel
 addr 2: Flash Disk, USB
 addr 3: USB2.0 Storage Device, Cypress Semiconductor

上の例では128MBのフラッシュメモリとUSB2.0の外付けHDDが繋がっていることが分かります。

デバイスのマウント

それではマウントしてみましょう。今回は一番目に認識されたUSB-HDDをマウントしてみます。

デバイス名は/dev/da?s1となり。?は最初に認識しているものから0が入ります。今回はport 1に刺さっているものをマウントするので/dev/da0s1となります。

始めにマウントポイントを作成します。今回は/mnt/usbdiskにします。事前にディレクトリを作成しておいてください。

以下にマウント手順を示します。

# mkdir /mnt/usbdisk
# mount_msdosfs -m 0777 -D CP932 -L ja_JP.eucJP /dev/da0s1 /mnt

無事マウントできたら、dfやmountコマンドで確認してください。

mount_msdosfsコマンドには各種オプションがありますが、標準でfatドライブのユーザはroot.wheelとなり、読み書きのパーミッションは0755となります。今回は誰でも読み書き出来るように-mオプションで0777に再設定しています。他のオプションについてはマニュアルを見て確認してください。

ファイル内容を普通にlsで見ると日本語文字化けします。正しいファイル名の一覧を見るには/usr/local/bin/jlsコマンドを使います。jlsのオプションパラメータはlsと一緒です。

おわりに

FreeBSD 5.2以降ではmount_msdosfsというコマンドになり、iconvが組み込まれているため、マウントオプションで各種文字コードに対応できるみたいです。

今回は将来無くなって行く4.x系の話でしたが、まだ現役で4.xを使用している人も多いと思われるため、参考になるのではと思います。

後日談

調子に乗って、160GBのUSB-HDDをマウントしようとしたら「mountmsdosfs(): disk too big, sorry」ってカーネルメッセージが出てマウント出来ませんでした。これはFreeBSD 4.xだから駄目なのかはよく判りません。残念だった〜。

2004/8/16

FreeBSDでJSP(Java, Web)

はじめに

FreeBSD5.2.1にネイティブなJDKをインストールし、JSPの動作を確認しました。

本エントリでは夫々必要なパッケージ毎にインストール及び設定手順を説明します。

一応動作環境としては

OS FreeBSD 5.2.1
JDK 1.4.2-05(FreeBSDネイティブ)
Apache 1.3.31-04
Tomcat 5.0.27
mod_jk 2.0.2

となります。

JDK

インストール

FreeBSDネイティブなJDKを入れるためには、先ずlinuxエミュレーションのJDKが必要です。これはJDKのビルド時にクラスファイルを構築するときに必要みたいです。

まずはportinstall linux_baseをしておきましょう。もし、linux_base8がインストールされている人は残念ですが、正しくビルドできないので、7.1ベースの「linux_base」に入れ替えてください。

本来ならば、後はportinstall jdkをするだけでよい筈なのですが、実際には必要なファイルは自分で取ってくるのが基本となります。これは、Sun Microsystemsからソースファイルを取得するときに使用許諾をとらないといけないためです。

他にもFreeBSD用のパッチについても自分で取得してくる必要があります。portinstallすると足りないファイルとその取得方法が英語ですがメッセージとして出ますのでその指定されたURLからとってくればOKです。

JDKのソースを取得するときにはユーザ登録も必要なので多少の英語力は必要でしょうが、がんばってファイルを取得してください。

以下に/usr/ports/distfilesに必要なJDK関連のファイル一覧を示します。

  • bsd-jdk14-patches-6.tar.gz
  • j2sdk-1_4_2-bin-scsl.zip
  • j2sdk-1_4_2-src-scsl.zip
  • j2sdk-1_4_2_05-linux-i586.bin

これだけ取ってくればあとはmakeが勝手にlinuxベースのJDKも含めて全部取ってきてビルドしてくれます。数時間はかかるので辛抱して待ちましょう。

動作確認

無事インストールが終わると/usr/local/jdk1.4.2配下にファイルが出来上がっているはずです。実行ファイル群は/usr/local/jdk1.4.2/binにあるので、パスを通しましょう。ついでにJDKのホーム指定も行います。

.cshrcに以下の二行を追加してください。

set path=($path /usr/local/jdk1.4.2/bin)
setenv JAVA_HOME /usr/local/jdk1.4.2

あとはログインし直すか、source .cshrcを実行すればJDKを使う環境が整いました。

それでは一応動作確認ということで、HelloWorldApp.javaというファイルを作成して、以下の内容を入力してください。

public class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("こんにちは世界");
  }
}

次にjavac HelloWorldApp.javaと打ち込んでコンパイルします。

j実行はjava HelloWorldAppです。

> java HelloWorldApp
こんにちは世界
>

うまくいきましたか?とりあえずこれでJDKのインストール確認は終了です。

TOMCAT

インストール

インストール自体はportinstall jakarta-tomcatでOKです。

サーバの起動停止はtomcat50ctlコマンドにstart|stopをつければ制御可能です。もちろん/usr/local/etc/rc.dにもapacheよりも先にサービスが起動するようにスクリプトが設定されます。

デフォルトの設定ではport:8180でHTTPリクエストを受けられるので、適当なブラウザから「http://ホスト名:8180/」にアクセスして変なネコが表示されるか確認しましょう。

設定&確認

最低限の設定をしましょう。
その設定というのは、あなたがこれから作成するjspファイルを格納する専用のディレクトリを作成して、TOMCATに認識させることです。

もちろんデフォルトで作成されるjsp-examples/等に自作ファイルを格納してもいいですけれど、それでは格好悪いですし、第一ディレクトリのアクセス権がwwwオーナで0655となっているのでファイル編集するのも面倒です。

この例では新たにユーザ用ディレクトリとして「jsp」というディレクトリを作成して、http://ホスト名:8180/jsp/???.jspでアクセス出来るように設定します。

とりあえずサービスを停止させましょう。tomcat50ctl stopです。

続いて/usr/local/jakarta-tomcat5.0/conf/server.xmlを開いて以下の太字の部分を追加します。例ではjsp/の実体は/home/hogehoge/jspとなっています。

<!-- Define the default virtual host
     Note: XML Schema validation will not work with Xerces 2.2.
 -->
<Host name="localhost" debug="0" appBase="webapps"
 unpackWARs="true" autoDeploy="true"
 xmlValidation="false" xmlNamespaceAware="false">
<Context path="/jsp" docBase="/home/hogehoge/jsp" debug="0" reloadable="true">
</Context>

挿入位置はここで本当に合っているのか分かりません。とりあえず動いたからいいかな・・・と。

もちろん/home/hogehoge/jspというディレクトリも作成してください。

終わったらtomcat50ctl startで起動です。

今は何もオリジナルなjspファイルが無いので例として一つ作ってみましょう。/home/hogehoge/jsp/hello.jspを作成し、以下のソースを打ち込んで下さい。

<%
  String str="Hello world";
%>
<html>
<head>
<title>sample</title>
</head>
<body>
<hr>
<div align="center">
<%=str%>
</div>
<hr>
</body>
</html>

あとは、ブラウザから「http://ホスト名:8180/jsp/hello.jsp」で画面にHello worldと表示されればOKです。

mod_jk

最後にapacheから任意のURL指定でtomcatに繋いでjspを実行出来るようにするために、mod_jkを入れます。あ、apacheは既にインストールされているという前提です。スミマセン。

mod_jkにはVersion 1.x系と2.x系がありますが、違いは良く分からないのでmod_jk2を入れましょう。

portinstall mod_jk2でOKです。

/usr/local/etc/apache/httpd.confにコメント入りでmod_jk2のエントリが追加されますので、コメントアウトして、更に設定ファイルの位置を指定してあげます。

以下の設定の太字部分が該当箇所です。

   :        :
LoadModule unique_id_module   libexec/apache/mod_unique_id.so
LoadModule setenvif_module    libexec/apache/mod_setenvif.so
#LoadModule php4_module        libexec/apache/libphp4.so
#LoadModule perl_module        libexec/apache/libperl.so
LoadModule jk2_module         libexec/apache/mod_jk2.so
   :        :
AddModule mod_so.c
AddModule mod_setenvif.c
#AddModule mod_php4.c
#AddModule mod_perl.c
AddModule mod_jk2.c
   :        :
<IfModule mod_jk2.c>
    JkSet  config:file  /usr/local/etc/apache/workers2.properties
</IfModule>

続いて上の設定にも書いてある/usr/local/etc/apache/workers2.propertiesを作成します。以下に例を示します。

#mod_jk2 のログ設定
[logger.file:0]
level=ERROR
file=/var/log/mod_jk2.log
#共有メモリの設定
[shm:]
disabled=1
[channel.socket:localhost:8009]
[uri:/servlets-examples/*]
[uri:/jsp-examples/*]
[uri:/jsp/*]

uri指定に[uri:/jsp/*]が入っているのに注目してください。これはhttp://ホスト名/jsp/でhttp://ホスト名:8180/jsp/にアクセスするのと同等になるように設定しています。

では、apachectl restartでapacheを再起動して、http://ホスト名/jsp/hello.jspにアクセスしてみてください。

無事先ほど作成したhello.jspの実行結果が表示されれば成功です。

おわりに

他にもPostgreSQLを使ってJDBC経由でアクセスしたりと、色々と試してみたのですが、これはJavaそのものに関連する情報なのでまた別の機会にでも発表したいと思います。

今回の内容は設定して1日程度いじった程度での内容ですので、とりあえず動くけど説明不足な部分が多々あると思います。色々知っている方、コメント頂ければ幸いです。

2004/8/ 1

Norton GhostによるHDDの入れ替え(BIBLO MG13D)

MG13Dには標準でFUJITSU MHS2060ATという60GB 4800rpmのHDDが乗っています。
これ自体はシーク音も静かで容量的にも申し分無いのですが、買ったときのままのパーティション状態であるc:50GB,d:10GBで一年以上使っていたら、主にデータの保存に利用しているDドライブが一杯になってしまいました。

PartitionMagic等を使えばパーティションのサイズ変更が行えるらしいのですが、なんだか危険な気がして、それならば今よりも容量も速度も速いHDDに入れ替えてしまえと思い立ち、TOSHIBA MK8026GAXというHDDを買ってきました。これは80GB 5400rpmですのでちょっと豪勢になります。

このエントリではUSB2.0接続の2.5インチ用HDDケースとSymantecのNorton Ghost 2003を利用してディスク内容をパーティションサイズを変更して全てコピーするときの注意点について書いてあります。

いきなり結論ですが、同容量のディスクにコピーする場合や、パーティションが複数あって個々のサイズ割合をお任せにするなら別ですが、基本的にはWindows上でNorton Ghostのクローン機能は使わない方が良いと言うことが分かりました。

本当はDドライブを10GBから20GBに増やして残りをCドライブに割り当てたかったのですが、Norton Ghostのクローンメニューでディスク丸ごとコピー指定を行うと、事前にUSB接続のコピー先ディスクを管理ツールで理想のパーティションサイズに分けてあっても勝手に適当に全てのパーティションサイズを平均的に増やしてしまい、自分の気に入ったサイズにならないことが分かりました。

また、C,D個々のパーティション指定で都合二回クローン機能でパーティションをコピーした場合は、そのディスクを内蔵のものに置き換えても起動しませんでした。XPのCDから回復モードでFIXMBRしてもそれだけでは駄目で結局失敗に終わりました。

じゃあ、どうするのかというと、Norton Ghostの「Ghostを対話的に使用する」を選びます。
このメニューを選ぶと再起動後PC-DOSが立ち上がり、DOS版のGhostが起動しますので、ここでコピー元ディスク(内蔵)とコピー先ディスク(USB)を選んで先のメニューに進みます。
すると、それぞれのパーティションのサイズ指定が行える画面が出ますので、電卓片手に希望のサイズを入力します。コピー元パーティションのサイズ以下には指定できないのでご注意を。

無事コピーが終わったら(私の場合90分くらいかかった)、Windowsを終わらせて、USBディスクを内蔵のものに入れ替えれば完了です。

特にディスクを変更した程度ではWindowsXPのアクティベーションの要求は出ませんでした。

なんだかんだで、Norton Ghostと新しいHDDを買ったので結構な出費になりましたが、余った60GBのHDDはUSB-HDDケースに入れて便利な外部記憶装置(それも結構でかい!)になるので、今回は良かったかなと思います。もちろん新しいディスクは回転数も上がったので少しは快適度が上がったと思いますし。

最後にHDBENCHで計ったディスクパフォーマンス結果を示します。

[FUJITSU MHS2060AT]
 Read   Write   RRead  RWrite  Drive
18354   17038    4686    6735  C:\100MB
[TOSHIBA MK8026GAX]
 Read   Write   RRead  RWrite  Drive
33300   32241   10935   15778  C:\100MB