Wednesday, April 18, 2012

Zope & python

Zope

ก่อนที่จะลืมเลืนหายไป อันเป็นข้อด้อยอย่างยิ่งของ FreeBSD ที่พอลงแล้ว ก็ใช้ไปจนลืม ลืมวิธีการลง
อนึ่ง เรื่องราวของ zope และ ZMS นี้ได้รับการแนะนำจากอาจารย์ วิริยะ กลิ่นเสาวคนธ์ จังหวัดสุรษฎร์ธานี แต่เอกสารที่เขียนขึ้นนี้ เขียนเองจากความทรงจำ และขณะทำงาน สดสด

Prerequisite 
ในการนี้ ต้องลง python ก่อน แล้วลง virtualenv ไว้ด้วย เพื่อสะดวกสำหรับผู้ใช้อื่นๆ
python ที่กำหนดโดย FreeBSD นั้น เขาใช้ python-2.7 ก็ไปลงผ่าน ports ซะ ง่ายดี รวมทั้ง virtualenv ด้วยเช่นกัน
การลงผ่าน ports นั้นต้องเป็น root เท่านั้น
รายละเอียดของโปรแกรมที่ต้องใช้กับ FreeBSD ก็มี
๑) FreeBSD ที่ใช้งานขณะนี้นั้น คือ
[mni] ~% uname -a
FreeBSD mni.jes.in.th 9.0-STABLE FreeBSD 9.0-STABLE #10: Sat Apr 14 07:30:41 ICT 2012 root@mni.jes.in.th:/kaitag/obj/usr/src/sys/JOTAWSKI amd64
[mni] ~%
๒) python
python27-2.7.3 An interpreted object-oriented programming language
๓) virtualenv
py27-virtualenv-1.7 Virtual Python Environment builder
py27-virtualenvwrapper-2.11.1 A set of extensions to Virtual Python Environment builder


zope 2.13.13 และ zms ล่าสุด

วิธีการที่นำเสนอนี้ ท่านสามารถลงเองได้ ไม่ต้องไปรบกวนให้ระบบต้องมารับผิดชอบด้วย นับว่าสะดวกไปหลายอย่าง
เบื้องต้น ขอแนะนำให้ท่านหาเนื้อที่พิเศษแยกไว้ต่างหากเลย อาจจะเป็น file system แยกมาเลยก็ได้ ในกรณีของ มะไฟ ใช้ usb external hard disk ขนาด 600 gigaoctets มาไว้ที่ /kaitag ก็เลยอาศัย /kaitag นี่แหละ เก็บ หรือ ลงโปรแกรม zope ที่ /kaitag/psr/zMa แล้วก็กำหนดว่า /kaitag/psr นั้นตัวท่านเองสามารถเขียน-อ่านได้ด้วย (หรืออย่างน้อย ท่านอยู่ในกลุ่มนั้น และกำหนด permission ให้เป็น g+w /kaitag )

ทำตามนี้เลยน่ะ ไม่ต้องเป็นร้งเป็นรูต(root) อะไรหรอก ให้ login ด้วย id ของท่านเองแหละ สมมุติให้เป็น psr

% mkdir -p /kaitag/psr (คำสั่งนี้ ทำหนเดียว)
% cd /kaitag/psr
% virtualenv --system-site-packages zMa

ถึงตอนนี้โปรแกรมจะสร้างสาระบบแฟ้ม zMa ขึ้นมาจาก /kaitag/psr พร้อมกับลงโปรแกรมที่จำเป็น ในเบื้องต้น ไว้ให้ในสาระบบแฟ้มย่อย ในภายในนั้นอีกทีหนึ่ง ซึ่งได้แก่

…/zMa/bin/
…/zMa/lib/
…/zMa/include/

และ option --system-site-packages นั้น จะทำให้โปรแกรมต่างๆ ที่ต้องเรียกใช้งาน ในสาระบบแฟ้ม …/zMa/ นั้น จะไปเรียกแฟ้มที่ได้ลงไว้ในระบบ ในคราวที่ลงโปรแกรม python ไว้แล้วด้วย root แต่ทีแรกนั้น โดยการสร้าง link แทนการลงแฟ้มใหม่

ในลำดับถัดมานั้น ท่านต้องต่อเชื่อมกับ internet ด้วยน่ะ ไม่งั้นทำงานต่อไปไม่ได้แน่เลย

% cd  zMa
% ./bin/easy_install -i http://download.zope.org/Zope2/index/<zope version>  Zope2

ให้แทนที่  <zope version> ด้วยตัวเลขที่บอก version ของ zope ที่ท่านสนใจใช้งาน ลงไป ตัวอย่างเช่น 2.13.13 เป็นต้น

แลในช่วงนี้ ให้ท่านนั่งอ่านอริยสัจจสี่ไปพลางๆ หรืออ่านหนังสือธรรมอันเป็นสรณของท่านไปพลางๆ ไม่นานนัก
ในที่สุด ท่านจะเห็นข้อความนี้

Installed /kaitag/psr/zMa/lib/python2.7/site-packages/manuel-1.1.1-py2.7.egg
Finished processing dependencies for Zope2

