หน้าเว็บ

วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552

เปลี่ยน editor ของ git เป็น vi

ปกติถ้าใช้ git (เป็น dvcs (distributed version control system) ประเภทหนึ่ง) แล้วสั่ง commit -a เพื่อให้มันขึ้น editor มาให้ใส่ text นั้น แรกเริ่มเดิมที่มันจะใช้ editor คือ nano (สำหรับ ubuntu ที่ผมใช้อยู่) แต่ว่าผมอยากให้ vi มากกว่า ก็เลยจะเปลี่ยนมันซะ (จริงๆเมื่อก่อนมันเคยเปลี่ยนให้เองโดยไม่ได้ทำอะไร ก็งงเหมือนกันว่ามันเปลี่ยนยังไง)

วิธีเปลี่ยน
สั่งคำสั่ง
git config core.editor "vi"
โดยสามารถเปลี่ยนคำว่า vi เป็น editor ตัวอื่นใดๆก็ได้ที่ชอบ เช่น nano เป็นต้น

ระบบที่ทดสอบ
OS: ubuntu 9.04
git: 1.6.0.4

วันจันทร์ที่ 22 มิถุนายน พ.ศ. 2552

Tomcat เข้าโฟลเดอร์บางชื่อไม่ได้

เมื่อเข้าบาง URL ที่มีโฟลเดอร์อยู่บน webapps แล้วปรากฎ error ดังด้านล่างนี้

The server encountered an internal error () that prevented
it from fulfilling this request.

exception

java.io.FileNotFoundException:
/var/lib/tomcat5/work/Catalina/localhost/dspace/org/apache/jsp/index_jsp.java
(No such file or directory)

java.io.FileOutputStream.open(Native Method)

java.io.FileOutputStream.(FileOutputStream.java:179)

java.io.FileOutputStream.(FileOutputStream.java:70)


org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:495)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)


org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)


org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)


org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)


org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0 logs.

แต่ว่าถ้าเป็นโฟลเดอร์อื่นจะยังเข้าได้
ซึ่งในกรณีของผมนั้นเกิดจากการที่เคยตั้งโฟลเดอร์นึงไว้ แล้วไปทำอะไรก็ไม่รู้จำไม่ได้ แล้วอยู่ดีๆพอจะเข้า folder นี้มันก็ขึ้น error แบบนี้ซะงั้น แต่ถ้า copy เอา content ไปใส folder อื่นปรากฎว่ามันทำงานได้ซะงั้น

วิธีแก้ไข
ปัญหาเกิดจากการเก็บ cache ของ tomcat ให้แก้โดยการลบไฟล์ใน cache ที่อยู่ที่ /var/cache/tomcat5.5 ทั้งหมดทิ้ง แล้วสั่ง restart tomcat ใหม่

ระบบที่ทดสอบ
OS: Ubuntu 9.04
Tomcat: 5.5

tomcat แสดง encoding เพี้ยน เมื่อส่ง request

เหตุการณ์คือ ระบบ dspace พัฒนาขึ้นนั้น จะมีกล่องสำหรับ search คำ แต่พอผู้ใช้กรอกภาษาไทย แล้วกดปุ่ม search นั้น ระบบกลับแปลง encoding ออกมาเพี้ยน ส่งผลให้หาผล search ไม่เจอด้วย โดยปัญหานี้ต้องแก้ที่ตัว config ของ Tomcat

วิธีแก้
ในไฟล์ server.xml (อยู่ที่ $TOMCAT_HOME/conf/server.xml โดย $TOMCAT_HOME แล้วแต่ระบบ เช่นของผมอยู่ที่ /usr/share/tomcat5.5) ให้ดูที่บรรทัด แล้วเพิ่ม attribute เข้าไปดังนี้
connector port="8080" usebodyencodingforuri="true".......
หรือ
connector port="8080" uriencoding="UTF-8"........
เสร็จแล้วลอง restart tomcat ใหม่อีกรอบเป็นอันใช้ได้

