Monthly Archives: 2月 2008

FreeBSDのグラフィカルインストーラ”finstall”

Pocket

FreeBSDのインストーラは、「殺風景すぐる」と言われ、「ちょっとFreeBSDをインストールしてみようかな?」と思い立った人々の心を折ってきた。そんなFreeBSDにおいて非常に期待されているのが、XFce4を利用したグラフィカルインストーラfinstall

結局、当初の予定とは異なり、7.0-RELEASEには間に合わなかったのだが、FreeBSD-stableメーリングリストをつらつらと眺めていたところ、alphaバージョンとしてCDイメージを公開した、というアナウンスを見つけた。

・・・のが、2月の頭で、やっとVMWare Playerで試してみることができた。といってもさわりだけだけど。とりあえず顛末を書く。末尾にCDイメージのありか、アナウンスメールの抄訳をつけておきます。

このCDイメージからは7.0-RC1がインストール出来る。

7.0-RELEASEが公開されたところだが、まあ、FreeBSDにはマイナーバージョンの差なんて気にするほどのものでもない。

と書こうと思ったが、RC1からRC2になるところで確かライブラリがガラッと変わってたような気がするので、少し注意が必要ですな。

それから、ちょっと興味を惹くのが、インストールの際にファイルシステムにZFSも選べること。

いまのところ、通常のインストールではZFSを選べず、いろいろと面倒な手続きを踏む必要があるのでこれは楽。

CDから起動し、ユーザ”install”としてログイン。

と、いきなり懐かしのインストーラ画面になり「げえっ!sysinstall!」と青くなるが、キーボードおよびタイムゾーンの選択をしたあとは無事XFce4が立ち上がり、さらにデスクトップ上にある”FreeBSD Installer”アイコンをダブルクリックすれば今度こそインストーラが起動する。

そこで、いそいそとファイルシステムにZFSを選んでみたが、メモリが768MBに満たないと許可してくれない。よんどころない事情によりVMWareへの割り当てメモリはちょっと増やせなかったので、仕方なしとUFSを選んでインストール。

rootのパスワードの設定、ユーザの追加、シェルの選択、ホスト名とネットワークの設定を行い、powerd, ssh, BSDStatsなどのサービスを有効にするか聞かれる。ちなみに、BSDStatsはデフォルトで有効であった。

あとはシステムをリブートすれば完了。

特にxdmなどは立ち上がってこず、いわゆるCUIでのログインだが、X、xfce4はしっかりインストールされている。後述するがFirefoxやThunderbirdもインストールされる。そのほか、perl、sudoなどもインストールされていて、むむむこれはと調べてみると、

$ ls /var/db/pkg|wc -l
326

というように、300個以上のパッケージがインストールされていた。将来的にはインストールできるパッケージを選択できるようになればいいな。

インストール後、少し触ってみたのだが、うーん、まだ色々と問題がある様子。

じつはインストール自体も謎のエラーで一回失敗している。あまり時間がなかったので、じっくり対処もせず消してしまった。正直インストールそのものが目的だったし。

なお、既存のインストーラであるsysinstallはその愛想の無さで嫌われがちだが、たとえばシリアルコンソールからでも操作できたりと、これはこれで便利である。念のため。

そんなわけで、alphaバージョンのfinstallについて、詳しくはFreeBSD-stableに流れたメールを参照のこと。

イメージのサイズがCD1枚分になるまでには余裕があるので、何か入れてほしい物があれば言え、と別メールで書いてます。

イメージは下記からダウンロード出来るが、バージョンアップによりいつなくなるか分かりません。なおi386のみ。

http://ivoras.sharanet.org/stuff/freebsd7-finstall-alpha3.iso.bz2

以下、アナウンスメールを抄訳。

◎前提

 あくまでもアルファバージョン。

◎できないこと

 すでにパーティションの切られたディスクに対しては実行出来ません。

 RAID, X11, サウンド関連の、ちょっと複雑な設定は出来ません。

 システムロケールの設定は出来ません。

