2006年1月アーカイブ

愛息のオムツを買いにダイクマに行ってきました。
年末年始で忙しいので、ストレス発散に物欲を満たしたいのですが、なかなか欲しいものがありません。
かろうじて、携帯電話でも新しくしたかったのですが、ダイクマと併設されているヤマダ電器だとありえない条件&料金。モックアップのみで実際の操作感わからないし・・・。
で、うろうろしてたらSHARPの複合機が安売り(?)してました。
衝動買いしそうになったのですが、もし買ってしまうとうちにある電話とスキャナとプリンタがゴミになるので、思いとどまりました。
後で調べたら、電話機能がいまいちらしいので、買わなくて良かったかな?
さて、うちにあるプリンタとスキャナとモデムですが、現在はそれぞれ独立していて、コピー機にもFAXにもなってくれません。
FAXモデムは、PCカードの奴で、そもそも調子が悪い(繋いだ電話がならなかったりするので非常に困る)ので、今回は見送り。
プリンタは、FreeBSDのサーバに繋いで、sambaで共有しているのでそんなに困ってません。
対するスキャナの方は、Windowsマシンに繋がっているので、いまいち使い勝手が悪いです。(もっとも、スキャナの場合はどうせスキャナのそばにいかないと使えないので、共有しても嬉しいかと言う問題はありますが・・・)
で、プリンタと同じようにFreeBSDに繋いで共有してみることにしました。

参考にしたのは、「Linux でプリンタ・スキャナ共有をしてみる
サーバの方は、portsからgraphics/sane-backendsをインストールします。
/usr/local/etc/sane.d/saned.conf に、アクセスを許すホストを追加。(以下はうちの場合)
192.168.0.0/24
続いて、/etc/servicesに以下を追加。
sane            6566/tcp
さらに、/etc/inetd.confに以下を追加。
sane    stream  tcp     nowait  root    /usr/local/sbin/saned   saned
最後に inetd にHUPシグナルを送ってできあがり!
あ、ちなみにスキャナを繋ぐと、
Jan  2 23:00:11 false kernel: uscanner0: Canon CanoScan, rev 1.10/1.00, addr 2
なんて行が出てました。そいでもってrootで接続確認をすると以下のような感じ。(出力は抜粋)
# sane-find-scanner
found USB scanner (vendor=0x04a9, product=0x220d) at /dev/uscanner0
  # Your USB scanner was detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.
