Computer/Linux / 리눅스

PyKota Printing Accounting System

jswlinux 2013. 10. 13. 08:02

CephBacula에 이어서 이번 오픈소스 프로그램 매뉴얼은 PyKota라고하는 생소한 프로그램이다.  일단 소개부터 드리자면, PyKota는 이름에서 봐도 알 수 있든 파이썬으로 작성되어있는, 어느 유저어떤 프린터기얼마나 사용하는지 기록을 남기며, 프린터기 사용을 제한하는 일을 하는 프로그램이다.  본 매뉴얼은 리눅스 터미널 사용에 익숙하며 데이터베이스 혹은 LDAP에 대해서 이해하고 있어야만 한다.

매 매뉴얼마다 얘기하지만 이번 매뉴얼에도 언급한다.

이전 매뉴얼들을 페이스북에 공유하면서 다른 분들과 나눴던 대화 중 역시 가장 기억에 남는건, "다른 상용 프로그램과의 비교"였다.  글쓴이가 매뉴얼을 작성하는 이유는 "글쓴이가 현재 사용 중인 너무나도 좋은 오픈소스 프로그램을 많이들 모르고 계셔서"이다.

글쓴이가 근무하는 하와이 주립대학교는 하와이 주 정부의 "교육부"에 해당하는 곳으로, 몇 년 전까지만 해도 주 정부에서 예산이 지원됐었는데 갑자기 "너네는 알아서 잘 살아라" 라고 일방적으로 통보하고 예산지원을 끊어버렸다.  그 이후 주립대학교의 학비가 큰 폭으로 상승됐고 장학금 등도 많이 줄었다.  이래저래 학교가 돈이 없다.  꼭 이러한 이유만은 아니겠지만, 어찌됐든간에 글쓴이가 근무하는 곳에서는 어떠한 시스템을 구축하고자 할 때는 너무나도 당연히 오픈소스부터 알아본다.  상용 프로그램이야 찾으면 얼마든지 널리고 널렸고, 없다고 한들 돈 주면 다 해결되는게 지금 세상이지 않나.  일단, 오픈소스를 찾고 그것을 기술지원해주는 업체에 기술지원비를 지불하여 서비스를 받는 식으로 이용하는 중이다.  말 나온김에 나열을 해보자면

OpenStack - Mirantis
OpenLDAP - Symas
LDAP Account Manager - LAM Pro
Firewall - pfSense
ownCloud - ownCloud Enterprise
Backup - Bacula Systems

정도가 되겠다.  좌측이 프로그램 이름이고, 우측이 기술지원 업체명이다.  모두 오픈소스 프로그램이다.  이들은 모두 오픈소스 프로그램을 바탕으로해서 자기들만의 패치를 더하는 제품을 내놓거나, 아예 처음부터 제품개발을 오픈소스로 하고 상용버전은 별도로 유지보수하는 식으로 한다.

이만하면 설명이 충분히 됐으니, 더 이상 상용 프로그램과 비교하는 분이 없으면 한다.  다시 한 번 강조하지만, 매뉴얼을 쓰는 목적은 좋은 오픈소스를 알리고자함이다.  어차피 상용은 그만큼 매뉴얼도 잘 되서 나오니까 이렇게 매뉴얼 작성하는 것도 필요없겠지만.  솔루션 필요할 때마다 아예 상용만 찾는 회사들도 있다.  그런 회사에서 근무하시는 분이라면 본 매뉴얼은 필요없을 거다.

 

글쓴이의 상사가 이런 얘길 했다.  "우리 College 내에서 어떤 교수는 분명 프린터기를 엄청나게 쓰고있는데, 우리는 그걸 파악조차 하고있지 못하다.  물론, 우리가 그들의 프린터기 사용을 제한할 수 없지만 적어도 누가 얼만큼을 쓰는지는 좀 알고있어야할 필요가 있어보인다." 라고 하면서 이 PyKota라는 프로그램에 대해서 알아보라고 했다.  본인이 근무하는 곳은 College Of Education으로서, 한국으로 치자면 "교육대학"쯤 되겠다.  그러니까, 하와이 주립대학교 교육대학이다.  교육대학의 총 교수진과 직원의 수는 대략 400여명 정도이고, 주립대학교 내의 대학들간의 교수진/직원 정보는 절대로 공유하지 않는다.  따라서, 글쓴이는 교육대학만 관리하고 그외 자연대학, 경영대학 등은 전혀 모른다.  알 방법도 없다.