ระบบที่ทดสอบ

OS: Ubuntu Desktop 9.04
Tomcat: Apache Tomcat 5.5 (via apt-get)


ที่มา
http://antikoala.wordpress.com/2007/02/21/tomcat-55-encoding-problem/

Special Thank
@blckct

วันอาทิตย์ที่ 21 มิถุนายน พ.ศ. 2552

compile TinyOS-2.1.0 แบบ TOSSIM ไม่ได้

อันนี้อาจมีหลายสาเหตุ แต่สาเหตุที่ผมเพิ่งเจอล่าสุดคือ upgrade เป็น ubuntu 9.04 แล้วจากที่เคย compile ได้ก็ไม่ได้ซะงั้น
โดยอาการแรกของผมคือ มันฟ้อง หา g++ ไม่ได้
อันนี้แก้ง่ายมาก
sudo apt-get install g++
เป็นอันเรียบร้อย (g++ เป็น GNU C++ Compiler)

พอพ้น error แรกไปได้ติดปัญหาต่อไปคือ มันงอแงว่า หาไฟล์ Python.h ไม่เจอ
อันดับแรกเลยลองเช็คว่าเรามี file นี้อยู่ในเครื่องรึเปล่า โดยลองสั่ง
sudo find / -name Python.h
เพื่อใช้หา find ดูก็ได้ ถ้าเกิดมันบอกว่าไม่เจอ ซึ่งอาจเกิดจากการที่เราไม่มี python development package หรือไม่ก็เคยมี แแต่เป็นเวอร์ชันเก่า พอ upgrade เป็น 9.04 แล้วมันจะเปลี่ยน python เป็น 2.6 แล้วทำการ remove package ของเวอร์ชันเก่าทิ้ง ก็ให้แก้ download มาลงก่อนด้วย
sudo apt-get install python-dev
หรือถ้าต้องการระบุ version ของ python ก็ใช้เป็น
sudo apt-get install python2.5-dev
โดยเปลี่ยนเลข version ตามอัธยาศัย (ของผมคือลง python2.5 เพิ่มเข้าไปด้วย)

หลังจากลองใช้คำสั่งเดิมในการหาว่า Python.h อยู่ที่ไหนใหม่อีกครั้ง แบบของผมจะไปอยู่ที่
/usr/include/python2.5
ซึ่งให้จำ path นี้ไว้ แล้วไปแก้ในไฟล์ sim.extra ที่อยู่ใน $TOSROOT/support/make โดยให้เติมบรรทัดนี้เข้าไปใต้บรรทัด PFLAGS
CFLAGS += -I/usr/include/python2.5
และเปลี่ยนค่าของ PYTHON_VERSION ให้เป็นตัวที่เราใช้อยู่ ทั้งในไฟล์ sim.extra และ sim-fast.extra
PYTHON_VERSION=2.5
ซึ่งถ้าใครไม่รู้ว่า python ตัวเองเป็น version อะไรสามารถดูได้ด้วยคำสั่ง python -V

แล้วคราวนี้ลอง compile โปรแกรมให้เป็น tossim ใหม่อีกครั้ง ก็น่าจะผ่าน

ระบบที่ทดสอบ

TinyOS: 2.1.0 (via apt-get)
OS: Ubuntu 9.04

ที่มา
http://docs.tinyos.net/index.php/TOSSIM#Appendix_A:_Troubleshooting_TOSSIM_compilation

apt-get /usr/bin/python does not match the python default version. It must be reset to point to python2.6

ถ้าเกิดว่าใช้คำสั่ง apt-get upgrade หรือ apt-get install แล้วใน error มีคำว่า
/usr/bin/python does not match the python default version. It must be reset to point to python2.6
และลงท้ายว่า E: Sub-process /usr/bin/dpkg returned an error code (1)

อาจเกิดจากการที่เราสั่งเปลี่ยน version ของ python ในระบบเรา ซึ่งถึงแม้เราเปลี่ยนกลับแล้วก็แก้ไม่ได้