# scanimage -L
device `plustek:/dev/uscanner0' is a Canon N670U/N676U/LiDE20 USB flatbed scanner

クライアントの方は、ここからxsane-win32-0.98.zipって言うのを落としてきてWindowsに入れてみました。
参考ページの通りに c:\ に展開して、c:\sane\etc\sane.d\net.conf の中身を書き換えて、スキャナを繋いだサーバのIPアドレスにしてみました。
これで、c:\sane\bin\xsane.exeを実行したら、無事にスキャンできるようになりました。
ここまで来ると、電話回線も繋いでFreeBSDだけでFAXもやりたいなあ・・・。
スキャナの共有に成功したので、FAXの共有に挑戦してみることに・・・。
とりあえずPCIのモデムボードを、Windowsから外してFreeBSDに繋いでみた。
あ、ちなみに MELCO の IGM-PCI56K/LC ってモデムです。
起動時に、
pci2:  at device 6.0 (no driver attached)
なんてことを言われる。
pciconf すると、
# pciconf -l -v
none5@pci2:6:0: class=0x078000 card=0x1025127a chip=0x1025127a rev=0x01 hdr=0x00
    vendor   = 'Rockwell Semiconductor Systems (Also Conexant)'
    device   = 'R6793-11 Conexant HSF Modem'
    class    = simple comms
みたいな感じ。
調べてみたら、こいつはいわゆるWinmodemで、Linuxでも、「Lucentならともかく、Conexantなら諦めろ」ってくらいの代物らしい。
FreeBSDなら言わずもがなですな・・・。
はあ・・・・、外付けのACアダプタがいるモデムなんかつけたくないしなあ。どーしたもんだろ。
FreeBSD6をインストールしたときに、せっかくjail用のパーティションを切ったので、jailで遊んでみた。
手順は、man jail そのままと言っても良いくらい、マニュアルが詳しい。
  1. /etc/rc.confに、以下のような行を追加して、ネットワークインターフェイスにエイリアスをつける
    ifconfig_rl0_alias0="inet 192.168.0.2 netmask 0xffffff00"
    
  2. make worldする
    set D=/jail1
    cd /usr/src
    make world DESTDIR=$D
    cd etc
    make distribution DESTDIR=$D
    mount_devfs devfs $D/dev
    cd $D
    ln -sf dev/null kernel
    
  3. マニュアルの、「ホスト環境の設定」のセクションにしたがって、ネットワークデーモンが新しいエイリアスのIPでLISTENしないようにする
    jailのマニュアルにないものや、注意がいるものは以下
    • inetd
      -a オプションでLISTENするIPが指定できるが、複数指定できない。うちの場合はFreeBSDがルータなので、2つのIPでLISTENして欲しいので困ってしまう。最終的にはinetdは全てのアドレスでLISTENするようにしてしまった。(jail 環境では、ホスト環境がinetdでサービスしているポートは使えないと言うこと)
    • sshd
      /etc/ssh/sshd_config に、ListenAddress の行を追加する
    • courier-imapd
      /usr/local/etc/courier-imap/imapdの、PORT=の行を追加するIPアドレス.143 を , で区切って並べる
    • squid
      /usr/local/etc/squid/squid.conf の、http_portの行を追加する。(もともと、家庭内からしか使えないように記述してあったので変更なし)
    • apache
      /usr/local/etc/apache2/httpd.conf の、Listen の行を追加する。IPアドレス:ポートを、複数行書く
    • samba
      /usr/local/etc/smb.conf のinterface=にIPアドレスを書く。さらに、bind interfaces only = yes の行を追加。(これも、もともとやってあった)
    • postfix
      /usr/local/etc/postfix/main.cf で、inet_interfaces の行に、, 区切りでIPアドレスを書く
    • named(BIND9)
      /etc/namedb/named.conf で、options {} の中に listen-on { } を書き、その中にIPを; 区切りで書く
    • postgresql
      /usr/local/pgsql/data/postgresql.conf の virtual_host行。(これももともとlocalhostだけだった)
  4. jailでshの起動
    jail /jail1 zaudev 192.168.0.2 /bin/sh
    
    これで、jail上のシェルが起動するので、後はマニュアルに従って設定する
    1. 空の/etc/fstabを作る
    2. 以下の内容で/etc/rc.confを作る
      network_interfaces=""
      portmap_enable="NO"
      inetd_enable="NO"
      syslogd_flags="-ss"
      sendmail_enable="NONE"
      
  5. 設定が終わったら、ホストOSの起動時にjailが起動するようにする。ホスト側の/etc/rc.confに以下を追加する
    jail_enable="YES"
    jail_list="jail1"
    jail_set_hostname_allow="NO"
    jail_jail1_rootdir="/jail1"
    jail_jail1_hostname="zaudev"
    jail_jail1_ip="192.168.0.2"
    jail_jail1_exec_start="/bin/sh /etc/rc"
    jail_jail1_exec_stop="/bin/sh /etc/rc.shutdown"
    jail_jail1_devfs_enable="YES"
    jail_jail1_fdescfs_enable="NO"
    jail_jail1_procfs_enable="YES"
    jail_jail1_mount_enable="NO"
    
    これで、/etc/rc.d/jail start とかやればjailが起動する。
jailが起動していれば、ホストのrootアカウントで、jlsコマンドで動作中のjailの一覧が見れて、jexec 1 tsch なんてやれば、jail上でtcshが実行できる。
jexecがあれば十分なので、jail上ではあえてsshdとかは動かさなかった。
otsune's FreeBSD memo::jailの作り方の「mount_nullを使用したportsツリーの導入」を参考にして、jail環境でportsが使えるようにしました。
やったことは、
  1. ホスト側で、/etc/fstabに以下を追加
    /usr/ports              /jail1/usr/ports  nullfs ro,noauto    0   0
    
  2. jail側で、/etc/make.confに以下を追加
    WRKDIRPREFIX=/var/ports
    DISTDIR=/var/ports/distfiles
    WITHOUT_IPV6="yes"
    
後は、jail側でportsを使いたいときに、ホスト側で
mount /jail1/usr/ports
を実行すれば良い。
distfilesの共有を考えると、readonlyじゃなくしてしまった方が楽なのかなあ・・・。
PostgreSQL8は速いらしい、と聞いたので、うちもバージョンを上げたいな~と思う。
しかし、いきなりやるのは怖いので、せっかく用意したjail環境で試してみようと思い立つ。
jail環境でportsからdatabases/postgresql81-server をインストール。
んが、initdbしようとすると共有メモリにアクセスできないとか怒られる。
調べた結果、jailではデフォルトでは共有メモリは使えないようになっているらしい。
FAQの内容を読むと、ホスト環境とjail環境でshmの名前空間が単一なためだとか。
それって~、まずいんじゃん!?
とか思いつつ、一応試してみることに。
sysctl -w security.jail.sysvipc_allowed=1
をホスト環境で実行。
jail環境でinitdbを試してみると、無事に成功しました。
さて、ホスト環境のDBからデータを移してみようかな~と、ホスト環境でpsqlを実行してみると、エラーが出るじゃないですか!
やっぱり、共有メモリを壊してくれたみたいです。
しょうがないので、jail側のpostgresqlを止めて、ホスト側のpostgresqlも再起動したら元に戻りましたが、恐ろしいですね~。

とりあえず、上記のsysctlの変数は元に戻しておきました。
2006年1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

このアーカイブについて

このページには、2006年1月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2005年12月です。

次のアーカイブは2006年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1