본격적으로 시작해보자.  사실 2006년을 끝으로 개발이 중단된 것으로 보이지만 작동이 잘 되기 때문에 전혀 문제가 없다.  글쓴이가 테스팅한 환경은 우분투 10.04와 12.04 64비트 서버였으며 현재 대학 내 전체 사무실로의 적용을 준비 중이다.

PyKota는 다소 부적절한 용어를 섞어서 한 문장으로 설명하자면 "조낸 어렵고 조낸 복잡하며 조낸 잘만들어진" 프로그램이다.  처음 이것을 설치할 때엔 뭐 이딴 프로그램이 다 있나 싶을 정도로 이해하기도 어렵고 설명도 제대로 안되어있는 불친절한 프로그램이라고 생각했으며, 실제로 이것을 이용해서 프린트를 성공적으로 하게된 데에만 무려 1주일이라는 시간을 투자했다.  시간 들인 것과는 다르게, 핵심만 뽑아서 설명하면 한 편의 매뉴얼로 충분하므로 이 매뉴얼은 나눠서 설명하지 않는다.  이것 때문에 얼마나 스트레스 받았는지는 IRC에 자주 오신 분들이라면 글쓴이가 불평하는걸 여러 번 보셨을 거다.

PyKota는 프린터기 사용을 기록하기 위해 PostgreSQL, MySQL 등의 데이터베이스와 LDAP을 지원하는데, LDAP을 지원하는 것이 글쓴이에게 가장 핵심적인 요소였다.  하와이 주립대학교의 모든 인적정보는 LDAP으로 관리하기 때문이다.  데이터베이스를 이용한 설정은 LDAP에 비해서 쉽고 간단하기 때문에 설명하지 않는다.  게다가 하다하다 안되면 로컬에서 테스트를 해보는 것도 가능하지만, 반대로 LDAP은 인적정보를 포함한 상태로 로컬서버를 구축하는 것이 쉽지않기 때문에 훨씬 어렵다.  따라서, 본 매뉴얼은 DB를 이용한 설명은 생략하고 LDAP을 이용한 구축만 설명드린다.

먼저 PyKota의 동작원리부터 보자.

보고 자시고 할 것도 없이 간단하다.  한 가지 특이한 점은, 사용자의 프린트 요청을 CUPS가 바로 받는 게 아니라 PyKota가 바로 받는다는 점이다.

설치를 시작하자.  설치에 들어가기에 앞서 글쓴이의 테스팅 환경은 Ubuntu 12.04 64bit server, OpenLDAP에 start_tls, 그리고 HP LaserJet 4000라는 리눅스에서 특별한 드라이버 설치없이 사용가능한 투박한 프린터기다.

1.  아래의 두 파일들을 다운로드 한다.
$ wget http://www.pykota.com/software/pykota/download/tarballs/pykota-1.26_fixes_official.tar.gz
$ wget http://www.pykota.com/software/pkipplib/download/tarballs/pkipplib-0.07.tar.gz

 

2.  필수패키지를 설치할 차례다.
$ sudo apt-get install cups cups-client python-dev python-jaxml \ 
  python-reportlab python-reportlab-accel python-ldap python-osd \
  python-egenix-mxdatetime python-imaging python-pysnmp4 \
  python-chardet python-pam pkpgcounter

 

3.  대략 500메가가 넘는 패키지들이 설치될 거라고 나온다.  설치가 끝났으면 pkipplib부터 압축을 풀자.
$ tar xfz pkipplib-0.07.tar.gz

 

4.  pkipplib을 설치한다.  간단하다.
$ cd pkipplib-0.07/; sudo python setup.py install

 

