ติดตั้ง pykota บน ubuntu

จาก Wiki Opensource
ข้ามไปที่: นำทาง, สืบค้น

ปรับปรุงล่าสุดเมื่อ 27-11-2556

บันทึกนี้ดูแลโดย WIPAT

ปรับปรุงล่าสุดโดย WIBOON ขอบคุณเกรียงไกร หนูทองคำ ที่ช่วยกันแก้ Bugs

  • ทดสอบบน linux ubuntu 10.04.4 server, postgresql-8.4 และ pykota-1.27alpha13_unofficial
  • ต้นฉบับ pykota อยู่ที่ http://www.pykota.com


  1. ติดตั้ง linux ubuntu 10.04.4 server เสร็จแล้ว ต้องเพิ่ม ubuntu desktop เข้าไปด้วยคำสั่ง
    sudo apt-get install ubuntu-desktop
    เสร็จแล้วให้รีบูท server ใหม่ด้วยคำสั่ง
    sudo reboot
  2. ให้ login เข้าไปทำงาน ติดตั้งโปรแกรม build และ cups ด้วยคำสั่ง
    sudo apt-get install build-essential cupsys cupsys-client cupsys-bsd cupsys-driver-gutenprint system-config-printer-gnome
  3. เตรียมความพร้อมของ network CUPS print server ต้องทดสอบให้ผ่าน ไม่งั้นทำต่อไม่ได้
    ใช้คำสั่ง system-config-printer
    ทดสอบติดตั้งคิวเครื่องพิมพ์ชื่อ abc ใช้ driver เป็น Generic PCL-4 หรือ Generic PostScript Printer ขึ้นกับรุ่นของเครื่องพิมพ์
    เปิดอนุญาต sharing ให้เครือข่ายพิมพ์ได้
    ตัวอย่างคำแนะนำ:
    เมนู System > Administration > Printing > เลือก Add
    เลือกว่า Printer ของเราต่ออยู่กับแบบใด เช่น Ricoh Aficio MP 2000 ก็เลือกเป็น LPD/LPR Host or Printer ได้ แล้วในช่อง Host ใส่แค่ IP Address ของเครื่องพิมพ์ แล้วคลิก Forward > เลือก Driver > ตั้งชื่อเครื่องพิมพ์ เช่น Ricoh-Aficio-MP-2000 (ซี่งชื่อนี้จะใช้ตอน Add Printer ที่ Windows)
    เมื่อเสร็จ ให้คลิกขวาที่ไอคอน ให้มีเครื่องหมายถูกที่คำว่า Shared
    เลือก Server > Settings > ทำเครื่องหมายถูกที่ Publish shared printers connected to this system และ ทำเครื่องหมายถูกที่ Allow printing from the Internet
  4. บนวินโดวส์ XP หรือ 7 ให้ติดตั้ง network printer ชี้มาที่ url คือ http://your.pc.address:631/printers/abc
    ตัวอย่างคำแนะนำ:
    เปิด Windows > login ด้วย user ชื่อ John (สังเกต J ตัวใหญ่ แต่ใน pykota กลับใช้ j ตัวเล็ก)
    เมนู Start > Devices and Printers > Add a printer
    เลือก Add a network, wireless or Bluetooth printer
    เลือก The printer that I want isn't listed
    เลือก Select a shared printer by name > ใส่ http://your.pc.address:631/printers/Ricoh-Aficio-MP-2000
    เลือก Driver ให้ตรงรุ่น > ตั้งชื่อเครื่องพิมพ์ตามชอบ > คลิก Finish
    ทดสอบพิมพ์จากวินโดวส์ให้ใช้งานได้เรียบร้อย
  5. ติดตั้งโปรแกรม postgresql ดังนี้
    sudo apt-get install subversion postgresql postgresql-client postgresql-common libX11-dev libxt-dev libxext-dev
    sudo apt-get install python-dev python-jaxml python-reportlab python-reportlab-accel python-psyco python-pygresql
    sudo apt-get install python-osd python-egenix-mxdatetime python-imaging python-pysnmp4 python-chardet python-pam
    สั่งให้ postgresql ทำงานด้วยคำสั่ง
    sudo /etc/init.d/postgresql-8.4 start

    ต่อไปให้แก้ไขแฟ้ม /etc/postgresql/8.4/main/pg_hba.conf เติมข้อความนี้ต่อไปที่ท้ายสุดของแฟ้ม
    host all all 127.0.0.1/32 trust
    host all all 10.0.5.3/24 trust
    ***ให้เปลี่ยนเลข ip จาก 10.0.5.3 เป็นเลข ip ของ server ที่กำลังใช้
    เสร็จแล้วให้ทำงานใหม่ด้วยคำสั่ง
    sudo /etc/init.d/postgresql-8.4 restart
  6. ติดตั้ง pkpgcounter ให้ดาวน์โหลดจาก ftp://ftp.psu.ac.th/pub/pykota/pkpgcounter-3.50.tar.gz
    ด้วยคำสั่ง wget ftp://ftp.psu.ac.th/pub/pykota/pkpgcounter-3.50.tar.gz
    แตกแฟ้มออกด้วยคำสั่ง sudo tar -zxvf pkpgcounter-3.50.tar.gz -C /usr/share
    เข้าไปทำงานต่อด้วยคำสั่ง cd /usr/share/pkpgcounter-3.50
    สั่งทำงานต่อด้วยคำสั่ง sudo python setup.py install
  7. ติดตั้ง pkipplib ให้ดาวน์โหลดจาก http://ftp.psu.ac.th/pub/pykota/pkipplib-0.07.tar.gz ด้วยคำสั่ง
    wget -P /tmp http://ftp.psu.ac.th/pub/pykota/pkipplib-0.07.tar.gz
    แตกแฟ้มออกด้วยคำสั่ง
    sudo tar -zxvf /tmp/pkipplib-0.07.tar.gz -C /usr/share
    เข้าไปทำงานต่อด้วยคำสั่ง
    cd /usr/share/pkipplib-0.07
    sudo python setup.py install
  8. ติดตั้ง ghostpcl ให้ดาวน์โหลดจาก http://ftp.psu.ac.th/pub/pykota/ghostpcl_1.41p1.tar.bz2 ด้วยคำสั่ง
    wget -P /tmp http://ftp.psu.ac.th/pub/pykota/ghostpcl_1.41p1.tar.bz2
    แตกแฟ้มออกด้วยคำสั่ง
    sudo tar -jxvf /tmp/ghostpcl_1.41p1.tar.bz2 -C /usr/share
    เข้าไปทำงานต่อด้วยคำสั่ง
    cd /usr/share/ghostpcl_1.41p1
    sudo make fonts
    sudo make product
    sudo make install
  9. ติดตั้ง pykota ให้ดาวน์โหลดจาก http://ftp.psu.ac.th/pub/pykota/pykota-1.27_unofficial.tar.gz ด้วยคำสั่ง
    wget -P /tmp http://ftp.psu.ac.th/pub/pykota/pykota-1.27_unofficial.tar.gz
    แตกแฟ้มออกด้วยคำสั่ง
    sudo tar -zxvf /tmp/pykota-1.27alpha13_unofficial.tar.gz -C /usr/share
    เข้าไปทำงานต่อด้วยคำสั่ง
    cd /usr/share/pykota-1.27alpha13_unofficial/
    sudo python setup.py install
  10. สร้างผู้ใช้ pykota ด้วยคำสั่ง
    sudo adduser --system --group --home /etc/pykota --gecos Pykota pykota
    ให้ lp เป็นสมาชิกของ pykota ด้วยคำสั่ง
    sudo adduser lp pykota
    จัดการ postgresql ต่อดังนี้
    sudo su - postgres -c "psql -f /usr/share/pykota-1.27alpha13_unofficial/initscripts/postgresql/pykota-postgresql.sql template1"
  11. แก้ไขข้อมูลแฟ้ม /etc/cups/printers.conf เพื่อให้พิมพ์ผ่าน pykota
    สมมติว่าเครื่องพิมพ์ชื่อ abc แก้ไขจากตัวอย่างเดิม
    <DefaultPrinter abc>
    DeviceURI parallel:/dev/lp0
    ที่บรรทัด DeviceURI parallel:/dev/lp0
    ให้แทรกเพิ่มคำว่า cupspykota:// เข้าไป กลายเป็นดังตัวอย่าง
    DeviceURI cupspykota://parallel:/dev/lp0

    ตัวอย่างที่ทำการทดสอบเครื่องพิมพ์ชื่อ Ricoh-Aficio-MP-2000 แบบ LPD
    <DefaultPrinter Ricoh-Aficio-MP-2000>
    ...
    DeviceURI cupspykota://lpd://192.168.x.x
    ...


    หรือตัวอย่างเดิมเป็นว่า DeviceURI hp:/usb/hp_LaserJet_1320_series?serial=00CNHJ5DM021
    ให้แก้ไขเป็นว่า DeviceURI cupspykota://hp:/usb/hp_LaserJet_1320_series?serial=00CNHJ5DM021

    หรือตัวอย่างเดิมเป็นว่า DeviceURI ipp://192.168.1.7:631/printers/xyz
    ให้แก้ไขเป็นว่า DeviceURI cupspykota://ipp://192.168.1.7:631/printers/xyz

    หรือตัวอย่างเดิมเป็นว่า DeviceURI socket://192.168.1.7:9100
    ให้แก้ไขเป็นว่า DeviceURI cupspykota://socket://192.168.1.7:9100

    เสร็จแล้วให้ reload ใหม่ ด้วยคำสั่ง
    sudo /etc/init.d/cups restart
  12. ทำให้ cups รู้จักกับ pykota ดังนี้
    sudo cp /usr/share/pykota-1.27alpha13_unofficial/bin/cupspykota /usr/lib/cups/backend
    sudo chmod 755 /usr/lib/cups/backend/*
    sudo /etc/init.d/cups restart
    sudo cp /usr/share/pykota-1.27alpha13_unofficial/conf/pykota.conf.sample /etc/pykota/pykota.conf
    sudo cp /usr/share/pykota-1.27alpha13_unofficial/conf/pykotadmin.conf.sample /etc/pykota/pykotadmin.conf
    sudo chown pykota.pykota /etc/pykota/pykota.conf /etc/pykota/pykotadmin.conf
  13. แก้ไขแฟ้ม /etc/pykota/pykota.conf
    ไปที่ประมาณบรรทัด 1419 แล้วลบบรรทัดข้อความว่า policy: deny ทิ้ง
    แล้วไปที่บรรทัดล่างสุดของแฟ้ม เติมต่อท้ายว่า
    [abc]
    policy: external($(which pkusers) --add --limitby balance --balance 20 %(username)s && $(which edpykota) --add --printer %(printername)s %(username)s)
    enforcement : strict
    หรือเขียนอีกแบบใส่ path ที่อยู่จริงของคำสั่ง pkusers และ edpykota
    [abc]
    policy: external(/usr/local/bin/pkusers --add --limitby balance --balance 20 %(username)s && /usr/local/bin/edpykota --add --printer %(printername)s %(username)s)
    enforcement : strict


    ตัวอย่างตั้งชื่อเครื่องพิมพ์ว่า Ricoh-Aficio-MP-2000 ให้เขียนแบบนี้
    [Ricoh-Aficio-MP-2000]
    policy: external(/usr/local/bin/pkusers --add --limitby balance --balance 20 %(username)s && /usr/local/bin/edpykota --add --printer %(printername)s %(username)s)
    enforcement : strict


    ตัวอย่างนี้ อนุญาตโดยอัตโนมัติ พิมพ์ได้ 20 แผ่น

    อธิบาย which pkusers สำหรับ ubuntu 10.04.4 จะได้คำตอบเป็น /usr/local/bin/pkusers
    อธิบาย which edpykota สำหรับ ubuntu 10.04.4 จะได้คำตอบเป็น /usr/local/bin/edpykota
    หากเป็น ubuntu เวอร์ชั่นอื่นๆ อาจเปลี่ยนเป็นอย่างอื่นได้ การใช้ which จะมั่นใจได้ว่าได้ path ที่ถูกต้องของคำสั่ง pkusers


    เสร็จแล้วให้ postgresql เริ่มทำงานใหม่ ด้วยคำสั่ง
    sudo /etc/init.d/postgresql-8.4 restart
  14. ลองด้วยคำสั่ง
    pkprinters --add --charge 1.0 --description "Printer for Students" abc
    ถ้าได้ผล ทำนองนี้ แสดงว่าใช้ได้
    Creation...
    Done. Average speed : ... entries per second.
    ตัวอย่างตั้งชื่อเครื่องพิมพ์ว่า Ricoh-Aficio-MP-2000
    pkprinters --add --charge 1.0 --description "Printer for Students" Ricoh-Aficio-MP-2000
  15. คำอธิบายที่เราแก้ไขแฟ้ม /etc/pykota/pykota.conf (ตามข้อด้านบน) หมายถึง การทำการ add user ให้อัตโนมัติ
    หากทำแบบ manual จะหมายถึงแบบนี้ (ไม่ต้องทำตาม)
    ตัวอย่างตั้งชื่อเครื่องพิมพ์ว่า Ricoh-Aficio-MP-2000
    อนุญาต username ชื่อ mama
    pkusers --add --limitby balance mama
    pkusers -b 20 mama
    edpykota --add --printer Ricoh-Aficio-MP-2000 mama
    repykota
    อนุญาต username ชื่อ john
    pkusers --add --limitby balance john
    pkusers -b 20 john
    edpykota --add --printer Ricoh-Aficio-MP-2000 john
    repykota

  16. แค่นี้ก็ใช้งานได้แล้ว ให้ทดสอบพิมพ์ได้เลยทั้งจากลินุกซ์และวินโดวส์
    หากมีปัญหาระหว่างใช้งานพิมพ์ไม่ออก
    ให้ลองตรวจสอบดูคิวงานพิมพ์ด้วยคำสั่ง lpq
    ถ้ามี job ค้างแสดงว่าเครื่องพิมพ์อาจมีปัญหา

    แก้ไขโดยการลบคิวงานที่ค้างทิ้งให้หมดก่อน ด้วยคำสั่ง cancel -a
    แล้วสั่งให้คิวพิมพ์รับงานใหม่
    ด้วยคำสั่งตัวอย่าง cupsenable abc(ชื่อคิว)
  17. คำสั่งในการดูจำนวนกระดาษและโควต้าที่พิมพ์คือ repykota
    คำสั่งในการดูจำนวนเพิ่มหรือจัดการโควต้าดังนี้
    pkusers -b โควต้า ยูสเซอร์เนม
    เช่น -b +20 เพิ่ม 20 ถ้า -b -20 ลด 20
    (เพื่อให้เกิดความสะดวก หากพัฒนาเป็น web app เช่น ตัวอย่าง phppykotaadmin ตัวอย่างในข้อต่อไปก็จะสะดวกกว่ามาก ลองใช้ดู)
  18. ติดตั้งโปรแกรม phppykotaadmin ดังนี้
    ต้องติดตั้ง apache และ php ก่อน ด้วยคำสั่ง
    sudo apt-get install apache2 php5
    ดาวน์โหลดโปรแกรมจาก http://ftp.psu.ac.th/pub/pykota/phppykotaadmin-0.56.tar.gz
    wget -P /tmp http://ftp.psu.ac.th/pub/pykota/phppykotaadmin-0.56.tar.gz
    แล้วแตกแฟ้มด้วยคำสั่ง
    sudo tar -zxvf /tmp/phppykotaadmin-0.56.tar.gz -C /var/www

    แก้ไขแฟ้ม /etc/sudoers เพิ่มบรรทัดข้อความคือ (เวอร์ชั่นเก่าจะใช้ /usr/bin แต่อันนี้ใช้ /usr/local/bin)
    www-data ALL= NOPASSWD:/usr/local/bin/edpykota
    www-data ALL= NOPASSWD:/usr/local/bin/pkprinters
    www-data ALL= NOPASSWD:/usr/local/bin/pkusers
    www-data ALL= NOPASSWD:/usr/local/bin/dumpykota
    www-data ALL= NOPASSWD:/usr/local/bin/repykota
    *** อาจใช้โปรแกรม visudo แก้ไขแฟ้มนี้ก็ได้ตามถนัด ดังนี้
    sudo visudo

    แล้วสั่งให apache ทำงานใหม่ด้วยคำสั่ง
    sudo /etc/init.d/apache2 restart
    เข้าไปทดสอบผลงานได้ที่ http://localhost/phppykota
    ผู้ใช้ทั่วไปเข้าไปที่ http://localhost/phppykota/user/
    ผู้ดูแลระบบเข้าไปที่ http://localhost/phppykota/admin/
  19. เพื่อความปลอดภัย ให้กำหนดสิทธิ์ผู้ดูแลระบบ phppykotaadmin ด้วยการควบคุมพื้นที่ /var/www/phppykota ดังนี้

    ติดตั้งเพิ่มเติมด้วยคำสั่ง
    sudo apt-get install libapache2-mod-auth-pam
    sudo adduser www-data shadow
    sudo ln -s /etc/pam.d/apache2 /etc/pam.d/httpd

    แก้ไขแฟ้ม /etc/apache2/sites-available/default
    ให้แทรกเพิ่มบรรทัดข้อความไปที่ตอนท้ายของแฟ้มก่อน </VirtualHost> ดังตัวอย่างว่า
    <Directory /var/www/phppykota/admin/>
    AuthBasicAuthoritative off
    AuthPAM_Enabled On
    AuthType Basic
    AuthName "secure area"
    Require valid-user
    AllowOverride none
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    </Directory>
    เสร็จแล้วสั่งให้ apache ทำงานใหม่ด้วยคำสั่ง
    sudo /etc/init.d/apache2 restart

    ลองเข้าไปใช้งานที่ http://localhost/phppykota/admin/
    จะมีหน้าต่างถามให้ป้อนชื่อผู้ใช้และรหัสผ่าน (ใช้ linux user account) หากถูกต้องจึงจะให้ทำงานต่อไปได้
  20. (ข้อนี้มีเงื่อนไขในการใช้ คือ ubuntu 8.04 กับ pykota 1.26 เท่านั้น)
    การใช้ pknotify + pykoticon ทำดังนี้
    ต้องติดตั้งโปรแกรม pykoticon ลงบน PC client ที่ต้องการคุยด้วยก่อน
    บน PC clinet ที่เป็น XP ให้ดาวน์โหลดแฟ้ม http://ftp.psu.ac.th/pub/pykota/pykoticon-1.02.zip
    แตกแฟ้มออกมา แล้วแก้ไขแฟ้ม pykoticon.vbs ที่บรรทัดสุดท้าย
    retcode = Wshshell.run ("%comspec% /C pykoticon.exe --port 7654 nordine.ateur", 0, FALSE)
    ให้แก้ไขข้อความ nordine.ateur เป็นเลข ip ของ pykota server เช่น
    retcode = Wshshell.run ("%comspec% /C pykoticon.exe --port 7654 192.168.5.51", 0, FALSE)
    แก้ไขแค่นี้ แล้วสั่งให้โปรแกรม pykoticon.vbs ทำงาน ตอนนี้ PC client ก็พร้อมรับข้อมูลจาก pykota server แล้ว

    ไปที่ pykota server ลองสั่งให้ส่งข้อความไปยัง PC client ดังตัวอย่าง
    pknotify -d 192.168.5.36 -t 2 -n "hello"
    ที่ PC client จะมี pop up ขึ้นมาว่า hello

    ลองคำสั่ง pknotify ไปยัง pc เป้าหมายปลางทาง ตัวอย่างเช่น
    sudo pknotify -d 192.168.5.36 --checkauth --ask "Your name:username:" "Your password:password:"
    บน PC client ปลายทางจะมี popup ขึ้นมาให้ใส่ username และ password
เครื่องมือส่วนตัว