วันพฤหัสบดีที่ 23 กันยายน พ.ศ. 2553

How to Install OpenERP on Leopard 10.6.4 with VirtualENV

Over 2 weeks i spent time to install OpenERP on my MAC.
Luckily i found the way.

First i try to install all with python2.6. Unfortunately OpenERP 5.0.14 work well with python2.5. Please try my step

  1. you need python2.5!
  2. you need postgres
  3. install VirtualENV from fink
  4. cd
  5. virtualenv openerp-py25
  6. source openerp-py25/bin/activate
  7. install these packages by pip or easy_install
    • Babel
    • Beaker
    • CherryPy
    • FormEncode
    • Mako
    • MarkupSafe
    • PIL
    • PyChart
    • PyXML
    • pydot
    • pyparsing
    • reportlab
    • simplejson
    • psycopg2
  8. # Download openerp server
  9. $ bzr branch lp:openobject-server/5.0 openerp-server-5.0
  10. # Install openerp server
  11. $ cd openerp-server-5.0
  12. $ python setup.py install
  13. # Download openerp web
  14. $ bzr branch lp:openobject-client-web/5.0 openerp-web-5.0
  15. # Install openerp web
  16. $ cd openerp-web-5.0
  17. $ python setup.py install
  18. # Start Open Server and web
  19. $ openerp-server --db_user=openuser --db_password=
  20. $ openerp-web
  21. #Open Safari > http://localhost:8080 with username admin password admin

ref: http://devteam.taktik.be/index.php?/archives/9-How-to-install-Open-ERP-5.0.0-on-Mac-OS-X-10.5-Leopard.html

วันจันทร์ที่ 23 สิงหาคม พ.ศ. 2553

ดูสถานะของ HW RAID ผ่าน Linux

วันนี้หลังจากติดตั้ง Linux Debian เรียบร้อยแล้ว สิ่งที่ตามมาคือเราจะรู้ได้อย่างไรว่า HW-RAID ของเรานั้นทำงานเป็นปกติดี

อันดับแรกก็ต้องตรวจสอบก่อนว่า เรามี HW รองรับหรือไม่

Server# dmesg |grep mpt
[ 2.174757] mptbase: ioc0: Initiating bringup
[ 3.369272] mptbase: ioc0: PCI-MSI enabled

เมื่อแน่ใจแล้วก็ติดตั้ง mpt-status (mpt-status - get RAID status out of mpt (and other) HW RAID controllers)

Server # aptitude install mpt-status

แต่เมื่อลองใช้งานดูปรากฏว่า ยังไม่มี device และยังไม่ได้โหลด module นี้ไว้ใน Kernel เลย
Server # mpt-status
open /dev/mptctl: No such file or directory
Try: mknod /dev/mptctl c 10 220
Make sure mptctl is loaded into the kernel

ดังนั้นก็เริ่มโหลดกัน

Server # mknod /dev/mptctl c 10 220
Server # modprobe mptctl

ดูหน่อยว่ามี module โหลดแล้วแน่
Server# dmesg |tail -n 3
[ 1786.460073] Fusion MPT misc device (ioctl) driver 3.04.06
[ 1786.460073] mptctl: Registered with Fusion MPT base driver
[ 1786.460073] mptctl: /dev/mptctl @ (major,minor=10,220)

Server# mpt-status

You seem to have no SCSI disks attached to your HBA or you have
them on a different scsi_id. To get your SCSI id, run:

mpt-status -p

Server# mpt-status -p
Checking for SCSI ID:0
Checking for SCSI ID:1
Found SCSI id=1, use ''mpt-status -i 1`` to get more information.

Server# mpt-status -i 1
ioc0 vol_id 1 type IM, 2 phy, 465 GB, state OPTIMAL, flags ENABLED
ioc0 phy 0 scsi_id 4 ATA ST3500514NS BB23, 465 GB, state ONLINE, flags NONE
ioc0 phy 1 scsi_id 2 ATA ST3500320NS BB12, 465 GB, state ONLINE, flags NONE


เท่านี้เราก็รู้ว่า RAID เราทำงานหรือยัง

สุดท้ายก็ต้องให้ mptctl โหลดตอน Boot

Server # vi /etc/modules

แล้วเพิ่ม mptctl เข้าไปอีก 1 บรรทัด

ที่มา http://linuxhostingsupport.net/blog/open-devmptctl-no-such-device-make-sure-mptctl-is-loaded-into-the-kernel

วันจันทร์ที่ 9 สิงหาคม พ.ศ. 2553

SMTP relay with authenticate


เวลาเราใช้ SPF ในการตรวจสอบที่มาของการส่ง email เราก็จะพบว่าต้องคอยไปเพิ่ม ip ของเครื่อง server ที่เราใช้ส่งอยู่บ่อยไป ดังนั้น มาวันนี้ก็ขอใช้ความรู้เรื่องการทำ authenticate relay smtp มาใช้งานดู ซึ่งสามารถใช้ได้กับ smtp ของ gmail ได้ด้วย (นี่ยิ่งทีเข้าไปใหญ่)