5.  이제 PyKota의 압축을 풀자.  PyKota 패키지에서 프로그램이 빠진 것을 체크해주는 간단한 스크립트가 있으니 이걸 이용한다.
$ tar xfz pykota-1.26_fixes_official.tar.gz
$ cd pykota-1.26_fixes_official
$ python ./checkdeps.py

실행하고나면 뭔가 많이 나온다. 

Checking PyKota dependencies...
Checking for Python-PygreSQL availability : NO.
ERROR : Python-PygreSQL not available !
PygreSQL is mandatory if you want to use PostgreSQL as the quota database backend.
See http://www.pygresql.org
Checking for Python-SQLite availability : NO.
ERROR : Python-SQLite not available !
Python-SQLite is mandatory if you want to use SQLite as the quota database backend.
See http://www.pysqlite.org
Checking for MySQL-Python availability : NO.
ERROR : MySQL-Python not available !
MySQL-Python is mandatory if you want to use MySQL as the quota database backend.
See http://sourceforge.net/projects/mysql-python
Checking for Python-egenix-mxDateTime availability : OK
Checking for Python-LDAP availability : OK
Checking for Python-OSD availability : OK
Checking for Python-SNMP availability : OK
Checking for Python-JAXML availability : OK
Checking for Python-ReportLab availability : OK
Checking for Python-Imaging availability : OK
Checking for Python-Psyco availability : NO.
ERROR : Python-Psyco not available !
Python-Psyco speeds up parsing of print files, you should use it.
See http://psyco.sourceforge.net/
Checking for Python-pkpgcounter availability : OK
Checking for Python-PAM availability : OK
Checking for Python-pkipplib availability : OK
Checking for Python-chardet availability : OK
Checking for GhostScript availability : OK
Checking for SNMP Tools availability : OK
Checking for Netatalk availability : OK

메시지를 보면 PygreSQL, SQLite, MySQL, Psyco가 없다고 뜬다.  본 매뉴얼에서는 데이터베이스를 이용하지 않고 LDAP을 이용할 거라서 메시지는 무시해도 된다.  Python-Psyco의 경우 공식 매뉴얼에 의하면 32비트 컴퓨터에서만 필요하다고 써있다 (그렇다고 필수는 아니다).  따라서 글쓴이는 64비트 서버를 운영하는 관계로 패스했다.

 

6.  설치를 시작하자.
$ sudo python setup.py install 

 

7.  CUPS에게 PyKota의 존재를 알려야한다.
$ sudo cp /usr/local/share/pykota/cupspykota /usr/lib/cups/backend
$ sudo chmod 755 /usr/lib/cups/backend/cupspykota 

 

8.  PyKota를 위한 유저를 생성하고 설정파일을 복사해주자
$ sudo adduser --system --group --home /etc/pykota --gecos PyKota pykota
$ sudo chown pykota:pykota /etc/pykota/pykota.conf /etc/pykota/pykotadmin.conf
$ sudo usermod -aG lpadmin pykota

 

9.  cups의 설정파일을 수정해줘야한다.  이 매뉴얼을 보고 연습하시는 분이 localhost에서 하신다면 필요없지만, CUPS의 웹인터페이스에 localhost가 아닌 remote로 접속하려면 해야한다.  구글링하면 방법이 나오지만, 일단 간단하게나마 중요부분만 올려드린다.
Port 631
Listen /var/run/cups/cups.sock  (Listen localhost는 삭제한다.  Listen 127.0.0.1이 있으면 그것도 삭제한다)

Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd
BrowseAddress @LOCAL
BrowseWebIF Yes
BrowseRemoteProtocols

WebInterface Yes

이후 <Location>에는 Allow from IP주소를 모든 Location 항목마다 넣어주자.  <Policy> 항목에는 필요없다.

 

