<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My Life As `Kamthorn&#039; &#187; Debian</title>
	<atom:link href="http://kamthorn.org/taxonomy/tags/debian/feed" rel="self" type="application/rss+xml" />
	<link>http://kamthorn.org</link>
	<description></description>
	<lastBuildDate>Sat, 07 Mar 2009 14:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Installing Debian Etch with 256MB USB Memory Stick</title>
		<link>http://kamthorn.org/2008/07/01/installing-debian-etch-with-256mb-usb-memory-stick</link>
		<comments>http://kamthorn.org/2008/07/01/installing-debian-etch-with-256mb-usb-memory-stick#comments</comments>
		<pubDate>Tue, 01 Jul 2008 12:24:44 +0000</pubDate>
		<dc:creator>กำธร</dc:creator>
				<category><![CDATA[ลินุกซ์]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Public]]></category>

		<guid isPermaLink="false">http://kamthorn.org/?p=180</guid>
		<description><![CDATA[มีครั้งหนึ่งผมได้รับโจทย์ให้ติดตั้ง server โดยที่ server ที่จะซื้อใหม่นั้นไม่มี cd-rom มาด้วย เข้าใจว่าเป็นเหตุผลด้านราคา ซึ่งในทางปฏิบัติก็คิดว่า server ทุกตัว คงได้ใช้ cd-rom เฉพาะตอนติดตั้ง และตอนอัพเกรด หรือแก้ไขปัญหาต่าง ๆ เท่านั้น นอกนั้นก็ไม่ได้ใช้เลย จึงไม่จำเป็นแล้วที่ server จะมี cd-rom ทีนี้ปัญหาจึงเป็นว่า จะติดตั้ง Debian โดยไม่ใช้ cd-rom ได้อย่างไร คิดแบบเร็ว ๆ ก็คือใช้ USB memory stick ไงล่ะ แล้วจะทำได้อย่างไร ? ถาม Google จึงพบกับวิธีการในคู่มือของ Debian เองเลย ถึงได้รู้ว่า Debian เค้าเตรียมเรื่องแบบนี้ไว้อยู่แล้วแฮะ ขอสรุปสั้น ๆ เป็นวิธีการที่ผมทำตามขั้นตอนในเว็บดังกล่าวดังต่อไปนี้ คำเตือน: บางขั้นตอนต่อไปนี้เป็นคำสั่งที่ต้องใช้สิทธิของ root ซึ่งหลายคำสั่งเป็นอันตรายหากสั่งอย่างไม่ถูกต้อง ดังนั้นโปรดอ่านให้เข้าใจและทำตามอย่างระมัดระวัง แน่นอนต้องมี [...]]]></description>
			<content:encoded><![CDATA[<p>มีครั้งหนึ่งผมได้รับโจทย์ให้ติดตั้ง server โดยที่ server ที่จะซื้อใหม่นั้นไม่มี cd-rom มาด้วย เข้าใจว่าเป็นเหตุผลด้านราคา ซึ่งในทางปฏิบัติก็คิดว่า server ทุกตัว คงได้ใช้ cd-rom เฉพาะตอนติดตั้ง และตอนอัพเกรด หรือแก้ไขปัญหาต่าง ๆ เท่านั้น นอกนั้นก็ไม่ได้ใช้เลย จึงไม่จำเป็นแล้วที่ server จะมี cd-rom ทีนี้ปัญหาจึงเป็นว่า จะติดตั้ง Debian โดยไม่ใช้ cd-rom ได้อย่างไร คิดแบบเร็ว ๆ ก็คือใช้ USB memory stick ไงล่ะ</p>
<p>แล้วจะทำได้อย่างไร ? ถาม Google จึงพบกับ<a href="http://www.debian.org/releases/stable/i386/ch04s04.html.en">วิธีการในคู่มือของ Debian เองเลย</a> ถึงได้รู้ว่า Debian เค้าเตรียมเรื่องแบบนี้ไว้อยู่แล้วแฮะ ขอสรุปสั้น ๆ เป็นวิธีการที่ผมทำตามขั้นตอนในเว็บดังกล่าวดังต่อไปนี้<br />
<font color="#ff0000"><b>คำเตือน: บางขั้นตอนต่อไปนี้เป็นคำสั่งที่ต้องใช้สิทธิของ root ซึ่งหลายคำสั่งเป็นอันตรายหากสั่งอย่างไม่ถูกต้อง ดังนั้นโปรดอ่านให้เข้าใจและทำตามอย่างระมัดระวัง</b></font></p>
<ol>
<li>แน่นอนต้องมี USB memory stick ก่อน ส่วนความจุนั้น ขึ้นอยู่กับว่าเราอยากใส่ระบบติดตั้งแบบไหน ผมกะว่าจะติดตั้งแค่แบบ netinst ซึ่งตัว iso มันแค่ 150 MB เอง ดังนั้น USB memory stick ตัวเก่า ๆ 256MB ของผม น่าจะได้ใช้ประโยชน์ก็คราวนี้แหละ และก็ถ้ามีข้อมูลที่ต้องการใช้อยู่ ก็คัดลอกออกจาก USB memory stick เสียให้เรียบร้อย จากนั้นก็ลองเช็คนิดนึงว่า USB memory stick ของเราเสียบที่ช่อง usb แล้วจะเห็นเป็น device อะไร ปกติจะเห็นเป็น /dev/sda แต่หลัง ๆ ก็ไม่แน่ เพราะถ้าฮาร์ดดิสก์ใช้ SCSI (คงน้อย) หรือ S-ATA มันจะใช้ sda ไปแล้ว ซึ่งคงจะเห็น USB เป็น sdb หรือ sdc หรืออื่น ๆ แทน ดังนั้น ในขั้นตอนต่อ ๆ ไปผมจะใช้ /dev/sdX แทนนะครับ ให้เปลี่ยน X เป็นตัวที่ถูกต้องต่อไป</li>
<li>แบ่งพาร์ทิชันใหม่ เนื่องจากเดิมนั้น เจ้า USB memory stick ของผมเป็นแบบ partitionless คือไม่มีการแบ่งพาร์ทิชัน แล้วใช้ทั้งตัวเป็นที่เก็บข้อมูลเลย เวลาใช้บนลินุกซ์ก็จะเมานท์ /dev/sdX มาใช้เลย ไม่ได้เป็น sdX1<br />
โดยการแบ่งจะใช้คำสั่ง dd เพื่อล้าง sector แรกก่อน และใช้ fdisk เพื่อสร้างพาร์ทิชัน โดย</p>
<pre># dd if=/dev/zero of=/dev/sdX bs=512 count=1
# fdisk /dev/sdX
</pre>
<p>กด n (สร้าง partition)<br />
กด p (เลือก primary partition)<br />
กด 1 (เลือก partition ที่ 1)<br />
กด enter เฉย ๆ เพื่อเริ่มจาก cylinder แรก<br />
กด enter เฉย ๆ เพื่อสิ้นสุดที่ cylinder สุดท้าย<br />
กด a เพื่อกำหนดให้ partition บูตได้<br />
กด 1 กำหนดให้บูตจาก partition 1<br />
กด w เพื่อบันทึกและออกจาก fdisk</li>
<li>สร้าง file system
<pre># mkdosfs /dev/sdX1
</pre>
<p>คำสั่ง mkdosfs ถ้าไม่มี ให้ติดตั้ง dosfstools ก่อนโดย apt-get install dosfstools (ปกติคิดว่ามีอยู่แล้วนะ)</li>
<li>ติดตั้ง syslinux สำหรับทำหน้าที่เป็น boot loader
<pre># apt-get install mtools syslinux
# syslinux /dev/sdX1</pre>
</li>
<li>เมานท์ USB memory stick ไปที่ตำแหน่งชั่วคราวซักที่หนึ่งก่อน
<pre># mkdir /mnt/tmp
# mount /dev/sdX1 /mnt/tmp</pre>
<p>จะเห็นแฟ้ม ldlinux.sys อยู่ในนี้แล้ว ไม่ต้องลบหรือทำอะไรกับมันนะครับ ตัวนี้เป็นส่วนหนึ่งของ boot loader</li>
<li>ดาวน์โหลดไฟล์ vmlinuz และ initrd.gz จาก <a href="http://mirror.in.th/debian/dists/Debian4.0r3/main/installer-amd64/current/images/hd-media/">http://mirror.in.th/debian/dists/Debian4.0r3/main/installer-amd64/current/images/hd-media/</a> ไปเก็บใน /mnt/tmp (รุ่นอื่น ๆ ก็เลือกเอาตามความเหมาะสมนะครับ ณ ปัจจุบันรุ่นที่ stable คือ 4.0r3 และผมก็เลือกติดตั้งเป็นแบบ 64bit ซึ่ง processor ของ server ใหม่ ๆ ในปัจจุบันก็สนับสนุนหมดแล้ว ยกเว้นจะเก่า ๆ จริง ๆ ก็ใช้ i386 แทน)</li>
<li>สร้างแฟ้ม syslinux.cfg ใน /mnt/tmp โดยมีเนื้อหาดังนี้
<pre>default vmlinuz
append initrd=initrd.gz</pre>
</li>
<li>ดาวน์โหลดไฟล์ ISO image ตัวติดตั้ง debian จาก <a href="ftp://mirror.in.th/debian_iso/4.0_r3/amd64/iso-cd/">http://mirror.in.th/debian_iso/4.0_r3/amd64/iso-cd/</a> ผมเลือกแบบ netinst ด้วยเหตุผลเรื่องขนาด ดังนั้นจึงเลือกไฟล์ debian-40r3-amd64-netinst.iso แล้วนำไปใส่ไว้ที่ /mnt/tmp เช่นกัน ถ้า USB memory stick ใหญ่กว่านี้เป็น 1GB ก็ดาวน์โหลดแผ่นติดตั้งแผ่นแรกมาลงก็ได้ หรือถ้าน้อยกว่านี้ เช่น 64MB ก็เลือกแบบ businesscard ก็ได้</li>
<li>unmount แล้วนำไปทดลองบูตดูได้เลย
<pre># umount /mnt/tmp</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://kamthorn.org/2008/07/01/installing-debian-etch-with-256mb-usb-memory-stick/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>drupal+debian กับปัญหาตาราง sessions โตขึ้นเรื่อยๆ</title>
		<link>http://kamthorn.org/2007/09/12/drupaldebian-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-sessions-%e0%b9%82%e0%b8%95%e0%b8%82%e0%b8%b6%e0%b9%89%e0%b8%99</link>
		<comments>http://kamthorn.org/2007/09/12/drupaldebian-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-sessions-%e0%b9%82%e0%b8%95%e0%b8%82%e0%b8%b6%e0%b9%89%e0%b8%99#comments</comments>
		<pubDate>Wed, 12 Sep 2007 10:50:21 +0000</pubDate>
		<dc:creator>กำธร</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Public]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[opentle.org]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kamthorn.org/2007/09/12/drupaldebian-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-sessions-%e0%b9%82%e0%b8%95%e0%b8%82%e0%b8%b6%e0%b9%89%e0%b8%99/</guid>
		<description><![CDATA[ที่เว็บไซต์ opentle.org ใช้ drupal กับ community ขนาดใหญ่พอสมควร ส่วน OS เปลี่ยนจากเดิมใช้ FreeBSD 6.2 มาเป็น debian 4.0 (etch) ได้สัก 9 เดือนเศษละ มีข้อสังเกตว่า ตั้งแต่เปลี่ยนเป็น debian ตาราง sessions ใหญ่ขึ้นเรื่อยๆ จนเป็นนับล้านเรคอร์ดในเวลาไม่กี่เดือน ทั้งๆ ที่ session.gc_maxlifetime ก็ตั้งไว้ราวๆ 24 วัน ต้องคอยล้างทิ้งเป็นระยะๆ ทีแรกนึกไม่ออกว่าเกิดจากอะไร ดูที่เว็บไซต์อื่นๆ ก็มีทั้งเป็นบ้าง ไม่เป็นบ้าง แต่ส่วนใหญ่ไม่รู้ว่ามีปัญหานี้ เพราะ session มีน้อย จนไม่รู้สึกอะไร ขณะที่ opentle นั้น แค่เดือนเดียวก็เห็นได้ชัดว่าตารางมันใหญ่ขึ้น เดิมที่ไล่แกะดูการทำงานของตารางนี้คือ ปกติ php จะจัดการ session ด้วยตัวเอง ซึ่งจะสร้างเป็นแฟ้ม session ไว้ใน [...]]]></description>
			<content:encoded><![CDATA[<p>ที่เว็บไซต์ <a href="http://www.opentle.org/">opentle.org</a> ใช้ <a href="http://drupal.org/">drupal</a> กับ community ขนาดใหญ่พอสมควร ส่วน OS <a href="http://kamthorn.org/2006/11/06/5c27switch5c27_e0b888e0b8b2e0b881_freebsd_e0b984e0b89b_debian/">เปลี่ยนจากเดิมใช้ FreeBSD 6.2 มาเป็น debian 4.0 (etch)</a> ได้สัก 9 เดือนเศษละ มีข้อสังเกตว่า ตั้งแต่เปลี่ยนเป็น debian ตาราง sessions ใหญ่ขึ้นเรื่อยๆ จนเป็นนับล้านเรคอร์ดในเวลาไม่กี่เดือน ทั้งๆ ที่ session.gc_maxlifetime ก็ตั้งไว้ราวๆ 24 วัน ต้องคอยล้างทิ้งเป็นระยะๆ ทีแรกนึกไม่ออกว่าเกิดจากอะไร ดูที่เว็บไซต์อื่นๆ ก็มีทั้งเป็นบ้าง ไม่เป็นบ้าง แต่ส่วนใหญ่ไม่รู้ว่ามีปัญหานี้ เพราะ session มีน้อย จนไม่รู้สึกอะไร ขณะที่ opentle นั้น แค่เดือนเดียวก็เห็นได้ชัดว่าตารางมันใหญ่ขึ้น</p>
<p>เดิมที่ไล่แกะดูการทำงานของตารางนี้คือ ปกติ php จะจัดการ session ด้วยตัวเอง ซึ่งจะสร้างเป็นแฟ้ม session ไว้ใน /var/lib/php5/ แต่ใน drupal จะจัดการ session ด้วยฐานข้อมูล คือเก็บลงตาราง sessions แล้วเขียน function มา handle ซึ่งดูรายละเอียดฟังก์ชันเหล่านี้ได้จาก includes/session.inc และกำหนดให้ใช้ฟังก์ชันเหล่านี้ในการจัดการ session ใน includes/bootstrap.inc ซึ่งก็ดูปกติดี โดยเฉพาะตรงฟังก์ชัน sess_gc() ซึ่งมีไว้เคลียร์ session ที่อายุเกิน maxlifetime ทิ้ง โดยการลบ record ทิ้งด้วยเงื่อนไข ก็ดูเรียบร้อยดี</p>
<p>วันนี้อยากเคลียร์ปัญหานี้ให้จบเลยแกะดูการทำงานต่อ เริ่มจากตรวจล็อกของ mysql พบว่า ไม่เคยมีคำสั่ง &#8220;DELETE FROM sessions &#8230;.&#8221; ถูกรันเลย แปลว่า sess_gc() ไม่เคยถูกเรียกใช้จาก php เลย คำถามจึงมีอยู่ว่า เมื่อไหร่ที่ php จะเรียกใช้ sess_gc() ทำให้ต้องย้อนไปแกะดูใหม่</p>
<p>เปิดดู php.ini อีกครั้ง (ก่อนนี้ก็เคยแกะดูแล้ว แต่ไม่พบอะไรผิดปกติ) คราวนี้เน้นไปที่เรื่อง gc ก็พบตรงนี้เข้า</p>
<div class="dean_ch" style="white-space: nowrap;">
; Define the probability that the &#8216;garbage collection&#8217; process is started<br />
; on every session initialization.<br />
; The probability is calculated by using gc_probability/gc_divisor,<br />
; e.g. 1/100 means there is a 1% chance that the GC process starts<br />
; on each request.</p>
<p>; This is disabled in the Debian packages, due to the strict permissions<br />
; on /var/lib/php5. &nbsp;Instead of setting this here, see the cronjob at<br />
; /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below<br />
;session.gc_probability = 0<br />
session.gc_divisor &nbsp; &nbsp; = 100<br />
&nbsp;</div>
<p>นั่นคือ ปกติ session.gc_probability = 1 จะทำให้ทุกครั้งที่ php ทำงาน จะมีโอกาส 1/100 ที่ gc ทำงาน หรือพอจะตีความว่า รัน php 100 ครั้ง gc จะถูกเรียก 1 ครั้งก็พอได้ แต่ใน debian ไม่ใช่อย่างนั้น debian จะ comment ค่านี้ไว้ ทำให้มีค่าเป็น 0 เสมอ gc จะไม่ถูกเรียกใช้งาน แต่จะมี cron สำหรับลบ session ที่หมดอายุแทน เหตุผลก็อธิบายไว้ใน comment แล้ว</p>
<p>ตรงนี้แหละคือปัญหา เพราะนั่นเท่ากับว่า sess_gc() ที่ drupal เตรียมไว้ให้ php เรียกใช้ จะไม่ถูกเรียกใช้เลย นั่นคือสาเหตุที่ opentle.org มีปัญหาดังกล่าว</p>
<h3>การแก้ปัญหา</h3>
<p>การแก้ไฟล์ php.ini ไม่ใช่ทางออกที่ดี ควรแก้ใน drupal ในไฟล์ sites/default/settings.php แทน โดยเพิ่ม</p>
<div class="dean_ch" style="white-space: nowrap;">
<a href="http://www.php.net/ini_set"><span class="kw3">ini_set</span></a><span class="br0">&#40;</span><span class="st0">&#8216;session.gc_probability&#8217;</span>, &nbsp; <span class="nu0">1</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/ini_set"><span class="kw3">ini_set</span></a><span class="br0">&#40;</span><span class="st0">&#8216;session.gc_divisor&#8217;</span>, &nbsp; <span class="nu0">100</span><span class="br0">&#41;</span>;<br />
&nbsp;</div>
<p>เข้าไป เท่านี้ก็เรียบร้อย ทิ้งไว้สักพัก session ก็ถูกจัดการได้ถูกต้องตามปกติแล้ว</p>
]]></content:encoded>
			<wfw:commentRss>http://kamthorn.org/2007/09/12/drupaldebian-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2%e0%b8%95%e0%b8%b2%e0%b8%a3%e0%b8%b2%e0%b8%87-sessions-%e0%b9%82%e0%b8%95%e0%b8%82%e0%b8%b6%e0%b9%89%e0%b8%99/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ตามหา Virtual Host Control Panel แบบ Open Source</title>
		<link>http://kamthorn.org/2007/08/27/open-source-virtual-host-control-panel</link>
		<comments>http://kamthorn.org/2007/08/27/open-source-virtual-host-control-panel#comments</comments>
		<pubDate>Mon, 27 Aug 2007 07:04:41 +0000</pubDate>
		<dc:creator>กำธร</dc:creator>
				<category><![CDATA[ลินุกซ์]]></category>
		<category><![CDATA[โอเพนซอร์ส]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Public]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://kamthorn.org/2007/08/27/open-source-virtual-host-control-panel/</guid>
		<description><![CDATA[ช่วงนี้ ยามว่างๆ จะตามหา control panel เจ๋งๆ อยู่ ก็พวก panel สำหรับให้บริการเว็บโฮสติ้งแบบ virtual host นั่นแหละ ทำนองเดียวกับพวก cPanel แต่เน้นที่เป็น open source และใช้บน debian gnu/linux (โดยเฉพาะ etch) ได้ และต้องใช้กับโฮสต์ที่บริการ PHP5 ได้ด้วย เคยลอง gnupanel ไปทีนึง ไม่ค่อยประทับใจ โดยเฉพาะโค้ดแกะยากมาก ตั้งชื่อไฟล์เป็นภาษา spain อ่านไม่เข้าใจ comment ก็ภาษา spain อีก สุดท้ายก็เลิกใช้ เปลี่ยนไปใช้ ispconfig ก็ดูดีนะ แต่ยังไม่ถูกใจผู้ใช้ บอกว่าใช้ยากไป ไม่เหมือน panel อื่นๆ หลายคนแนะนำ VHCS เข้าไปดูเว็บเค้าละ แต่ห่วงว่าจะใช้กับ PHP5 ได้หรือไม่ และอีกอย่างที่ห่วงคือ [...]]]></description>
			<content:encoded><![CDATA[<p>ช่วงนี้ ยามว่างๆ จะตามหา control panel เจ๋งๆ อยู่ ก็พวก panel สำหรับให้บริการเว็บโฮสติ้งแบบ virtual host นั่นแหละ ทำนองเดียวกับพวก cPanel แต่เน้นที่เป็น open source และใช้บน debian gnu/linux (โดยเฉพาะ etch) ได้ และต้องใช้กับโฮสต์ที่บริการ PHP5 ได้ด้วย</p>
<p>เคยลอง <a href="http://www.gnupanel.org/">gnupanel</a> ไปทีนึง ไม่ค่อยประทับใจ โดยเฉพาะโค้ดแกะยากมาก ตั้งชื่อไฟล์เป็นภาษา spain อ่านไม่เข้าใจ comment ก็ภาษา spain อีก สุดท้ายก็เลิกใช้ เปลี่ยนไปใช้ <a href="http://www.ispconfig.org/">ispconfig</a> ก็ดูดีนะ แต่ยังไม่ถูกใจผู้ใช้ บอกว่าใช้ยากไป ไม่เหมือน panel อื่นๆ</p>
<p>หลายคนแนะนำ <a href="http://www.vhcs.net/">VHCS</a> เข้าไปดูเว็บเค้าละ แต่ห่วงว่าจะใช้กับ PHP5 ได้หรือไม่ และอีกอย่างที่ห่วงคือ ซอฟต์แวร์ตัวนี้ไม่มีอัพเดทมาปีครึ่งแล้ว ไม่แน่ใจว่าอนาคตยังดีอยู่หรือไม่ และก็พึ่งไปพบตัวที่เป็น fork ของ VHCS อีก 2 ตัว คือ <a href="http://www.vhcp.org/">VHCP</a> และ <a href="http://isp-control.net/">ISPCP</a> แต่ยังไม่ออกตัวจริงทั้งคู่ แล้วก็อื่นๆ ก็มี <a href="http://www.web-cp.net/">WEB-CP</a> กับ <a href="http://syscp.org/">SysCP</a> ตัวหลังนี่หน้าตาธรรมดา แต่มีคนใช้เยอะดีเหมือนกัน ดูค่อนข้าง stable ดี</p>
<p>เดี๋ยวขอไปลองให้หมดก่อน ค่อยมาตัดสินใจอีกที</p>
]]></content:encoded>
			<wfw:commentRss>http://kamthorn.org/2007/08/27/open-source-virtual-host-control-panel/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Setting up apache2-mpm-worker, mod-fcgid, php5-cgi on Debian Etch</title>
		<link>http://kamthorn.org/2007/08/09/setting-up-apache2-mpm-worker-mod-fcgid-php5-cgi-on-debian-etch</link>
		<comments>http://kamthorn.org/2007/08/09/setting-up-apache2-mpm-worker-mod-fcgid-php5-cgi-on-debian-etch#comments</comments>
		<pubDate>Wed, 08 Aug 2007 19:35:44 +0000</pubDate>
		<dc:creator>กำธร</dc:creator>
				<category><![CDATA[ลินุกซ์]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Public]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[fcgid]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kamthorn.org/2007/08/09/setting-up-apache2-mpm-worker-mod-fcgid-php5-cgi-on-debian-etch/</guid>
		<description><![CDATA[เคยเจอปัญหาเว็บเซิร์ฟเวอร์เมื่อมีคนเข้าใช้เยอะๆ แล้วช้าลงมากๆ ไหม ทั้งๆ ที่ซีพียูก็แรง แรมก็มีไม่น้อย ปัญหามักจะเกิดขึ้นเมื่อเว็บเซิร์ฟเวอร์นั้นมี mod-php และบางครั้งมีไฟล์ static ใหญ่ๆ เช่นภาพถ่าย วิดีโอ ไฟล์พรีเซนต์ ไฟล์ดาวน์โหลดต่างๆ ให้ดาวน์โหลดผ่าน http ปัญหามักเกิดจาก เมื่อเราใช้ mod-php ก็ต้องใช้ apache ที่ใช้ mpm-prefork ด้วย นั่นคือเมื่อมี connection เข้ามา apache ต้อง fork process เพื่อให้บริการ connection นั้นเป็นรายๆ ไป ปัญหาคือว่า mod-php ทำให้แต่ละ process มีขนาดใหญ่มาก ยิ่งเว็บแอ็พที่ใช้มีขนาดใหญ่ ยิ่งทำให้แต่ละ process ใหญ่เข้าไปอีก ปัญหาจะหนักขึ้น เมื่อต้องให้บริการดาวน์โหลดไฟล์ หรือมีรูปภาพจำนวนมากบนเว็บไซต์ด้วย เพราะแม้ว่าพวกนี้จะไม่ต้องการซีพียูในการประมวลผลมากนัก แต่การที่ apache ต้อง fork process มาเพื่อให้บริการไฟล์พวกนี้ [...]]]></description>
			<content:encoded><![CDATA[<p>เคยเจอปัญหาเว็บเซิร์ฟเวอร์เมื่อมีคนเข้าใช้เยอะๆ แล้วช้าลงมากๆ ไหม ทั้งๆ ที่ซีพียูก็แรง แรมก็มีไม่น้อย ปัญหามักจะเกิดขึ้นเมื่อเว็บเซิร์ฟเวอร์นั้นมี mod-php และบางครั้งมีไฟล์ static ใหญ่ๆ เช่นภาพถ่าย วิดีโอ ไฟล์พรีเซนต์ ไฟล์ดาวน์โหลดต่างๆ ให้ดาวน์โหลดผ่าน http</p>
<p>ปัญหามักเกิดจาก เมื่อเราใช้ mod-php ก็ต้องใช้ apache ที่ใช้ mpm-prefork ด้วย นั่นคือเมื่อมี connection เข้ามา apache ต้อง fork process เพื่อให้บริการ connection นั้นเป็นรายๆ ไป ปัญหาคือว่า mod-php ทำให้แต่ละ process มีขนาดใหญ่มาก ยิ่งเว็บแอ็พที่ใช้มีขนาดใหญ่ ยิ่งทำให้แต่ละ process ใหญ่เข้าไปอีก ปัญหาจะหนักขึ้น เมื่อต้องให้บริการดาวน์โหลดไฟล์ หรือมีรูปภาพจำนวนมากบนเว็บไซต์ด้วย เพราะแม้ว่าพวกนี้จะไม่ต้องการซีพียูในการประมวลผลมากนัก แต่การที่ apache ต้อง fork process มาเพื่อให้บริการไฟล์พวกนี้ ก็ทำให้ต้องเสีย memory มากขึ้นไปอีก ยิ่งเน็ตเวิร์คของไคลเอนต์ช้า ยิ่งทำให้ต้องใช้เวลาดาวน์โหลดนาน จะพบว่า จำนวน connection มีมากขึ้นเรื่อยๆ<span id="more-140"></span></p>
<p>ปัญหาจะถึงจุดวิกฤติเมื่อ memory หมดเกลี้ยง ลินุกซ์จะเริ่ม swap หน่วยความจำบางส่วนลงดิสก์ และเมื่อ memory ที่กำลัง active มีมากกว่า memory จริงๆ การ swap จะเกิดขึ้นแบบไม่รู้จบ ถึงตอนนี้ท่านก็จะพบว่า แม้กระทั่งการ ssh เข้ามาที่เซิร์ฟเวอร์ ก็เป็นเรื่องยาก แม้เมื่อล็อกอินที่หน้าเครื่อง ก็อาจจะทำไม่ได้ด้วยซ้ำ ทางหนึ่งที่แอดมินชอบทำก็คือ กด ctrl-alt-del เพื่อรีบูตเซิร์ฟเวอร์ หลังจากรีบูตก็จะใช้งานได้สักพัก แล้วก็จะเกิดวิกฤติอีกครั้ง ส่วนการเพิ่ม memory ก็แก้ปัญหาได้ในระยะสั้น และไม่สามารถรองรับผู้ใช้เพิ่มได้อีกมากนัก</p>
<p>ที่จริงแล้ว apache2 ยังมี mpm แบบอื่นๆ ที่ทำงานแบบ thread เช่น mpm-worker ซึ่งจะใช้ memory น้อยลงมาก เพราะไม่ต้อง fork process เป็นหลายๆ process เพื่อรองรับ connection แต่ว่า mpm-worker ไม่สามารถใช้กับ mod-php ได้ ทางหนึ่งที่จะทำได้คือ รัน php แบบ cgi ซึ่งไม่ใช่ทางเลือกที่ดีนัก เพราะจำเป็นต้องเริ่ม process php-cgi ใหม่ทุกครั้งที่เปิดหน้า php 1 หน้า ทางออกที่ดีที่สุดคือใช้ mod-fcgid หรือ mod-fastcgi ก็ได้ แต่ fcgid ดูจะเร็วกว่านิดหน่อย โดยหลักการจะเหมือนกันคือ php-cgi จะคอมไพล์ให้รองรับ fastcgi ไว้อยู่แล้ว คือ จะรัน script ที่ส่งเข้ามาให้จนเสร็จ แต่จะไม่ kill process แต่จะยังคงรอรับ script อื่นมาประมวลผลต่อไป ทำให้ได้ข้อดีของการทำงานแบบ mod หรือ embeded คือไม่ต้อง fork process บ่อยๆ ในขณะที่มีข้อดีแบบ cgi คือ ถ้าไม่จำเป็นต้องประมวลผล php ก็ไม่ต้องเรียกขึ้นมาใช้งาน ทำให้รับ connection ได้มากขึ้น และใช้หน่วยความจำน้อยลง และทำงานได้ไวขึ้นกว่าเดิม</p>
<p>ขั้นตอนบน Debian Etch มีดังนี้ โดยสมมติว่าเรามีระบบที่ให้บริการเว็บตามปกติอยู่แล้ว แต่เป็น apache2-mpm-prefork</p>
<ul>
<li>สร้าง directory /var/www/fcgi-bin
<div class="dean_ch" style="white-space: nowrap;"><span class="kw2">mkdir</span> /var/www/fcgi-bin</div>
</li>
<li>สร้างแฟ้ม /var/www/fcgi-bin/php5.fcgi ให้มีเนื้อหาดังนี้
<div class="dean_ch" style="white-space: nowrap;"><span class="re3">#!/bin/sh</span><br />
<span class="re2">PHPRC=</span><span class="st0">&quot;/etc/php5/cgi&quot;</span><br />
<span class="kw3">export</span> PHPRC<br />
<span class="re2">PHP_FCGI_CHILDREN=</span><span class="nu0">4</span><br />
<span class="kw3">export</span> PHP_FCGI_CHILDREN<br />
<span class="re2">PHP_FCGI_MAX_REQUESTS=</span><span class="nu0">5000</span><br />
<span class="kw3">export</span> PHP_FCGI_MAX_REQUESTS<br />
<span class="kw3">exec</span> /usr/bin/php5-cgi</div>
</li>
<li>เปลี่ยน mode ให้ execute ได้
<div class="dean_ch" style="white-space: nowrap;"><span class="kw2">chmod</span> +x /var/www/fcgi-bin/php5.fcgi</div>
</li>
<li>สร้างแฟ้ม /etc/apache2/conf.d/php5-fcgid ให้มีเนื้อหาดังนี้
<div class="dean_ch" style="white-space: nowrap;"><span class="kw1">ScriptAlias</span> /fcgi-bin/ /var/www/fcgi-bin/<br />
&lt;directory <span class="st0">&quot;/var/www/fcgi-bin&quot;</span>&gt;<br />
&nbsp; <span class="kw1">AllowOverride</span> <span class="kw2">None</span><br />
&nbsp; <span class="kw1">Options</span> ExecCGI -MultiViews +SymLinksIfOwnerMatch<br />
&nbsp; <span class="kw1">Order</span> <span class="kw1">allow</span>,<span class="kw1">deny</span><br />
&nbsp; <span class="kw1">Allow</span> <span class="kw1">from</span> <span class="kw1">all</span><br />
&lt;/directory&gt;<br />
<span class="kw1">Action</span> &nbsp;application/x-httpd-php /fcgi-bin/php5.fcgi<br />
<span class="kw1">AddHandler</span> &nbsp;application/x-httpd-php .php .phtml</div>
</li>
<li>ลบ mod-php5 แล้วติดตั้ง php5-cgi
<div class="dean_ch" style="white-space: nowrap;">apt-get remove libapache2-mod-php5<br />
apt-get <span class="kw2">install</span> php5-cgi</div>
</li>
<li>ติดตั้ง libapache2-mod-fcgid และเปิดใช้งาน
<div class="dean_ch" style="white-space: nowrap;">apt-get <span class="kw2">install</span> libapache2-mod-fcgid<br />
a2enmod fcgid</div>
</li>
<li>ถอดถอน apache2-mpm-prefork แล้วติดตั้ง apache2-mpm-worker
<div class="dean_ch" style="white-space: nowrap;">apt-get remove apache2-mpm-prefork<br />
apt-get <span class="kw2">install</span> apache2-mpm-worker</div>
<p>จากนั้นมันจะ start apache ตัวใหม่ให้โดยอัตโนมัติ ให้ลองทดสอบ เว็บไซต์ดูว่ายังรันได้ปกติดีหรือไม่
</li>
</ul>
<p>ถ้าใน php.ini เดิมนั้น ได้มีการปรับค่าต่างๆ ไว้ เช่น memory_limit ก็ให้ปรับในแฟ้ม /etc/php5/cgi/php.ini ตามด้วย</p>
<p>ทีนี้จะพบว่า จะมี process แบ่งเป็น 2 ชื่อ คือ apache2 และ php5-cgi โดย apache2 จะมีจำนวน process ไม่มากนัก และมีขนาดเล็ก ส่วน php5-cgi จะมีการ fork ไว้จำนวนหนึ่ง ซึ่งไม่ได้ทำงานตลอดเวลา คือจะทำงานเมื่อมีการเรียกแฟ้ม .php ขึ้นมาทำงานเท่านั้น ผลโดยรวมคือ ระบบเร็วขึ้นอย่างเห็นได้ชัด คราวนี้ปัญหาไปอยู่ที่ mysql server แทนละ แต่โดยรวมยังถือว่ารับมือไหว</p>
]]></content:encoded>
			<wfw:commentRss>http://kamthorn.org/2007/08/09/setting-up-apache2-mpm-worker-mod-fcgid-php5-cgi-on-debian-etch/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

