お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

: カテゴリー :

FreeBSD

2007年9月13日

FreeBSDでシステムコール呼び出しをトレースする「truss」コマンド

最近のFreeBSDには、「truss」コマンド、というコマンドが付いてきている。 これで、プログラム中のシステムコール呼び出し部分をトレースすることができる。

まず FreeBSDでは procfs(5) が mountされていることが必要なので、 /etc/fstab に以下を加えて mount する。
proc    /proc   procfs  rw      0       0
マウントの方法は、
# mount -a
で、もう一度、引数なして mount コマンドを実行するか、もしくは dfコマンドで 確認できる。
# mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
procfs on /proc (procfs, local)
# df
Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
/dev/ad0s1a  18276366 2760552 14053706    16%    /
devfs               1       1        0   100%    /dev
procfs              4       4        0   100%    /proc


trussコマンドの例して、"hello" を echo する際に使われるシステムコールを追います
# truss /bin/echo hello
mmap(0x0,3952,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 671555584 (0x28072000)
munmap(0x28072000,3952)                          = 0 (0x0)
__sysctl(0xbfbfeab8,0x2,0x2806e618,0xbfbfeab4,0x0,0x0) = 0 (0x0)
mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 671555584 (0x28072000)
issetugid()                                      = 0 (0x0)
open("/etc/libmap.conf",O_RDONLY,0666)           ERR#2 'No such file or directory'
open("/var/run/ld-elf.so.hints",O_RDONLY,00)     = 3 (0x3)
read(3,"Ehnt\^A\0\0\0\M^@\0\0\0V\0\0\0\0"...,128) = 128 (0x80)
lseek(3,0x80,SEEK_SET)                           = 128 (0x80)
read(3,"/lib:/usr/lib:/usr/lib/compat:/u"...,86) = 86 (0x56)
close(3)                                         = 0 (0x0)
access("/lib/libc.so.6",0)                       = 0 (0x0)
open("/lib/libc.so.6",O_RDONLY,00)               = 3 (0x3)
fstat(3,{mode=-r--r--r-- ,inode=376834,size=929420,blksize=4096}) = 0 (0x0)
read(3,"\^?ELF\^A\^A\^A\t\0\0\0\0\0\0\0"...,4096) = 4096 (0x1000)
mmap(0x0,946176,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_NOCORE,3,0x0) = 671588352 (0x2807a000)
mprotect(0x28144000,4096,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x28144000,4096,PROT_READ|PROT_EXEC)    = 0 (0x0)
mmap(0x28145000,24576,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED,3,0xca000) = 672419840 (0x28145000)
mmap(0x2814b000,90112,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 672444416 (0x2814b000)
close(3)                                         = 0 (0x0)
sysarch(0xa,0xbfbfeb30)                          = 0 (0x0)
mmap(0x0,168,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 672534528 (0x28161000)
munmap(0x28161000,168)                           = 0 (0x0)
mmap(0x0,22784,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 672534528 (0x28161000)
munmap(0x28161000,22784)                         = 0 (0x0)
sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)
sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)
readlink("/etc/malloc.conf",0xbfbfec20,63)       ERR#2 'No such file or directory'
issetugid()                                      = 0 (0x0)
mmap(0x0,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 672534528 (0x28161000)
break(0x804b000)                                 = 0 (0x0)
break(0x804c000)                                 = 0 (0x0)
hello
writev(0x1,0x804b030,0x2)                        = 6 (0x6)
exit(0x0)
process exit, rval = 0
と、このように、簡単な echo コマンドでさえも、このように長い出力になる。

【参考リンク】

カテゴリー: FreeBSD     22:46 | コメント (0) | トラックバック (0)

2007年9月12日

プログラムがロードする共有ライブラリを表示する「 ldd 」コマンド

FreeBSDをはじめとする UNIX系の ほとんどのプログラムは、 共有ライブラリ(共有オブジェクト)を動的にリンクして動作する。 場合によっては、あるプログラムが、 どのような共有ライブラリをロードするのかを知りたい場合がある。 そのような時に、一覧で表示してくれるのが、この「 ldd 」コマンドである。

詳細は、マニュアルの 「ldd -- 依存する共有オブジェクトの一覧」 などに書いてあるので、 ここでは具体例をみてみることにする。 まずは ls コマンド。
%  which ls
/bin/ls
% ldd /bin/ls
/bin/ls:
        libutil.so.5 => /lib/libutil.so.5 (0x2807f000)
        libncurses.so.6 => /lib/libncurses.so.6 (0x2808b000)
        libc.so.6 => /lib/libc.so.6 (0x280cc000)
このように、/bin/ls コマンドは、 「libutil.so.5」、「libncurses.so.6」、「libc.so.6」の 3つの共有ライブラリをロードし、 それぞれは、/lib ディレクトリに存在していることがわかる。

また、ldd には 「 -a 」オプションというのがあり、このオプションをつけると 各ロードオブジェクトが必要とするすべてのオブジェクトの一覧を表示してくれる。 例えば、
% ldd -a /usr/local/bin/ruby
/usr/local/bin/ruby:
        libruby18.so.18 => /usr/local/lib/libruby18.so.18 (0x2807a000)
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x28138000)
        libm.so.4 => /lib/libm.so.4 (0x28150000)
        libpthread.so.2 => /lib/libpthread.so.2 (0x28166000)
        libc.so.6 => /lib/libc.so.6 (0x2818b000)
/usr/local/lib/libruby18.so.18:
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x28138000)
        libm.so.4 => /lib/libm.so.4 (0x28150000)
のように、「 libruby18.so.18 」から、 「 libcrypt.so.3 」と「 libm.so.4 」が呼ばれているのがわかる。

それから、lddコマンドは、実行ファイルだけでなく共有オブジェクトにも対応しているので、 上記の例では、共有ライブラリである「 /usr/local/lib/libruby18.so.18 」についてみてみると、
% ldd /usr/local/lib/libruby18.so.18
/usr/local/lib/libruby18.so.18:
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x28223000)
        libm.so.4 => /lib/libm.so.4 (0x2823b000)