10.  CUPS를 재시작하고 웹브라우저를 열어서 포트번호 631로 접속해보자.  상단 Administration 클릭하면 아이디랑 비번을 물어볼 거다.  그건 CUPS가 설치되어있는 서버의 유저명과 비번을 입력하면 된다.   그리고나서 Add Printers를 클릭하여 프린터기를 추가한다.  주의할 점은 Share this printer를 반드시 선택해야한다는 점이며, 프린터기의 이름은 중요하다 (프린터기의 이름에는 공백을 허용하지 않는다).

 

11.  작동이 잘되면 이제 본격적으로 PyKota의 설정을 할 차례다.  먼저, Admin 파일부터 수정한다.  Admin 파일은 관리자 계정을 지정하는 역할 이외에는 없다.  따라서 데이터베이스로 운영하실 분이라면 파일을 열어서 계정만 설정해주고, LDAP을 하실 분이라면 LDAP의 기본 정보만 넣어주면 된다.  글쓴이의 파일을 일부만 수정한채 그대로 올려드린다.

$ sudo vi /etc/pykota/pykotadmin.conf
[global]

storagebackend: ldapstorage
storageserver: ldap://ldap.server.address
storagename: dc=abc,dc=com
storageadmin: cn=admin,dc=abc,dc=com
storageadminpw: AdminPassword

주의하실 점은, PyKota는 파이썬으로 작동하므로 라인 맨 앞에 공백이 있으면 안된다.

 

12.  가장 어려운 항목은 pykota.conf 파일이다.  무려 1,400라인이나 된다.  물론 대부분은 주석이지만, 복잡한 건 사실이다.  DB는 위와 마찬가지로 유저이름과 비번만 넣어주면 알아서 테이블 생성하고 관리하니까 큰 문제 없는데 LDAP은 아무래도 좀 다르니 설명 드린다.

/usr/local/share/pykota/ldap 디렉토리에 가면 LDAP 스키마 파일과 LDIF 샘플 파일이 있다.  이걸 보시면 뭐가 필요한지 LDAP 관리자라면 바로 파악하실 수 있을텐데, 일단 top에 ou=pykota를 하나 만들고 그 아래로
ou=billingcodes
ou=gquotas
ou=jobs
ou=lastjobs
ou=printers
ou=uquotas

가 반드시 필요하며, 아파치 디렉토리 스튜디오에서 보는 화면은 다음과 같다. 

 

다음은 유저에 해당하는 부분의 스크린샷이다.

Balance가 -4.0인 것은 신경쓰지 말되, 신경써서 봐야할 곳은 pykotaLimitBypykotaUserName이다.  밑에서 따로 설명한다.

글쓴이의 설정파일을, 주석처리된 부분 제외하고 올려드린다.  참고로, 글쓴이는 유저의 프린터기 사용 자체는 제한하지 않는다는 점을 명심하자.

[global]
storagebackend: ldapstorage
storageserver: ldap://ldap.server.com
storagename: dc=abc,dc=com
storageuser: cn=pykotastorage,dc=abc,dc=com
storageuserpw: pykota_storage_password
ldaptls: Yes
cacert: /etc/ssl/certs/your_certification.crt
userbase: ou=people,dc=abc,dc=com
userrdn: uid
balancebase: ou=people,dc=abc,dc=com
balancerdn: uid
groupbase: ou=groups,dc=abc,dc=com
grouprdn: cn
printerbase: ou=printers,ou=pykota,dc=abc,dc=com
printerrdn: cn
jobbase: ou=jobs,ou=pykota,dc=abc,dc=com
lastjobbase: ou=lastjobs,ou=pykota,dc=abc,dc=com
billingcodebase: ou=billingcodes,ou=pykota,dc=abc,dc=com
userquotabase: user
userquotabase: ou=uquotas,ou=pykota,dc=abc,dc=com
groupquotabase: group
groupquotabase: ou=gquotas,ou=pykota,dc=abc,dc=com
newuser : below
newgroup : below
usermail : mail
groupmembers: memberUid
storagecaching: No
disablehistory: No
logger: system
debug : Yes
logourl : http://www.pykota.com/pykota.png
logolink : http://www.abc.com/
smtpserver: localhost
maildomain: example.com
usernamecase: native
privacy : no
onbackenderror : nocharge
keepfiles : no
accounter: software()
skipinitialwait : no
preaccounter: software()
onaccountererror: stop
admin: Administrator
adminmail: admin@abc.com
mailto : both
balancezero: 0.0
gracedelay : 7
poorman : 1.0
poorwarn : Your Print Quota account balance is low.
Soon you'll not be allowed to print anymore.
softwarn: Your Print Quota Soft Limit is reached.
This means that you may still be allowed to print for some
time, but you must contact your administrator to purchase
more print quota.
hardwarn: Your Print Quota Hard Limit is reached.
This means that you are not allowed to print anymore.
Please contact your administrator at root@localhost
as soon as possible to solve the problem.
policy : external(/usr/local/bin/pkusers --add --skipexisting --limitby noquota $PYKOTAUSERNAME && /usr/local/bin/edpykota --add --skipexisting --printer $PYKOTAPRINTERNAME $PYKOTAUSERNAME)
policy: deny
maxdenybanners: 0
enforcement : strict
trustjobsize : yes
denyduplicates : no
duplicatesdelay : 0
noprintingmaxdelay : 60
statusstabilizationloops : 5
statusstabilizationdelay : 4.0
snmperrormask : 0x4FCC

 

