プリントサーバ用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イメージを作成してください。
戻る
|