のように表示される。

【参考リンク】

カテゴリー: FreeBSD     22:46 | コメント (0) | トラックバック (0)

2007年9月11日

FreeBSDにおけるタイムゾーンの手動設定方法

FreeBSDのハンドブック等には、 FreeBSDにおける タイムゾーンの設定には、 sysinstall を起動して行うように記述されている。 しかし、sysinstall を起動することなく手動で、 もしくは シェル・スクリプトか何かから自動的に 設定したい場合もある。 今回のブログでは、その方法について調査してみた。

この方法に関する説明は、 「 FreeBSD: Set date time and timezone 」 ページの「 FreeBSD Setup Timezone 」に見つけることができた。 ここの説明によると、「 /usr/share/zoneinfo 」ディレクトリ以下に 地域ごとに分類されている timezoneファイルがあり、 その中から、該当する地域のファイルを 「 /etc/localtime 」へコピーすることにより、 FreeBSDシステムにおけるタイムゾーンを設定できる、とある。

具体的に例を挙げながら 見てみることにする。 ここではシリコンバレー(Silicon Valley)のタイムゾーンを設定してみる。 まず、
# cd /usr/share/zoneinfo
# ls
Africa          Asia            CST6CDT         Etc             HST             MST7MDT         WET
America         Atlantic        EET             Europe          Indian          PST8PDT         posixrules
Antarctica      Australia       EST             Factory         MET             Pacific         zone.tab
Arctic          CET             EST5EDT         GMT             MST             SystemV
のように、ディレクトリ「 /usr/share/zoneinfo 」下には 地域や代表的なタイム・ゾーンのファイルが置いてある。 また、このディレクトリには、「 zone.tab 」というファイルがあるので、 このテキスト・ファイルの内容をみてみると、 細かな地域が一覧できる。

今回の例では、シリコンバレー(Silicon Valley)のタイムゾーンを設定するので 「 America 」ディレクトリへ降りてゆく。
# cd America
# ls
Adak            Bogota          Dawson_Creek    Guayaquil       Managua         New_York        Recife          Swift_Current
Anchorage       Boise           Denver          Guyana          Manaus          Nipigon         Regina          Tegucigalpa
Anguilla        Cambridge_Bay   Detroit         Halifax         Marigot         Nome            Resolute        Thule
Antigua         Campo_Grande    Dominica        Havana          Martinique      Noronha         Rio_Branco      Thunder_Bay
Araguaina       Cancun          Edmonton        Hermosillo      Mazatlan        North_Dakota    Santiago        Tijuana
Argentina       Caracas         Eirunepe        Indiana         Menominee       Panama          Santo_Domingo   Toronto
Aruba           Cayenne         El_Salvador     Inuvik          Merida          Pangnirtung     Sao_Paulo       Tortola
Asuncion        Cayman          Fortaleza       Iqaluit         Mexico_City     Paramaribo      Scoresbysund    Vancouver
Atikokan        Chicago         Glace_Bay       Jamaica         Miquelon        Phoenix         Shiprock        Whitehorse
Bahia           Chihuahua       Godthab         Juneau          Moncton         Port-au-Prince  St_Barthelemy   Winnipeg
Barbados        Costa_Rica      Goose_Bay       Kentucky        Monterrey       Port_of_Spain   St_Johns        Yakutat
Belem           Cuiaba          Grand_Turk      La_Paz          Montevideo      Porto_Velho     St_Kitts        Yellowknife
Belize          Curacao         Grenada         Lima            Montreal        Puerto_Rico     St_Lucia
Blanc-Sablon    Danmarkshavn    Guadeloupe      Los_Angeles     Montserrat      Rainy_River     St_Thomas
Boa_Vista       Dawson          Guatemala       Maceio          Nassau          Rankin_Inlet    St_Vincent
のように、アメリカの都市名がついたファイルが たくさん置いてある。 残念ながら、この中に、シリコンバレー(Silicon Valley) とか サンノゼ(San Jose) とか サンフランシスコ(San Francisco) と いった都市名がないので、シリコンバレーと同じタイムゾーンの ロス・アンゼルスのファイル「 Los_Angeles 」を採用することにする。

ファイルがみつかったら、あとは、このファイルを 「 /etc/localtime 」へコピーするだけだ。
# cp /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
新しいタイム・ゾーンが有効になるためには システムの再起動等は不要である。 確認のために
# date
Wed Sep 10 17:55:11 PDT 2008
のように「 Pacific Daylight Time」を表す「 PDT 」と表示されている。

同様に、もしタイムゾーンを日本標準時にする場合には、
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
とすればよいことになる。

ちなみに、「 /usr/share/zoneinfo 」ディレクトリにあった「 PST8PDT 」ファイルをコピーしても シリコンバレーのタイム・ゾーンである太平洋標準時になるようである。

【参考リンク】