ก่อนอื่นเราต้องแน่ใจก่อนว่าเรามีการใช้งาน sasl ก่อน

# sudo apttitude install postfix libsasl2-2 ca-catificate libsasl2-modules








แล้วก็ต้องมาแก้ main.cf ตามมา โดยให้มีการกำหนดค่าสำคัญ ๆดังต่อไปนี้

[สร้างไฟล์ /etc/postfix/sasl_passwd.db]
Server # vi /etc/postfix/sasl_passwd
 # [smtp.mydomain.com]:25 user.name@mydomain.com:password
Server # chmod 400 /etc/postfix/sasl_passwd
Server # postmap /etc/postfix/sasl_passwd #เราก็จะได้ไฟล์ sasl_passwd.db ออกมาใช้งาน

[สร้างไฟล์เพื่อใช้สำหรับการตรวจสอบ certificate]
Server # cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | tee -a /etc/postfix/cacert.pem

[main.cf]
relayhost=[mail.mydomain.com]:25
smtp_use_tls=yes
smtp_sasl_auth_enable = yes
smtp_tls_loglevel=1
smtp_sasl_security_options = noanonymous
smtp_sasl_local_domain =
broken_sasl_auth_clients = yes # ไว้สำหรับ MS Outlook ดีนักแล
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_authenticated_header = yes # สำหรับบอกว่า email นี้ได้ผ่านการตรวจสอบผู้ใช้แล้วนะ
smtp_tls_CAfile = /etc/postfix/cacert.pem # ไฟล์ Certificate

ที่มา : http://ubuntu-tutorials.com/2008/11/11/relaying-postfix-smtp-via-smtpgmailcom/

วันพุธที่ 19 พฤษภาคม พ.ศ. 2553

DNS Postfix กับ SPF

ช่วงนี้งานพวกการติดตั้งระบบหรือปรับปรุงระบบเพื่อทำให้การใช้งานมีประสิทธิภาพดูเหมือนว่าจะทยอยมาให้ทำเรื่อย ๆ เช่นคราวนี้ เป็นคราวของ EMAIL

ในการติดตั้ง email server นั้นปกติแล้วหากเราไม่ได้กำหนดอะไรไว้มากนักเราก็จะเจอว่ามีผู้ประสงค์ดีคอยส่ง email พวกโฆษณาให้เราเยอะมาก เอาเป็นว่าวันละหลาย ๆ รอบ

วันนี้เลยต้องพึ่ง SPF (Sender Policy Framework) หลักการของ spf นั้นง่ายมาก มันเริ่มด้วยเครื่องที่รับ email เวลาที่ได้รับการติดต่อมานั้นก็ทำการถามไปยัง dns ที่ควบคุม domain ที่ส่งมา ถามว่า "email ที่กำลังรับอยู่นี้ ได้ถูกส่งมาจากเครื่องที่กำหนดไว้หรือไม่"

มาดูรูปแบบที่กำหนดไว้ DNS กัน

mydomain.com TXT "v=spf1 a mx a:mydomain.com mx:mydomain.com mx:mail.mydomain.com ip4:xxx.xxx.xxx.0/24 ip4:xxx.xxx.xxx.xxx ~all"

อธิบายได้ดังนี้
  • v=spf1 แสดงว่า TXT นี้เป็นการกำหนด SPF
  • a แสดงว่า เครื่องนี้เป็นเครื่อง ส่ง email ของ mydomain.com ด้วย
  • mx แสดงว่า MX server นี้ ส่ง email ของ mydomain.com ด้วย
  • ip4:xxx.xxx.xxx.0/24 แสดงว่า ทุกเครื่องที่มีช่วงของ ip นี้ เป็นเครื่องที่ใช้ส่ง email ของ mydomain.com (อันนี้มีประโยชน์มากสำหรับคนที่ใช้ smtp ของ ISP เป็นคนส่ง)
  • ip4:xxx.xxx.xxx.xxx แสดงว่า เครื่องที่มี ip นี้ เป็นเครื่องที่อนุญาติให้ส่ง email ได้
  • ~all แสดงว่า SPF ที่ได้รับมาหากตรวจสอบแล้วไม่ตรงก็จะทำการบอก mail server ว่า ให้กำหนดเป็น softfail
หากเราทำการกำหนดดังกล่าวแล้ว เวลาเปิด email ดู เช่นใน gmail เราก็จะได้ header ว่า
Received-SPF: pass (google.com: domain of user@mydomain.com designates xxx.xxx.xxx.xxx as permitted sender) client-ip=xxx.xxx.xxx.xxx;

อ้างอิง: http://old.openspf.org/wizard.html?mydomain= เอาไว้สร้าง spf
อ้าวอิง: http://www.debianhelp.co.uk/dnsrecords.htm เอาไว้อ่านความหมายของ DNS record