ให้แก้โดย ลบ link python เดิมออก แล้วสร้าง softlink ใหม่ดังนี้
sudo rm /usr/bin/python && ln -s /usr/bin/python2.6 /usr/bin/python

ระบบที่ทดสอบ
OS: Ubuntu 9.04
Python: 2.6

ที่มา
http://www.linuxforums.org/forum/ubuntu-help/146571-solved-upgrade-doesn-t-work.html

switch python version

ในกรณีถ้าในเครื่องมี python หลาย version เช่น 2.5 และ 2.6 สามารถทำการสลับ version ได้ด้วยวิธีต่อไปนี้

ก่อนสร้าง option สำหรับการสลับ version ก่อน
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.5 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.6 2

หลังจากนั้นเมื่อต้องการสลับให้ใช้คำสั่ง
sudo update-alternatives --config python
แล้วเลือกหมายเลขที่ตรงกับ version ของ python ที่ต้องการ

เสร็จแล้วให้ทดสอบด้วยคำสั่ง
python -V
หมายเหตุ ถ้าใช้แล้วเกิด side effect คือทำให้ apt-get เกิด error มีคำว่า /usr/bin/python does not match the python default version. It must be reset to point to python2.6 และลงท้ายด้วย E: Sub-process /usr/bin/dpkg returned an error code (1)
ให้แก้ด้วยวิธีนี้ http://ping2p.blogspot.com/2009/06/apt-get-usrbinpython-does-not-match.html

ระบบที่ทดสอบ
OS: Ubuntu 9.04
Python: 2.3, 2.4, 2.5, 2.6

ที่มา
http://pythonide.blogspot.com/2007/03/how-to-switch-between-python24-and.html

วันจันทร์ที่ 15 มิถุนายน พ.ศ. 2552

วิธีดูว่า process ไหนใช้ (listen) port ไหนอยู่

บน linux ปกติเวลาที่ต้องการดูว่า port ไหนถูกใช้งานอยู่บ้าง ก็มักจะใช้คำสั่ง nbstat กันดังนี้
netstat -tunlp
โดย
- t คือแสดงที่เป็น TCP
- u คือแสดงที่เป็น UDP
- n คือไม่ต้อง resolve network IP address name หรือ หมายเลข port
- l คือให้แสดงเฉพาะ port ที่กำลังรอฟังอยู่ (ไม่ต้องแสดง port ที่ established connection แล้ว)
- p ให้แสดงว่า process ไหนเป็นคนใช้งาน port นั้นๆอยู่

หรือ ถ้าเรารู้หมายเลข port อยู่แล้วและต้องการรู้ว่าใครเรียกใช้โดยไม่ต้องค้นจากคำตอบของ netstat ก็ให้ใช้คำสั่ง fuser ได้ เช่น
fuser -n tcp 80
เพื่อดูว่าใครใช้ TCP port 80 อยู่ เป็นต้น

ระบบที่ทดสอบ
OS: CentOS 5.0

วันพฤหัสบดีที่ 4 มิถุนายน พ.ศ. 2552

เปลี่ยน root password ของ FreeBSD

ในกรณีที่ลืม password หรือต้องการเปลี่ยน password ของระบบปฏิบัติการ FreeBSD

1. reboot แล้วเลือกเข้า 4. Boot FreeBSD in single user mode

2. ระบบจะถามว่า When prompted Enter full pathname of shell or RETURN for /bin/sh: ก็ให้กด Enter ไปเลย

3. mount root ก่อนโดยการสั่ง mount -u / และตามด้วย mount -a

4. สร้าง password ใหม่ ด้วยคำสั่ง passwd

5. ใส่ password ใหม่เป็นอันเสร้จเรียบร้อย และ reboot เข้าทำงานตามปกติ


ระบบที่ทดสอบ

OS: FreeBSD 6.2

ที่มา
http://www.thaihosttalk.com/index.php?topic=8607.0