ก็แสดงว่าท่านใช้งานได้ทั้ง ซบ (zope) และ เสียว (zeo)


Zope Instance
แต่ก่อนที่ท่านจะใช้งาน ท่าน ต้อง สร้าง instance มาก่อน อันเนื่องมาจากการที่ ซบ นั้นเป็นวัตถุ (object) อย่างหนึ่ง นั่นเอง ไม่มีอะไรมาก แต่ต้องสร้างขึ้นมา ดังนี้เลย

% ./bin/mkzopeinstance -d yzMai

เมื่อ yzMai เป็นชื่อสาระบบแฟ้มสำหรับ zope instance ที่สร้างขึ้นตามข้อกำหนดในการใช้งานของ zope สาระบบแฟ้มนี้ กำหนดชื่อด้วย option d ตามตัวอย่างที่ให้ไว้

ชื่อที่สร้างขึ้น นำหน้าด้วยอักษรวาย (y) อันหมายถึงว่า ยังไม่ใช้งานจริงน่ะ ตามด้วยชื่อ สาระบบแฟ้มที่อยู่ในขณะนั้น แล้วต่อท้ายด้วย อักษรไอ (i) ให้รู้ว่ามันเป็น instance ที่ยังไม่ใช้งานจริงน่ะ – yet zope (zMa) instance – ก็แล้วแต่ท่านจะกำหนดเอาเอง แต่ขอให้สื่อความ ก็เป็นอันใช้ได้

ในการนี้ ให้ท่านหาสมุดบันทึกความสำคัญมาไว้ใกล้ๆตัว เพราะโปรแกรมจะถาม ชื่อ และ ระหัสลับ ซึ่ง ชื่อ/ระหัสลับ นี้ จะถูกเรียกใช้งานก็ต่อเมื่อท่านทำงานแก้ไข ปรับปรุง เพิ่มเติมผ่านทาง web browsers ต่อไปในภาคหน้า อย่างไรก็ดีในสาระบบแฟ้มอันเป็น zope instance นี้จะมีแฟ้มชื่อ inituser ซึ่งแม้จะบันทึก ชื่อ/ระหัสลับ เอาไว้ก็ตาม แฟ้มนี้จะหายไป ในครั้งแรกที่ท่านเรียกใช้งาน zope ดังนั้น จึงได้แนะให้หาสมุดมาบันทึกเอาไว้ หรือ ท่านจะสำเนาไว้ดังนี้ก็ได้

% cd yzMai
% cp -p inituser 0-A-inituser

การที่เลือกใช้เลข 0 นำหน้าก็เพื่อว่า แฟ้มนี้จะปรากฏในตอนต้นเมื่อสั่ง list directory ดูด้วยคำสั่ง ls และก็ด้วยเหตุผลเดียวกับการที่มีอักษร A นำหน้าอีกในลำดับหนึ่งนั้น ทั้งนี้ เพื่อเตือนความทรงจำของท่านเอง มิใช่เพื่ออะไรเลย

และอีกหนึ่งคำสั่งเพื่อสำเนาแฟ้มของ zope instance เอาไว้ ดังนี้

% cp -pR etc/ etc.orig/

โดยที่สาระบบแฟ้ม etc/ จะเก็บแฟ้ม configurations ของ zope instance เอาไว้ การกระทำเช่นนี้ ดูว่าจะเกินเลยไป แต่ ป่องกันไว้ ดีกว่าเสียใจในภายหลัง


Zope configurations
zope เขาจัด configurations ไว้หลายอย่างมาให้เป็นเบื้องต้น ท่านสามารถปรับ หรือแก้ไขเอาเองได้จากแฟ้ม etc/zope.conf ภายใต้สาระบบแฟ้มของ instance ที่สร้างขึ้น (ซึ่งในที่นี้คือ yzMai) อนึ่งขอให้ท่าน อย่างน้อย ได้อ่านแฟ้มนี้สักครั้งด้วย เพื่อความเข้าใจอันดีของท่านเอง

ผมแก้ให้เรียกผ่าน port 82 แทนที่จะเป็น port 8080 ตามที่ zope กำหนดมาให้ ส่วนอื่นๆที่แก้ไขจากต้นฉบับคือ

effective-user psr
enable-product-installation on
datetime-format international
rest-input-encoding utf-8
rest-output-encoding utf-8
rest-language-code en
ip-address 127.0.0.1
large-file-threshold 100Mb
default-zpublisher-encoding utf-8

ขอให้เลือก plain text editor ยอดนิยมของท่านมาแก้ไขแฟ้ม etc/zope.conf นี้


ZMS
zms เป็น zope content management system ที่อนุญาตให้ท่านสร้างเอกสารด้วย template ที่เขาได้สร้างมาให้แล้ว อย่างง่ายดาย โดยมิต้องเสียเวลาเริ่มต้นใหม่ นับว่าสะดวกสำหรับการนำเสนอรายงานได้เป็นอย่างดี