แถมในส่วนของ postfix อีกหน่อย ...

ปกติแล้ว postfix นั้นไม่ได้มีการตรวจสอบ spf ไว้ก่อน เราต้องทำเอง ด้วยวิธีดังนี

  1. อันแรกเอาเป็นว่าก็ต้องติดตั้ง postfix ก่อน (อันนี้ไปทำเอง)
  2. จากนั้นก็ติดตั้ง tumgreyspf ด้วย $ aptitude install tumgreyspf
  3. แล้วก็แวะไปอ่าน /usr/share/doc/tumgreyspf/README.Debian เพื่อมากำหนดค่าต่าง ๆ
  4. แล้วก็ reload postfix
เท่านี้เอง

อ้างอิง: http://workaround.org/ispmail/lenny/spf

วันจันทร์ที่ 10 พฤษภาคม พ.ศ. 2553

TTS กับเพชรพระอุมา

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

หลังจากที่ได้ฟังการอ่านบางตอนแล้วก็พบว่า คิดถึง "นกน้อย" หรือคณะพากษ์ละคร ที่มีในสมัยก่อนมาก

แต่ในฐานะนักพัฒนาระบบแล้ว ผมกลับอยากพัฒนาระบบ Text to Speech เพื่ออ่านหนังสืออื่น ๆ ด้วย เพราะจะพึ่งการอ่านจากคนต้องใช้เวลาและความร่วมมือค่อนข้างสูง

ที่ดูไว้ก็มี pyTTS, pyTTSx นั่นแหละ

วันอังคารที่ 4 พฤษภาคม พ.ศ. 2553

vi ไวเป็นลิง

แต่ก่อนมี เพื่อนเคยพูดไว้ว่า "vi ไวเป็นลิง" ภายหลังได้ลองเล่นเองแล้ว ก็เห็นด้วยเป็นอย่างยิ่ง โดยเฉพาะเมื่อต้องทำงานกับ ไฟล์ที่มีขนาดใหญ่ (เคยเป็น 100 MB มาแล้ว) แต่ว่าพอไม่ได้ใช้นาน ๆ ไหง ลืมซะอย่างนั้น ก็เลยขอบันทึกไว้กันลืม ดังนี้

การเลื่อนตำแหน่ง
  • ^f = เลื่อนลง 1 หน้า
  • ^b = เลื่อนขึ้น 1 หน้า
  • ^d = เลื่อนลงครึ่งหน้า
  • ^u = เลื่อนขึ้นครึ่งหน้า
การลบ
  • x = ลบ 1 อักขระ
  • dw = ลบตั้งแต่เคอร์เซอร์จนถึงต้นคำหน้า
  • d$, D = ลบตั้งแต่เคอร์เซอร์จนถึงท้ายบรรทัด
  • dL = ลบตั้งแต่บรรทัดปัจจุบันจนถึงท้ายจอภาพ
  • dh = ลบ 1 อักขระก่อนถึงเคอร์เซอร์
  • dd = ลบบรรทัดปัจจุบัน
  • dG = ลบจากบรรทัดปัจจุบันจนถึงท้ายไฟล์
  • d1G = ลบจากบรรทัดปัจจุบันจนถึงต้นไฟล์
  • ใช้ร่วมกับตัวเลข

    • d3w, 3dw = ลบ 3 คำ
    • 5dd, 4dj = ลบ 5 บรรทัด จากบรรทัดปัจจุบัน ( 4dj=ลบบรรทัดปัจจุบัน และอีก 4 บรรทัดถัดไป )
    • 4dk = ลบบรรทัดปัจจุบัน และอีก 4 บรรทัดก่อนหน้า
    • 5Gdd = ลบบรรทัดที่ 5

When you need to ssh to server without entering password.

Loggin into server without password is stupid way. But sometime we need to do that e.g. Cron

So

# CREATE DSA AT CLIENT
user1@client:~$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/Users/user1/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/user1/.ssh/id_dsa.
Your public key has been saved in /Users/user1/.ssh/id_dsa.pub.
The key fingerprint is:
9a:30:11:3c:3c:cf:89:01:3a:e1:5d:bd:49:c9:50:f4 user1@client
The key's randomart image is:
+--[ DSA 1024]----+
|. .+.o*o. |
|.o. B. =. |
|o. ..B..oE |
| . ..+o |
| o S |
| o o |
| o |
| |
| |
+-----------------+

# COPY PUBLIC DSA TO SERVER

user1@client:~$ scp ~/.ssh/id_dsa.pub user1@some.server.com:/home/user1/.ssh

user1@some.server.com's password:
id_dsa.pub 100% 642 0.6KB/s 00:00


# SETUP AUTHORIZED_KEY FROM CLIENT TO SERVER
user1@some.server.com:~$ cd ~/.ssh
user1@some.server.com:~$ touch authorized_keys
user1@some.server.com:~$ chmod 600 authorized_keys
user1@some.server.com:~$ cat id_dsa.pub >> authorized_keys


DONE!