HAYAGUI

プリントサーバ用KNOPPIX作成

はじめに

KNOPPIXをカスタマイズできたので、KNOPPIXをプリントサーバに仕上げてみました。
オリジナルKNOPPIXは、OSを起動させてもCUPSを始めほとんどサービスが起動していません。

機能

パラレル接続のプリントサーバをつくります。
機能は以下の通り。
  • 印刷データとして受信したデータをそのままパラレルポートに流す。
  • 印刷プロトコルは、LPR,JetDirect(RAW:9100),IPP 。
  • これらをBonjour(Rendezvous)でサービスを公開する。
  • ランレベル2にして起動を速く。システムを軽く。
市販されているプリントサーバでは、こんな感じと同じぐらいかな?
AXIS 5400+ ネットワークプリントサーバ

cupsd/inetdを起動する

作業領域に chroot します。 作業領域に関しては、「KNOPPIXをリマスタリングする」を参照してください。 KNOPPIXの初期設定では、cupsdとinetdが起動していません。 cupsdは、印刷システムです。inetdはlprとJetDirectを受けるために使います。 cupsdとinetdの起動スクリプトは /etc/init.d/ にありますので、/etc/rc?.d/にリンクさせます。 cupsdの起動スクリプト名は、cupsys です。
# pwd 
/etc/init.d 
# ls -la cupsys inetd
-rwxr-xr-x  1 root root 1981 2005-07-03 23:41 cupsys
-rwxr-xr-x  1 root root 1764 2001-06-08 22:51 inetd
KNOPPIXの初期設定はこんな感じです。ほとんどなにも動かしていません。
# pwd 
/etc
# ls rc*.d
rc0.d:
K10xsession  S90knoppix-halt

rc1.d:
K10xsession 

rc2.d:
K10xsession  

rc3.d:
K10xsession  

rc4.d:
K10xsession 

rc5.d:

rc6.d:
K10xsession  S90knoppix-reboot

rcS.d:
README  S00knoppix-autoconfig

cupsys と inetd を、ランレベル2,3,4,5 で起動させる設定にします。
# for i in 2 3 4 5 ; do ln -sfn /etc/init.d/cupsys /etc/rc$i.d/S20cupsys; done;
# for i in 2 3 4 5 ; do ln -sfn /etc/init.d/inetd /etc/rc$i.d/S20inetd; done;
# for i in 0 1 6 ; do ln -sfn /etc/init.d/cupsys /etc/rc$i.d/K20cupsys; done;
# for i in 0 1 6 ; do ln -sfn /etc/init.d/inetd /etc/rc$i.d/K20inetd; done;
すると、こんな感じになる。
# ls rc*.d
rc0.d:
K10xsession  K20cupsys  K20inetd  S90knoppix-halt

rc1.d:
K10xsession  K20cupsys  K20inetd

rc2.d:
K10xsession  S20cupsys  S20inetd  

rc3.d:
K10xsession  S20cupsys  S20inetd 

rc4.d:
K10xsession  S20cupsys  S20inetd 

rc5.d:
S20cupsys  S20inetd 

rc6.d:
K10xsession  K20cupsys  K20inetd  S90knoppix-reboot

rcS.d:
README  S00knoppix-autoconfig
# 
これで次回OS起動時に Daemon として起動してくれるはず。

ippは、CUPSDがポートを開きますが、 lprとJetDirectは、inetd で受けるようにします。

/etc/serviceに、9100ポートの名前を jetdirect に登録します。 エディタで以下の行を追加してください。

# grep jetdirect /etc/services 
jetdirect       9100/tcp                        # HP JetDirect
次に、/etc/inetd.confに以下の行を追加します。
# grep printer /etc/inetd.conf 
printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd -o document-format=application/octet-stream
# 
# grep jetdirect /etc/inetd.conf 
jetdirect stream tcp nowait lp /usr/bin/lpr lpr
# 

プリンタ追加

プリンタを追加します。 プリンタドライバは、CUPSをスルーさせる RAW を使用します。 とりあえず cupsd を起動します。
# /etc/init.d/cupsys start
# ps x | grep cupsd
 2306 ?        Ss     0:00 /usr/sbin/cupsd -F
lpstat で現在のCUPSの状態を確認します。
# lpstat -t
scheduler is running
no system default destination
# 
プリンタモデルとしての raw と、インターフェイス(Backend)としての parallel を確認します。
# lpinfo -m | grep raw
raw Raw Queue
# lpinfo -v | grep parallel
direct parallel:/dev/lp0
usbは、沢山表示されます。
# lpinfo -v | grep usb:/dev/usb/lp0
direct usb:/dev/usb/lp0
lpadmin コマンドでlpというプリンタを追加します。 プリンタを削除する時は、lpadmin -x で削除できます。
parallelはこんな感じで、
# lpadmin -plp -v parallel:/dev/lp0 -m raw
usbの場合ならこんな感じ。
# lpadmin -plp -v usb:/dev/usb/lp0 -m raw