カテゴリー: FreeBSD     22:08 | コメント (0) | トラックバック (0)

2007年9月10日

FreeBSDの tarコマンドによる 「tar.gz」ファイルの 作り方 と 解凍方法

FreeBSDをはじめとするUNIX系のシステムで ソースファイル等が配布される場合は必ず、 「 XXXX.tar.gz 」というファイルの拡張子になっている。 この 「 .tar.gz 」形式のファイルの 作成方法 と その展開方法について まとめておく。

これらのファイル操作は、最近の FreeBSD であれば、 「 tar 」 コマンドで行うことができる。 tarコマンドにも 例のごとくたくさんのオプションが存在するが、 これらのオプションには 大きく2通りがあり、 「モードオプション」と「その他のオプション」である。

まず 主な「モードオプション」は3つで、
  • c 新たにアーカイブを作成する
  • t 標準出力にアーカイブ内容のリストを出力する
  • x アーカイブからディスクに展開する
と言ったところ。 ちなみに上記のように、いくつかのファイルを1つにまとめること、もしくは まとめたもを表すのに「アーカイブする」とか「アーカイブ」という言葉を使う。 また、そのような操作をするソフトウェアのことを「アーカイバー」ということもある。

それから tarコマンドのたくさんある その他のオプションの中で 重要なの(私が使うことがあるの)は、
  • f 指定されたファイルに対してアーカイブを読んだり書いたりする
  • v 詳しい出力を表示する
  • z 作成するアーカイブを gzip で圧縮する
と言ったところ。

では実際の例として、「test」というディレクトリの下 全体を 「 test.tar.gz 」というファイルにまとめる場合は、
% tar czf test.tar.gz test
とする。 この際の拡張子は、「 .tar.gz 」である必要はなく、 何でもよいし、もしくは極端に言うと 何もつけなくてもよいのだが、 通常慣例として、 tar でアーカイブして、かつ gzip 圧縮したファイルには 「 .tar.gz 」と付けることになっている。 こうしておいた方が 自分が間違えなくてすむ。

既にアーカイブされているアーカイブ・ファイル「 test.tar.gz 」の内容を確認するには
% tar tvf test.tar.gz


アーカイブ・ファイル「 test.tar.gz 」を展開するには、
% tar xf test.tar.gz
とすればよい。

ここでの注意点として、 アーカイブ・ファイルを作成( c オプション )する際に gzip 圧縮するには、 必ず「 z 」オプションをつけなければならいが、 少なくともFreeBSDに関しては、 自動的に gzip 圧縮されていることを認識するので、 内容を確認( t オプション )したり、 展開( x オプション )したりする場合には、 「 z 」オプションを つける必要がない。

【参考リンク】

カテゴリー: FreeBSD     22:48 | コメント (0) | トラックバック (0)

2007年6月 9日