13.  위의 10번에서 CUPS의 프린터기 추가가 성공적으로 됐으면, 해당 프린터기에 해당하는 설정을 pykota.conf 파일에 넣어줘야하는데, 아래의 명령어를 실행하면 된다.  솔직히 왜 이걸 유저가 하게했는지 이해가 안가는 명령어다.

$ sudo /usr/local/bin/pkturnkey --doconf

대략 다음과 비슷하게 나올 거다.

INFO: Please be patient...
INFO: Don't worry, the database WILL NOT BE MODIFIED.
INFO: Extracting all print queues.
INFO: pkprinters --arguments /tmp/pkprinters.args
INFO: Simulation terminated.

--- CUT ---
# Here are some lines that we suggest you add at the end
# of the pykota.conf file. These lines gives possible
# values for the way print jobs' size will be computed.
# NB : it is possible that a manual configuration gives
# better results for you. As always, your mileage may vary.
#
[FS-2000D]
preaccounter : software()
accounter : hardware(snmp)

맨 아래 빨갛게 처리해놓은 3줄을 복사해서 /etc/pykota/pykota.conf 파일 맨 아래에 삽입하면 된다.  역시 주의할 점은 라인마다 맨 앞에 공백이 있으면 안된다는 점이다.

 

14.  CUPS에 등록된 프린터기의 설정을 변경해야한다.  유저가 프린트를 하면 이것을 PyKota가 가로채서 먼저 작업을 하고 CUPS에 전달하는 역할을 하게하는 부분이다.  먼저 CUPS 서비스 데몬부터 중지시키고나서 설정파일을 열여본다.
$ sudo service cups stop
$ sudo vi /etc/cups/printers.conf

파일을 열어서 DeviceURI라고 적힌 라인을 찾아보면 아래와 비슷하게 되어있을 거다. 
DeviceURI socket://192.168.0.181

다음과 같이 고친다. 
DeviceURI cupspykota://socket://192.168.0.181 

프린터기가 여러 대라면 모두 바꿔야한다.  다 수정했으면 CUPS를 다시 시작해준다.
$ sudo service cups start 

 

15.  이제 이 프린터기를 데이터베이스나 LDAP에 등록시켜서 PyKota에 의해 이용현황이 통계되도록 해야한다.  10번에서 추가했었던 프린터기의 이름을 다시 한 번 확인한다.  
$ sudo /usr/local/bin/pkprinters --add --cups -D "프린터기의 설명" --charge 1 "Printer_Name"

