<?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>SpaLinux.com - สปาลีนุกซ์ &#187; Kernel</title>
	<atom:link href="http://spalinux.com/category/kernel/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>เพื่อชีวิตที่ผ่อนคลายของคนใช้ลีนุกซ์</description>
	<lastBuildDate>Sat, 12 May 2012 10:38:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>คำสั่งตรวจสอบฮาร์ดแวร์ของเครื่อง</title>
		<link>http://spalinux.com/2012/04/command-to-check-hardware-specification-in-linux</link>
		<comments>http://spalinux.com/2012/04/command-to-check-hardware-specification-in-linux#comments</comments>
		<pubDate>Sat, 28 Apr 2012 10:36:24 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Disk]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2187</guid>
		<description><![CDATA[หลังการติดตั้งลีนุกซ์เสร็จทุกครั้่ง ก่อนจะคอนฟิกแล้วนำไปใช้งาน แนะนำให้ใช้คำสั่งลีนุกซ์ ดูฮาร์ดแวร์ของเครื่อง เพื่อตรวจสอบความถูกต้องว่าเราลงถูกต้อง ครบถ้วนไหม ในที่นี้จะแนะนำคำสั่งเพื่อตรวจสอบฮาร์ดแวร์หลัก 3 ส่วนคือ CPU, Memory และ Disk CPU ใช้คำสั่ง lscpu เพื่อดูข้อมูลโดยรวมของ CPU เครื่องได้ ตัวอย่างผลลัพธ์ที่ได้ [root@cent6 ~]# lscpu Architecture:          x86_64 CPU op-mode(s):        32-bit, 64-bit CPU(s):                4 Thread(s) per core:    1 Core(s) per socket:    4 CPU socket(s):         1 NUMA node(s):          1 Vendor ID:             GenuineIntel CPU family:            6 Model:                 15 Stepping:              11 [...]]]></description>
			<content:encoded><![CDATA[<p>หลังการติดตั้งลีนุกซ์เสร็จทุกครั้่ง ก่อนจะคอนฟิกแล้วนำไปใช้งาน แนะนำให้ใช้คำสั่งลีนุกซ์ ดูฮาร์ดแวร์ของเครื่อง เพื่อตรวจสอบความถูกต้องว่าเราลงถูกต้อง ครบถ้วนไหม</p>
<p>ในที่นี้จะแนะนำคำสั่งเพื่อตรวจสอบฮาร์ดแวร์หลัก 3 ส่วนคือ CPU, Memory และ Disk</p>
<p><span id="more-2187"></span></p>
<h4>CPU</h4>
<p>ใช้คำสั่ง lscpu เพื่อดูข้อมูลโดยรวมของ CPU เครื่องได้</p>
<p>ตัวอย่างผลลัพธ์ที่ได้</p>
<pre>[root@cent6 ~]# <strong>lscpu</strong>
<span style="color: #0000ff;">Architecture:          x86_64</span>
<span style="color: #0000ff;">CPU op-mode(s):        32-bit, 64-bit</span>
<span style="color: #0000ff;">CPU(s):                4</span>
Thread(s) per core:    1
Core(s) per socket:    4
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 15
Stepping:              11
<span style="color: #0000ff;">CPU MHz:               2659.626</span>
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K</pre>
<p>&nbsp;</p>
<p>หรือหากต้องการดูรายละเอียดของ CPU ในแต่ละ core เลย สามารถทำได้โดยใช้คำสั่ง cat อ่านไฟล์ /proc/cpuinfo</p>
<p>ผลลัพธ์จะแสดงรายละเอียดขึ้นมาทั้งหมด (ในตัวอย่างนี้ตัดมาเฉพาะ 2 core แรก)</p>
<pre>[root@cent6 ~]# <strong>cat /proc/cpuinfo</strong>
<span style="color: #0000ff;">processor       : 0</span>
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
<span style="color: #0000ff;">model name      : Intel(R) Xeon(R) CPU X5355 @ 2.66GHz</span>
stepping        : 11
<span style="color: #0000ff;">cpu MHz         : 2659.626</span>
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi
bogomips        : 5319.25
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:</pre>
<pre><span style="color: #0000ff;">processor       : 1</span>
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
<span style="color: #0000ff;">model name      : Intel(R) Xeon(R) CPU X5355  @ 2.66GHz</span>
stepping        : 11
<span style="color: #0000ff;">cpu MHz         : 2659.626</span>
cache size      : 4096 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 4
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi
bogomips        : 5320.01
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:
...</pre>
<p>&nbsp;</p>
<h4>Memory</h4>
<p>สำหรับหน่วยความจำ หากต้องการดูแค่ขนาดรวม memory ที่ลีนุกซ์เห็นและใช้งานได้ ให้ใช้คำสั่ง free แล้วดูส่วน total จะเป็นขนาดของหน่วยความจำรวมของเครื่อง ผลลัพธ์ที่แสดงโดยดีฟอลต์จะเป็นหน่วย kB (kilo bytes)</p>
<pre>[root@cent6 ~]# <strong>free</strong>
             <span style="color: #0000ff;">total      </span> used       free     shared    buffers     cached
<span style="color: #0000ff;">Mem</span>:       <span style="color: #0000ff;">1020756    </span> 258060     762696          0      20140     106752
-/+ buffers/cache:     131168     889588
Swap:      2097144          0    2097144</pre>
<p>เช่น เครื่องนี้มีขนาดหน่วยความจำ (memory) 1020756 kB หรือประมาณ 1 GB</p>
<p>แต่หากต้องการดูรายละเอียดถึงฮาร์ดแวร์เลยว่า มี memory กี่แผง กี่สล๊อต ต้องใช้คำสั่ง dmidecode ซึ่งค่อนข้างดูยากพอสมควร และแตกต่างกันตามชนิดของฮาร์ดแวร์</p>
<p>แนะนำให้ดูจาก BIOS หรือพอร์ต Management (out-of-band) ของเครื่องจะง่ายกว่า แล้วใช้คำสั่ง free เพื่อดูผลรวมของ memory ที่ลีนุกซ์เห็น</p>
<p>&nbsp;</p>
<h4>Disk</h4>
<p>ใช้คำสั่ง fdisk -l เพื่อดูดิสก์ทั้งหมดที่ต่ออยู่ ผลลัพธ์ที่ได้ จะแสดงชื่อดิสก์ที่ลีนุกซ์ใช้ เช่น /dev/sda ขนาดฮาร์ดดิสก์ (500 GB) และข้อมูลการแบ่งพาร์ทิชั่น</p>
<pre>[root@cent6 ~]# <strong>fdisk -l</strong></pre>
<pre>Disk <span style="color: #0000ff;">/dev/sda: 500 GB</span>, 500007860016 bytes
 255 heads, 63 sectors/track, 60800 cylinders
 Units = cylinders of 16065 * 512 = 8225180 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes</pre>
<pre>Device Boot      Start         End      Blocks   Id  System
 /dev/sda1   *           1          25      204800   83  Linux
 /dev/sda2              26       12773   102400000   83  Linux
 /dev/sda3           12774       14804    16380000   82  Linux swap / Solaris</pre>
<p>&nbsp;</p>
<p>หากต้องการดูรายละเอียดของฮาร์ดดิสก์ เช่นยี่ห้อ รุ่น serial number ต้องใช้คำสั่ง hdparm ออปชั่น &#8216;-I&#8217; แล้วตามด้วยชื่อดิสก์ที่ต้องการดู</p>
<pre>[root@cent6 ~]# <strong>hdparm -I /dev/sda</strong></pre>
<pre>/dev/sda:</pre>
<pre>ATA device, with non-removable media
<span style="color: #0000ff;"> Model Number:       ST3500640A</span>
<span style="color: #0000ff;"> Serial Number:      123456789</span>
 Firmware Revision:  3.0</pre>
<p>เช่นเดียวกับการตรวจสอบหน่วยความจำ (memory) ผลลัพธ์ที่ได้ อาจแตกต่างกันไป บางเครื่องหรือดิสก์บางรุ่นก็ดูไม่ได้  ขึ้นอยู่กับชนิดของฮาร์ดแวร์ เพื่อความง่ายแนะนำให้ใช้ BIOS ของเครื่องตรวจสอบรายละเอียด</p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/command-to-check-hardware-specification-in-linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>System clock uses UTC กับเวลาของเครื่องลีนุกซ์</title>
		<link>http://spalinux.com/2012/04/system-clock-uses-utc-and-linux-system-time-date</link>
		<comments>http://spalinux.com/2012/04/system-clock-uses-utc-and-linux-system-time-date#comments</comments>
		<pubDate>Mon, 16 Apr 2012 14:39:37 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Time]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2101</guid>
		<description><![CDATA[ตอนติดตั้ง CentOS 6 จะมีหน้าจอให้  เลือก time zone เพื่อเลือกโซนเวลาที่เครื่องลีนุกซ์ตั้งอยู่ ในประเทศไทย ก็เลือกเป็น Asia/Bangkok ในหน้าจอเดียวกันนี้ ด้านล่างซ้ายจะมีให้ออปชั่น &#8220;System clock uses UTC&#8221; ให้เลือก โดยดีฟอลต์จะคลิ้กเลือกไว้ หลายท่านรวมทั้งผู้เขียนเอง ก็ยังสับสนว่าจะเลือกหรือไม่เลือกออปชั่นนี้ดี เลยทดสอบการติดตั้งสองครั้ง โดยครั้งแรกจะคลิ้กเลือก และครั้งที่สองจะไม่เลือก เพื่อดูผลกระทบกับเวลาของเครื่องเมื่อบู๊ตเครื่องหลังจากติดตั้งเสร็จ ในที่นี้ ทดสอบบน VMware เพื่อเทียบเวลาระหว่าง BIOS และเวลาที่แสดงจากคำสั่ง date บนลีนุกซ์ ทดสอบบนเครื่อง PC ก็ได้ผลเช่นเดียวกัน เวลาใน BIOS &#160; เลือกใช้ [x] System clock uses UTC ตอนติดตั้ง CentOS 6 คลิ้กเพื่อเลือกออปชั่นนี้ หลังติดตั้งเสร็จใช้คำสั่ง date เพื่อดูเวลาบนลีนุกซ์ [root@cent6 ~]# date [...]]]></description>
			<content:encoded><![CDATA[<p>ตอนติดตั้ง CentOS 6 จะมีหน้าจอให้  <a title="View Details: ติดตั้ง CentOS 6.2 : เลือก time zone, ใส่ root password" href="http://spalinux.com/2012/03/centos-6-2-installation-select-time-zone-enter-root-password" rel="bookmark">เลือก time zone </a>เพื่อเลือกโซนเวลาที่เครื่องลีนุกซ์ตั้งอยู่ ในประเทศไทย ก็เลือกเป็น Asia/Bangkok</p>
<p>ในหน้าจอเดียวกันนี้ ด้านล่างซ้ายจะมีให้ออปชั่น &#8220;System clock uses UTC&#8221; ให้เลือก โดยดีฟอลต์จะคลิ้กเลือกไว้</p>
<p>หลายท่านรวมทั้งผู้เขียนเอง ก็ยังสับสนว่าจะเลือกหรือไม่เลือกออปชั่นนี้ดี</p>
<p>เลยทดสอบการติดตั้งสองครั้ง โดยครั้งแรกจะคลิ้กเลือก และครั้งที่สองจะไม่เลือก เพื่อดูผลกระทบกับเวลาของเครื่องเมื่อบู๊ตเครื่องหลังจากติดตั้งเสร็จ</p>
<p><span id="more-2101"></span><br />
ในที่นี้ ทดสอบบน VMware เพื่อเทียบเวลาระหว่าง BIOS และเวลาที่แสดงจากคำสั่ง date บนลีนุกซ์ ทดสอบบนเครื่อง PC ก็ได้ผลเช่นเดียวกัน</p>
<p>เวลาใน BIOS</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/t01-BIOS-System-Time-Date.png"><img class="alignnone size-full wp-image-2102" title="t01-BIOS-System-Time-Date" src="http://spalinux.com/wp-content/uploads/2012/04/t01-BIOS-System-Time-Date.png" alt="" width="384" height="102" /></a></p>
<p>&nbsp;</p>
<h4>เลือกใช้ [x] System clock uses UTC</h4>
<p>ตอนติดตั้ง CentOS 6 คลิ้กเพื่อเลือกออปชั่นนี้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2012/04/t02-enable-System-clock-uses-UTC.png"><img class="alignnone size-full wp-image-2103" title="t02-enable-System-clock-uses-UTC" src="http://spalinux.com/wp-content/uploads/2012/04/t02-enable-System-clock-uses-UTC.png" alt="" width="200" height="48" /></a></p>
<p>หลังติดตั้งเสร็จใช้คำสั่ง date เพื่อดูเวลาบนลีนุกซ์</p>
<pre>[root@cent6 ~]# <strong>date</strong>
Tue Apr 17 23:58:20 ICT 2012</pre>
<p>เวลาเร็วไปประมาณ 7 ชั่วโมง เทียบกับเวลาใน BIOS</p>
<p>คอนฟิกไฟล์ /etc/adjtime เมื่อเลือกใช้ &#8220;System clock uses UTC&#8221;</p>
<pre>[root@cent6 ~]# <strong>cat /etc/adjtime</strong>
0.0 0 0.0
0
<span style="color: #0000ff;">UTC</span></pre>
<h4>ไม่ใช้ [ ] System clock uses UTC (ใช้เวลา LOCAL)</h4>
<p>ตอนติดตั้ง CentOS 6 คลิ้กเอาออปชั่นนี้ออก</p>
<p>หลังติดตั้งเสร็จใช้คำสั่ง date เพื่อดูเวลาบนลีนุกซ์</p>
<pre>[root@cent6 ~]# <strong>date</strong>
Tue Apr 17 16:58:20 ICT 2012</pre>
<p>เวลาเท่ากับเวลาใน BIOS</p>
<p>คอนฟิกไฟล์ /etc/adjtime เมื่อไม่ใช้ &#8220;System clock uses UTC&#8221;</p>
<pre>[root@cent6 ~]# <strong>cat /etc/adjtime</strong>
0.0 0 0.0
0
<span style="color: #0000ff;">LOCAL</span></pre>
<h4>การเปลี่ยนคอนฟิก UTC, LOCAL หลังติดตั้ง</h4>
<p>หากต้องการแก้ไขคอนฟิกหลังการติดตั้ง สามารถแก้ไขไฟล์ /etc/adjtime ได้โดยตรง</p>
<p>แก้ไขบรรทัดที่ 3 ระหว่าง &#8220;UTC&#8221; และ &#8220;LOCAL&#8221; แล้วรีบู๊ตเครื่อง  ใช้คำสั่ง date เพื่อปรับเวลาให้ถูกต้อง</p>
<p>อ้างอิงจากคู่มือการติดตั้ง Red Hat Enterprise 6</p>
<ul>
<li>ถ้าเครื่องที่ใช้ ติดตั้งแค่ลีนุกซ์อย่างเดียว ให้คลิ้กเลือก System clock uses UTC</li>
<li>แต่ถ้าเครื่องนี้ติดตั้ง OS อื่น เช่น Windows ด้วย ห้ามเลือกใช้ออปชั่นนี้</li>
</ul>
<p>อย่างไรก็ตาม โดยส่วนตัวแล้ว ตอนติดตั้ง ผู้เขียนจะไม่เลือกใช้ออปชั่นนี้ เพื่อให้เวลาของ BIOS ตรงกับเวลาของลีนุกซ์</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a title="View Details: ติดตั้ง CentOS 6.2 : เลือก time zone, ใส่ root password" href="http://spalinux.com/2012/03/centos-6-2-installation-select-time-zone-enter-root-password" rel="bookmark">เลือก time zone, ใส่ root password</a></li>
<li><a title="View Details: เปลี่ยนวันเวลาบนลีนุกซ์ด้วยคำสั่ง date" href="http://spalinux.com/2012/04/change-linux-date-time-using-command-date" rel="bookmark">เปลี่ยนวันเวลาบนลีนุกซ์ด้วยคำสั่ง date</a></li>
<li><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-timezone-x86.html" target="_blank">Time Zone Configuration</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/system-clock-uses-utc-and-linux-system-time-date/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เปลี่ยนวันเวลาบนลีนุกซ์ด้วยคำสั่ง date</title>
		<link>http://spalinux.com/2012/04/change-linux-date-time-using-command-date</link>
		<comments>http://spalinux.com/2012/04/change-linux-date-time-using-command-date#comments</comments>
		<pubDate>Mon, 16 Apr 2012 09:03:33 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[CentOS 6]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=2087</guid>
		<description><![CDATA[วันเวลาบนลีนุกซ์ถือเป็นเรื่องสำคัญ ที่สมควรจะตั้งให้ตรงกับเวลามาตรฐาน ไม่เช่นนั้น โปรแกรมต่างๆ จะเก็บเวลาไม่ถูกต้อง ทำให้การตรวจสอบการทำงานย้อนหลังมีปัญหา วิธีที่ดีที่สุดเพื่อให้เวลาของเครื่องลีนุกซ์ตรงกับเวลามาตรฐานคือติดตั้งและคอนฟิก NTP แต่ถ้าไม่สามารถคอนฟิกเช่น ไม่สามารถต่อเชื่อมอินเตอร์เน็ต เพื่อ sync กับ NTP Server มาตรฐาน สามารใช้คำสั่ง date  เพื่อเปลี่ยนเวลาของเครื่องลีนุกซ์ให้เป็นเวลาที่ต้องการ ใกล้เคียงกับเวลามาตรฐานได้ พิมพ์คำสั่ง date แบบไม่มีออปชั่นใดๆ ผลลัพธ์จะแสดงเวลาของเครื่อง ผู้ใช้ (user) ธรรมดาก็สามารถใช้คำสั่งนี้เพื่อดูเวลาของเครื่องได้ [alice@cent6 ~]$ date Mon Apr 16 18:25:03 ICT 2012 สมมติว่าเวลาจริงๆ ตอนนี้เป็นวันที่ 16 Apr 2012 เวลา 15:03 น. เราสามารถใช้คำสั่ง date เพื่อเปลี่ยนเวลาของเครื่องตามที่ต้องการได้ ล็อกอินด้วย root แล้วใช้คำสั่ง date เว้นวรรคตามด้วยวันที่เวลาตามรูปแบบ mmddHHMMCCYY โดย mm [...]]]></description>
			<content:encoded><![CDATA[<p>วันเวลาบนลีนุกซ์ถือเป็นเรื่องสำคัญ ที่สมควรจะตั้งให้ตรงกับเวลามาตรฐาน ไม่เช่นนั้น โปรแกรมต่างๆ จะเก็บเวลาไม่ถูกต้อง ทำให้การตรวจสอบการทำงานย้อนหลังมีปัญหา</p>
<p>วิธีที่ดีที่สุดเพื่อให้เวลาของเครื่องลีนุกซ์ตรงกับเวลามาตรฐานคือติดตั้งและคอนฟิก NTP</p>
<p>แต่ถ้าไม่สามารถคอนฟิกเช่น ไม่สามารถต่อเชื่อมอินเตอร์เน็ต เพื่อ sync กับ NTP Server มาตรฐาน</p>
<p>สามารใช้คำสั่ง date  เพื่อเปลี่ยนเวลาของเครื่องลีนุกซ์ให้เป็นเวลาที่ต้องการ ใกล้เคียงกับเวลามาตรฐานได้</p>
<p><span id="more-2087"></span></p>
<p>พิมพ์คำสั่ง date แบบไม่มีออปชั่นใดๆ ผลลัพธ์จะแสดงเวลาของเครื่อง ผู้ใช้ (user) ธรรมดาก็สามารถใช้คำสั่งนี้เพื่อดูเวลาของเครื่องได้</p>
<pre>[alice@cent6 ~]$ <strong>date</strong>
Mon Apr 16 18:25:03 ICT 2012</pre>
<p>สมมติว่าเวลาจริงๆ ตอนนี้เป็นวันที่ 16 Apr 2012 เวลา 15:03 น.</p>
<p>เราสามารถใช้คำสั่ง date เพื่อเปลี่ยนเวลาของเครื่องตามที่ต้องการได้</p>
<p>ล็อกอินด้วย root แล้วใช้คำสั่ง date เว้นวรรคตามด้วยวันที่เวลาตามรูปแบบ</p>
<pre>mmddHHMMCCYY</pre>
<p>โดย</p>
<ul>
<li><strong>mm</strong> คือตัวเลขระบุเดือน</li>
<li><strong>dd</strong> คือตัวเลขระบุวันที่</li>
<li><strong>HH</strong> คือตัวเลขระบุชั่วโมง</li>
<li><strong>MM</strong> คือตัวเลขระบุนาที</li>
<li><strong>CCYY</strong> คือตัวเลขปี คศ. เช่น 2012</li>
</ul>
<p>ตัวเลขทั้งหมดต้องพิมพ์เป็นตัวเลขสองหลัก ยกเว้นปีคศ. ถ้าเป็นตัวเลขตัวเดียวพิมพ์เลข 0 (ศูนย์) นำหน้า เช่นเดือน เมษายน ต้องพิมพ์เป็น 04</p>
<p>ตัวอย่างเช่นต้องการเปลี่ยนเวลาของเครื่องเป็น 16 Apr 2012 เวลา 15:03 น.</p>
<pre>[root@cent6 ~]# <strong>date 041615032012</strong>
Mon Apr 16 15:03:00 ICT 2012</pre>
<p>คำอธิบายตัวเลขตามลำดับ</p>
<ul>
<li><strong>04</strong> = เดือนเมษายน</li>
<li><strong>16</strong> = วันที่ 16</li>
<li><strong>15</strong> = 15 นาฬิกา</li>
<li><strong>03</strong> = 3 นาที</li>
<li><strong>2012</strong> = ปี คศ. 2012</li>
</ul>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a title="View Details: คอนฟิก NTP บนลินุกซ์" href="http://spalinux.com/2008/08/configure_ntp_on_linux" rel="bookmark">คอนฟิก NTP บนลินุกซ์</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2012/04/change-linux-date-time-using-command-date/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>upgrade kernel บน CentOS 5.6</title>
		<link>http://spalinux.com/2011/08/upgrade_kernel_on_centos_5-6</link>
		<comments>http://spalinux.com/2011/08/upgrade_kernel_on_centos_5-6#comments</comments>
		<pubDate>Sun, 14 Aug 2011 16:13:18 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[upgrade kernel]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1450</guid>
		<description><![CDATA[ด้วยเหตุผลทางด้านประสิทธิภาพ ต้องการลงโปรแกรม library หรือ driver ของอุปกรณ์บางตัว ที่ต้องใช้ kernel เวอร์ชั่นใหม่ ในบทความนี้ ขอแนะนำวิธีการ upgrade kernel บน CentOS 5.6  โดยการดาวน์โหลดไฟล์ rpm แล้วนำมาติดตั้งเองด้วยคำสั่ง rpm คำเตือน  - การ upgrade kernel อาจมีผลกระทบกับระบบ เช่น driver ที่ติดตั้งเอง ลองบนเครื่องทดสอบให้แน่ใจก่อนปรับปรุงจริง  - หลัง upgrade kernel ต้องรีบู๊ตเครื่อง เพื่อให้ kernel ใหม่มีผล แนะนำให้อยู่หน้าเครื่องตอนรีบู๊ต เผื่อมีปัญหาจะได้แก้ไขได้ ใช้คำสั่ง uname -a เพื่อตรวจสอบเวอร์ชั่น kernel ที่รันอยู่ [root@cent56 ~]# uname -a Linux cent56.example.com 2.6.18-238.el5 #1 SMP Thu Jan [...]]]></description>
			<content:encoded><![CDATA[<p>ด้วยเหตุผลทางด้านประสิทธิภาพ ต้องการลงโปรแกรม library หรือ driver ของอุปกรณ์บางตัว ที่ต้องใช้ kernel เวอร์ชั่นใหม่</p>
<p>ในบทความนี้ ขอแนะนำวิธีการ upgrade kernel บน CentOS 5.6  โดยการดาวน์โหลดไฟล์ rpm แล้วนำมาติดตั้งเองด้วยคำสั่ง rpm</p>
<p><span id="more-1450"></span></p>
<p><span style="color: #ff0000;">คำเตือน<br />
 - การ upgrade kernel อาจมีผลกระทบกับระบบ เช่น driver ที่ติดตั้งเอง ลองบนเครื่องทดสอบให้แน่ใจก่อนปรับปรุงจริง<br />
 - หลัง upgrade kernel ต้องรีบู๊ตเครื่อง เพื่อให้ kernel ใหม่มีผล แนะนำให้อยู่หน้าเครื่องตอนรีบู๊ต เผื่อมีปัญหาจะได้แก้ไขได้</span></p>
<p>ใช้คำสั่ง uname -a เพื่อตรวจสอบเวอร์ชั่น kernel ที่รันอยู่</p>
<pre>[root@cent56 ~]# <strong>uname -a
</strong>Linux cent56.example.com <span style="color: #0000ff;">2.6.18-238.el5</span> #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux</pre>
<p>ใช้คำสั่ง rpm เพื่อดูไฟล์ rpm ของ kernel</p>
<pre>[root@cent56 ~]# <strong>rpm -qa | grep kernel
</strong>kernel-headers-2.6.18-238.el5.x86_64
kernel-2.6.18-238.el5.x86_64
kernel-devel-2.6.18-238.el5.x86_64</pre>
<p>สำหรับ CentOS สามารถดาวน์โหลดไฟล์ rpm มาจากเว็บ updates</p>
<p>เช่นเว็บ updates ของ CentOS 5.6 ในเมืองไทย สามารถดาวน์โหลดได้ที่</p>
<p>http://mirror1.ku.ac.th/centos/5.6/updates/x86_64/RPMS/</p>
<p>ตัวอย่างไฟล์ kernel ที่ต้องดาวน์โหลด เวอร์ชั่นล่าสุด ณ ตอนที่เขียนคือ 2.6.18-238.19.1</p>
<ul>
<li>kernel-2.6.18-238.19.1.el5.x86_64.rpm</li>
<li>kernel-headers-2.6.18-238.19.1.el5.x86_64.rpm</li>
<li>kernel-devel-2.6.18-238.19.1.el5.x86_64.rpm</li>
</ul>
<p>ใช้คำสั่ง rpm ด้วยออปชั่น &#8216;-U&#8217; เพื่อปรับปรุง (upgrade) ไฟล์ rpm เป็นเวอร์ชั่นใหม่</p>
<pre>[root@cent56 ~]# <strong>rpm -U kernel-2.6.18-238.19.1.el5.x86_64.rpm</strong></pre>
<pre>[root@cent56 ~]# <strong>rpm -U kernel-headers-2.6.18-238.19.1.el5.x86_64.rpm</strong></pre>
<pre>[root@cent56 ~]# <strong>rpm -U kernel-devel-2.6.18-238.19.1.el5.x86_64.rpm</strong></pre>
<p>ตรวจสอบหลังจากปรับปรุง</p>
<pre>[root@cent56 ~]# <strong>rpm -qa | grep kernel
</strong>kernel-2.6.18-238.19.1.el5.x86_64
kernel-headers-2.6.18-238.19.1.el5.x86_64
kernel-devel-2.6.18-238.19.1.el5.x86_64</pre>
<p>หากใช้วิธีนี้ในการ upgrade แบบ rpm นี้ จะมีการแก้ไขไฟล์ grub.conf โดยอัตโนมัติ</p>
<pre>[root@cent56 ~]# <strong>cat /etc/grub.conf
</strong># grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-238.19.1.el5)
        root (hd0,0)
        kernel /vmlinuz-<span style="color: #0000ff;">2.6.18-238.19.1</span>.el5 ro root=LABEL=/
        initrd /initrd-<span style="color: #0000ff;">2.6.18-238.19.1</span>.el5.img</pre>
<p>ตรวจสอบความถูกต้องของไฟล์ grub.conf  แล้วรีบู๊ตเครื่องหลังจากการ upgrade<br />
เมื่อบู๊ตเสร็จเรียบร้อย ใช้คำสั่ง uname เพื่อตรวจสอบเวอร์ชั่น kernel</p>
<pre>[root@cent56 ~]# uname -a
Linux cent56.example.com <span style="color: #0000ff;">2.6.18-238.19.1</span>.el5 #1 SMP Fri Jul 15 07:31:24 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux</pre>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/08/upgrade_kernel_on_centos_5-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>กระจายงาน Interrupts ที่ได้รับ ให้ Multi-CPU, Cores</title>
		<link>http://spalinux.com/2011/05/distribute_interrupts_over_processors_cores</link>
		<comments>http://spalinux.com/2011/05/distribute_interrupts_over_processors_cores#comments</comments>
		<pubDate>Sun, 29 May 2011 17:01:39 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[Interrupts]]></category>
		<category><![CDATA[irqbalance]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1343</guid>
		<description><![CDATA[หากคุณประสบปัญหา ssh login เข้าเครื่อง Linux Server แล้วต้องรอหลายวินาที กว่า prompt login จะขึ้น แต่หลังจาก login เข้าไปในระบบได้ ก็สามารถรันคำสั่งต่างๆ ทำงานได้ ไม่ได้ช้ามากแต่ประการใด บทความนี้อาจช่วยคุณแก้ไขปัญหาได้ คำสั่งที่ใช้ดูรายงานการทำงานของ CPU คือ mpstat อยู่ในชุดโปรแกรม sysstat รันคำสั่ง mpstat ตามด้วยออปชั่น &#8220;-P ALL&#8221; เพื่อดูผลลัพธ์แยกตาม CPU หมายเหตุ นอกจากคำสั่ง mpstat แล้ว อาจใช้คำสั่ง top ดูโหลดของ CPU ก็ได้ [root@devel ~]# mpstat -P ALL Linux 2.6.18-194.el5 (devel.example.com)   05/22/2011 04:00:49 PM  CPU   %user   %nice    %sys %iowait    [...]]]></description>
			<content:encoded><![CDATA[<p>หากคุณประสบปัญหา ssh login เข้าเครื่อง Linux Server แล้วต้องรอหลายวินาที กว่า prompt login จะขึ้น</p>
<p>แต่หลังจาก login เข้าไปในระบบได้ ก็สามารถรันคำสั่งต่างๆ ทำงานได้ ไม่ได้ช้ามากแต่ประการใด</p>
<p>บทความนี้อาจช่วยคุณแก้ไขปัญหาได้</p>
<p><span id="more-1343"></span></p>
<p>คำสั่งที่ใช้ดูรายงานการทำงานของ CPU คือ mpstat อยู่ในชุดโปรแกรม sysstat</p>
<p>รันคำสั่ง mpstat ตามด้วยออปชั่น &#8220;-P ALL&#8221; เพื่อดูผลลัพธ์แยกตาม CPU</p>
<p>หมายเหตุ นอกจากคำสั่ง mpstat แล้ว อาจใช้คำสั่ง top ดูโหลดของ CPU ก็ได้</p>
<pre>[root@devel ~]# <strong>mpstat -P ALL
</strong>Linux 2.6.18-194.el5 (devel.example.com)   05/22/2011</pre>
<pre>04:00:49 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
04:00:49 PM  all   25.13    0.00    0.09    0.14    0.01    0.08    0.00   74.55   2267.62
04:00:49 PM    <span style="color: #ff0000;"><strong>0</strong></span>    9.39    0.00    0.16    1.04    0.09    0.92    0.00   88.40   <span style="color: #ff0000;"><strong>2267.62
</strong></span>04:00:49 PM    1   21.11    0.00    0.11    0.17    0.00    0.00    0.00   78.62      0.00
04:00:49 PM    2   27.66    0.00    0.09    0.09    0.00    0.00    0.00   72.15      0.00
04:00:49 PM    3   28.54    0.00    0.09    0.07    0.00    0.00    0.00   71.30      0.00
04:00:49 PM    4   31.10    0.00    0.10    0.07    0.00    0.00    0.00   68.73      0.00
04:00:49 PM    5   29.38    0.00    0.10    0.05    0.00    0.00    0.00   70.47      0.00
04:00:49 PM    6   16.91    0.00    0.08    0.04    0.00    0.00    0.00   82.97      0.00
04:00:49 PM    7   20.46    0.00    0.08    0.04    0.00    0.00    0.00   79.42      0.00</pre>
<p>จากคำสั่ง mpstat นี้จะเห็นว่า เฉพาะ CPU0 เท่านั้นที่มีตัวเลข &#8220;intr/s&#8221;  ไม่เท่ากับ 0</p>
<p>&#8220;intr/s&#8221; คือจำนวน interrupts (IRQ) ที่ CPU ได้รับ เฉลี่ยต่อ วินาที</p>
<p>การ ssh login เข้าเครื่อง ถือเป็นการ interrupts อย่างหนึ่ง ที่ต้องมี CPU มาทำหน้าที่รับ ก่อนส่งไปประมวลผลต่อไป</p>
<h4>การแก้ไข</h4>
<p>โปรแกรมที่สามารถช่วยกระจายการรับ interrupts ให้ CPU หลายตัวได้ คือ irqbalance</p>
<p>โดยดีฟอลต์ของการติดตั้ง Linux ส่วนใหญ่แล้ว จะรัน irqbalance ด้วย แต่ถ้าปิดไป แนะนำให้รันขึ้นมาใหม่ และรันทิ้งไว้ตลอดเวลา สำหรับเครื่องที่มี CPU หลายตัว หรือหลาย Core</p>
<p>ตรวจสอบการรัน irqbalance ด้วยคำสั่ง service หรือคำสั่ง ps</p>
<pre>[root@devel ~]# <strong>service irqbalance status
</strong>irqbalance is stopped
[root@devel ~]#</pre>
<pre>[root@devel ~]# <strong>ps -ef | grep irqbalance
</strong>[root@devel ~]#</pre>
<p>รันเซอร์วิส irqbalance</p>
<pre>[root@devel ~]# <strong>service irqbalance start
</strong>Starting irqbalance:                                       [  OK  ]</pre>
<p>ตรวจสอบดูโปรเซสอีกครั้ง</p>
<pre>[root@devel ~]# <strong>ps -ef | grep irqbalance
</strong>root     19003     1  0 16:03 ?        00:00:00 irqbalance</pre>
<p>หลังจากรันเซอร์วิส irqbalance ไปซักพักแล้ว ลองรันคำสั่ง mpstat อยู่เรื่อยๆ จะเห็นตัวเลข &#8220;intr/s&#8221; ของ CPU อื่นๆ เริ่มขึ้นมา แสดงว่า เริ่มมีการกระจาย IRQ ให้ CPU หลายๆ ตัวแล้ว</p>
<pre>[root@devel ~]# <strong>mpstat -P ALL
</strong>Linux 2.6.18-194.el5 (devel.example.com)   05/22/2011</pre>
<pre>04:05:10 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
04:05:10 PM  all   25.13    0.00    0.09    0.14    0.01    0.08    0.00   74.55   2268.53
04:05:10 PM    0    9.39    0.00    0.16    1.04    0.09    0.92    0.00   88.40   2267.99
04:05:10 PM    1   21.11    0.00    0.11    0.17    0.00    0.00    0.00   78.62      0.00
04:05:10 PM    2   27.66    0.00    0.09    0.09    0.00    0.00    0.00   72.15      0.00
04:05:10 PM    3   28.54    0.00    0.09    0.07    0.00    0.00    0.00   71.30      <span style="color: #ff0000;">0.01
</span>04:05:10 PM    4   31.10    0.00    0.10    0.07    0.00    0.00    0.00   68.73      <span style="color: #ff0000;"><strong>0.01
</strong></span>04:05:10 PM    5   29.37    0.00    0.10    0.05    0.00    0.00    0.00   70.47      <strong><span style="color: #ff0000;">0.01
</span></strong>04:05:10 PM    6   16.91    0.00    0.08    0.04    0.00    0.00    0.00   82.97      <span style="color: #ff0000;"><strong>0.08
</strong></span>04:05:10 PM    7   20.46    0.00    0.08    0.04    0.00    0.00    0.00   79.42      <strong><span style="color: #ff0000;">0.09</span></strong></pre>
<p>ลอง ssh login อีกครั้ง น่าจะดีขึ้น</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2008/06/fedora_9_minimal_service_description">รายละเอียดของแต่ละ service ใน Fedora 9</a></li>
<li><a href="http://spalinux.com/2011/05/using_sysstat_to_monitor_system">ตรวจสอบการทำงานเครื่องด้วย sysstat</a></li>
<li><a href="http://www.irqbalance.org/" target="_blank">What is irqbalance?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/05/distribute_interrupts_over_processors_cores/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>การใช้งาน DRBD เบื้องต้น</title>
		<link>http://spalinux.com/2010/02/basic_using_drbd</link>
		<comments>http://spalinux.com/2010/02/basic_using_drbd#comments</comments>
		<pubDate>Sat, 06 Feb 2010 11:09:40 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Disk]]></category>
		<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[drbd]]></category>
		<category><![CDATA[linux ha]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1072</guid>
		<description><![CDATA[จากบทความ ติดตั้งและคอนฟิก DRBD  เราได้คอนฟิกเป็นแบบ Single-primary mode คือ ณ เวลาใดเวลาหนึ่ง มีเครื่องเดียวเท่านั้นที่สามารถ อ่าน เขียน ข้อมูลได้ ดังนั้นขณะที่เครื่องที่ 1 (centos54-a) ทำหน้าที่เป็น primary ของดิสก์ drbd0 อยู่  เครื่องที่ 2 (centos54-b) จะไม่สามารถ mount ดิสก์ drbd0 นี้ขึ้นมาใช้งานได้ ในบทความนี้จะแสดงการทดสอบใช้คำสั่งเพื่อเปลี่ยนโหมด Primary, Secondary ระหว่างเครื่องทั้งสอง ตรวจสอบสถานะบนเครื่อง centos54-a [root@centos54-a ~]# service drbd status drbd driver loaded OK; device status: version: 8.3.2 (api:88/proto:86-90) GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 [...]]]></description>
			<content:encoded><![CDATA[<p>จากบทความ <a href="http://spalinux.com/2010/02/install_and_configure_drbd">ติดตั้งและคอนฟิก DRBD </a> เราได้คอนฟิกเป็นแบบ Single-primary mode คือ ณ เวลาใดเวลาหนึ่ง มีเครื่องเดียวเท่านั้นที่สามารถ อ่าน เขียน ข้อมูลได้</p>
<p>ดังนั้นขณะที่เครื่องที่ 1 (centos54-a) ทำหน้าที่เป็น primary ของดิสก์ drbd0 อยู่  เครื่องที่ 2 (centos54-b) จะไม่สามารถ mount ดิสก์ drbd0 นี้ขึ้นมาใช้งานได้</p>
<p>ในบทความนี้จะแสดงการทดสอบใช้คำสั่งเพื่อเปลี่ยนโหมด Primary, Secondary ระหว่างเครื่องทั้งสอง</p>
<p>ตรวจสอบสถานะบนเครื่อง centos54-a</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /export  ext3</pre>
<pre>[root@centos54-a ~]# df -h /export
Filesystem            Size  Used Avail Use% Mounted on
/dev/drbd0            950M   18M  885M   2% /export</pre>
<p>ทดสอบ mount ดิสก์บนเครื่อง centos54-b</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary  UpToDate/UpToDate  C</pre>
<pre>[root@centos54-b ~]# mount /dev/drbd0 /export
mount: block device /dev/drbd0 is write-protected, mounting read-only
mount: Wrong medium type</pre>
<p>ในกรณีที่ต้องการเปลี่ยนให้เครื่องที่ 2 (centos54-b) ทำหน้าที่เป็น primary  เช่นในกรณีที่ต้องการซ่อมบำรุงเครื่องที่ 1 สามารถทำได้ดังนี้</p>
<p>บนเครื่องที่ 1 ปิดเซอร์วิส DRBD</p>
<pre>[root@centos54-a ~]# <strong>service drbd stop
</strong>Stopping all DRBD resources:
.
[root@centos54-a ~]# <strong>service drbd status
</strong>drbd not loaded</pre>
<p>ตรวจสอบสถานะบนเครื่องที่ 2 หลังจากปิดเซอร์วิสบนเครื่องที่ 1</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  <strong><span style="color: #0000ff;">Secondary</span></strong>/Unknown  UpToDate/DUnknown  C</pre>
<p>แม้เครื่อง Primary ปิดไปแล้ว บนเครื่องที่ 2 ที่ยังอยู่ในโหมด Secondary ก็ยัง mount ดิสก์ ไม่ได้</p>
<pre>[root@centos54-b ~]# <strong>mount /dev/drbd0 /export
</strong>mount: block device /dev/drbd0 is write-protected, mounting read-only
mount: Wrong medium type</pre>
<p>ต้องเปลี่ยนสถานะบนเครื่องที่ 2 ให้เป็น primary ด้วยคำสั่ง drbdadm primary</p>
<pre>[root@centos54-b ~]# <strong>drbdadm primary all</strong></pre>
<p>ตรวจสอบสถานะบนเครื่องที่ 2</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs            ro               ds                 p  mounted  fstype
0:r0   WFConnection  <span style="color: #0000ff;"><strong>Primary</strong></span>/Unknown  UpToDate/DUnknown  C</pre>
<p>เมื่ออยู่ในโหมด primary แล้ว ก็สามารถ mount ดิสก์ขึ้นมาใช้งานได้</p>
<pre>[root@centos54-b ~]# <strong>mount /dev/drbd0 /export
</strong>[root@centos54-b ~]# <strong>df -h /export
</strong>Filesystem            Size  Used Avail Use% Mounted on
/dev/drbd0            950M   18M  885M   2% /export</pre>
<p>ทดลองสร้างไฟล์ในดิสก์ drbd0</p>
<pre>[root@centos54-b ~]# <strong>cd /export/
</strong>[root@centos54-b export]# <strong>ls
</strong>lost+found
[root@centos54-b export]# <strong>echo "hello world from node 2" &gt; test-file-on-node-2.txt
</strong>[root@centos54-b export]# <strong>ls -l
</strong>total 20
drwx------ 2 root root 16384 Feb  6 15:46 lost+found
-rw-r--r-- 1 root root    24 Feb  6 17:17 <span style="color: #0000ff;"><strong>test-file-on-node-2.txt</strong></span></pre>
<p>รันเซอร์วิส DRBD บนเครื่องที่ 1 ขึ้นมาอีกครั้ง ตอนนี้เครื่องที่ 1 จะทำหน้าที่เป็น Secondary และจะทำการ replicate ข้อมูลมาจากเครื่องที่ 2 (Primary) โดยอัตโนมัติ</p>
<pre>[root@centos54-a ~]# <strong>service drbd start
</strong>Starting DRBD resources: [ d(r0) s(r0) n(r0) ].</pre>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  <strong><span style="color: #0000ff;">Secondary</span></strong>/Primary  UpToDate/UpToDate  C</pre>
<p>บนเครื่องที่ 2 เปลี่ยนให้เป็นโหมด Secondary</p>
<pre>[root@centos54-b ~]# <strong>drbdadm secondary all
</strong><span style="color: #ff0000;">0: State change failed: (-12) Device is held open by someone</span>
Command 'drbdsetup 0 secondary' terminated with exit code 11</pre>
<p>หากมีการเรียกใช้ดิสก์ drbd อยู่ จะไม่สามารถเปลี่ยนโหมดจาก Primary ไปเป็น Secondary ได้ ต้อง umount ดิสก์ออกไปก่อนถึงจะเปลี่ยนโหมดได้</p>
<pre>[root@centos54-b ~]# <strong>umount /export
</strong>[root@centos54-b ~]# <strong>drbdadm secondary all</strong></pre>
<p>ตรวจสอบสถานะบนเครื่องที่ 2</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                   ds                 p  mounted  fstype
0:r0   Connected  <span style="color: #0000ff;"><strong>Secondary</strong></span>/Secondary  UpToDate/UpToDate  C</pre>
<p>เปลี่ยนโหมดบนเครื่องที่ 1 ให้เป็น Primary เพื่อเรียกใช้ดิสก์ได้</p>
<pre>[root@centos54-a ~]# <strong>drbdadm primary all
</strong>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  <strong><span style="color: #0000ff;">Primary</span></strong>/Secondary  UpToDate/UpToDate  C</pre>
<p>mount ดิสก์ และตรวจสอบไฟล์ที่อยู่ใน drbd0 จะเห็นไฟล์ที่สร้างจากเครื่องที่ 2</p>
<pre>[root@centos54-a ~]# <strong>mount /dev/drbd0 /export
</strong>[root@centos54-a ~]# <strong>cd /export/
</strong>[root@centos54-a export]# ls -l
total 20
drwx------ 2 root root 16384 Feb  6 15:46 lost+found
-rw-r--r-- 1 root root    24 Feb  6 17:17 <strong><span style="color: #0000ff;">test-file-on-node-2.txt
</span></strong>[root@centos54-a export]# <strong>cat test-file-on-node-2.txt
</strong>hello world from node 2</pre>
<h4>ตรวจสอบไฟล์ /var/log/messages</h4>
<p>เมื่อมีปัญหาเกี่ยวกับการใช้ DBRD นอกจากการใช้คำสั่ง service เพื่อตรวจสอบสถานะแล้ว ไฟล์ /var/log/messages จะแสดงการเปลี่ยนแปลงทั้งหมดของ DRBD ที่เกิดขึ้น ซึ่งสามารถนำมาใช้ช่วยในการแก้ปัญหาได้</p>
<p>ตัวอย่างข้อความในไฟล์ /var/log/messages ที่เกิดขึ้น เมื่อมีการเปลี่ยนโหมด</p>
<pre>[root@centos54-a ~]# <strong>tail /var/log/messages
</strong>...
Feb  6 17:19:38 centos54-a kernel: block drbd0: peer( Primary -&gt; Secondary )
Feb  6 17:21:04 centos54-a kernel: block drbd0: role( Secondary -&gt; Primary )
...</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2010/02/install_and_configure_drbd">ติดตั้งและคอนฟิก DRBD</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2010/02/basic_using_drbd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ติดตั้งและคอนฟิก DRBD</title>
		<link>http://spalinux.com/2010/02/install_and_configure_drbd</link>
		<comments>http://spalinux.com/2010/02/install_and_configure_drbd#comments</comments>
		<pubDate>Sat, 06 Feb 2010 09:40:46 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Disk]]></category>
		<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[drbd]]></category>
		<category><![CDATA[linux ha]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1068</guid>
		<description><![CDATA[DRBD (Distributed Replicated Block Device) เป็นโปรแกรมเพื่อใช้ในการ replicate ข้อมูลดิสก์ที่อยู่คนละเครื่องกัน ผ่านทางเน็ตเวิร์ก โดยจะทำในระดับ block ของดิสก์ เมื่อมีการเปลี่ยนแปลงข้อมูลที่อยูในดิสก์เครื่องหนึ่ง (primary) การเปลี่ยนแปลงนั้นจะถูก replicate ไปยังอีกเครื่อง (secondary) โดยอัตโนมัติ DRBD ประกอบด้วยสองส่วนคือ 1. Kernel module &#8211; DRBD ทำหน้าที่ใน kernel โดยจะสร้าง virtual block device คั่นกลางระหว่าง physical disk กับ filesystem ที่สร้างอยู่ ไม่ว่าจะเป็น ext3, ext4, xfs 2. User space administration tools &#8211; เป็นโปรแกรมที่ช่วยในการจัดการ DRBD ได้ง่ายขึ้น หลักๆ จะเป็น drbdadm ในบทความนี้จะแสดงการติดตั้งโปรแกรม [...]]]></description>
			<content:encoded><![CDATA[<p>DRBD (Distributed Replicated Block Device) เป็นโปรแกรมเพื่อใช้ในการ replicate ข้อมูลดิสก์ที่อยู่คนละเครื่องกัน ผ่านทางเน็ตเวิร์ก โดยจะทำในระดับ block ของดิสก์</p>
<p>เมื่อมีการเปลี่ยนแปลงข้อมูลที่อยูในดิสก์เครื่องหนึ่ง (primary) การเปลี่ยนแปลงนั้นจะถูก replicate ไปยังอีกเครื่อง (secondary) โดยอัตโนมัติ</p>
<p>DRBD ประกอบด้วยสองส่วนคือ</p>
<p>1. Kernel module &#8211; DRBD ทำหน้าที่ใน kernel โดยจะสร้าง virtual block device คั่นกลางระหว่าง physical disk กับ filesystem ที่สร้างอยู่ ไม่ว่าจะเป็น ext3, ext4, xfs<br />
2. User space administration tools &#8211; เป็นโปรแกรมที่ช่วยในการจัดการ DRBD ได้ง่ายขึ้น หลักๆ จะเป็น drbdadm</p>
<p>ในบทความนี้จะแสดงการติดตั้งโปรแกรม DRBD และคอนฟิกเป็นแบบ Single-primary mode คือ ณ เวลาใดเวลาหนึ่ง มีเครื่องเดียวเท่านั้นที่สามารถ อ่าน เขียน ข้อมูลได้</p>
<p><span style="color: #ff0000;"><strong>คำเตือน ติดตั้งและคอนฟิก DRBD บนเครื่องทดสอบให้เข้าใจก่อน เพราะบางคำสั่งอาจกระทบข้อมูลดิสก์หรือ partition ที่มีอยู่ในเครื่องได้ ทำให้ข้อมูลเสียหายได้</strong></span></p>
<p><span id="more-1068"></span></p>
<h4>ระบบสำหรับการทดสอบ</h4>
<p>ในที่นี้จะติดตั้ง CentOS 5.4 พร้อมคอนฟิกให้สองเครื่องติดต่อ ping กันได้ และปิดคุณสมบัติ firewall ทั้งหมด</p>
<p><strong>เครื่องที่ 1</strong></p>
<ul>
<li>Hostname:   centos54-a.spalinux.com</li>
<li>IP Address: 10.3.3.51</li>
</ul>
<p><strong>เครื่องที่ 2</strong></p>
<ul>
<li>Hostname:   centos54-b.spalinux.com</li>
<li>IP Address: 10.3.3.52</li>
</ul>
<p>แก้ไขไฟล์ /etc/hosts เพื่อให้ทั้งสองเครื่องอ้างอิงจากชื่อเครื่องได้</p>
<p>ตัวอย่างคอนฟิกของเครื่องที่ 1</p>
<pre>[root@centos54-a ~]# <strong>hostname</strong>
centos54-a.spalinux.com</pre>
<pre>[root@centos54-a ~]# <strong>cat /etc/hosts
</strong># Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6</pre>
<pre>10.3.3.51       centos54-a centos54-a.spalinux.com
10.3.3.52       centos54-b centos54-b.spalinux.com</pre>
<p>ตัวอย่างคอนฟิกของเครื่องที่ 2</p>
<pre>[root@centos54-b ~]# <strong>hostname</strong>
centos54-b.spalinux.com</pre>
<pre>[root@centos54-b ~]# <strong>cat /etc/hosts
</strong># Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6</pre>
<pre>10.3.3.51       centos54-a centos54-a.spalinux.com
10.3.3.52       centos54-b centos54-b.spalinux.com</pre>
<p>ทั้งสองเครื่อง ต้องสร้าง partition สำหรับใช้เป็นดิสก์ DRBD โดยไม่ต้องสร้าง filesystem ใดๆ ทั้งสิ้นบน partition นี้ สมมติว่าเป็น /dev/sda5 บนทั้งสองเครื่อง</p>
<p>หมายเหตุ</p>
<ul>
<li>แนะนำให้สร้าง partition ทั้งสองเครื่องให้เหมือนกัน ขนาดเท่ากัน จะได้ง่ายต่อการคอนฟิก</li>
<li>สำหรับการทดสอบเริ่มต้น แนะนำให้สร้างขนาด partition เล็กๆ ก่อน จะได้ใช้เวลาในการ sync ข้อมูลไม่นานมากนัก ในบทความนี้สร้างประมาณ 1 GBytes</li>
</ul>
<h4>ติดตั้งโปรแกรม DRBD</h4>
<p>ไฟล์ติดตั้ง DRBD ในรูปแบบ rpm ของ CentOS 5.4 นั้น ไม่อยู่ในแผ่นดีวีดีติดตั้ง แต่จะอยู่ในส่วนของ extras สำหรับในเมืองไทยสามารถดาวน์โหลดได้จาก <a href="http://www.mirror.in.th/osarchive/centos/5.4/extras/">http://www.mirror.in.th/osarchive/centos/5.4/extras/</a></p>
<p>ดาวน์โหล์ด และติดตั้งไฟล์ rpm สองไฟล์ บนเครื่องทั้งสอง</p>
<ul>
<li>drbd83-8.3.2-6.el5_3.x86_64.rpm  &#8211; &#8220;User space administration tools&#8221;</li>
<li>kmod-drbd83-8.3.2-6.el5_3.x86_64.rpm  &#8211; &#8220;Kernel Module&#8221;</li>
</ul>
<p>ใช้คำสั่ง rpm เพื่อติดตั้ง</p>
<pre>[root@centos54-a ~]# <strong>rpm -ivh drbd83-8.3.2-6.el5_3.x86_64.rpm
</strong>Preparing...                ########################################### [100%]
   1:drbd83                 ########################################### [100%]
[root@centos54-a ~]# <strong>rpm -ivh kmod-drbd83-8.3.2-6.el5_3.x86_64.rpm
</strong>Preparing...                ########################################### [100%]
   1:kmod-drbd83            ########################################### [100%]</pre>
<h4>คอนฟิก DRBD บนเครื่องที่ 1 (primary)</h4>
<p>ไฟล์คอนฟิกหลักของ DRBD คือไฟล์ /etc/drbd.conf ต้องมีการแก้ไขไฟล์นี้ก่อนถึงจะเริ่มใช้งานได้ โดยมีไฟล์ตัวอย่างคอนฟิกอยู่ใน /usr/share/doc/drbd83/drbd.conf</p>
<p>ไฟล์คอนฟิก /etc/drbd.conf จากการติดตั้ง</p>
<pre>[root@centos54-a ~]# <strong>cat /etc/drbd.conf
</strong>#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#</pre>
<p>สร้างไฟล์คอนฟิก /etc/drbd.conf บนเครื่องที่ 1 &#8220;centos54-a.spalinux.com&#8221; ดังนี้</p>
<pre>[root@centos54-a ~]# <strong>cat /etc/drbd.conf
</strong>global {
    usage-count no;
}</pre>
<pre>common {
    syncer { rate 10M; }
}</pre>
<pre>resource <strong><span style="color: #0000ff;">r0</span> </strong>{
    protocol C;</pre>
<pre>    net {
        cram-hmac-alg "sha1";
        shared-secret "<span style="color: #0000ff;"><strong>test1234</strong></span>";
    }</pre>
<pre>    on <strong><span style="color: #0000ff;">centos54-a.spalinux.com</span></strong> {
        device /dev/drbd0;
        <strong><span style="color: #0000ff;">disk /dev/sda5</span></strong>;
        <strong><span style="color: #0000ff;">address 10.3.3.51:8888</span></strong>;
        meta-disk internal;
    }</pre>
<pre>    on <strong><span style="color: #0000ff;">centos54-b.spalinux.com</span></strong> {
        device /dev/drbd0;
        <strong><span style="color: #0000ff;">disk /dev/sda5</span></strong>;
        <strong><span style="color: #0000ff;">address 10.3.3.52:8888</span></strong>;
        meta-disk internal;
    }
}</pre>
<p>คำอธิบายเบื้องต้น</p>
<ul>
<li>shared-secret เป็นการกำหนดรหัสของเครื่องที่สามารถ replicate ข้อมูลกันได้ </li>
<li>r0 เป็นชื่อ resource ของ DRBD สามารถตั้งเป็นชื่อใดๆ ก็ได้ เพื่อสื่อความหมาย</li>
<li>on ตามด้วยชื่อ hostname ที่ต้องการ replicate ข้อมูลกัน ส่วนในวงเล็บ { เป็นการกำหนดคอนฟิกของแต่ละเครื่อง</li>
<li>disk คือชื่อ partition ที่สร้างไว้สำหรับการทำ DRBD ในที่นี้คือ /dev/sda5</li>
</ul>
<p>ใช้คำสั่ง drbadm create-md เพื่อสร้าง meta data บน partition ที่จะทำเป็น DRBD</p>
<pre>[root@centos54-a ~]# <strong>drbdadm create-md all
</strong>Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.</pre>
<p>หาก partition ที่คอนฟิกเป็น DRBD มี filesystem อยู่ก่อนแล้ว จะไม่สามารถสร้าง DRBD ได้</p>
<pre>[root@centos54-a ~]# <strong>drbdadm create-md all
</strong>md_offset 1011671040
al_offset 1011638272
bm_offset 1011605504</pre>
<pre><span style="color: #ff0000;">Found ext3 filesystem</span> which uses 987964 kB
current configuration leaves usable 987896 kB</pre>
<pre>Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
<span style="color: #ff0000;">Operation refused.</span></pre>
<pre>Command 'drbdmeta 0 v08 /dev/sda5 internal create-md' terminated with exit code 40
<span style="color: #ff0000;">drbdadm create-md r0: exited with code 40</span></pre>
<p>วิธีการแก้ไขคือต้องลบข้อมูลของ filesystem บน partition /dev/sda5 นี้ออก วิธีการง่ายสุดคือใช้คำสั่ง dd</p>
<p><span style="color: #ff0000;"><strong>คำเตือน คำสั่ง dd จะลบข้อมูลทั้งหมดบน partition ที่ระบุ</strong></span></p>
<pre>[root@centos54-a ~]# <strong>dd if=/dev/zero of=/dev/sda5
</strong>dd: writing to `/dev/sda5': No space left on device
1975933+0 records in
1975932+0 records out
1011677184 bytes (1.0 GB) copied, 87.2749 seconds, 11.6 MB/s</pre>
<p>แล้วถึงสามารถสร้าง meta data ของ DRBD ได้</p>
<pre>[root@centos54-a ~]# <strong>drbdadm create-md all
</strong>Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.</pre>
<p>ใช้คำสั่ง service เพื่อรันเซอร์วิส DRBD</p>
<pre>[root@centos54-a ~]# <strong>service drbd start
</strong>Starting DRBD resources: [ d(r0) s(r0) n(r0) ]..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -&gt; wait forever)
 To abort waiting enter 'yes' [  20]:<span style="color: #3366ff;"><strong><span style="color: #0000ff;">yes</span></strong></span></pre>
<p>ในครั้งแรกที่รันเซอร์วิส บนเครื่อง primary โปรแกรมจะรอให้เครื่อง peer (secondary) เข้ามาเชื่อมต่อ หากไม่ต้องการให้รอ ให้พิมพ์คำว่า &#8220;yes&#8221; แล้ว [Enter]</p>
<p>ใช้คำสั่ง service status เพื่อตรวจสอบสถานะของ DRBD</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs            ro                 ds                     p  mounted  fstype
0:r0   WFConnection  <span style="color: #0000ff;"><strong>Secondary</strong></span>/Unknown  <span style="color: #0000ff;"><strong>Inconsistent</strong></span>/DUnknown  C</pre>
<p>หรืออ่านจากไฟล์ /proc/drbd โดยตรง</p>
<pre>[root@centos54-a ~]# <strong>cat /proc/drbd</strong>
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:987896</pre>
<p>สร้างไดเรคทอรี /export สำหรับทดสอบ mount เพื่อใช้ดิสก์ drbd ที่สร้างขึ้น</p>
<pre>[root@centos54-a ~]# <strong>mount /dev/drbd0 /export
</strong>mount: block device /dev/drbd0 is write-protected, mounting read-only
mount: Wrong medium type</pre>
<p>ดิสก์นี้ยังไม่สามารถใช้ได้ ต้องใช้คำสั่ง drbdadm primary คอนฟิกให้ดิสก์ drbd บนเครื่องนี้ทำหน้าที่เป็น primary เพื่อให้สามารถ อ่าน เขียน ข้อมูลจากดิสก์ได้</p>
<pre>[root@centos54-a ~]# <strong>drbdadm primary all
</strong><span style="color: #ff0000;">0: State change failed: (-2) Refusing to be Primary without at least one UpToDate disk
</span>Command 'drbdsetup 0 primary' terminated with exit code 17</pre>
<p>หากเป็นการเรียกใช้ครั้งแรก ต้องระบุออปชั่นดังนี้</p>
<pre>[root@centos54-a ~]# <strong>drbdadm -- --overwrite-data-of-peer primary all
</strong>[root@centos54-a ~]#</pre>
<p>ตรวจสอบสถานะ drbd อีกครั้ง สังเกตว่า ฟิลด์ ro จะเปลี่ยนจาก Seconday เป็น Primary และฟิลด์ ds จะเปลี่ยนจาก Inconsistent เป็น UpToDate</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs            ro               ds                 p  mounted  fstype
0:r0   WFConnection  <span style="color: #0000ff;"><strong>Primary</strong></span>/Unknown  <strong><span style="color: #0000ff;">UpToDate</span></strong>/DUnknown  C</pre>
<p>ทดสอบการ mount ดิสก์อีกครั้ง</p>
<pre>[root@centos54-a ~]# <strong>mount /dev/drbd0 /export
</strong>mount: you must specify the filesystem type</pre>
<p>ก็ยังไม่สามารถ mount ได้ เพราะยังไม่มี filesystem บน /dev/drbd0</p>
<p>รันคำสั่ง mkfs.ext3 เพื่อสร้าง filesystem แบบ ext3</p>
<pre>[root@centos54-a ~]# <strong>mkfs.ext3 /dev/drbd0
</strong>mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
123648 inodes, 246974 blocks
12348 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=255852544
8 block groups
32768 blocks per group, 32768 fragments per group
15456 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376</pre>
<pre>Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done</pre>
<pre>This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.</pre>
<p>ทดสอบการ mount อีกครั้ง จะสามารถใช้งานได้แล้ว</p>
<pre>[root@centos54-a ~]# <strong>mount /dev/drbd0 /export</strong></pre>
<p>ตรวจสอบสถานะ DRBD</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs            ro               ds                 p  mounted  fstype
0:r0   WFConnection  Primary/Unknown  UpToDate/DUnknown  C  <span style="color: #0000ff;"><strong>/export  ext3</strong></span></pre>
<h4>คอนฟิก DRBD บนเครื่องที่ 2 (secondary)</h4>
<p>สร้างไฟล์คอนฟิก /etc/drbd.conf บนเครื่องที่ 2 เหมือนกับไฟล์ในเครื่องที่ 1</p>
<pre>[root@centos54-b ~]# <strong>cat /etc/drbd.conf
</strong>global {
    usage-count no;
}</pre>
<pre>common {
    syncer { rate 10M; }
}</pre>
<pre>resource r0 {
    protocol C;</pre>
<pre>    net {
        cram-hmac-alg "sha1";
        shared-secret "test1234";
    }</pre>
<pre>    on centos54-a.spalinux.com {
        device /dev/drbd0;
        disk /dev/sda5;
        address 10.3.3.51:8888;
        meta-disk internal;
    }</pre>
<pre>    on centos54-b.spalinux.com {
        device /dev/drbd0;
        disk /dev/sda5;
        address 10.3.3.52:8888;
        meta-disk internal;
    }
}</pre>
<p>ใช้คำสั่ง drbadm create-md เพื่อสร้าง meta data บน partition ที่จะทำเป็น DRBD</p>
<pre>[root@centos54-b ~]# <strong>drbdadm create-md all
</strong>Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.</pre>
<p>เช่นเดียวกัน หากมี filesystem อยู่บน partition ก่อนแล้ว ต้องใช้คำสั่ง dd เพื่อลบข้อมูลออก</p>
<p>ใช้คำสั่ง service เพื่อรันเซอร์วิส DRBD</p>
<pre>[root@centos54-b ~]# <strong>service drbd start
</strong>Starting DRBD resources: [ d(r0) s(r0) n(r0) ].</pre>
<p>เมื่อเริ่มต้นรันเซอร์วิส DRBD บนเครื่องที่ 2 จะเป็นการเริ่ม replicate ข้อมูลจากเครื่องที่ 1</p>
<p>ตรวจสอบสถานะ DRBD บนเครื่องที่ 2</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs          ro                 ds                     p  mounted  fstype
...    <strong><span style="color: #0000ff;">sync'ed:    42.2%</span> </strong>             (576248/987896)K
0:r0   <strong><span style="color: #0000ff;">SyncTarget</span></strong>  <strong><span style="color: #0000ff;">Secondary</span></strong>/Primary  <span style="color: #0000ff;"><strong>Inconsistent</strong></span>/UpToDate  C</pre>
<p>ตรวจสอบสถานะ DRBD บนเครื่องที่ 1</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs          ro                 ds                     p  mounted  fstype
...    <strong><span style="color: #0000ff;">sync'ed:    43.0%</span></strong>              (567032/987896)K
0:r0   <strong><span style="color: #0000ff;">SyncSource</span></strong>  Primary/<strong><span style="color: #0000ff;">Secondary</span>  </strong>UpToDate/<strong><span style="color: #0000ff;">Inconsistent</span></strong>  C  /export  ext3</pre>
<p>เมื่อ replicate ข้อมูลเรียบร้อย (synced) ข้อมูลแล้ว สถานะจะเป็นดังนี้</p>
<p>ตรวจสอบสถานะ DRBD บนเครื่องที่ 2 เมื่อ synced ข้อมูลเรียบร้อย</p>
<pre>[root@centos54-b ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   <strong><span style="color: #0000ff;">Connected</span>  <span style="color: #0000ff;">Secondary</span></strong>/Primary  <strong><span style="color: #0000ff;">UpToDate</span></strong>/UpToDate  C</pre>
<p>ตรวจสอบสถานะ DRBD บนเครื่องที่ 1 เมื่อ synced ข้อมูลเรียบร้อย</p>
<pre>[root@centos54-a ~]# <strong>service drbd status
</strong>drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:07:55
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   <strong><span style="color: #0000ff;">Connected</span></strong>  Primary/<strong><span style="color: #0000ff;">Secondary</span></strong>  UpToDate/<strong><span style="color: #0000ff;">UpToDate</span></strong>  C  /export  ext3</pre>
<p>หลังจาก synced ข้อมูลระหว่างเครื่องเรียบร้อย เมื่อมีการเปลี่ยนแปลงข้อมูลในดิสก์บนเครื่องที่ 1 (primary) การเปลี่ยนแปลงนั้นจะถูก replicate ไปยังเครื่องที่ 2 (secondary) โดยอัตโนมัติ</p>
<p>ตัวอย่างการใช้คำสั่ง tcpdump  ตรวจสอบ packet ที่ส่งระหว่างเครื่องเพื่อการ replicate ข้อมูลของ DRBD</p>
<pre>[root@centos54-b ~]# <strong>tcpdump -i eth0 -l -nn | grep 8888
</strong>tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:51:39.815802 IP 10.3.3.52.8888 &gt; 10.3.3.51.42180: P 2834377596:2834377604(8) ack 2893184807 win 46 &lt;nop,nop,timestamp 1772852 1818781&gt;
15:51:39.816356 IP 10.3.3.51.42180 &gt; 10.3.3.52.8888: P 1:9(8) ack 8 win 3216 &lt;nop,nop,timestamp 1828655 1772852&gt;
15:51:39.816394 IP 10.3.3.52.8888 &gt; 10.3.3.51.42180: . ack 9 win 46 &lt;nop,nop,timestamp 1772852 1828655&gt;
15:51:44.888876 IP 10.3.3.1.4117 &gt; 10.3.3.51.22: P 1560:1612(52) ack 1629 win 64271
15:51:49.815252 IP 10.3.3.51.42180 &gt; 10.3.3.52.8888: P 9:17(8) ack 8 win 3216 &lt;nop,nop,timestamp 1838655 1772852&gt;
15:51:49.815330 IP 10.3.3.52.8888 &gt; 10.3.3.51.42180: . ack 17 win 46 &lt;nop,nop,timestamp 1782853 1838655&gt;
15:51:49.815666 IP 10.3.3.52.8888 &gt; 10.3.3.51.42180: P 8:16(8) ack 17 win 46 &lt;nop,nop,timestamp 1782853 1838655&gt;
15:51:49.847300 IP 10.3.3.51.42180 &gt; 10.3.3.52.8888: . ack 16 win 3216 &lt;nop,nop,timestamp 1838696 1782853&gt;
15:51:50.937877 IP 10.3.3.51.8888 &gt; 10.3.3.52.40284: . 3903780263:3903781711(1448) ack 2834246899 win 501 &lt;nop,nop,timestamp 1839875 1683335&gt;
...
<strong><span style="color: #0000ff;">[Ctrl-C]</span></strong></pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.drbd.org/" target="_blank">DRBD</a></li>
<li><a href="http://www.mirror.in.th/osarchive/centos/5.4/extras/" target="_blank">CentOS 5.4 extras</a></li>
<li><a href="http://spalinux.com/2010/02/basic_using_drbd">การใช้งาน DRBD เบื้องต้น</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2010/02/install_and_configure_drbd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>แก้ไขหน้าจอการบู๊ตของ Fedora 10</title>
		<link>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10</link>
		<comments>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10#comments</comments>
		<pubDate>Fri, 19 Dec 2008 16:52:48 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[booting]]></category>
		<category><![CDATA[fedora 10]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=398</guid>
		<description><![CDATA[หลังจากติดตั้ง Fedora 10 เมื่อบู๊ตเครื่องขึ้นมา จะมีแถบสี วิ่งจากซ้ายไปขวา ไปชนคำว่า Fedora 10 โดยไม่มีข้อความเกี่ยวกับการบู๊ตขึ้นมาเลย จะมีอีกทีก็หลังจากบู๊ตเสร็จ ขึ้นหน้า login ส่วนตัวผู้เขียนแล้ว ไม่ชอบหน้าจอการบู๊ตแบบนี้ คือบางครั้งหน้าจอค้างไปนาน เราไม่สามารถรู้ได้เลยว่าไปติดปัญหาที่ตรงไหน ไม่เหมือนกับการขึ้นข้อความแสดงการโหลดส่วนต่างๆ ดังนั้นเลยหาวิธีแก้ไข ให้กลับมาเหมือนเดิม หน้าจอการบู๊ต Fedora 10 คอนฟิกต่างๆ สำหรับการบู๊ตเครื่อง จะถูกระบุอยู่ในไฟล์ /boot/grub/grub.conf หรือ /etc/grub.conf เป็นลิ้งค์ไฟล์ (soft link) เชื่อมโยงอีกที [root@fc10-b1 ~]# ls -l /etc/grub.conf lrwxrwxrwx 1 root root 22 2008-12-10 06:13 /etc/grub.conf -&#62; ../boot/grub/grub.conf ตัวอย่างไฟล์ grub.conf ที่ได้จากการติดตั้ง Fedora 10 [root@fc10-b1 ~]# [...]]]></description>
			<content:encoded><![CDATA[<p>หลังจากติดตั้ง Fedora 10 เมื่อบู๊ตเครื่องขึ้นมา จะมีแถบสี วิ่งจากซ้ายไปขวา ไปชนคำว่า Fedora 10 โดยไม่มีข้อความเกี่ยวกับการบู๊ตขึ้นมาเลย จะมีอีกทีก็หลังจากบู๊ตเสร็จ ขึ้นหน้า login</p>
<p>ส่วนตัวผู้เขียนแล้ว ไม่ชอบหน้าจอการบู๊ตแบบนี้ คือบางครั้งหน้าจอค้างไปนาน เราไม่สามารถรู้ได้เลยว่าไปติดปัญหาที่ตรงไหน ไม่เหมือนกับการขึ้นข้อความแสดงการโหลดส่วนต่างๆ ดังนั้นเลยหาวิธีแก้ไข ให้กลับมาเหมือนเดิม</p>
<p><span id="more-398"></span></p>
<h4>หน้าจอการบู๊ต Fedora 10</h4>
<p>คอนฟิกต่างๆ สำหรับการบู๊ตเครื่อง จะถูกระบุอยู่ในไฟล์ /boot/grub/grub.conf หรือ /etc/grub.conf เป็นลิ้งค์ไฟล์ (soft link) เชื่อมโยงอีกที</p>
<pre>[root@fc10-b1 ~]# <strong>ls -l /etc/grub.conf
</strong>lrwxrwxrwx 1 root root 22 2008-12-10 06:13 /etc/grub.conf -&gt; ../boot/grub/grub.conf</pre>
<p>ตัวอย่างไฟล์ grub.conf ที่ได้จากการติดตั้ง Fedora 10</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
<span style="color: #0000ff;">timeout=0
</span>splashimage=(hd0,0)/grub/splash.xpm.gz
<span style="color: #0000ff;">hiddenmenu
</span>password --md5 $1$
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc <span style="color: #0000ff;">rhgb quiet</span>
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>หน้าจอดีฟอลต์ตอนบู๊ต Fedora 10</p>
<p><img class="alignnone size-full wp-image-402" title="Fedora 10 default booting screen" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_default_booting_screen.png" alt="Fedora 10 default booting screen" width="500" height="278" /></p>
<p>หมายเหตุ ก่อนที่จะแก้ไขไฟล์คอนฟิก แนะนำให้ copy ไฟล์ต้นฉบับสำรองไว้ เผื่อมีปัญหาจะได้แก้คืนได้</p>
<pre>[root@fc10-b1 ~]# <strong>cp /boot/grub/grub.conf /boot/grub/grub.conf.orig</strong></pre>
<h4>แก้ไขให้ขึ้นเมนูตอนบู๊ต (Boot Manager)</h4>
<p>ถ้าต้องการให้ขึ้นเมนูตอนบู๊ต เช่นเครื่องมีหลาย OS ติดตั้งไว้  ต้องแก้คอนฟิกในไฟล์ grub.conf โดยสิ่งที่ต้องแก้คือ ลบบรรทัด hiddenmenu และสามารถตั้งเวลาให้แสดงเมนูบู๊ตได้ โดยการเปลี่ยนค่า timeout (หน่วยเป็นวินาที)</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf เพื่อให้แสดงเมนูบู๊ตเป็นเวลา 5 วินาที แสดงเฉพาะส่วนที่เปลี่ยนแปลง</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
timeout=5
...
#hiddenmenu
...</pre>
<p>หลังจากแก้ไขไฟล์ grub.conf ทดลองรีบู๊ตเครื่อง จะมีเมนูบู๊ตขึ้นมา</p>
<p>ตัวอย่างหน้าจอเมนูบู๊ต</p>
<p><img class="alignnone size-full wp-image-403" title="Fedora 10 display boot menu" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_boot_menu.png" alt="Fedora 10 display boot menu" width="500" height="375" /></p>
<h4>หน้าจอการโหลด kernel</h4>
<p>หลังจากผ่านหน้าจอเมนูบู๊ต จะเป็นการโหลด kernel เพื่อตรวจสอบอุปกรณ์ต่างๆ ของเครื่อง เช่น CPU, Memory, Disk ถ้าต้องการให้แสดงข้อความการโหลด kernel ด้วย ต้องแก้ไขไฟล์ grub.conf โดยลบคำว่า quiet ในบรรทัดของคอนฟิก kernel</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf  เพื่อแสดงหน้าจอการโหลด kernel</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc rhgb
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>ตัวอย่างหน้าจอการโหลด kernel</p>
<p><img class="alignnone size-full wp-image-404" title="Fedora 10 display loading kernel" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_loading_kernel.png" alt="Fedora 10 display loading kernel" width="500" height="278" /></p>
<h4>หน้าจอการรันโปรแกรมต่างๆ</h4>
<p>หลังจากเครื่องโหลด kernel เรียบร้อย จะมีการ mount filesystem แล้วรันโปรแกรมต่างๆ ที่ตั้งไว้ให้รันอัตโนมัติตอนบู๊ต หน้าจอนี้สามารถแสดงได้โดยการลบคำว่า rhgb ในบรรทัดของคอนฟิก kernel</p>
<p>ตัวอย่างการแก้ไขไฟล์ grub.conf  เพื่อแสดงหน้าจอการรันโปรแกรมต่างๆ</p>
<pre>[root@fc10-b1 ~]# <strong>cat /boot/grub/grub.conf</strong>
...
title Fedora (2.6.27.5-117.fc10.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.27.5-117.fc10.i686 ro root=UUID=f4eb7778-f7bc
    initrd /initrd-2.6.27.5-117.fc10.i686.img</pre>
<p>ตัวอย่างหน้าจอการรันโปรแกรมต่างๆ</p>
<p><img class="alignnone size-full wp-image-405" title="Fedora 10 display running program" src="http://spalinux.com/wp-content/uploads/2008/12/fedora_10_display_running_program.png" alt="Fedora 10 display running program" width="500" height="278" /></p>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/12/change_booting_screen_for_fedora_10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เก็บปริมาณการใช้งาน network บนลินุกซ์ด้วย conntrack-tools</title>
		<link>http://spalinux.com/2008/09/network_accounting_on_linux_by_conntrack_tools</link>
		<comments>http://spalinux.com/2008/09/network_accounting_on_linux_by_conntrack_tools#comments</comments>
		<pubDate>Fri, 19 Sep 2008 17:15:34 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[conntrack]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[network account]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=183</guid>
		<description><![CDATA[ในบทความนี้จะกล่าวถึงวิธีการคอนฟิกลินุกซ์ให้สามารถเก็บปริมาณการใช้งาน network ที่เข้าออกเครื่องได้ โดยจะเป็นรายงาน (log) แบบค่อนข้างละเอียดคือ ดูได้ว่าแต่ละ packet ที่ส่งเข้า/ออกเครื่องนั้นมีประเภทไหนบ้าง มาจาก IP Address ต้นทาง ปลายทาง จากไหน ใช้ protocol เป็น TCP หรือ UDP และใช้ Port อะไร เช่นเป็น Web, Mail, Secure Shell หมายเหตุ คุณสมบัตินี้จะคล้ายๆ กับการใช้งาน Netflow บนอุปกรณ์ Cisco Router มีหลายวิธีที่สามารถทำได้ แต่ในที่นี้จะแนะนำการใช้โปรแกรม conntrack-tools จับปริมาณการใช้งาน โดย conntrack-tools ถือว่าเป็นโปรแกรม (userspace tools) ที่ติดต่อกับ Linux kernel ในส่วนของ Connection Tracking System จุดประสงค์หลักๆ ของโปรแกรมนี้จะสามารถนำไปทำเป็น High [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทความนี้จะกล่าวถึงวิธีการคอนฟิกลินุกซ์ให้สามารถเก็บปริมาณการใช้งาน network ที่เข้าออกเครื่องได้ โดยจะเป็นรายงาน (log) แบบค่อนข้างละเอียดคือ ดูได้ว่าแต่ละ packet ที่ส่งเข้า/ออกเครื่องนั้นมีประเภทไหนบ้าง มาจาก IP Address ต้นทาง ปลายทาง จากไหน ใช้ protocol เป็น TCP หรือ UDP และใช้ Port อะไร เช่นเป็น Web, Mail, Secure Shell</p>
<p>หมายเหตุ คุณสมบัตินี้จะคล้ายๆ กับการใช้งาน Netflow บนอุปกรณ์ Cisco Router</p>
<p>มีหลายวิธีที่สามารถทำได้ แต่ในที่นี้จะแนะนำการใช้โปรแกรม conntrack-tools จับปริมาณการใช้งาน โดย conntrack-tools ถือว่าเป็นโปรแกรม (userspace tools) ที่ติดต่อกับ Linux kernel ในส่วนของ Connection Tracking System จุดประสงค์หลักๆ ของโปรแกรมนี้จะสามารถนำไปทำเป็น High Availability stateful firewall ได้ แต่ในบทความนี้จะขอไม่กล่าวถึงการใช้งานคุณสมบัตินี้</p>
<p><span id="more-183"></span></p>
<p>คุณสมบัติของเครื่องที่จะสามารถคอนฟิกให้ใช้งาน conntrack-tools ได้นั้นมีดังนี้</p>
<ul>
<li>ใช้เวอร์ชั่น Linux kernel มากกว่า 2.6.18</li>
<li>ติดตั้ง Library ชื่อ libnfnetlink, libnetfilter_conntrack</li>
<li>คอนฟิกและเปิดการใช้งาน connection tracking system, nfnetlink</li>
<li>ติดตั้งโปรแกรม conntrack-tools</li>
</ul>
<p>ตัวอย่างในบทความนี้ทดสอบบน Fedora 9 ซึ่งจะติดตั้ง kernel และ Library ตามข้อกำหนดมาเรียบร้อยแล้ว สิ่งที่ต้องทำเพิ่มคือเปิดการใช้งาน Connection Tracking System และติดตั้งโปรแกรม conntrack-tools เพิ่มเติม</p>
<h4>ตรวจสอบเครื่องก่อนลงโปรแกรมเพิ่มเติม</h4>
<p>ตัวอย่างการตรวจสอบ kernel และ Library ก่อนลงโปรแกรมเพิ่มเติม</p>
<pre>[root@server ~]# <strong>uname -a
</strong>Linux server.nelisys.com 2.6.25-14.fc9.i686 #1 SMP Thu May 1 06:28:41 EDT 2008 i686 i686 i386 GNU/Linux</pre>
<pre>[root@server ~]# <strong>rpm -q libnfnetlink
</strong>libnfnetlink-0.0.33-0.1.svn7211.fc9.i386</pre>
<pre>[root@server ~]# <strong>rpm -q libnetfilter_conntrack
</strong>libnetfilter_conntrack-0.0.89-0.1.svn7356.fc9.i386</pre>
<h4>เปิดการใช้งาน Connection Tracking System</h4>
<p>ก่อนที่โปรแกรมจะสามารถจับสถิติการใช้งานได้นั้นจำเป็นต้องเปิดคุณสมบัติ Connection Tracking System โดยในที่นี้จะคอนฟิก iptables ให้ตรวจสอบ state ทุก packet ที่วิ่งเข้าออกจากเครื่อง ดังนี้</p>
<p><span style="color: #ff0000;"><strong>คำเตือน ตัวอย่างไฟล์คอนฟิกของ iptables ด้านล่างนี้เป็นการอนุญาตทุก packet ให้สามารถส่งเข้าออกเครื่องนี้ได้ทั้งหมด แนะนำให้ทดสอบทำความเข้าใจใน network ที่แยกต่างหากก่อน เพื่อความปลอดภัยของเครื่อง แล้วค่อยนำไปประยุกต์ใช้งานจริง</strong></span></p>
<p>ตัวอย่างไฟล์คอนฟิกของ iptables</p>
<pre>[root@server ~]# <strong>cat /etc/sysconfig/iptables
</strong>*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
COMMIT</pre>
<p>ใช้คำสั่ง service เพื่อรัน iptables</p>
<pre>[root@server ~]# <strong>service iptables start
</strong>iptables: Applying firewall rules:                         [  OK  ]</pre>
<p>ตรวจสอบ rules ที่ถูกสร้างขึ้น</p>
<pre>[root@server ~]# <strong>iptables -L -v -n
</strong>Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   71  5388 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW,RELATED,ESTABLISHED</pre>
<pre>Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination</pre>
<pre>Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   64  6204 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW,RELATED,ESTABLISHED</pre>
<p>ใช้คำสั่ง lsmod เพื่อดู kernel module ที่ถูกเรียกใช้งานสำหรับการทำ Connection Tracking System</p>
<pre>[root@server ~]# <strong>lsmod | grep con
</strong>nf_conntrack_ipv4      11396  2
nf_conntrack           49748  2 nf_conntrack_ipv4,xt_state</pre>
<h4>ติดตั้งโปรแกรม conntrack-tools</h4>
<p>สามารถดาวน์โหลดโปรแกรม conntrack-tools สำหรับติดตั้งบน Fedora 9 ได้จาก</p>
<p><a href="http://mirrors.kernel.org/fedora/releases/9/Everything/i386/os/Packages/conntrack-tools-0.9.6-0.1.svn7382.fc9.i386.rpm">http://mirrors.kernel.org/fedora/releases/9/Everything/i386/os/Packages/conntrack-tools-0.9.6-0.1.svn7382.fc9.i386.rpm</a></p>
<p>ตัวอย่างการติดตั้งโปรแกรม conntrack-tools</p>
<pre>[root@server ~]# <strong>rpm -ivh conntrack-tools-0.9.6-0.1.svn7382.fc9.i386.rpm
</strong>Preparing...                ########################################### [100%]
   1:conntrack-tools        ########################################### [100%]</pre>
<p>จากการติดตั้งจะมีอยู่สองโปรแกรมคือ<br />
- conntrackd จะรันเป็น daemon ในการเก็บปริมาณการใช้งาน network<br />
- conntrack เป็นโปรแกรมที่ตรวจสอบไฟล์ /proc/net/ip_conntrack</p>
<p>ในบทความนี้เราจะใช้เฉพาะ conntrackd รันเป็น daemon</p>
<h4>สร้างไฟล์คอนฟิกของ conntrackd</h4>
<p>ขั้นตอนต่อไปคือการสร้างไฟล์ /etc/conntrackd/conntrackd.conf ซึ่งเป็นไฟล์คอนฟิกของ conntrackd โดยในที่นี้จะคอนฟิกให้รันอยู่ในโหมดการเก็บสถิติการใช้งาน network accounting</p>
<p>ตัวอย่างไฟล์คอนฟิก /etc/conntrackd/conntrackd.conf ในโหมดการเก็บสถิติการใช้งาน</p>
<pre>[root@server ~]# cat /etc/conntrackd/conntrackd.conf
#
# General settings
#
General {
    #
    # Number of buckets in the caches: hash table
    #
    HashSize 8192</pre>
<pre>    #
    # Maximum number of conntracks:
    # it must be &gt;= $ cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
    #
    HashLimit 65535</pre>
<pre>    #
    # Logfile: on, off, or a filename
    # Default: on (/var/log/conntrackd.log)
    #
    LogFile off</pre>
<pre>    #
    # Syslog: on, off or a facility name (daemon (default) or local0..7)
    # Default: off
    #
    Syslog off</pre>
<pre>    #
    # Lockfile
    #
    LockFile /var/lock/conntrack.lock</pre>
<pre>    #
    # Unix socket configuration
    #
    UNIX {
        Path /tmp/sync.sock
        Backlog 20
    }</pre>
<pre>    #
    # Netlink socket buffer size
    #
    SocketBufferSize 262142</pre>
<pre>    #
    # Increase the socket buffer up to maximum if required
    #
    SocketBufferSizeMaxGrown 655355
}</pre>
<pre><strong>Stats {
</strong>    #
    # If you enable this option, the daemon writes the information about
    # destroyed connections to a logfile. Default is off.
    # Logfile: on, off, or a filename
    # Default file: (/var/log/conntrackd-stats.log)
    #
 <strong>   LogFile on</strong></pre>
<pre>    #
    # Enable connection logging via Syslog. Default is off.
    # Syslog: on, off or a facility name (daemon (default) or local0..7)
    # If you set the facility, use the same as in the General clause,
    # otherwise you'll get a warning message.
    #
    Syslog off
}</pre>
<pre>#
# Ignore traffic for a certain set of IP's: Usually
# all the IP assigned to the firewall since local
# traffic must be ignored, just forwarded connections
# are worth to replicate
#
IgnoreTrafficFor {
    IPv4_address 127.0.0.1 # loopback
}</pre>
<pre>#
# Do not replicate certain protocol traffic
#
IgnoreProtocol {
#    UDP
#   ICMP
#   IGMP
#   VRRP
    # numeric numbers also valid
}</pre>
<h4>รันโปรแกรม conntrackd</h4>
<p>รันโปรแกรม conntrackd ให้เป็น daemon ของเครื่องตามตัวอย่าง</p>
<pre>[root@server ~]# <strong>conntrackd -d</strong></pre>
<pre>[root@server ~]# <strong>ps -ef | grep conntrackd
</strong>root     17381     1  0 22:19 ?        00:00:00 conntrackd -d</pre>
<h4>ทดสอบการใช้งานและดูไฟล์ที่ถูกสร้างขึ้น</h4>
<p>ไฟล์คอนฟิกด้านบนจะสั่งให้โปรแกรม conntrackd ที่รันเก็บสถิติไว้ในไฟล์ /var/log/conntrackd-stats.log โดยจะเก็บสถิติเมื่อมีการส่งข้อมูลสิ้นสุด (close connection) ในแต่ละ packet ที่เข้าออกเครื่อง</p>
<p>ตัวอย่างไฟล์ที่ถูกสร้างขึ้น</p>
<pre>Fri Sep 19 22:24:11 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1038 dport=22 packets=15 bytes=1864
                                           src=192.168.1.9 dst=192.168.1.1 sport=22 dport=1038 packets=12 bytes=2984
Fri Sep 19 22:24:21 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1039 dport=80 packets=5 bytes=817
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1039 packets=5 bytes=639
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1043 dport=80 packets=6 bytes=917
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1043 packets=6 bytes=2784
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1044 dport=80 packets=5 bytes=718
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1044 packets=4 bytes=303
Fri Sep 19 22:24:25 2008        tcp      6 src=192.168.1.1 dst=192.168.1.9 sport=1045 dport=80 packets=5 bytes=718
                                           src=192.168.1.9 dst=192.168.1.1 sport=80 dport=1045 packets=5 bytes=342</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://conntrack-tools.netfilter.org/index.html" target="_blank">conntrack-tools: Netfilter’s connection tracking userspace tools</a></li>
<li><a href="http://www.free-it.de/archiv/talks_2005/paper-11076/paper-11076.html" target="_blank">Flow based network accounting with Linux</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/09/network_accounting_on_linux_by_conntrack_tools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>คอมไพล์ Linux kernel บน Fedora 9 ในรูปแบบ RPMS</title>
		<link>http://spalinux.com/2008/09/compile_linux_kernel_on_fedora_9_in_rpms</link>
		<comments>http://spalinux.com/2008/09/compile_linux_kernel_on_fedora_9_in_rpms#comments</comments>
		<pubDate>Tue, 16 Sep 2008 18:42:23 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux Installation]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=162</guid>
		<description><![CDATA[โดยทั่วไป kernel ที่ติดตั้งมากับลินุกซ์เวอร์ชั่น (distribution) ต่างๆ รวมทั้ง Fedora ด้วย จะสามารถใช้งานได้เลย รองรับอุปกรณ์ hardware ได้ส่วนใหญ่หลากหลายชนิด ไม่จำเป็นต้องแก้ไขเพิ่มเติมแต่อย่างใด แต่ในบางครั้งถ้ามีอุปกรณ์รุ่นใหม่ที่ kernel ไม่รู้จัก หรือต้องการจะปรับแต่ง kernel ให้เรียกใช้งานเฉพาะสำหรับอุปกรณ์ที่เราใช้อยู่จริงๆ ทั้งนี้เพื่อประหยัด CPU/Memory ที่ถูกใช้โดยเปล่าประโยชน์ รวมทั้งเพิ่มความปลอดภัยให้กับตัวลินุกซ์เองด้วย ในบทความนี้จึงขอแนะนำวิธีปรับแต่ง kernel และคอมไพล์ใหม่ โดยจะทดสอบบน Fedora 9 คำเตือน การคอมไพล์ kernel จะใช้เนื้อที่จำนวนมากหลายกิกะไบต์ อย่าลืมเผื่อเนื้อที่ไว้ก่อนที่จะเริ่มคอมไพล์ เพราะถ้าเนื้อที่ไม่เพียงพอ การคอมไพล์จะมีปัญหา และต้องเริ่มคอมไพล์ใหม่ ซึ่งจะใช้เวลานานมาก แนะนำให้คอมไพล์ kernel ในรูปแบบ src.rpm ด้วยผู้ใช้งานธรรมดาที่ไม่ใช่ root ซึ่งสามารถดูได้ที่ วิธีการคอมไพล์ไฟล์ src.rpm ด้วยผู้ใช้งานธรรมดา ติดตั้งไฟล์ src.rpm ซึ่งเป็น kernel source ในรูปแบบไฟล์ rpm [...]]]></description>
			<content:encoded><![CDATA[<p>โดยทั่วไป kernel ที่ติดตั้งมากับลินุกซ์เวอร์ชั่น (distribution) ต่างๆ รวมทั้ง Fedora ด้วย จะสามารถใช้งานได้เลย รองรับอุปกรณ์ hardware ได้ส่วนใหญ่หลากหลายชนิด ไม่จำเป็นต้องแก้ไขเพิ่มเติมแต่อย่างใด</p>
<p>แต่ในบางครั้งถ้ามีอุปกรณ์รุ่นใหม่ที่ kernel ไม่รู้จัก หรือต้องการจะปรับแต่ง kernel ให้เรียกใช้งานเฉพาะสำหรับอุปกรณ์ที่เราใช้อยู่จริงๆ ทั้งนี้เพื่อประหยัด CPU/Memory ที่ถูกใช้โดยเปล่าประโยชน์ รวมทั้งเพิ่มความปลอดภัยให้กับตัวลินุกซ์เองด้วย</p>
<p>ในบทความนี้จึงขอแนะนำวิธีปรับแต่ง kernel และคอมไพล์ใหม่ โดยจะทดสอบบน Fedora 9</p>
<p><span id="more-162"></span></p>
<p>คำเตือน การคอมไพล์ kernel จะใช้เนื้อที่จำนวนมากหลายกิกะไบต์ อย่าลืมเผื่อเนื้อที่ไว้ก่อนที่จะเริ่มคอมไพล์ เพราะถ้าเนื้อที่ไม่เพียงพอ การคอมไพล์จะมีปัญหา และต้องเริ่มคอมไพล์ใหม่ ซึ่งจะใช้เวลานานมาก</p>
<p>แนะนำให้คอมไพล์ kernel ในรูปแบบ src.rpm ด้วยผู้ใช้งานธรรมดาที่ไม่ใช่ root ซึ่งสามารถดูได้ที่ <a href="http://spalinux.com/2008/09/compile_src_rpm_by_normal_user">วิธีการคอมไพล์ไฟล์ src.rpm ด้วยผู้ใช้งานธรรมดา</a></p>
<h4>ติดตั้งไฟล์ src.rpm ซึ่งเป็น kernel source ในรูปแบบไฟล์ rpm</h4>
<pre>[user01@server ~]$ rpm -ivh kernel-2.6.25-14.fc9.src.rpm
   1:kernel                 warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
...
########################################### [100%]</pre>
<p>หมายเหตุ ไม่ต้องสนใจ warning ที่เกี่ยวข้องกับ user, group does not exists</p>
<p>ผลลัพธ์ที่ได้จากการติดตั้งไฟล์ src.rpm จะได้ไฟล์ kernel.spec ใน SPECS/ ซึ่งจะเป็นชุดคำสั่ง (script) ในการคอมไพล์ และไฟล์ที่เป็น source code ที่อยู่ใน SOURCES/</p>
<p>ตัวอย่างผลลัพธ์ที่ได้จากการติดตั้งไฟล์ src.rpm</p>
<pre>[user01@server ~]$ cd rpmbuild/</pre>
<pre>[user01@server rpmbuild]$ ls SPECS/
kernel.spec</pre>
<pre>[user01@server rpmbuild]$ ls SOURCES/
config-debug                                   linux-2.6-e1000-ich9.patch
config-generic                                 linux-2.6-efika-not-chrp.patch
config-i586                                    linux-2.6-execshield.patch
...
linux-2.6-drm-modesetting-oops-fixes.patch     merge.pl
linux-2.6-drm-radeon-fix-oops2.patch           nouveau-drm.patch
linux-2.6-drm-radeon-fix-oops.patch            nouveau-drm-update.patch</pre>
<p>เข้าไปที่ไดเร็คทอรี SPECS/ แล้วใช้คำสั่ง rpmbuild เพื่อสร้าง kernel source tree สำหรับการคอมไพล์</p>
<p>หมายเหตุ การใช้ option &#8216;-bp&#8217; จะแตกไฟล์ source code และทำการ patch ไฟล์ต่างๆ ที่อยู่ใน SOURCES/ ตามที่ระบุในไฟล์ kernel.spec</p>
<pre>[user01@server rpmbuild]$<strong> cd SPECS/</strong></pre>
<pre>[user01@server SPECS]$ <strong>rpmbuild -bp --target=`uname -m` kernel.spec
</strong>Building target platforms: i686
Building for target i686
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.43192
+ umask 022
+ cd /home/user01/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ patch_command='patch -p1 -F1 -s'
+ '[' '!' -d kernel-2.6.25/vanilla-2.6.25 ']'
+ rm -f pax_global_header
+ cd /home/user01/rpmbuild/BUILD
+ rm -rf kernel-2.6.25
+ /bin/mkdir -p kernel-2.6.25
+ cd kernel-2.6.25
+ /usr/bin/bzip2 -dc /home/user01/rpmbuild/SOURCES/linux-2.6.25.tar.bz2
+ tar -xf -</pre>
<pre>...
...
...</pre>
<pre>config:3405:warning: trying to assign nonexistent symbol INSTRUMENTATION
.config:3450:warning: trying to assign nonexistent symbol ACPI_CUSTOM_DSDT_INITRD
.config:3464:warning: trying to assign nonexistent symbol CGROUP_MEM_CONT
.config:3480:warning: trying to assign nonexistent symbol DEBUG_IGNORE_QUIET
+ echo '# i386'
+ cat .config
+ find . '(' -name '*.orig' -o -name '*~' ')' -exec rm -f '{}' ';'
+ cd ..
+ exit 0</pre>
<h4>ตรวจสอบ kernel source tree ที่ถูกสร้างขึ้น</h4>
<pre>[user01@server SPECS]$ <strong>cd ../BUILD/kernel-2.6.25/
</strong>/home/user01/rpmbuild/BUILD/kernel-2.6.25</pre>
<pre>[user01@server kernel-2.6.25]$ <strong>ls -CF
</strong>linux-2.6.25.i686/  vanilla-2.6.25/</pre>
<h4>สร้างคอนฟิกของ kernel ที่จะใช้เป็นต้นแบบ</h4>
<p>เข้าไปในไดเร็คทอรี linux-2.6.25.i686 ภายในนี้จะมีไดเร็คทอรีย่อยที่ชื่อว่า configs/ ซึ่งจะมีไฟล์คอนฟิกสำหรับเครื่องต่างๆ ในที่นี้จะเลือกไฟล์สำหรับเครื่องที่เป็น i686 ชื่อไฟล์คือ kernel-2.6.25-i686.config</p>
<p>copy ไฟล์คอนฟิกนี้ไปเป็นชื่อไฟล์ .config</p>
<pre>[user01@server kernel-2.6.25]$ <strong>cd linux-2.6.25.i686/</strong></pre>
<pre>[user01@server linux-2.6.25.i686]$ <strong>ls configs/</strong>
kernel-2.6.25-i586.config  kernel-2.6.25-i686-debug.config  kernel-2.6.25-i686-PAEdebug.config
kernel-2.6.25-i686.config  kernel-2.6.25-i686-PAE.config    kernel-2.6.25-i686-xen.config</pre>
<pre>[user01@server linux-2.6.25.i686]$ <strong>cp configs/kernel-2.6.25-i686.config .config</strong></pre>
<p>รันคำสั่ง make oldconfig</p>
<pre>[user01@server linux-2.6.25.i686]$ <strong>make oldconfig
</strong>scripts/kconfig/conf -o arch/x86/Kconfig
*
* Linux Kernel Configuration
*
*
* General setup
*
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?] y
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?] n
Support for paging of anonymous memory (swap) (SWAP) [Y/n/?] y
System V IPC (SYSVIPC) [Y/n/?] y</pre>
<pre>...
...
...</pre>
<pre>CRC32 functions (CRC32) [Y/?] y
CRC7 functions (CRC7) [N/m/y/?] n
CRC32c (Castagnoli, et al) Cyclic Redundancy-Check (LIBCRC32C) [M/y/?] m
#
# configuration written to .config
#</pre>
<p>รันคำสั่ง make menuconfig สำหรับการเลือกคอนฟิกของ kernel โดยจะมีรูปแบบการเลือกเป็นแบบเมนู</p>
<pre>[user01@server linux-2.6.25.i686]$ <strong>make menuconfig</strong></pre>
<pre><strong></strong></pre>
<p>ตัวอย่างหน้าจอของ make menuconfig<br />
<img src="http://spalinux.com/wp-content/uploads/2008/09/fedora_9_make_menuconfig.png" alt="Fedora 9 make menuconfig" /></p>
<p>เมื่อแก้ไขคอนฟิกของ kernel เรียบร้อย และออกจาก menuconfig แล้ว ให้แก้ไขไฟล์ .config โดยเพิ่ม hardware platform ไว้บนบรรทัดบนสุด โดยสามารถตรวจสอบ hardware platform ได้จากการรันคำสั่ง uname -i</p>
<p>ตัวอย่างการตรวจสอบและเพิ่ม hardware platform ในไฟล์ .config</p>
<pre>[user01@server linux-2.6.25.i686]$ <strong>uname -i
</strong>i386</pre>
<pre>[user01@server linux-2.6.25.i686]$ <strong>vi .confg
<span style="color: #0000ff;"># i386</span></strong>
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
# Tue Sep 16 14:03:32 2008
#</pre>
<p>หลังจากเพิ่ม hardware platform ในไฟล์ .config แล้ว copy ไฟล์นี้กลับเข้าไปใน SOURCES/ แต่เปลี่ยนชื่อเป็น config-&lt;arch&gt; โดย &lt;arch&gt; ได้มาจากการรันคำสั่ง uname -m</p>
<pre>[user01@server linux-2.6.25.i686]$ <strong>cp .config ../../../SOURCES/config-i686</strong></pre>
<p>ตามคำแนะนำในไฟล์ kernel.spec ว่า ถ้ามีการแก้ไขคอนฟิกของ kernel ให้เพิ่มการ define ตัวแปร buildid ด้วย ในที่นี้จะระบุเป็น .spalinux.test1.</p>
<p>ตัวอย่างการแก้ไขการ define ตัวแปร buildid</p>
<pre>...
%define buildid .spalinux.test1
...</pre>
<p>คอมไพล์ kernel และสร้างเป็นไฟล์ RPMS ใหม่ โดยจะเลือกคอมไพล์ให้เป็น package เฉพาะตัว base kernel สำหรับการบู๊ตเครื่อง และ kernel-devel ไว้สำหรับคอมไพล์โปรแกรมอื่นๆ เพิ่มเติม</p>
<p>หมายเหตุ option &#8216;-bb&#8217; เป็นการระบุให้มีการคอมไพล์โปรแกรมจริงๆ ซึ่งการคอมไพล์ kernel นั้นจะใช้เวลาค่อนข้างนานหลายชั่วโมง ขึ้นอยู่กับคอนฟิกที่เราเลือกด้วย แล้วก็ขึ้นกับ CPU, Memory</p>
<pre>[user01@server SPECS]$ <strong>rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec
</strong>Building target platforms: i686
Building for target i686
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.55363
+ umask 022
+ cd /home/user01/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ patch_command='patch -p1 -F1 -s'
+ '[' '!' -d kernel-2.6.25/vanilla-2.6.25 ']'
+ cd kernel-2.6.25
+ '[' -d linux-2.6.25.i686 ']'
+ rm -rf deleteme.i686
+ mv linux-2.6.25.i686 deleteme.i686
+ rm -rf deleteme.i686
+ cp -rl vanilla-2.6.25 linux-2.6.25.i686
...
...
...
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/kernel-2.6.25-14.spalinux.test1.fc9.i686-root
Wrote: /home/user01/rpmbuild/RPMS/i686/kernel-2.6.25-14.spalinux.test1.fc9.i686.rpm
Wrote: /home/user01/rpmbuild/RPMS/i686/kernel-devel-2.6.25-14.spalinux.test1.fc9.i686.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.98631
+ umask 022
+ cd /home/user01/rpmbuild/BUILD
+ cd kernel-2.6.25
+ rm -rf /var/tmp/kernel-2.6.25-14.spalinux.test1.fc9.i686-root
+ exit 0</pre>
<p>ผลลัพธ์ที่ได้จากการคอมไพล์จะอยู่ในไดเร็คทอรี RPMS/ แล้วแยกย่อยตามชนิด (arch) ของเครื่องที่ระบุตอนใช้คำสั่ง rpmbuild</p>
<pre>[user01@server RPMS]$ <strong>find i686/
</strong>i686/
i686/kernel-2.6.25-14.spalinux.test1.fc9.i686.rpm
i686/kernel-devel-2.6.25-14.spalinux.test1.fc9.i686.rpm</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://spalinux.com/2008/09/compile_src_rpm_by_normal_user">วิธีการคอมไพล์ไฟล์ src.rpm ด้วยผู้ใช้งานธรรมดา</a></li>
<li><a title="Docs/CustomKernel" href="http://fedoraproject.org/wiki/Docs/CustomKernel" target="_blank">Docs/CustomKernel<br />
</a></li>
<li><a title="Fedora 9 src.rpm" href="http://mirrors.kernel.org/fedora/releases/9/Fedora/source/SRPMS/" target="_blank">ไฟล์ src.rpm ใน Fedora 9</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/09/compile_linux_kernel_on_fedora_9_in_rpms/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