◎できること

 LiveCDとして動作します。

 7.0-RC1のインストールと、X.Org7.3, XFce desktop 4.4 Firefox,Thunderbirdなどの、こちらで選んでおいたパッケージのインストールが出来ます。

 ファイルシステムとしては、UFS+Softupdate, UFS+Gjornal, ZFS, Ext2を選べます。ただしUFSしかしっかりテストしてません。

 ssh, ntpdate, bsdstatsなどのサービスの設定が出来ます。

◎この先の予定

 近いうちに下記の機能を入れてみたいなと考えている。

 パーティションの切られたディスクへのインストール。

 リモートインストールをちょっとだけ。

以上。

No tags for this post.

シェルスクリプトで、ファイル名から拡張子を判定する

Pocket

あくまでも、ファイル名から拡張子を判断するだけ。

以下に、$filenameとして与えられたファイルが拡張子.gzを持つかどうかを確認するシェルスクリプトのサンプルを示す。

Caseを使うケース。

非常に素直。

#!/bin/sh
case "$filename" in
*\.gz)
echo "Found .gz suffix"
;;
*)
echo "Not a .gz suffix"
;;
esac

basenameを使うケース。

#!/bin/sh
# `basename $filename .gz` returns `basename $filename`
# *unless*  it has a .gz suffix.
[ `basename $filename .gz` = `basename $filename` ] || {
echo $filename has a .gz suffix
}

そもそもbasenameは、与えられた文字列からディレクトリ名を削除し、ファイル名部分を抜き出すコマンド。

第二引数として拡張子を与えると、文字列からはその拡張子も削除される。

これを逆に利用している。

つまり、$filenameが.gzという拡張子をもって*いない*場合、`basename $filename .gz`の結果は、`basename $filename`と等しい。

No tags for this post.

portsからインストールしたデーモンプログラムのスタート方法

Pocket

FreeBSDでportsからapacheなどのdaemonプログラムをインストールした場合、起動用スクリプトは/usr/local/etc/rc.dに置かれる。

で、インストールして設定ファイルを修正した後、おもむろに/usr/local/etc/rc.d/apache22 startとして実行することになるわけだが、実はこれでは起動しない。

これはFreeBSDがrc.dシステムを採用しているためで、portsからインストールされ、daemonとして動作するプログラムは、原則として/etc/rc.confでapache22_enable=”YES”などと設定しておかなければならない。

シェルスクリプトなので、中身を見れば一目瞭然なわけだが、どんな時でも必ず/etc/rc.confの値は参照される。

俺は勝手に、この記載は普通、システムの起動時に狙いのデーモンプログラムを実行するためだけのものと思いこんでいた。

なので、たとえばapacheの設定のテストをしていて、一回だけサーバを実行して試してみたい、という時にも参照されてしまうので、/etc/rc.confにapache22_enable=”YES”と書いていない限り、何度やってもapacheは起動しない。

問題なのは、エラーメッセージが表示されないことで、正常に起動したくさいのに、pgrepでhttpdが見つけられず、頭を抱えることになる。

まあ、出来合いの起動スクリプトではなく、apachectlを直打ちすればいいんだけど。

そういったわけで、/etc/rc.confに値を設定せず、テスト用として一回だけ起動したい場合には、引数にstartではなくonestartを与えて実行kすればよい。たとえば下記のように。

/usr/local/etc/rc.d/apache22 onestart

このほかに俺がonestartを使うのは、sftpがなく、ftpしか使えないクライアントに対し/etc/inetd onestartとしてinetdを起動させるくらい、かな。

SolarisやLinuxのような、runレベルを採用しているシステムに慣れていると驚くところではある。

No tags for this post.

Solaris, LinuxでNICのリンクスピード(帯域)、モードを知るには

Pocket

俺メモ

FreeBSDではifconfigコマンドでリンクなどが表示される。

$ ifconfig -a
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether xx:xx:xx:xx:xx:xx
inet 172.xx.xx.xx netmask 0xfffffe00 broadcast 172.xx.xx.xx
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active

Boldで示した通り、1Gbの全二重であることが分かる。

ところがLinux, Solarisだとifconfigでこういった情報が表示されない。

軽くググってみた結果。

Linuxではethtoolを使う。

ethtool <デバイス名>

Solarisではnddを使う。

ndd -get <デバイス名> <オプション>

オプションにはlink_speedなどを与える。

どちらも管理者権限が必要。

No tags for this post.