프린터기의 설명은 편한대로 넣고, "Printer_Name" 부분은 CUPS에 등록된 프린터기의 이름을 넣는다.  여기서 charge 1이라는 옵션은, 이 프린터기에서 프린트를 한 장 출력할 때 얼마의 비용(cost)을 청구할 것인가를 정하는 부분이다.  예를 들어서, 컬러 프린터기는 1.2배 정도 비싸게 하고싶다거나, 흑백 프린터기는 0.8 정도로 20% 싼 비용을 청구하게 할 수도 있다.  비용이라고 해서 이게 꼭 돈을 의미하는 것은 아니며, 일종의 "포인트" 정도의 개념으로 볼 수 있다.  글쓴이처럼 학교에서 근무하는 분이라면 프린터기마다 비용을 정할 수도 있고, 학생과 교수를 구분하기 위한 group코드나 billing 코드를 설정할 수도 있다.

프린터기가 제대로 추가됐는지 확인해보자.
$ pkprinters -l

FS-2000D [Printer description] (0.0 + #*1.0)
Passthrough mode : OFF
Maximum job size : Unlimited
Routed through PyKota : YES

빨갛게 표시된 부분이 YES로 안되어있으면 /etc/cups/printers.conf 설정이 잘못된 거다.

 

16.   이제 사용자를 확인해볼 차례다.  PyKota를 사용하는 가장 큰 이유가 되는 곳이다.  다시 한 번 상기시켜드린다.  12번에서 pykotaLimitBy와 pykotaUserName을 신경써서 봐야한다고 설명했다.  DB 사용자라면 사용자를 수동으로 추가시켜줘야하며, LDAP 유저라면 필요없다.  DB사용자를 위한 사용자 추가방법을 설명해드릴건데, LDAP 유저에게도 필요한 사항이 나오니 건너뛰지말고 보시길 바란다.

PyKota에서는 사용자에게 프린트 사용제한을 5가지로 한다.  첫번째로는 프린터기별로 쿼타 (Quota)를 지정해서 지정된 쿼타를 모두 소모하면 프린터기가 작동되지 않는 방식이 있고 (quota), 두 번째는 사용자별로 포인트 (Balance)를 충전해서 포인트를 모두 소모하면 작동을 거부하는 방식이 있으며 (balance), 세 번째로는 쿼타 무시 (noquota), 네 번째는 포인트 무시 (nochange), 마지막은 프린트 금지가 되겠다 (noprint).  쿼타나 포인트 무시를 설정하더라도 프린터기 사용 자체는 모두 기록된다는 점을 알아두자.

사용자 추가는 /usr/local/bin/pkusers --add username 으로 가능하다.  pkusers를 입력해보면 다양한 옵션이 제공되는데, 포인트 충전식으로 지정하고, 유저를 생성하면서 동시에 10 포인트를 충전해주고, 포인트를 넘어서 프린터기를 이용할시 할증료로 2.5배를 청구하며, 프린터기는 hp4000만 이용할 수 있게 하겠다고 치면,

$ pkusers --add username --limitby balance --overcharge 2.5 --balance +10.0 --printer hp4000 UserName

이라는 명령어로 유저를 생성할 수 있다.  물론, 유저만 먼저 추가하고 나중에 설정을 변경하는 것은 edpykota 라는 명령어로 가능하다.  여기서 LDAP 유저가 알아야할 점은, 위의 명령어는 실행할 필요가 없으며 (이미 유저가 있으므로), 12번 스크린샷에서 나오듯 사용자의 pykotaLimitBy 값을 위에 나열한대로 적절한 값으로 수정하면 되겠다.  위의 예제에서 나와있는 것에 해당하는 옵션들은 스크린샷을 보시면 모두 있으니까 해결이 가능해보이는데, pykotaUserName라는 것만 다르다는 것을 볼 수 있다.  물론 위의 예제에는 --printer와 옵션이 매치되는 것도 알 수 있다.  LDAP 유저는 이용가능한 프린터기의 목록을 ou=uquotas에 기록하는데, 이것도 스크린샷을 통해 알아보자.

위의 스크린샷의 pykotaUserName과 12번 uid=username,ou=peoplepykotaUserName의 문자열이 같음을 알 수 있다.  즉, ou=uquotas에서 cn을 하나 생성하고 위의 스크린샷처럼 attr.을 추가하면 pykotaUserName으로 sysadmin이라고 되어있는 사용자만이 Wist_235라는 프린터기를 사용할 수 있게 허가하는 것이다.

프린트를 실행했는데 뭔가 잘 안된다면, pykota.conf 파일을 열어서 debug = Yes로 되어있는지 확인한 뒤, tail -f /var/log/syslog 열어놓고 나오는 로그를 보면 상세한 이유가 나온다.  대부분은 LDAP에 필요한 필수 Attributes를 넣지않아서일거다.

 

17.   이제, 다른 제약사항을 걸어보자.  /etc/pykota/pykota.conf 파일을 열어보자.
a.  askconfirmation 이라는 항목을 찾아가면 주석처리되어있는 아주 긴 라인이 하나 있는데, 이것의 주석을 풀면 프린트를 하려고 할 때마다 Yes, No를 묻게 할 수 있다.
b.  policy 항목을 찾아가면 external(/usr/local/bin/pkusers --add …… 라인이 있는데, 이것은 uquotas에는 유저가 있는데 실제 사용자는 없을 때 유용하게 쓸 수 있다.  예를 들자면, 유저가 이미 존재하면 건드리지말되, 없으면 추가하면서 일단 무제한으로 프린트를 할 수 있게 하며, pykotaPrintName 설정되어있는 프린터기를 기본으로 사용하게끔 한다고 친다면,

policy : external(/usr/local/bin/pkusers --add --skipexisting --limitby noquota $PYKOTAUSERNAME && /usr/local/bin/edpykota --add --skipexisting --printer $PYKOTAPRINTERNAME $PYKOTAUSERNAME)

라고 설정할 수 있다.
c.  policy: deny 를 설정하면, 조건이 맞지않는 프린트 요청은 모두거부한다.
d.  banner 항목을 설정하면 인쇄되는 종이마다 상/하단에 특정 메시지를 찍을 수 있다.  (startingbanner, endingbanner)
e.  smtpserver를 설정하면 인쇄 거부시 해당 사용자에게 이메일을 발송한다.

 

18.  마지막 순서로, 해도되고 안해도 되는 부분이다.  웹CGI 스크립트를 설치해서, 인쇄사용량에 대한 리포트를 뽑아보거나, 인쇄 전 내가 프린트하려는 파일이 몇 장이나 나오는지에 대한 간단한 스크립트가 있다.  솔직히 그닥 쓸만하진 않다.

아파치와 관련 모듈을 설치하고, CGI 스크립트를 복사해준다.

# apt-get install apache2 pwauth
# a2enmod authnz_external
# mkdir /usr/lib/cgi-bin/pykota/ 
# cp /usr/local/share/pykota/cgi-bin/* /usr/lib/cgi-bin/pykota/ 
# cp /usr/local/share/pykota/stylesheets/pykota.css /var/www/

/etc/apache2/sites-enabled/000-default 파일을 열어서 <Directory /usr/lib/cgi-bin> 섹션 안에 다음을 삽입한다.

<Directory "/usr/lib/cgi-bin/pykota"> 
  AllowOverride None 
  Options +ExecCGI -Multiviews +SymlinksIfOwnerMatch 
  Order allow,deny 
  AuthType Basic 
  AuthName "Restricted Server" 
  AuthBasicProvider external 
  AuthExternal pwauth 
  Require valid-user 
  Allow from all 
</Directory>

AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe

CUPS를 재시작한다.
# /etc/init.d/apache2 restart

CGI에 접속되는지 확인해보자.
http://machine_ip/cgi-bin/pykota/pykotme.cgi 
http://machine_ip/cgi-bin/pykota/printquota.cgi 
http://machine_ip/cgi-bin/pykota/dumpykota.cgi

 

 

19.  다음은 공식 매뉴얼을 볼 수 있는 주소다.

http://ftp.psu.ac.th/pub/pykota/latest/pykota/stable/pykota-1.26_official/docs/pykota.pdf

 

끝.