Apache 2.2.x : [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

FreeBSD上で Apache 2.2.x を起動させると
[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter
のようにWarningが出る場合がある. このWarningの意味は何なのか? どのように対応したらよいのか?

いろいろググってたら、原因は accf_http.koというカーネルモジュールがないためのようだ。 よってその解決策としては、
# kldload accf_http.ko
を行って、accf_http.ko カーネル・モジュールをロードしてから アパッチを再起動するとよいらしい。実際に試してみると確かに上記のエラーが出なくなった。 ちなみに 「kldload」 とは カーネルリンカを用いて XXXX.ko をカーネルにロードするコマンド。

また、現在のカーネルモジュールを確認するには、動的カーネルリンカの状態を表示するコマンド 「kldstat」 を用いて
# kldstat
Id Refs Address    Size     Name
 1    8 0xc0400000 7a05b0   kernel
 2    1 0xc0ba1000 5c304    acpi.ko
 3    1 0xc2447000 19000    linux.ko
 4    1 0xc2843000 2000     accf_http.ko
のようにするとよい。

ただし、このままでは アパッチを起動する際に、毎回 kldload コマンドを手入力しなければならなくなる。 この事態を避けるためには FreeBSDの起動時に自動的に accf_http.ko を読み込ませればよいことになる。 そのためには、 /boot/loader.conf
accf_http_load="YES"
の一行を加えておけばよい。 これも実際に試してみて、確かに FreeBSDの起動時から Apache 2.2.x がエラーなく起動するようになった。

これで、とりあえず、エラーは出なくはなったが、 何故、このエラーが表示されていたのか? このエラーに対してアパッチ側での何の対応もできないのか? という疑問が残る。 もう少し、調査してみることにする。

【参考リンク】

カテゴリー: Apache , FreeBSD     22:31 | コメント (0) | トラックバック (0)

2007年6月 8日

FreeBSD で emacs を X11 無しでインストールする方法

FreeBSD において、 例えば emacs をports からインストールしようとすると デフォルトでは X11 関連のライブラリも同時にインストールされてしまう。 しかし、バーチャル・プライベート・サーバ等を間借りしているような場合は telnet(SSH)でログインして、キャラクターベースでしか emacs を使わない訳だから、 X11関連のライブラリは不要である。 そんな不要な X11関連の巨大なファイル群で 貴重なディスク・スペースが占領されてしまうのは非常にもったいない話だ。

そこで、emacsを X11無しでコンパイルする方法があるのかを調査してみた。 まず、/usr/ports/editors/emacs にある、Makefile を解析してみる。
# New ports collection makefile for:    GNU emacs
# Date created:         11 October 2001
# Whom:                 MANTANI Nobutaka <nobutaka@nobutaka.com>
#
# $FreeBSD: ports/editors/emacs/Makefile,v 1.73 2007/10/08 23:29:46 keramida Exp $
#

PORTNAME=       emacs
PORTVERSION=    ${EMACS_VER}
PORTREVISION=   2
CATEGORIES=     editors ipv6
MASTER_SITES=   ${MASTER_SITE_GNU}
MASTER_SITE_SUBDIR=     ${PORTNAME}

MAINTAINER=     keramida@ceid.upatras.gr
COMMENT=        GNU editing macros

.if !defined(WITHOUT_X11)
.if defined(WITHOUT_GTK)
LIB_DEPENDS=    Xaw3d.${XAWVER}:${PORTSDIR}/x11-toolkits/Xaw3d
.endif
LIB_DEPENDS+=   jpeg.9:${PORTSDIR}/graphics/jpeg \
                tiff.4:${PORTSDIR}/graphics/tiff \
                ungif.5:${PORTSDIR}/graphics/libungif \
                png.5:${PORTSDIR}/graphics/png
.endif

CONFLICTS=      emacs-19.* emacs-21.* \
                xemacs-[0-9]* xemacs-devel-[0-9]* \
                xemacs-mule-[0-9]* xemacs-devel-mule-[0-9]*

EMACS_VER=      22.1
GNU_CONFIGURE=  yes
USE_GMAKE=      yes

.if !defined(WITHOUT_X11)
.if !defined(WITHOUT_GTK)
USE_GNOME=      gtk20
.else
USE_XLIB=       yes
.endif
USE_XPM=        yes
.endif

CONFIGURE_TARGET=       ${MACHINE_ARCH}-freebsd
.if defined(WITHOUT_X11)
CONFIGURE_ARGS=         --with-x=no
.else
.if !defined(WITHOUT_GTK)
CONFIGURE_ARGS=         --with-gtk
.endif
.endif

.if defined(WITHOUT_XIM)
CONFIGURE_ARGS+=        --without-xim
.endif

MAN1=           ctags.1 emacs.1 emacsclient.1 etags.1
PLIST_SUB=      EMACS_VER=${EMACS_VER} EMACS_ARCH=${CONFIGURE_TARGET}

MAKE_ENV=       LC_ALL=C

INFO=           ada-mode autotype calc ccmode cl dired-x ebrowse ediff \
                efaq eintr elisp emacs-mime emacs erc eshell eudc \
                flymake forms gnus idlwave info message mh-e newsticker \
                org pcl-cvs pgg rcirc reftex sc ses sieve smtpmail speedbar \
                tramp url vip viper widget woman

LATEST_LINK=    emacs

.include <bsd.port.pre.mk>

.if ${ARCH} == "ia64"
BROKEN= Emacs 22.X does not currently build on ia64
.endif

pre-everything::
.if !defined(WITHOUT_X11) && !defined(WITHOUT_GTK)
        @${ECHO_MSG} "====>"
        @${ECHO_MSG} "====> To disable GTK+ interface support, define WITHOUT_X11 or WITHOUT_GTK"
        @${ECHO_MSG} "====>"
.endif
.if !defined(WITHOUT_X11) && !defined(WITHOUT_XIM)
        @${ECHO_MSG} "====>"
        @${ECHO_MSG} "====> To disable X11 Input Method support, define WITHOUT_XIM"
        @${ECHO_MSG} "====>"
.endif

post-patch:
        @${RM} -f ${WRKSRC}/info/*

.include <bsd.port.post.mk>
この中で、ports間の依存関係を記述しているのが 20行目の
LIB_DEPENDS=    Xaw3d.${XAWVER}:${PORTSDIR}/x11-toolkits/Xaw3d
という記述だ。 ここで、 Xaw3d など、X11関連が指定されている。 よくみると、その2行上に
.if !defined(WITHOUT_X11)
という記述がある。 これは、「もし、WITHOUT_X11が定義されていなければ」と読める。 つまり、「 LIB_DEPENDS= 」は 「 WITHOUT_X11 」が定義されていない場合に限り 評価される、と言うことだ。 逆に言うと、「もしWITHOUT_X11が定義されていれば、LIB_DEPENDS=... は無視する 」 ということになる。

その後、ググッたりして確認してみると、 先日のブログ「FreeBSD の /etc/make.conf」で ふれた /etc/make.conf に
WITHOUT_X11=yes
の1行を記述しておくと、 emacs の ports を make する際に、何も指定しなくても、 X11関連を省いた形でビルドしてくれることが判明した。

これについては、 「portsでX非依存で入れたい」 にも記述がある。 また、「WITHOUT_X11=yes」だけでなく、「WITHOUT_GUI=yes」や 「NO_X=true」などもあるようだ。 どこかに、これらの変数についてまとめてあるとうれしいのだが。

【参考リンク】

カテゴリー: FreeBSD     22:03 | コメント (0) | トラックバック (0)

2007年6月 6日

FreeBSD の /etc/make.conf

FreeBSDでは、アプリケーションを ports で コンパイル(Make)する際の動作をコントロールするためや、 カーネルやシステム全体をコンパイルし直す際に 「/etc/make.conf」というファイルを作成して、 いろいろ設定する必要がある場合がある。

「make.conf」についてはマニュアル があり、その一節には、
make.conf の主要な目的は、通常、/usr/src, /usr/doc と /usr/ports にある FreeBSD ソース、文書 (ドキュメント)、と移植されたアプリケーションの コンパイルを制御することです。 一般に、特定の制御変数の値をデフォルトから変更する必要があるとき、 システム管理者は make.conf を作成します。
とある。 マニュアルには、沢山の変数についての説明がある。

この 「make.conf」のデフォルト値は、 /usr/share/example/etc/make.conf もしくは /usr/share/examples/etc/defaults/make.conf にあるようだ。 このサンプルmake.confファイルに 多くの変数がコメントとして記述されている。 実際にこのmake.confを利用する際には、
# cp /usr/share/example/etc/make.conf /etc/make.conf
のようにサンプル・ファイルをコピーしてから、 必要に応じて、/etc/make.conf にある 沢山の変数の中からコメントを外すなり、設定値を変えるとよいようだ。

いろいろ make.conf について調査していると、 マニュアルには記述されていない変数も 沢山 存在しているようだ。 例えば、Perlに関しては
PERL_VER=5.8.8
PERL_VERSION=5.8.8
のような設定が存在しているようだ。

【参考リンク】

カテゴリー: FreeBSD     22:44 | コメント (0) | トラックバック (0)

2007年6月 5日

FreeBSD で CPU や 周辺デバイスを調査する方法

FreeBSD が走っている環境で CPU や 周辺デバイスを調査するには、 「 /var/run/dmesg.boot 」というテキストファイルを見てみると良い。 このファイルはマニュアル 「dmesg」 によると、 「通常は、起動時にファイルシステムがマウントされたすぐ後の、 バッファ内容のスナップショット」 であると記述されている。

具体例を見てみようと思う。 チョット古めPCサーバーを例としてみる。 実際のファイルは長いので、まずは始めの部分だけをみてみると、
Copyright (c) 1992-2004 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 4.10-STABLE #0: Fri Dec  3 17:06:15 EST 2004
    admin@bsdhost.jvds.com:/usr/obj/usr/src/sys/GENERIC
Timecounter "i8254"  frequency 1193182 Hz
CPU: Intel(R) Pentium(R) 4 CPU 3.20GHz (3194.10-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0xf43  Stepping = 3
  Features=0xbfebfbff
  Hyperthreading: 2 logical CPUs
real memory  = 2138767360 (2088640K bytes)
avail memory = 2077728768 (2029032K bytes)
Preloaded elf kernel "kernel" at 0xc0554000.
Warning: Pentium 4 CPU: PSE disabled
Pentium Pro MTRR support enabled
となっている。

この4行目の
FreeBSD 4.10-STABLE #0: Fri Dec  3 17:06:15 EST 2004」
で このシステムのバージョンが 4.10 の STABLE であることがわかる。

さらに、7行目の
CPU: Intel(R) Pentium(R) 4 CPU 3.20GHz (3194.10-MHz 686-class CPU)
で CPUの メーカー、 種類、クロックまでわかる。

また、11行目の
real memory  = 2138767360 (2088640K bytes)
avail memory = 2077728768 (2029032K bytes)
という行で、メモリが 2Gバイト 搭載していることがわかる。

この後、各種デバイスについての記述となる。 例えば、
rl0: <RealTek 8139 10/100BaseTX> port 0xe400-0xe4ff mem 0xfbfff800-0xfbfff8ff irq 11 at device 13.0 on pci1
rl0: Ethernet address: 00:17:31:0d:0a:ba
で、 Eternet が 「RealTek」の 8139 で 10/100 対応であることと、 その Macアドレス が判明する。

それから、このサーバーのストレージ・システムを例にとると、
twe0: <3ware Storage Controller driver ver. 1.40.01.002> port 0xe800-0xe80f mem 0xfb000000-0xfb7fffff,0xfbfffc00-0xfbfffc0f irq 11 at device 10.0 on pci1
twe0: 2 ports, Firmware FE8S 1.05.00.068, BIOS BE7X 1.08.00.048
で、3ware の Storage Controller を利用しているのがわかるし、
twed0: <Unit 0, TwinStor, Normal> on twe0
twed0: 114472MB (234439600 sectors)
Mounting root from ufs:/dev/twed0s1a
で、全体の容量が114Gバイトあり、 ルート・ディレクトリ が /dev/twed0s1a にマウントされていることもわかる。

【参考リンク】

カテゴリー: FreeBSD     22:52 | コメント (0) | トラックバック (0)

2007年6月 2日

Apache HTTP Server の FreeBSD における自動起動

FreeBSDでは システムのブート時に ディレクトリ「 /usr/local/etc/rc.d 」 に置いてある 実行可能スクリプトを自動的に実行する仕組となっている。 この仕組をつかって Apache HTTP Server を自動的に起動させる 設定をしてみる。

以下のスクリプトが 私が今までに使ってきているモノ。 具体的には、ルート権限になって、 ディレクトリ /usr/local/etc/rc.d に 以下のスクリプトを「apache2.sh」という名前で 保存する。
#! /bin/sh
#
# apache start script
#
#
case "$1" in
start)
        if [ -x /usr/local/apache2/bin/apachectl ];then
            /usr/local/apache2/bin/apachectl start
        fi
        ;;
stop)
        /usr/local/apache2/bin/apachectl stop
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0
それから、実行可能とするために
# chmod 755 /usr/local/etc/rc.d/apache2.sh
としておく。 あとは、システムを再起動してみて 実際に 自動的に起動するかどうかを確認する。

【参考リンク】

カテゴリー: Apache , FreeBSD     22:38 | コメント (0) | トラックバック (0)

2007年5月27日

md5 と ソフトウェアのダウンロード

ソフトウェアをダウンロードする際に、 「 .md5 」 という拡張子が付いたファイルが 同一ディレクトリに置いてあったりすることがある。 これはファイルをダウンロードする際に そのファイルが破損していないことを 確認する為に用いられるものである。

通常この「 .md5 」 という拡張子が付いたファイル(値)は ダウンロード用のファイルから算出された MD5ハッシュ値(いわゆるMD5チェックサム)である。 ファイル配布元が提示しているMD5ハッシュ値と ダウンロード後に こちらで算出した値が同じであれば ダウンロードしたファイルが破損していないことの証明になる。

具体的に FreeBSD に関して言うと、 FreeBSDには md5 というコマンドがあり これで 任意のファイルの MD5ハッシュ値 を算出できる。 例えば、
% md5 /etc/rc.conf
MD5 (/etc/rc.conf) = 155ee1e19f478808925cbbf8873608e1
のような感じ。

md5 以外として PGP や gpg、 最近では sha256 とかも 同様につかわれているようだ。

【参考リンク】

カテゴリー: FreeBSD , Security , Software     22:50 | コメント (0) | トラックバック (0)

2007年5月21日

FreeBSDにおける libidn のインストール

昨日の GNU IDN Library - Libidn からの続きとして、 このライブラリをFreeBSDに実際にインストールしてみる。

FreeBSDでは ご多分に漏れず GNU libidn も ports によりインストールできる。 ディレクトリは /usr/ports/dns/libidn/ となっている。 そこで
# cd /usr/ports/dns/libidn/
# make install
のように インストールを開始する。 makeから沢山の情報が表示されるが、 その中に
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
とあるので、libidn が /usr/local/lib にインストールされたことがわかる。

また、
test -z "/usr/local/include" || ../build-aux/install-sh -c -d "/usr/local/include"
 install  -o root -g wheel -m 444 'stringprep.h' '/usr/local/include/stringprep.h'
 install  -o root -g wheel -m 444 'idna.h' '/usr/local/include/idna.h'
 install  -o root -g wheel -m 444 'punycode.h' '/usr/local/include/punycode.h'
 install  -o root -g wheel -m 444 'idn-free.h' '/usr/local/include/idn-free.h'
 install  -o root -g wheel -m 444 'pr29.h' '/usr/local/include/pr29.h'
 install  -o root -g wheel -m 444 'tld.h' '/usr/local/include/tld.h'
test -z "/usr/local/include" || ../build-aux/install-sh -c -d "/usr/local/include"
 install  -o root -g wheel -m 444 'idn-int.h' '/usr/local/include/idn-int.h'
とあるので、各種の ヘッダー(インクルード)ファイルが /usr/local/include/ 下にインストールされたことがわかる。

そして
install -o root -g wheel -m 555 -s .libs/idn /usr/local/bin/idn
から、idn コマンドが ディレクトリ /usr/local/bin/ 下にインストールされたこともわかる。

それから
install  -o root -g wheel -m 444 'punycode.el' '/usr/local/share/emacs/site-lisp/punycode.el'
install  -o root -g wheel -m 444 'idna.el' '/usr/local/share/emacs/site-lisp/idna.el'
のように Emacs Lisp API もインストールされている。 その後、多数の manページがインストールされている。

【参考リンク】

カテゴリー: DNS・URL・URI , FreeBSD     22:28 | コメント (0) | トラックバック (0)

2007年4月12日

FreeBSDのインストール(4) インストールCD-ROMの焼き方

先日のブログで FreeBSDのブートCDの作成方法について触れたが、 それではそのブート用ISOイメージを 具体的にどうやってCDに焼き込んだか、について。

このファイルは標準的なISOイメージなので、 CDに書き込む方法は数多く考えられるが、その中でも今回は ウィンドウズ上のフリーなソフトで実現する方法を探してみた。

そこでまず 思いつくのが「CD Manipulator」である。 このソフトは、あまりにも基本性能が高く、 コピープロテクトがかかったCDまでコピーできてしまうほどだった。 しかし、違法利用が多いことを理由に 既にその開発を終了してしまっているが、 「CD Manipulator跡地」 に 最終バージョンと そのソースコードを置いてあるので 今でもダウンロードすることができる。 この「CD Manipulator」をつかっての ISOイメージ・ファイル 書き込み方法については 「CD Manipulator を使った ISOイメージファイルの書き込み方法」 に 詳しく説明してある。 ここの説明は、 CDのみでブート可能な Linux ディストリビューション「KNOPPIX(クノーピクス)」をCDに書き込む方法として紹介されている。

そこで、私も「CD Manipulator」を使って ここで紹介されている方法で書き込んでみた。 私も以前に「CD Manipulator」をCDのバックアップに使った経験があり、 そのときは何の問題もなく動作したのだが、 今回は、途中でエラーが出てしまった。 原因として考えられるのは、当時とは使っているドライブが違うこと。 過去にうまく行ったときは CDRW ドライブであったが、 現在はDVDも焼けるドライブである。 それが原因なのかもしれない、と思っている。

では実際には どうしたか、というと、 DVDドライブに付属してきた「VERITAS RecordNow DX V4.60」を使った。 このソフトのマニュアルには、ISOイメージの読み込み方法は説明してあるが 書き込み方法についての記述がなかった。 RecordNowには独自の「グローバルイメージ ファイル」というフォーマットがあるのだが、 このフォーマットのファイルを書き込み方法についての記述があったので それに従ってやってみた。 すると、自動的にISOイメージを認識してキチンと書き込んでくれた。 マニュアルでひとこと、その辺のことを書いておいてほしいところだ。

【参考リンク】

カテゴリー: FreeBSD     22:07 | コメント (0) | トラックバック (0)

2007年4月10日

FreeBSDのインストール(3) インストールCD-ROMの作り方

前回のブログまでで、FreeBSDインストレーションのための 起動フロッピーを作成する方法がわかった。 これで、問題なくFreeBSDをインストールできるのだが、 この方法ではフロッピーを何度も取り替えなければならない。 また、もしかすると このブログをお読みの方のPCには 既にフロッピー・ドライブが付いていないかもしれない。 そこでフロッピーからではなく、CD-ROMからブートする方法を調査してみた。

FreeBSDの インストレーションに関するドキュメントを読んでいると、 ネット経由でのインストレーションの際は、 必ず 起動フロッピーをまず作成しなければならない、 というような書き方がされているような気がする。 しかし、最近のPCのハードウェア環境からすると、 フロッピーを利用することは ほとんどなくなってきており、 また前述のとおり、既にフロッピー・ドライブが付いていないPCも 多々出回っている。 そこで実際に試してみると、 起動フロッピーの代わりにCD-ROMが利用できることがわかった。

そこで、今回のブログでレポートする方法は、 FreeBSDのインストールに必要な全てのファイルを ダウンロードして、それらをCDに焼こう、というのではなく、 ここではあくまでも、FreeBSDをネット経由(FTPによる)で インストレーションすることを目的とし、 そのための起動CD-ROM を作成してみることにする。

AT互換機用 FreeBSD 6.2 の CDイメージは、 FreeBSDのFTPサイトの 「ISO-IMAGES-i386/6.2」 に置いてある。 ここには、「6.2-RELEASE-i386-disc1.iso」とか 500MB以上の大きさのファイルが置かれているが、 これらをダウンロードしてCDを作成すると 全てをCD-ROMからインストールすることができるのであろう。 しかし、この方法ではダウンロードもその後のCD作成も時間がかかる。 ファイルが大きいので場合によっては、ダウンロードに失敗するケースもある。

一方、別に「6.2-RELEASE-i386-bootonly.iso」というファイルがあり その大きさが 24,848 KB となっている。 このイメージ・ファイルをダウンロード後、 それをCDに書き込めば、FreeBSDインストレーション用の起動CD-ROMが出来上がる。 大きさも お手ごろなので、それほどダウンロード時間もかからない。

実際に 出来たCD からブートすると 起動フロッピーからブートしたのと何ら変わらない。 違いはフロッピーを入れ替える手間がかからないことぐらいだ。 あとは、インストール設定のメディア選択で 「FTP」を 選択すると ネット経由でFreeBSDをインストールすることができる。

では、具体的に、ダウンロードした「6.2-RELEASE-i386-bootonly.iso」というファイルを どうやって CDに焼きこんだかについては 次回のブログとさせていただく。

【参考リンク】

カテゴリー: FreeBSD     22:03 | コメント (0) | トラックバック (0)

2007年4月 9日

FreeBSDのインストール(2) インストールFDDの作り方「RawWrite for windows」

前回のブログで FreeBSD の インストールフロッピーの作成には FreeBSD.org が提供している 「fdimage」 というツールがあること紹介した。 しかし残念ながら、このツールは 純粋なMS-DOS上では動作するが Windows 2000 や Windows XP 上では動作しない、ということを書いた。 今回のブログでは、その解決策を探った。

この問題点を解決するためには 結局、Windows 2000 や Windows XP でも動作する FDDイメージ書き込みソフトウェアがあればよいわけだ。 それが 「RawWrite for Windows」 である。 このソフトであれば、手元にウィンドウズしかなくても起動フロッピーの作成が可能だ。

この「RawWrite for Windows」の ウェブ・ページのロゴがペンギンになっているのを見ればお分かりのとおり、 このツールはLinuxをサポートするためのツールのようである。 しかしFreeBSDの起動フロッピーディスクの作成にも 何ら問題なく使用できた。

使い方は単純だが、注意点として、 書き込むイメージ・ファイルを指定する際、 拡張子「.img」 がディフォルト値になっている。 しかし、FreeBSDのサイトからダウンロードしたファイルは 拡張子が 「.flp」になっているので、 ファイルの種類を 「 All Files (*.*) 」にする必要がある。 あとは、単に、イメージファイルを フロッピーに書き込むだけ。

【参考リンク】

カテゴリー: FreeBSD     22:17 | コメント (0) | トラックバック (0)

2007年4月 8日

FreeBSDのインストール(1) インストールFDDの作り方

最近、FreeBSDをインストールしていないので、 最新バージョンを試してみることにした。 折角なので、その手順を記録してゆこうと思う。

私の場合、FreeBSDをインストールする際には、 最新版をインターネット経由で FTPからインストールすることにしている。 しかし、FreeBSDを いくらネット経由でのインストレーションすると言っても、 初めにPCを何らかのメディアで起動(ブート(Boot))してやる必要がある。 そのためには、まず、インストールフロッピー を作成する必要がある。

インストールフロッピーのイメージは .flp という拡張子のファイルになっており、 現段階でのFreeBSD最新バージョン 6.2 では FTPの 「floppies」 フォルダーにそれらのファイルが置いてある。 ちなみに このリンクは あくまでも AT互換機用であり、 マシンのアーキテクチャが違うとまた別のフォルダーになるので注意。 また、AT互換機用の日本語化された 「日本語インストーラ」については 「FreeBSD 6.2-RELEASE 日本語インストーラ」 に 情報がある。

これらのイメージをダウンロード後、インストールFDDを作成しなければならない。 既に FreeBSD などが手元にあり、そのマシン上で、 例えば、イメージファイル「kern.flp」から フロッピーを作成する場合、
# dd if=kern.flp of=/dev/rfd0
のようにして作成することができる。 ちなみに、上記例の「/dev/rfd0」は フロッピーのデバイス名であり、 これはシステムにより異なるので注意。

一方、これから初めてFreeBSDをインストレーションしようという場合は、 上記のような ddコマンドを使ったオペレーションができない。 そこで、FreeBSD.org では MS-DOS で利用できる 「fdimage」 というツールを提供している。 このツールの使用方法は、
E:\> tools\fdimage floppies\kern.flp A:
のようになる。 但し、この 「fdimage」 というコマンドは Windows 2000 や Windows XP とかの 「Command Prompt」からは 実行できないので注意が必要だ。 といっても、手元に 昔のMS-DOSなどない、という方も多いと思う。 そのためのツールは次回のブログでご紹介することにしよう。

【参考リンク】

カテゴリー: FreeBSD     22:12 | コメント (0) | トラックバック (0)

2006年11月11日

Ruby のインストール FreeBSD編

私はサーバーを何台か管理しているが それらは全て FreeBSD を使用している。 今回は、FreeBSD上での Ruby インストールについて

これに関しては、 Ruby インストールガイド「FreeBSD」 に書いてある。 ここに書いてあるとおり、 FreeBSDの場合、 バイナリパッケージである package コレクションと ソースから コンパイルしてインストールする Ports コレクション とがある。 私の場合、個人的な好みとして、 ソースからインストールしたいので いつも Ports コレクションからインストールすることにしている。

そこで Rubyも Ports コレクションからインストールしようと思う。 方法は基本的には、この Ruby インストールガイド「FreeBSD」 に書いてある通りなのだが、 この書いてあるPorts用のディレクトリ「/usr/ports/lang/ruby」が存在しておらず、 そのかわりに、「/usr/ports/lang/ruby16」や「/usr/ports/lang/ruby18」が見つかった。 そこで、Rubyのバージョン1.8 をインストールすることとして、その手順は
% su
# cd /usr/ports/lang/ruby18
# make install
# make clean
となる。 実際にやってみると「make install」には 2〜3分かかったが インストールは無事に終了した。

csh において 再ログインすることなく 新しいコマンドを試すためには
# rehash
コマンドを打てばよい。 こうすると、シェルが path 変数の示すディレクトリの内容を保持する内部ハッシュテーブル を再構成してくれるので 今インストールしたばかりのコマンドも認識されようになる。

【参考リンク】

カテゴリー: FreeBSD , Ruby     22:19 | コメント (0) | トラックバック (0)

2006年7月26日

Perlのバージョンアップ

以前のブログ ブログ「 MTプラグインが認識されない 」と 「 Storable.pm 」の続き。 パールのモジュールを追加できたので、 これで問題解決か、と思ったら甘かった。

MovableType の プラグイン「mt-ban-norefertb.pl」に関して 確かに、「Storable.pm」というパールのモジュールが見つからない、 というような内容のエラー・メッセージは出なくなったのだが、 代わりに、
Plugin error: /usr/www/users/mt/plugins/mt-ban-norefertb.pl Compilation failed in require at /usr/www/users/mt/lib/MT.pm line 293.
という別の エラー・メッセージが表示されるようになった。 それに、もう一つのプラグイン「mt-ban-ascii.pl」に関しての
Plugin error: /usr/www/users/mt/plugins/mt-ban-ascii.pl BEGIN not safe after errors--compilation aborted at /usr/www/users/mt/plugins/mt-ban-ascii.pl line 17.
というエラー・メッセージも以前から残っている。

さて、これらのメッセージから、自サイトの Perlのバージョンが古いのではないかと思われたので調べてみた。
% perl -v
This is perl, version 5.005_03 built for i386-freebsd
ちなみに上記2つのプラグインが問題なく動作している JTPA のサイトでも同じことを行ってみると、
%perl -v
This is perl, v5.8.3 built for i386-freebsd
今までPerlのバージョンが古くても、MovableType が問題なく動いてくれていたので、 そのままにしてきたのだが、この際、Perlの バージョンアップを行うことにした。

例のごとく私が使ってるサーバーのOS が FreeBSD なので
cd /usr/ports/lang/perl5.8/
make install
これを行うと、 /usr/local/bin/perl が新たに作られる。 ちなみに従来の バイナリは 「 /usr/bin/perl 」であり、これはこれで残ったままである。 そこで
cd /usr/bin
mv ./perl ./perl.org
ln -s /usr/local/bin/perl ./perl
これで、MovableType側の設定を全く変更することなく 新しいPerlを実行することができるようになった。 MTの管理画面で確認してみると、「利用可能なプラグインの設定」として 2つのプラグインがリストされるようになった。 これで少しはスパムが減るであろう。

カテゴリー: FreeBSD , MTスパム     22:41 | コメント (0) | トラックバック (0)

 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2008 Skymerica Corp. All rights reserved.