อยู่ปี 4 แล้วครับ ก็ต้องทำโปรเจ็คจบ คิดอยู่นานว่าจะทำอะไรดี ไม่ชอบโปรแกรมมิงเอาซะเลยแต่ก็หนีมันไม่พ้น เป็นแอดมินนี่ครับ เลยอยากทำอะไรที่ช่วยให้เราทำงานง่ายขึ้น เลยคิดว่าจะเขียนเว็บสำหรับควบคุมเซอร์วิสของเซิฟเวอร์ ที่จริงก็มีรุ่นพี่เคยทำไว้แล้วละครับ เขาทำไว้บน Linux แต่ผมคิดว่าจะทำบนระบบปฏิบัติการที่ไม่ค่อยมีใครใช้กัน พอดีได้คุยกับ อ.วิริยะ (ว.ณ.สุราษฎร์ธานี) พี่เขาเก่ง OpenBSD ไอ้ผมเองก็ไม่เคยใช้ได้ข่าวว่ามันมีความปลอดภัยสูงและค่อนข้างใช้งานยาก ด้วยเหตุนี้ผมก็เลยคิดว่าจะใช้มันทำโปรเจ็คซะเลย
ก่อนจะใช้งานมันได้ก็ต้องศึกษาการทำงานของมันก่อนละครับ ก็ได้เว็ป อ.วิริยะ นี่แหละครับเป็นเว็บสำหรับศึกษาในเบื้องต้น (
http://viriya.sru.ac.th/) ก็ลองติดตั้งตามที่เว็ปพี่เขาแนะนำละครับ แต่วันนี้อยากเอามาเขียนอีกทีในแบบสไตท์ของผมเองมาเริ่มกันเลยดีกว่า
การติดตั้ง Apache
1.) OpenBSD ได้มี Apache ให้เราใช้งานตั้งแต่ติดตั้งอยู่แล้วครับโดยเวอร์ชั่นที่ติดมากับ Openbsd เป็นเวอร์ชั่น 1.3 ซึ่งเราสามารถสั่งให้ Apache ทำงานได้โดยใช้คำสั่ง
#apachectl start #สำหรับ start http ธรรมดา
#apachectl startssl #สำหรับ start http และ https
สำหรับการสั่ง apachectl startssl นั้นเราต้องทำการสร้างไฟล์ Certificates server.crt และ server.key ก่อน
2.) การสร้างไฟล์ Certificates server.crt และ server.key
#cd /etc/ssl
#openssl genrsa -out server.key 1024
#openssl req -new -days 365 \
>-key server.key \
>-out server.csr
#openssl x509 -in server.csr \
>-out server.crt -req \
>-signkey server.key \
>-days 365
#chmod 400 server.*
#mv server.key private/
เมื่อมีไฟล์ Certificates แล้วก็มา startssl กัน
#apachectl startssl
3.) การกำหนดให้ Apache ทำงานเองทุกครั้งเมื่อมีการเปิดเครื่อง
โดยแก้ไขไฟล์ /etc/rc.conf
ตรงส่วนของ httpd_flages=NO แก้เป็น
httpd_flages=""
หรือถ้าต้องการ start https ด้วยให้แก้ไขดังนี้
httpd_flages="-DSSL" #ใส่ "-DSSL" สำหรับให้เริ่มการทำงาน HTTPS ด้วย
4.) ทดสอบโดย reboot
เปิด Browser จากนั้นเรียก
http://your_server_ip/ และ
https://your_server_ip/สำหรับ Directory การทำงานของ Apache ที่ติดมากับ OpenBSD นั้นจะอยู่ที่ /var/www โดยได้มีการ chroot (jail)ไว้เพื่อความปลอดภัย ซึ่งการใช้งานค่อนข้างยุ่งยากนิดหน่อยน่ะครับถ้าไม่ต้องการใช้ chroot ก็สามารถสำหนด httpd_flages="-u" ในไฟล์ /etc/rc.conf ได้
ตามความเข้าใจของผมน่ะครับ chroot /var/www = / ทำให้ระบบมอง /var/www เหมือน / ซึ่งข้อมูลที่อยู่ใน /var/www จะไม่สามารถเรียกไฟล์หรือโฟลเดอร์ที่อยู่นอก /var/www ได้เดี๋ยวจะอธิบายต่อในการติดตั้ง PHP น่ะครับ
การติดตั้ง MySQLการติดตั้งโปรแกรมต่างๆ บน OpenBSD สามารถติดตั้งได้หลายแบบ เช่น ติดตั้งผ่าน Ports, pkg_add, หรือดาวน์โหลดมา Compile เอง แต่วิธีที่ผมจะได้คือ pkg_add เพราะว่าสะดวกและรวดเร็วว่าวิธีอื่นๆ โดยขั้นแรกต้องกำหนดตัวแปร PKG_PATH ก่อนด้วยคำสั่ง
export PKG_PATH=http://ftp.gillclub.com/pub/OpenBSD/4.1/packages
#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน export PKG_PATH
ซึ่ง URL ดังกว่าผมได้สร้างขึ้นมาเองโดยดาวน์โหลด Packages มาจากเว็บของ
OpenBSD มาไว้บนเซิฟเวอร์ของผมเองเพื่อความเร็ว ถ้ามีเวลาผมแนะนำว่าให้ดาวน์โหลดมากับไว้น่ะครับเวลาติดตั้งโปรแกรมจะเร็วมากๆ เนื้อที่ก็ประมาณ 5 GB กว่าๆ ครับ
จากนั้น echo $PKG_PATH จะได้
http://ftp.gillclub.com/pub/OpenBSD/4.1/packagesมี tip สำหรับการกำหนด PKG_PATH นิดนึงครับถ้าหากเรา reboot เครื่อง PKG_PATH ที่เราเคยกำหนดไว้จะหายไป วิธีแก้ปัญหานี้ทำได้โดยแก้ไขไฟล์ ~/.profile โดยเพิ่งบรรทัดต่อไปนี้เข้าไปน่คะรับ
export PKG_PATH=http://ftp.gillclub.com/pub/OpenBSD/4.1/packages
#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน export PKG_PATH
ทีนี้ทุกครั้งที่เรา login เข้ามาในระบบ PKG_PATH ก็จะถูกกำหนดให้เราโดยอัตโนมัติครับ
***หมายเหตุ PKG_PATH สามารถเปลี่ยนแปลงได้ตามความเหมาะสมของท่านนะครับสะดวกใช้ mirror ที่ไหนก็เปลี่ยนแปลงตามชอบนะครับ
มาติดตั้ง MySQL ก่อนต่อหลังจากเรากำหนด PKG_PATH แล้วก็มาเริ่มกันเลย
1.) pkg_add mysql-server
2.) จากนั้นสั่ง
#mysql_install_db
...
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h bsd.gillclub.com password 'new-password'
See the manual for more instructions.
สั่งให้ MySQL ทำงาน
#mysqld_safe &
จากนั้นกำหนดรหัสผ่านสำหรับ root ของ mysql
#mysqladmin -u root password 'new-password' #แก้ไขเป็น 'new-password' เป็น Password ที่ต้องการ
#mysqladmin -u root -h bsd.gillclub.com password 'new-password' #แก้ไขเช่นกัน
3.) แก้ไขไฟล์ /etc/sysctl.conf เพิ่มบรรทัดต่อไปนี้เข้าไป
# Increase for MySQL
kern.maxfiles=4096
ค่าปกติของ kern.maxfiles คือ 1772 ซึ่งดูได้จาก
sysctl kern.maxfiles
ค่าปกติของ kern.maxfiles ถูกจำกัดไว้ที่ 1772 ซึ่งถ้าหากเราต้องการเรียก table ของ mysql หลายๆ table พร้อมกันอาจเกิดปัญหาได้จึงได้เพิ่มให้เป็น 4046 เพื่อที่จะได้เรียก table ได้มากขึ้น
สั่งให้เปลี่ยนค่า kern.maxfiles โดยไม่ต้อง reboot โดย
# sysctl kern.maxfiles=4096
kern.maxfiles: 1772 -> 4096
4.) แก้ไขไฟล์ /etc/login.conf โดยเพิ่มบรรทัดต่อไปนี้เข้าไป
# Setting used by MySQL daemon
_mysql:\
:datasize=infinity:\
:maxproc=infinity:\
:openfiles-cur=2048:\
:openfiles-max=4096:\
:stacksize-cur=8M:\
:localcipher=blowfish,8:\
:tc=default:
5.) ทำการเพิ่ม script สำหรับให้ MySQL ทำงานเมื่อเปิดเครื่องโดยแก้ไขไฟล์ /etc/rc.local ดังนี้
# Start MySQL server
if [ -x /usr/local/bin/mysqld_safe ] ; then
su -c _mysql root -c '/usr/local/bin/mysqld_safe &' > /dev/null & echo -n ' mysql'
for i in 1 2 3 4 5 6;
do if [ -S /var/run/mysql/mysql.sock ]; then
break
else sleep 1 echo -n 00.00
fi done
#
sleep 5
#
ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน ln -f /var/run/...
fi
# End MySQL Setting
6.) อย่างที่บอกไปแล้วในตอนติดตั้ง Apache ว่า Apache ที่ติดมากับ OpenBSD นั้นได้มีการ chroot ไว้ ดังนั้นถ้าหากต้องการให้ Apache ใช้งานร่วมกับ MySQL ได้จะต้องมีการสร้าง symbolic link ให้ mysql.sock ให้กับ Apache โดยการสร้างโฟลเดอร์สำหรับเก็บ mysql.sock
#mkdir -p /var/www/var/run/mysql/
ซึ่ง symbolic link ของ mysql.sock จะถูกสร้างโดยคำสั่งใน /etc/rc.conf บรรทัดที่
ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
#2บรรทัดด้านบนอยู่บรรทัดเดียวกัน ln -f /var/run/...
7.) สุดท้ายแก้ไขไฟล์ /etc/my.cnf ค้นหาบรรทัด
#skip-networking #เอา # หน้าบรรทัดออกเป็น
skip-networking
การติดตั้ง PHP
1.) pkg_add php5-core
/usr/local/sbin/phpxs -s
จากนั้นให้แก้ไขไฟล์ /var/www/conf/httpd.conf โดยค้นหาบรรทัดต่อไปนี้
#AddType application/x-httpd-php .php เอา # หน้าบรรทัดนี้ออกเป็น
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html #เพิ่ม index.php เข้าไป
จากนั้น
cp /usr/local/share/examples/php5/php.ini-recommended /var/www/conf/php.ini
จากนั้นเพื่อความปลอดภัยให้ทำการแก้ไขไฟล์ /var/www/conf/php.ini โดยเพิ่มบรรทัดต่อไปนี้เข้าไป
disable_functions = escapeshellarg, escapeshellcmd, exec, passthru, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, shell_exec, system, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_lookup_uri,apache_note, apache_request_headers, apache_reset_timeout, apache_response_headers, apache_setenv, getallheaders, virtual, popen, pclose
*** หมายเหตุ ทำให้อยู่บรรทัดเดียวกันน่ะครับ
ต่อไปก็มาติดตั้ง Extension ของ PHP กันเลย
#pkg_add php5-mysql
#/usr/local/sbin/phpxs -a mysql
#pkg_add php5-gd-5.1.6-no_x11p2
#/usr/local/sbin/phpxs -a gd
#pkg_add php5-imap
#/usr/local/sbin/phpxs -a imap
#pkg_add php5-pear
#/usr/local/sbin/phpxs -a pear
#pkg_add php5-soap
#/usr/local/sbin/phpxs -a soap
#pkg_add php5-bz2
#/usr/local/sbin/phpxs -a bz2
#pkg_add php5-mhash
#/usr/local/sbin/phpxs -a mhash
#pkg_add php5-mbstring
#/usr/local/sbin/phpxs -a mbstring
#pkg_add php5-mcrypt
#/usr/local/sbin/phpxs -a mcrypt
#pkg_add php5-ldap
#/usr/local/sbin/phpxs -a ldap
#pkg_add php5-snmp
#/usr/local/sbin/phpxs -a snmp
สำหรับปัญหาที่พบบ่อยหลังการติดตั้ง PHP ก็คือ ไม่เจอโฟลเดอร์สำหรับเก็บ session เพราะว่าปกติของ php จะเก็บ session ไว้ที่ /tmp แต่เมื่อมีการ chroot ไว้ php จึงไม่สามารถสร้างไฟล์ใน /tmp ปกติได้จึงต้องสร้าง /var/www/tmp สำหรับเก็บ session โดยการ
#mkdir /var/www/tmp
#chmod 777 /var/www/tmp
และฟังค์ชันเน็ตเวิร์คบางตัวต้องการไฟล์ /etc/resolf.conf และ /etc/services ก็ควร copy ไฟล์เหล่านี้ไปไว้ใน /var/www/etc เช่นกัน โดย
#mkdir /var/www/etc
#cp /etc/resolv.conf /var/www/etc
#cp /etc/services /var/www/etc
เสร็จแล้วครับ OAMP ของเรา
ทำการ reboot สัก 1 รอบแล้วมาดูผลกัน...