この時に lpstat -t でプリンタの状態を見ると動いてませんので、以下のように実行します。
以下はparallelの時。

# lpstat -t
scheduler is running
system default destination: lp
device for lp: parallel:/dev/lp0
lp not accepting requests since Jan 01 00:00 -

printer lp disabled since Jan 01 00:00 -
        reason unknown
# 
# /usr/bin/enable lp
# /usr/sbin/accept lp
# lpstat -t
scheduler is running
system default destination: lp
device for lp: parallel:/dev/lp0
lp accepting requests since Jan 01 00:00
printer lp is idle.  enabled since Jan 01 00:00
#
/etc/cups/cupsd.conf は、こんな感じに変更します。 あとはお好みで。
#PreserveJobHistory Yes
PreserveJobHistory No

<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From @LOCAL
</Location>

<Location /admin>
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From @LOCAL
</Location>

Bonjour(Rendezvous)に登録

Bonjourは、Debian APTパッケージに無いみたいだったので、 ソースからインストールしました。
#こっちの方が俺にあってるな...

howlのソースを /tmp あたりにダウンロードします。 http://www.porchdogsoft.com/products/

で、インストール。ソースはディスクを消費しないように削除します。

# tar zxvf howl-1.0.0.tar.gz
# cd howl-1.0.0
# ./configure
# make
# make install
# cd ..
# rm -R howl-1.0.0
mDNSResponder は、ここにインストールされます。
# which mDNSResponder
/usr/local/bin/mDNSResponder
次に、mDNSResponderの設定ファイルを書きます。
# cat /etc/mDNSResponder.conf 
knoppix_lpr     _printer._tcp           local. 515 rp=lp
knoppix_ipp     _ipp._tcp               local. 631 rp=printers/lp
knoppix_raw     _pdl-datastream._tcp    local. 9100

/etc/init.d/ に、mDNSResponder の起動スクリプトを書きます。 私は、cupsys を参考にして書きました。Debianのスクリプトは初めて書いたので間違っていたら教えてください。
# cat /etc/init.d/mdnsresponder 

#! /bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/mDNSResponder
NAME=mDNSResponder
PIDFILE=/var/run/$NAME.pid
DESC="mDNSResponder"
CONF=/etc/mDNSResponder.conf

test -f $DAEMON || exit 0

set -e

# Get the timezone set.
if [ -e /etc/timezone ]; then
    TZ=`cat /etc/timezone`
    export TZ
fi

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        start-stop-daemon --start --quiet --background -m --pidfile "$PIDFILE" --exec $DAEMON -- -f $CONF
        sleep 2
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
#       start-stop-daemon --stop --quiet --user root --retry TERM/10 --oknodo --exec $DAEMON
        start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE"
        rm -f "$PIDFILE"
        echo "."
        ;;
  status)
        echo -n "Status of $DESC: "
        if [ ! -r "$PIDFILE" ]; then
                echo "$NAME is not running."
                exit 3
        fi
        if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
                echo "$NAME is running."
                exit 0
        else
                echo "$NAME is not running but $PIDFILE exists."
                exit 1
        fi
        ;;
  *)
        N=/etc/init.d/${0##*/}
        echo "Usage: $N {start|stop|status}" >&2
        exit 1
        ;;
esac

exit 0

次に、ランレベル毎に起動と停止を設定します。
# for i in 2 3 4 5 ; do ln -sfn /etc/init.d/mdnsresponder /etc/rc$i.d/S30mdnsresponder; done;
# for i in 0 1 6 ; do ln -sfn /etc/init.d/mdnsresponder /etc/rc$i.d/K30mdnsresponder; done;

ランレベル(runlevel)を2にする

プリントサーバにとってGUIは不要だと思いますので、ランレベルを2で起動する設定にします。 /etc/inittab を開いて、5になっている所を 2 に変更してください。

# The default runlevel.
#id:5:initdefault:
id:2:initdefault:

圧縮イメージ作成/テスト/iso作成

KNOPPIXをリマスタリングを参考にして、圧縮イメージを作成しテストして下さい。

テストは、PCにプリンタをパラレルケーブルで接続して、以下の動作を確認します。

  • クライアントからipp,lpr,jetdirect ポートを作成し印刷できる事。
  • MacOSユーザならプリンタ追加時に、Bonjourで検索することができる事。
印刷できたら、isoイメージを作成してください。

戻る



(C)1999 - 2005 Kenji Ito All rights reserved.