Simple CGI web interface for an lp print server
Go to file
2020-12-28 21:45:46 -08:00
print.pl pledge and unveil 2020-12-28 21:45:46 -08:00
README.md make small fixes to README 2020-12-22 13:23:28 -08:00

totoro

A simple web interface to line printer daemon (lpd) printing on OpenBSD.

May work on other unixes, or may not.

Installation

These installation instructions assume OpenBSD.

Copy the perl script to the cgi-bin directory:

doas cp print.pl /var/www/cgi-bin/

Perl

Install perl packages:

doas pkg_add p5-Any-URI-Escape p5-YAML p5-Clone

As of this writing, Net::Printer and URI::Query are not in openbsd packages, so we'll install them locally. You may want to check if this has changed.

To install them locally, first install local::lib:

doas pkg_add p5-local-lib

Then tell perl to install modules to /var/www/perl5:

PATH="/var/www/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/var/www/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/var/www/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/var/www/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/var/www/perl5"; export PERL_MM_OPT;

Then install dependencies:

perl -MCPAN -e "use local::lib '/var/www/perl5'; install Net::Printer;"
perl -MCPAN -e "use local::lib '/var/www/perl5'; install URI::Query;"

Daemons

Set up httpd and slowcgi:

NOTE: these instructions set up httpd and slowcgi without chroot. Probably it can be made to work in a chroot.

Add to /etc/httpd.conf:

chroot "/"
logdir "/var/www/logs"

server "totoro" {
        listen on * port 80
        root "/var/www/htdocs"

        # cgi
        location "/" {
            fastcgi socket "/var/www/run/slowcgi.sock"
            root "/var/www/cgi-bin/print.pl"
        }
        location "/" {
            root "/var/www/print.pl"
            fastcgi socket "/var/www/run/slowcgi.sock"
        }
}

Set daemon flags and start:

$ doas rcctl set slowcgi flags "-p /"
$ doas rcctl enable httpd slowcgi
$ doas rcctl start httpd slowcgi

If your printer is not already set up yet, read up on lpd(8) and printcap(5).

Usage

Place any jobs files into /var/www/jobs.

Visit the web interface in a web browser.