ขอให้ท่านไป download เอา zms เวอร์ชันล่าสุด, ZMS-latest.tar.gz, เก็บไว้ในสาระบบแฟ้มของ zope instance ของท่าน, yzMai, ที่ซึ่งเป็น ตำแหน่งทำงานของท่านในขณะนี้ จาก zms โดยเลือกกด Download ในหน้าที่เข้าไปนี้

ให้ลง zms ไว้ที่สาระบบแฟ้ม Products ของ zope instance ที่ท่านสร้างขึ้น โดยสั่ง

% cd Products
% tar -xzvf ../ZMS-latest.tar.gz

หากมีคำถามเกี่ยวกับการเขียนทับแฟ้มที่มีอยู่แล้ว ก็ให้เขียนทับไปทุกแฟ้ม จากนั้น กลับสู่สาระบบแฟ้ม zope instance, yzMai, ด้วยคำสั่ง

% cd ..

ทั้งหมดที่กล่าวนำมานี้ ก็เพื่อให้ท่านได้สร้าง หรือ นำเสนอผลงานผ่าน zms ผ่าน zope อีกทีหนึ่ง


Running zope
ในสาระบบแฟ้มของ zope instance ที่ท่านสร้างขึ้น, yzMai, ให้ท่านเริ่มทำงาน zope ด้วยคำสั่ง

% ./bin/zopectl start

แลหากอยากหยุดการทำงาน ก็สามารถสั่งได้ด้วยคำสั่งเดียวกันนี้ ลำบากเพียงเปลี่ยนจาก start เป็น stop เท่านั้นเอง อนึ่ง ก็แลแฟ้ม inituser นั้นจะหายไปเมื่อท่านเริ่มวิ่ง zope เป็นครั้งแรก น่าใจหายน่ะ

เมื่อมีปัญหา ท่านสามารถดูรายละเอียดต่างๆได้จาก log ในสาระบบแฟ้ม log/Z2.log และ log/event.log แลถึงจะไม่มีปัญหา ก็ควรแวะเข้าไปตรวจสอบดูเป็นระยะไป ก็ไม่เสียหายอะไร มีแต่ได้ประโยชน์เสียอีก

เรียก web browser ยอดนิยมของท่านมา แล้วตั้งเป้าหมายไปที่ http://localhost:82/ ดูมีหรือว่า ท่านจะเห็นอะไรบ้าง

ในกรณีที่ไม่เห็นอะไรเลย นอกจาก error ให้ท่านตรวจดูว่าแฟ้มทั้ง ๒ ในสาระบบแฟ้ม log ที่กล่าวถึงนั้นมีอยู่หรือไม่ และสมควรไม่มีเลยในกรณีนี้ ทั้งนี้เป็นเพราะ พวกเราไปตั้ง port ที่ต่ำกว่า 1024 อันเป็นข้อห้าม ข้อถือสาในเรื่องของความปลอดภัยของระบบเข้า นั่นเอง

เช่นนี้ก็ลำบากไปแก้ไข configurations ของ zope ตรงบรรทัด address 82 นั้น ให้เป็น address 8080 หรือ port อื่นที่ไม่ไปชนกันเข้า แล้วเริ่มวิ่ง zope อีกครั้ง ด้วยคำสั่งข้างบนนั้น

ให้ท่านสังเกตุง่ายๆว่าทำงาน หรือ ไม่ทำงาน ด้วยการ list directory ดูว่าแฟ้ม inituser นั้นยังอยู่ หรือ หายไป หากหายไป แสดงว่า ทำงาน

หรือ

ให้ list directory ของสาระบบแฟ้ม log ดูว่ามีแฟ้มทั้ง ๒ นั้นเกิดขึ้นหรือไม่ หากมี ก็แสดงว่า ทำงาน และให้ตรวจดูรายละเอียดเบื้องต้นจากแฟ้ม event.log ดังนี้

% tail ./log/event.log

สาระที่แสดงมาให้เห็น ท่านสมควรทราบโดยสัญชาติญาน

จากนั้น ให้ท่านทำอย่างใดอย่างหนึ่ง ซึ่งจะให้ผลเหมือนกัน คือ
๑) ในหน้าที่แสดงผล ให้กดตรงข้อความเข้มๆ Zope Management Interface หรือ
๒) ปิด web browser แล้วเรียกใหม่อีกครั้ง คราวนี้ไปที่ http://localhost:8080/manage/
ซึ่งทั้งสองเส้นทาง จะบังคับให้ท่านกรอก ชื่อ/ระหัสลับ ที่ท่านได้ตอบไปในคราวสร้าง zope instance นั้นแล้ว ก็ให้กรอกไปให้ถูกต้อง

รูปข้างล่างนี้แสดงให้เห็นถึงหน้า web browser เมื่อท่าเรียกเข้าไปครั้งแรกด้วย http://localhost:8080/


ขอพักตอนแรกไว้เท่านี้ก่อน

1 comment:

มะขาม said...

security prone
๑) ใช้ services < 1024 ไม่ได้ ก็ปลอดภัยไป
๒) เลือกใช้ system-site-package ซึ่งทำให้ใช้ link จากระบบ มายัง user space ได้ นับว่า virtualenv เป็นแหล่งหนึ่งของ security


View My Stats