<?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; Utility</title>
	<atom:link href="http://spalinux.com/category/utility/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>Resources for Relaxing Linux System Administrators</description>
	<lastBuildDate>Sat, 21 Jan 2012 16:07:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>เขียนโปรแกรมโหลดเว็บเพจด้วย PHP cURL</title>
		<link>http://spalinux.com/2011/12/program-php-curl-to-load-web-page</link>
		<comments>http://spalinux.com/2011/12/program-php-curl-to-load-web-page#comments</comments>
		<pubDate>Thu, 22 Dec 2011 16:11:06 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[load web page]]></category>
		<category><![CDATA[php curl]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1574</guid>
		<description><![CDATA[จากที่ได้นำเสนอ วิธีการใช้ cURL เพื่อโหลดเว็บเพจ ซึ่งเป็นการรันคำสั่งแบบ command line มาแล้ว คราวนี้จะเป็นการเขียนโปรแกรม PHP โดยเรียกใช้ฟังก์ชั่นในโมดูล curl เพื่อโหลดเว็บเพจ ตรวจสอบโมดูล php curl ก่อนที่เราจะเรียกใช้ฟังก์ชั่นจากโมดูล curl เพื่อเขียนโปรแกรมใน PHP ได้นั้น จำเป็นต้องมีโมดูล curl ติดตั้งอยู่แล้ว ซึ่งสามารถตรวจสอบได้ด้วยการรันคำสั่ง php ตามด้วยออปชั่น &#8216;-m&#8217; ดูผลลัพธ์ที่ได้ ตัวอย่างการรันคำสั่ง php ด้วยออปชั่น &#8216;-m&#8217; เพื่อดูว่ามีโมดูล curl หรือไม่ [user1@dev ~]$ php -m &#124; grep curl curl ถ้าไม่มี ต้องติดตั้งเพิ่มเติม ซึ่งอาจจะด้วยการใช้ rpm หรือ yum ก็ได้ เริ่มใช้ฟังก์ชั่น curl เริ่มต้นด้วยตัวอย่างการเขียนโปรแกรมโดยใช้ฟังก์ชั่น curl [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่ได้นำเสนอ <a href="http://spalinux.com/2011/12/using-curl-to-load-web-page">วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</a> ซึ่งเป็นการรันคำสั่งแบบ command line มาแล้ว</p>
<p>คราวนี้จะเป็นการเขียนโปรแกรม PHP โดยเรียกใช้ฟังก์ชั่นในโมดูล curl เพื่อโหลดเว็บเพจ</p>
<p><span id="more-1574"></span></p>
<h4>ตรวจสอบโมดูล php curl</h4>
<p>ก่อนที่เราจะเรียกใช้ฟังก์ชั่นจากโมดูล curl เพื่อเขียนโปรแกรมใน PHP ได้นั้น จำเป็นต้องมีโมดูล curl ติดตั้งอยู่แล้ว ซึ่งสามารถตรวจสอบได้ด้วยการรันคำสั่ง php ตามด้วยออปชั่น &#8216;-m&#8217; ดูผลลัพธ์ที่ได้</p>
<p>ตัวอย่างการรันคำสั่ง php ด้วยออปชั่น &#8216;-m&#8217; เพื่อดูว่ามีโมดูล curl หรือไม่</p>
<pre>[user1@dev ~]$ <strong>php -m | grep curl</strong>
curl</pre>
<p>ถ้าไม่มี ต้องติดตั้งเพิ่มเติม ซึ่งอาจจะด้วยการใช้ rpm หรือ yum ก็ได้</p>
<h4>เริ่มใช้ฟังก์ชั่น curl</h4>
<p>เริ่มต้นด้วยตัวอย่างการเขียนโปรแกรมโดยใช้ฟังก์ชั่น curl แบบง่ายสุด เพื่อโหลดเว็บเพจ มีสามขั้นตอนคือ</p>
<ul>
<li>curl_init ระบุเว็บไซต์ที่ต้องการโหลด</li>
<li>curl_exec โหลดหน้าเว็บและแสดงผลลัพธ์</li>
<li>curl_close สิ้นสุดการใช้ curl</li>
</ul>
<p>เช่นต้องการโหลดเว็บ www.php.net</p>
<pre>[user1@dev ~]$ <strong>cat curl.php</strong>
&lt;?php

// Create a curl handle
$ch = <span style="color: #0000ff;">curl_init</span>('http://www.php.net');

// Execute
$ret = <span style="color: #0000ff;">curl_exec</span>($ch);

// Close handle
<span style="color: #0000ff;">curl_close</span>($ch);

?&gt;</pre>
<p>ทดลองรันโปรแกรมที่เขียน</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
 &lt;title&gt;PHP: Hypertext Preprocessor&lt;/title&gt;
 &lt;style type="text/css" media="all"&gt;
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 &lt;/style&gt;
...</pre>
<p>สังเกตว่าผลลัพธ์การโหลด หรือไฟล์เว็บเพจจะแสดงผลออกหน้าจอเลย เมื่อใช้ฟังก์ชั่น curl_exec() ไม่ได้เก็บไว้ในตัวแปร $ret</p>
<p>หากต้องการเก็บผลลัพธ์ที่ได้ไว้ในตัวแปรก่อน เพื่อนำไปประมวลผล ต้องใช้ฟังก์ชั่น curl_setopt เพื่อตั้งค่า CURLOPT_RETURNTRANSFER ให้เป็น true</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

<span style="color: #0000ff;">// Set curl options</span>
<span style="color: #0000ff;">curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</span>

// Execute
$ret = curl_exec($ch);

// Return
<span style="color: #0000ff;">print 'return = ' . $ret . "\n";</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ลองรันโปรแกรมหลังจากแก้ไขแล้ว</p>
<pre>[user1@dev ~]$ php curl.php
<span style="color: #0000ff;">return =</span> &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
 &lt;title&gt;PHP: Hypertext Preprocessor&lt;/title&gt;
 &lt;style type="text/css" media="all"&gt;
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 &lt;/style&gt;
...</pre>
<p>&nbsp;</p>
<h4>ดูรายละเอียดการโหลดเว็บเพจ</h4>
<p>หากต้องการดูข้อมูลรายละเอียดของการโหลดเว็บเพจ สามารถใช้ฟังก์ชั่น curl_getinfo() ได้</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

<span style="color: #0000ff;">// Get information about the last transfer</span>
<span style="color: #0000ff;">$get_info = curl_getinfo($ch);</span>

<span style="color: #0000ff;">print_r($get_info);</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ผลการรันโปรแกรม จะแสดงค่าเกี่ยวกับการโหลดเว็บเพจทั้งหมด</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
Array
(
    [url] =&gt; http://www.php.net
    [content_type] =&gt; text/html;charset=utf-8
    [http_code] =&gt; 200
    [header_size] =&gt; 382
    [request_size] =&gt; 50
    [filetime] =&gt; -1
    [ssl_verify_result] =&gt; 0
    [redirect_count] =&gt; 0
    [total_time] =&gt; 1.523659
    [namelookup_time] =&gt; 0.006906
    [connect_time] =&gt; 0.249598
    [pretransfer_time] =&gt; 0.249602
    [size_upload] =&gt; 0
    [size_download] =&gt; 45325
    [speed_download] =&gt; 29747
    [speed_upload] =&gt; 0
    [download_content_length] =&gt; -1
    [upload_content_length] =&gt; 0
    [starttransfer_time] =&gt; 0.551071
    [redirect_time] =&gt; 0
    [certinfo] =&gt; Array
        (
        )

)</pre>
<p>&nbsp;</p>
<p>แต่ถ้าต้องการแสดงเฉพาะบางค่า เช่นขนาดไฟล์เว็บเพจที่โหลด ต้องระบุ CURLINFO_SIZE_DOWNLOAD ไว้ในฟังก์ชั่น curl_getinfo() ด้วย</p>
<pre>&lt;?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

// Get information about the last transfer
$get_info_size_download = curl_getinfo($ch, <span style="color: #0000ff;">CURLINFO_SIZE_DOWNLOAD</span>);

<span style="color: #0000ff;">print 'SIZE_DOWNLOAD = ' . $get_info_size_download . "\n";</span>

// Close handle
curl_close($ch);

?&gt;</pre>
<p>ผลการรันโปรแกรม</p>
<pre>[user1@dev ~]$ <strong>php curl.php</strong>
SIZE_DOWNLOAD = 45325</pre>
<p>&nbsp;</p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.php.net/manual/en/intro.curl.php" target="_blank">PHP: cURL Functions &#8211; Manual</a></li>
<li><a href="http://spalinux.com/2011/12/using-curl-to-load-web-page">วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/program-php-curl-to-load-web-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>วิธีการใช้ cURL เพื่อโหลดเว็บเพจ</title>
		<link>http://spalinux.com/2011/12/using-curl-to-load-web-page</link>
		<comments>http://spalinux.com/2011/12/using-curl-to-load-web-page#comments</comments>
		<pubDate>Fri, 16 Dec 2011 16:19:34 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[libcurl]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1565</guid>
		<description><![CDATA[จากที่เคยแนะนำ วิธีการใช้คำสั่ง wget รันเป็นคำสั่งบน comand line เพื่อโหลดเว็บเพจได้ มาครั้งนี้ ขอแนะนำอีกคำสั่งคือ cURL โปรแกรมทำหน้าที่คล้ายกันแต่มีคุณสมบัติมากกว่า แถม curl ยังมี library (libcurl) ที่ภาษาต่างๆ เช่น PHP นำไปพัฒนาสร้างเป็นฟังก์ชั่นให้เรียกใช้ในการเขียนโปรแกรมได้ เริ่มต้นการใช้ด้วยการรันคำสั่ง curl ตามด้วย URL ของเว็บไซต์ เช่นต้องการโหลดเว็บหน้าแรกของ www.apple.com [user1@dev ~]$ curl http://www.apple.com &#60;!DOCTYPE html&#62; &#60;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&#62; &#60;head&#62; &#60;meta http-equiv="content-type" content="text/html; charset=utf-8" /&#62; &#60;meta name="Author" content="Apple Inc." /&#62; &#60;meta name="viewport" content="width=1024" /&#62; &#60;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, [...]]]></description>
			<content:encoded><![CDATA[<p>จากที่เคยแนะนำ<a href="http://spalinux.com/2010/01/using_wget"> วิธีการใช้คำสั่ง wget</a> รันเป็นคำสั่งบน comand line เพื่อโหลดเว็บเพจได้ มาครั้งนี้ ขอแนะนำอีกคำสั่งคือ cURL โปรแกรมทำหน้าที่คล้ายกันแต่มีคุณสมบัติมากกว่า แถม curl ยังมี library (libcurl) ที่ภาษาต่างๆ เช่น PHP นำไปพัฒนาสร้างเป็นฟังก์ชั่นให้เรียกใช้ในการเขียนโปรแกรมได้</p>
<p><span id="more-1565"></span><br />
เริ่มต้นการใช้ด้วยการรันคำสั่ง curl ตามด้วย URL ของเว็บไซต์ เช่นต้องการโหลดเว็บหน้าแรกของ www.apple.com</p>
<pre>[user1@dev ~]$ <strong>curl http://www.apple.com</strong>
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
 &lt;title&gt;Apple&lt;/title&gt;
 ...</pre>
<p>ดีฟอลต์ผลลัพธ์ที่ได้จะแสดงผลออกทางหน้าจอ (stdout)</p>
<h4>ออปชั่น -o (output)</h4>
<p>ระบุออปชั่น &#8220;-o&#8217; ถ้าต้องการบันทึกผลลัพธ์เป็นไฟล์</p>
<pre>[user1@dev dev]$ <strong>curl -o apple-index.html http://www.apple.com</strong>
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
 Dload  Upload   Total   Spent    Left  Speed
 100  9346  100  9346    0     0  31031      0 --:--:-- --:--:-- --:--:-- 59151</pre>
<p>ไฟล์ผลลัพธ์ที่ได้</p>
<pre>[user1@dev dev]$ <strong>ls -l</strong>
 total 12
 -rw-r--r--. 1 user1 users 9346 Dec 16 22:56 apple-index.html

[user1@dev dev]$ <strong>head apple-index.html</strong>
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
&lt;title&gt;Apple&lt;/title&gt;</pre>
<h4>ออปชั่น -v (verbose)</h4>
<p>หากต้องการดูรายละเอียด ขั้นตอนการโหลดเว็บเพจ สามารถทำได้โดยการระบุออปชั่น &#8220;-v&#8221;</p>
<pre>[user1@dev dev]$ <strong>curl -v http://www.apple.com</strong>
 * About to connect() to www.apple.com port 80 (#0)
 *   Trying 118.214.125.15... connected
 * Connected to www.apple.com (118.214.125.15) port 80 (#0)
 &gt; GET / HTTP/1.1
 &gt; User-Agent: curl/7.21.7 (x86_64-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
 &gt; Host: www.apple.com
 &gt; Accept: */*
 &gt;
 &lt; HTTP/1.1 200 OK
 &lt; Content-Type: text/html; charset=UTF-8
 &lt; Server: Apache/2.2.3 (Oracle)
 &lt; Cache-Control: max-age=531
 &lt; Expires: Fri, 16 Dec 2011 16:06:55 GMT
 &lt; Date: Fri, 16 Dec 2011 15:58:04 GMT
 &lt; Content-Length: 9346
 &lt; Connection: keep-alive
 &lt;
 &lt;!DOCTYPE html&gt;
 &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="content-type" content="text/html; charset=utf-8" /&gt;
 &lt;meta name="Author" content="Apple Inc." /&gt;
 &lt;meta name="viewport" content="width=1024" /&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" /&gt;
 &lt;link id="globalheader-stylesheet" rel="stylesheet" href="http://images.apple.com/global/nav/styles/navigation.css" type="text/css" /&gt;
&lt;title&gt;Apple&lt;/title&gt;
 ...</pre>
<h4>ออปชั่น -h (help)</h4>
<p>ระบุออปชั่น &#8220;-h&#8221; เพื่อดูออปชั่นอื่นๆ พร้อมคำอธิบายคร่าวๆ</p>
<pre>[user1@dev ~]$ <strong>curl  --help</strong>
Usage: curl [options...] &lt;url&gt;
Options: (H) means HTTP/HTTPS only, (F) means FTP only
     --anyauth       Pick "any" authentication method (H)
 -a, --append        Append to target file when uploading (F/SFTP)
     --basic         Use HTTP Basic Authentication (H)
     --cacert FILE   CA certificate to verify peer against (SSL)
     --capath DIR    CA directory to verify peer against (SSL)
 -E, --cert CERT[:PASSWD] Client certificate file and password (SSL)
     --cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)
...</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://curl.haxx.se/" target="_blank">cURL groks URLs</a></li>
<li><a href="http://spalinux.com/2010/01/using_wget">วิธีการใช้คำสั่ง wget</a></li>
<li><a href="http://spalinux.com/2011/12/program-php-curl-to-load-web-page">เขียนโปรแกรมโหลดเว็บเพจด้วย PHP cURL</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/12/using-curl-to-load-web-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chat ในองค์กรด้วย Openfire และ Spark</title>
		<link>http://spalinux.com/2011/02/chat_in_office_using_openfire_and_spark</link>
		<comments>http://spalinux.com/2011/02/chat_in_office_using_openfire_and_spark#comments</comments>
		<pubDate>Sat, 05 Feb 2011 09:41:04 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[File Sharing]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[openfire]]></category>
		<category><![CDATA[spark]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1254</guid>
		<description><![CDATA[แม้จะมีโปรแกรม chat บนอินเตอร์เนตมากมายให้เลือกใช้ ทั้ง MSN, Google Talk, Yahoo Messenger หรือ Facebook แต่เนื่องด้วยเหตุผลทางด้านความปลอดภัยของข้อมูล ไม่ว่าจะเป็นข้อความที่คุยกัน หรือไฟล์ที่ส่งระหว่างกัน ในหลายๆ องค์กรจึงเลือกติดตั้งโปรแกรมที่อนุญาตให้พนักงานสามารถ chat สื่อสารกันภายในองค์กรเท่านั้น เพื่อที่จะใช้โปรแกรม chat (XMPP) ภายใน จำเป็นต้องติดตั้งโปรแกรมในสองส่วน คือฝั่ง server ในที่นี้เลือกโปรแกรม Openfire และโปรแกรมฝั่ง client ในที่นี้คือโปรแกรม Spark Server ติดตั้งโปรแกรม Openfire ทดสอบบนเซิร์ฟเวอร์ติดตั้ง Fedora 14 (x86_64) ดาวน์โหลดโปรแกรม Openfire เป็นไฟล์แบบ rpm (ล่าสุดที่เขียนคือเวอร์ชั่น openfire-3.6.4-1.i386.rpm) ใช้คำสั่ง rpm เพื่อติดตั้ง [root@fc14-64a ~]# rpm -ivh openfire-3.6.4-1.i386.rpm Preparing...                ########################################### [100%] [...]]]></description>
			<content:encoded><![CDATA[<p>แม้จะมีโปรแกรม chat บนอินเตอร์เนตมากมายให้เลือกใช้ ทั้ง MSN, Google Talk, Yahoo Messenger หรือ Facebook แต่เนื่องด้วยเหตุผลทางด้านความปลอดภัยของข้อมูล ไม่ว่าจะเป็นข้อความที่คุยกัน หรือไฟล์ที่ส่งระหว่างกัน ในหลายๆ องค์กรจึงเลือกติดตั้งโปรแกรมที่อนุญาตให้พนักงานสามารถ chat สื่อสารกันภายในองค์กรเท่านั้น</p>
<p>เพื่อที่จะใช้โปรแกรม chat (XMPP) ภายใน จำเป็นต้องติดตั้งโปรแกรมในสองส่วน คือฝั่ง server ในที่นี้เลือกโปรแกรม Openfire และโปรแกรมฝั่ง client ในที่นี้คือโปรแกรม Spark</p>
<p><span id="more-1254"></span></p>
<h4>Server ติดตั้งโปรแกรม Openfire</h4>
<p>ทดสอบบนเซิร์ฟเวอร์ติดตั้ง Fedora 14 (x86_64)</p>
<p>ดาวน์โหลดโปรแกรม Openfire เป็นไฟล์แบบ rpm (ล่าสุดที่เขียนคือเวอร์ชั่น openfire-3.6.4-1.i386.rpm)</p>
<p>ใช้คำสั่ง rpm เพื่อติดตั้ง</p>
<pre>[root@fc14-64a ~]# <strong>rpm -ivh openfire-3.6.4-1.i386.rpm
</strong>Preparing...                ########################################### [100%]
   1:openfire               ########################################### [100%]</pre>
<p>รันคำสั่ง service เพื่อรันเซอร์วิส openfire</p>
<pre>[root@fc14-64a ~]# <strong>service openfire start
</strong>Starting openfire:</pre>
<p>การใช้คำสั่ง service เพื่อรัน openfire จะไม่ขึ้นผลลัพธ์ว่า OK หรือ FAIL เหมือนกับ service อื่นๆ ต้องใช้คำสั่ง ps เพื่อดู process</p>
<pre>[root@fc14-64a ~]# <strong>ps -ef | grep openfire</strong></pre>
<p>ไม่มี process เกี่ยวกับ openfire เลย แสดงว่าต้องมีอะไรผิดพลาด</p>
<p>เมื่อมีปัญหาในการรัน openfire สามารถตรวจสอบได้จากไฟล์ที่อยู่ใน /opt/openfire/logs/</p>
<pre>[root@fc14-64a ~]# <strong>ls -l /opt/openfire/logs/
</strong>total 4
-rw-r--r-- 1 daemon daemon 85 Feb  4 22:49 nohup.out</pre>
<p>ตรวจสอบไฟล์ nohup.out เพื่อหาปัญหา</p>
<pre>[root@fc14-64a ~]# cat <strong>/opt/openfire/logs/nohup.out
</strong><span style="color: #ff0000;">nohup: failed to run command `/opt/openfire/jre/bin/java': No such file or directory</span></pre>
<p>โปรแกรม openfire ถูกพัฒนาด้วย java จำเป็นต้องใช้ jre ในการรัน ข้อความที่แสดงในไฟล์ nohup.out คือไม่สามารถเรียก java ได้</p>
<p>ปัญหานี้เนื่องมาจากไฟล์ rpm ที่ดาวน์โหลดมานั้น ใช้รันบนเครื่อง 32-bit (i386) รวมทั้งเวอร์ชั่น JRE ที่รวมมาในไฟล์ rpm ก็เป็น 32-bit ด้วย แต่เรานำมาติดตั้งบน OS แบบ 64-bit (x86_64)</p>
<p>ทดลองรัน java โดยตรง ก็ไม่ได้</p>
<pre>[root@fc14-64a ~]# <strong>/opt/openfire/jre/bin/java
</strong><span style="color: #ff0000;">-bash: /opt/openfire/jre/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory</span></pre>
<p>วิธีการแก้ไขปัญหาคือ ต้องติดตั้ง glibc เวอร์ชั่น 32-bit ด้วย</p>
<p>สำหรับ Fedora 14 (x86_64) ต้องติดตั้งไฟล์ rpm เพิ่มเติมคือ &#8220;glibc-2.12.90-17.i686.rpm&#8221; และ &#8220;nss-softokn-freebl-3.12.7-6.fc14.i686.rpm&#8221; ทั้งสองไฟล์ดาวน์โหลดได้จาก Fedora 14 (x86_64) Everything</p>
<pre>[root@fc14-64a ~]# <strong>rpm -ivh glibc-2.12.90-17.i686.rpm nss-softokn-freebl-3.12.7-6.fc14.i686.rpm
</strong>Preparing...                ########################################### [100%]
   1:nss-softokn-freebl     ########################################### [ 50%]
   2:glibc                  ########################################### [100%]</pre>
<p>ลองรัน java อีกครั้ง จะสามารถรันได้</p>
<pre>[root@fc14-64a ~]# <strong>/opt/openfire/jre/bin/java
</strong>Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)</pre>
<pre>...
...</pre>
<p>ใช้คำสั่ง service เพื่อรันเซอร์วิส openfire</p>
<pre>[root@fc14-64a ~]# <strong>/etc/init.d/openfire start
</strong>Starting openfire:</pre>
<p>ใช้คำสั่ง ps เพื่อดู process ของ openfire</p>
<pre>[root@fc14-64a ~]# ps -ef | grep openfire
daemon    1138     1  9 23:02 ?        00:00:02 /opt/openfire/jre/bin/java -server -DopenfireHome=/opt/openfire -Dopenfire.lib.dir=/opt/openfire/lib -classpath/opt/openfire/lib/startup.jar -jar /opt/openfire/lib/startup.jar</pre>
<p>ดูไฟล์ใน /opt/openfire/logs/ เพื่อดูสถานะการรันโปรแกรมในส่วนต่างๆ</p>
<pre>[root@fc14-64a ~]# <strong>ls -l /opt/openfire/logs/
</strong>total 68
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 debug.log
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 error.log
-rw-r--r-- 1 daemon daemon 129 Feb  4 23:03 info.log
-rw-r--r-- 1 daemon daemon  89 Feb  4 23:03 nohup.out
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 warn.log</pre>
<pre>[root@fc14-64a ~]# <strong>cat /opt/openfire/logs/nohup.out
</strong>Openfire 3.6.4 [Feb 4, 2011 4:02:38 PM]</pre>
<pre>[root@fc14-64a ~]# <strong>cat /opt/openfire/logs/info.log
</strong>2011.02.04 16:02:38 Openfire 3.6.4 [Feb 4, 2011 4:02:38 PM]
2011.02.04 16:03:19 Admin console listening at http://127.0.0.1:9090</pre>
<h4>คอนฟิก openfire</h4>
<p>ไฟล์คอนฟิกหลักของ Openfire คือ /opt/openfire/conf/openfire.xml</p>
<pre>[root@fc14-64a ~]# ls -l /opt/openfire/conf/openfire.xml
-rw-r--r-- 1 <span style="color: #0000ff;">daemon </span><span style="color: #0000ff;">daemon</span> 1791 Feb  5 14:01 /opt/openfire/conf/openfire.xml</pre>
<p>owner และ group ของไฟล์ ต้องเป็น daemon เพื่อจะสามารถคอนฟิกโปรแกรมผ่านเว็บได้</p>
<p>เปิด browser เพื่อเริ่มคอนฟิก openfire โดยระบุพอร์ตเป็น 9090 เช่น <a href="http://192.168.1.1:9090/">http://192.168.1.1:9090/</a></p>
<p>หน้า <strong>Welcome to Setup</strong> เลือก English</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/01-Welcome_to_Setup.png"><img title="01-Welcome_to_Setup" src="http://spalinux.com/wp-content/uploads/2011/02/01-Welcome_to_Setup.png" alt="" width="600" height="549" /></a></p>
<p>หน้า <strong>Server Settings</strong></p>
<p>Domain: ใส่เป็นชื่อเคื่อง hostname หรือ IP Address ของเซิร์ฟเวอร์<br />
Admin Console Port: 9090<br />
Secure Admin Console Port: 9091</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/02-Server_Settings.png"><img title="02-Server_Settings" src="http://spalinux.com/wp-content/uploads/2011/02/02-Server_Settings.png" alt="" width="600" height="549" /></a></p>
<p> <br />
หน้า <strong>Database Settings</strong> เลือก [x] Standard Database Connection</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/03-Database_Settings.png"><img title="03-Database_Settings" src="http://spalinux.com/wp-content/uploads/2011/02/03-Database_Settings.png" alt="" width="600" height="549" /></a></p>
<p>หน้า <strong>Database Settings &#8211; Standard Connection</strong></p>
<p>Database Driver Presets: MySQL<br />
JDBC Driver Class: com.mysql.jdbc.Driver</p>
<p>Database URL: jdbc:mysql://[host-name]:3306/[database-name]</p>
<p>ระบุ [host-name] และ [database-name] ที่ใช้ ตัวอย่างเช่น</p>
<p>jdbc:mysql://localhost:3306/openfire</p>
<p>ระบุ Username, Password สำหรับเชื่อมต่อเข้า MySQL</p>
<p>Username: <span style="color: #0000ff;">openfire</span><br />
Password: <span style="color: #0000ff;">secret</span></p>
<p> ก่อนที่จะกดปุ่ม [Continue] เพื่อไปขั้นต่อไป ต้องสร้างฐานข้อมูลสำหรับ openfire ก่อน</p>
<h4> <a href="http://spalinux.com/wp-content/uploads/2011/02/04-Database_Settings-Standa.png"><img title="04-Database_Settings-Standa" src="http://spalinux.com/wp-content/uploads/2011/02/04-Database_Settings-Standa.png" alt="" width="600" height="549" /></a></h4>
<p> </p>
<h4>สร้างฐานข้อมูล Openfire</h4>
<p>สร้าง database บน MySQL และ GRANT สิทธิให้โปรแกรม openfire สามารถเชื่อมต่อได้ ตามข้อมูลที่ระบุด้านบน</p>
<pre>mysql&gt; <strong>CREATE DATABASE openfire;
</strong>Query OK, 1 row affected (0.01 sec)</pre>
<pre>mysql&gt; <strong>GRANT ALL ON openfire.* to openfire IDENTIFIED BY 'secret';
</strong>Query OK, 0 rows affected (0.00 sec)</pre>
<p>ใส่ข้อมูล table ลงฐานข้อมูล openfire โดยใช้ไฟล์ sql ที่อยู่ใน  /opt/openfire/resources/database/</p>
<pre>[root@fc14-64a ~]# <strong>cd /opt/openfire/resources/database/
</strong>[root@fc14-64a database]# <strong>ls -l</strong>
total 116
-rw-r--r--  1 daemon daemon 13480 May  2  2009 openfire_db2.sql
-rw-r--r--  1 daemon daemon 13763 May  2  2009 openfire_hsqldb.sql
-rw-r--r--  1 daemon daemon 12594 May  2  2009 openfire_mysql.sql
-rw-r--r--  1 daemon daemon 14024 May  2  2009 openfire_oracle.sql
-rw-r--r--  1 daemon daemon 13961 May  2  2009 openfire_postgresql.sql
-rw-r--r--  1 daemon daemon 14023 May  2  2009 openfire_sqlserver.sql
-rw-r--r--  1 daemon daemon 14097 May  2  2009 openfire_sybase.sql
drwxr-xr-x 21 daemon daemon  4096 Feb  4 22:47 upgrade</pre>
<pre>[root@fc14-64a database]# <strong>cat openfire_mysql.sql | mysql -u root -p openfire
</strong>Enter password:</pre>
<pre>ตรวจสอบ table ที่สร้างขึ้น</pre>
<pre>mysql&gt; <strong>CONNECT openfire;</strong></pre>
<pre>mysql&gt; <strong>SHOW TABLES;</strong>
+----------------------+
| Tables_in_openfire   |
+----------------------+
| ofExtComponentConf   |
| ofGroup              |
| ofGroupProp          |
| ofGroupUser          |
| ofID                 |
| ofMucAffiliation     |
| ofMucConversationLog |
| ofMucMember          |
| ofMucRoom            |
| ofMucRoomProp        |
| ofMucService         |
| ofMucServiceProp     |
| ofOffline            |
| ofPresence           |
| ofPrivacyList        |
| ofPrivate            |
| ofProperty           |
| ofPubsubAffiliation  |
| ofPubsubDefaultConf  |
| ofPubsubItem         |
| ofPubsubNode         |
| ofPubsubNodeGroups   |
| ofPubsubNodeJIDs     |
| ofPubsubSubscription |
| ofRemoteServerConf   |
| ofRoster             |
| ofRosterGroups       |
| ofSASLAuthorized     |
| ofSecurityAuditLog   |
| ofUser               |
| ofUserFlag           |
| ofUserProp           |
| ofVCard              |
| ofVersion            |
+----------------------+
34 rows in set (0.00 sec)</pre>
<p>หน้า <strong>Profile Settings</strong> เลือก [x] Default</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/05-Profile_Settings.png"><img title="05-Profile_Settings" src="http://spalinux.com/wp-content/uploads/2011/02/05-Profile_Settings.png" alt="" width="600" height="549" /></a><br />
หน้า <strong>Administrator Account</strong>  ใส่อีเมล์ และระบุที่ใช้ในการ login เข้าสู่หน้า Admin Console</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/06-Administrator_Account.png"><img title="06-Administrator_Account" src="http://spalinux.com/wp-content/uploads/2011/02/06-Administrator_Account.png" alt="" width="600" height="549" /></a><br />
หน้า <strong>Setup Complete</strong> กดปุ่ม [Login to the admin console]</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/07-Setup_Complete.png"><img title="07-Setup_Complete" src="http://spalinux.com/wp-content/uploads/2011/02/07-Setup_Complete.png" alt="" width="600" height="549" /></a></p>
<p>หลังจากคอนฟิกผ่านหน้าเว็บเรียบร้อย ต้องรีสตาร์ตเซอร์วิส openfire</p>
<pre>[root@fc14-64a ~]# <strong>service openfire restart
</strong>Shutting down openfire:
Starting openfire:</pre>
<h4>Admin Console</h4>
<p>หลังจากคอนฟิกเรียบร้อย เปิด browser http://192.168.1.1:9090/ จะเข้าสู่หน้า Admin Console</p>
<p>ใส่ username เป็น &#8220;admin&#8221; และ password ตามที่ระบุไว้ตอนคอนฟิกหน้า Administrator Account</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/A0-Admin_Console.png"><img title="A0-Admin_Console" src="http://spalinux.com/wp-content/uploads/2011/02/A0-Admin_Console.png" alt="" width="600" height="549" /></a></p>
<p>หน้าจอ Service Information แสดงสถานะของโปรแกรม openfire</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/A1-Server_Information.png"><img title="A1-Server_Information" src="http://spalinux.com/wp-content/uploads/2011/02/A1-Server_Information.png" alt="" width="600" height="549" /></a></p>
<p>ไปที่ &#8220;Users/Groups&#8221; -&gt; &#8220;Create New User&#8221; เพื่อสร้าง user</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/A2-Create_User.png"><img title="A2-Create_User" src="http://spalinux.com/wp-content/uploads/2011/02/A2-Create_User.png" alt="" width="600" height="547" /></a></p>
<p>หน้า &#8220;Client Sessions&#8221; แสดงชื่อ user ที่ใช้งานอยู่</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/A3-Client_Sessions.png"><img title="A3-Client_Sessions" src="http://spalinux.com/wp-content/uploads/2011/02/A3-Client_Sessions.png" alt="" width="600" height="547" /></a></p>
<h4>Client: ติดตั้ง Spark </h4>
<p>สำหรับฝั่ง client ดาวน์โหลดและติดตั้งโปรแกรม Spark</p>
<p>เมื่อติดตั้งเสร็จเรียบร้อย รันขึ้นมา จะเป็นหน้าจอล็อกอิน</p>
<p>ใส่ Username, Password ตามที่สร้างไว้ บน Admin Console</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/S1-Spark_Login.png"><img title="S1-Spark_Login" src="http://spalinux.com/wp-content/uploads/2011/02/S1-Spark_Login.png" alt="" width="252" height="418" /></a></p>
<p>ระบุ Server เป็น IP Address ของเครื่องเซิร์ฟเวอร์ที่ติดตั้ง Openfire</p>
<p>หน้าจอพร้อมใช้งาน</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/S2-User_Online.png"><img title="S2-User_Online" src="http://spalinux.com/wp-content/uploads/2011/02/S2-User_Online.png" alt="" width="310" height="520" /></a></p>
<p>ตัวอย่างหน้าจอการสนทนา ระหว่างผู้ใช้</p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/S1-Spark_Login.png"></a></p>
<p><a href="http://spalinux.com/wp-content/uploads/2011/02/S3-Chat_Session.png"><img title="S3-Chat_Session" src="http://spalinux.com/wp-content/uploads/2011/02/S3-Chat_Session.png" alt="" width="500" height="400" /></a> </p>
<h4> </h4>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li><a href="http://www.igniterealtime.org/" target="_blank">Ignite Realtime: a real time collaboration community site</a></li>
<li><a href="http://www.mirror.in.th/osarchive/fedora/releases/14/Everything/x86_64/os/Packages/" target="_blank">Fedora 14 x86_64 &#8211; Everything</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/02/chat_in_office_using_openfire_and_spark/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>เปลี่ยนชื่อไฟล์หลายไฟล์พร้อมกันด้วยคำสั่ง rename</title>
		<link>http://spalinux.com/2011/01/rename_multiple_files</link>
		<comments>http://spalinux.com/2011/01/rename_multiple_files#comments</comments>
		<pubDate>Sat, 08 Jan 2011 11:12:42 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Utility]]></category>
		<category><![CDATA[rename multiple files]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1220</guid>
		<description><![CDATA[เคยบ้างไหม ที่ต้องเปลี่ยนชื่อไฟล์บน Linux หลายๆ ไฟล์พร้อมกัน เช่นเปลี่ยนชื่อไฟล์จาก .htm เป็น .html แทนที่ต้องใช้คำสั่ง mv เพื่อเปลี่ยนชื่อไฟล์ทีละไฟล์  หรือเขียน shell script มาช่วยเปลี่ยนชื่อ ใช้ Linux มาตั้งนาน เพิ่งรู้ว่ามีคำสั่งแบบนี้ด้วย (ฮา) เปลี่ยนชื่อไฟล์หลายไฟล์พร้อมกันด้วยการรันคำสั่งเดียว rename วิธีการใช้คำสั่ง $ rename from to file... คำอธิบาย from  รูปแบบชื่อไฟล์เดิม to         รูปแบบชื่อไฟล์ใหม่ file&#8230;  ระบุไฟล์ที่จะเปลี่ยน ตัวอย่างการใช้ ตัวอย่างชื่อไฟล์เดิม $ ls -l total 0 -rw-r--r-- 1 user1 users 0 Jan  8 15:30 page1.htm -rw-r--r-- 1 user1 [...]]]></description>
			<content:encoded><![CDATA[<p>เคยบ้างไหม ที่ต้องเปลี่ยนชื่อไฟล์บน Linux หลายๆ ไฟล์พร้อมกัน เช่นเปลี่ยนชื่อไฟล์จาก .htm เป็น .html</p>
<p>แทนที่ต้องใช้คำสั่ง mv เพื่อเปลี่ยนชื่อไฟล์ทีละไฟล์  หรือเขียน shell script มาช่วยเปลี่ยนชื่อ</p>
<p>ใช้ Linux มาตั้งนาน เพิ่งรู้ว่ามีคำสั่งแบบนี้ด้วย (ฮา) เปลี่ยนชื่อไฟล์หลายไฟล์พร้อมกันด้วยการรันคำสั่งเดียว rename<span id="more-1220"></span></p>
<h4>วิธีการใช้คำสั่ง</h4>
<pre>$ <strong>rename from to file...</strong></pre>
<p>คำอธิบาย</p>
<ul>
<li><strong>from</strong>  รูปแบบชื่อไฟล์เดิม</li>
<li><strong>to</strong>         รูปแบบชื่อไฟล์ใหม่</li>
<li><strong>file&#8230;</strong>  ระบุไฟล์ที่จะเปลี่ยน</li>
</ul>
<h4>ตัวอย่างการใช้</h4>
<p>ตัวอย่างชื่อไฟล์เดิม</p>
<pre>$ <strong>ls -l
</strong>total 0
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page1.htm
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page2.htm
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page3.htm
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page4.htm</pre>
<p>ต้องการเปลี่ยนชื่อไฟล์ .htm เป็น .html สามารถทำได้ด้วยการรันคำสั่ง rename เพียงครั้งเดียว</p>
<pre>$ <strong>rename .htm .html *.htm</strong></pre>
<p>เสร็จ! ชื่อไฟล์ได้ถูกเปลี่ยนไปแล้ว</p>
<pre>$ <strong>ls -l
</strong>total 0
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page1.html
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page2.html
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page3.html
-rw-r--r-- 1 user1 users 0 Jan  8 15:30 page4.html</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>man rename</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2011/01/rename_multiple_files/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>รูปแบบการแสดงผลของ RPM query</title>
		<link>http://spalinux.com/2010/11/rpm_query_format</link>
		<comments>http://spalinux.com/2010/11/rpm_query_format#comments</comments>
		<pubDate>Mon, 22 Nov 2010 15:20:01 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1148</guid>
		<description><![CDATA[ข้อดีอย่างหนึ่งของลีนุกซ์คือสามารถรันได้บนหลากหลายระบบ (Platform)  แต่ก็อาจทำให้ผู้ดูแลระบบปวดหัวได้ ในการจัดการโปรแกรมที่ติดตั้งได้ ปัญหาหนึ่งที่ผู้เขียนพบคือการใช้ rpm เพื่อจัดการโปรแกรมที่ติดตั้งบน RedHat, CentOS แบบ 64 bit คือมีทั้งโปรแกรม 32-bit และ 64-bit ถูกติดตั้งมารวมกัน [root@server ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.5 (Tikanga) ตัวอย่างการใช้คำสั่ง rpm เพื่อดูว่ามี rpm package ที่ชื่อ png ถูกติดตั้งไว้อะไรบ้าง [root@server ~]# rpm -qa &#124; grep png libpng-1.2.10-7.1.el5_3.2 libpng-1.2.10-7.1.el5_3.2 libpng-devel-1.2.10-7.1.el5_3.2 จะเห็นว่ามี package ชื่อ &#8220;libpng-1.2.10-7.1.el5_3.2&#8243;  ซ้ำกันสองบรรทัด เหตุก็เพราะว่า package ถูกติดตั้ง [...]]]></description>
			<content:encoded><![CDATA[<p>ข้อดีอย่างหนึ่งของลีนุกซ์คือสามารถรันได้บนหลากหลายระบบ (Platform)  แต่ก็อาจทำให้ผู้ดูแลระบบปวดหัวได้ ในการจัดการโปรแกรมที่ติดตั้งได้</p>
<p>ปัญหาหนึ่งที่ผู้เขียนพบคือการใช้ rpm เพื่อจัดการโปรแกรมที่ติดตั้งบน RedHat, CentOS แบบ 64 bit คือมีทั้งโปรแกรม 32-bit และ 64-bit ถูกติดตั้งมารวมกัน</p>
<pre>[root@server ~]# <strong>cat /etc/redhat-release
</strong>Red Hat Enterprise Linux Server release 5.5 (Tikanga)</pre>
<pre><span id="more-1148"></span></pre>
<p>ตัวอย่างการใช้คำสั่ง rpm เพื่อดูว่ามี rpm package ที่ชื่อ png ถูกติดตั้งไว้อะไรบ้าง</p>
<pre>[root@server ~]# <strong>rpm -qa | grep png
</strong>libpng-1.2.10-7.1.el5_3.2
libpng-1.2.10-7.1.el5_3.2
libpng-devel-1.2.10-7.1.el5_3.2</pre>
<p>จะเห็นว่ามี package ชื่อ &#8220;libpng-1.2.10-7.1.el5_3.2&#8243;  ซ้ำกันสองบรรทัด เหตุก็เพราะว่า package ถูกติดตั้ง มีทั้งที่เป็นเวอร์ชั่น 32-bit และ 64-bit</p>
<p>ต้องระบุออปชั่นเพิ่มเติมของคำสั่ง rpm เพื่อให้แสดงเวอร์ชั่น 32-bit หรือ 64-bit ด้วย</p>
<p>รูปแบบการระบุออปชั่น</p>
<p><strong><span style="color: #0000ff;">rpm &#8211;query -a &#8211;queryformat &#8220;%{NAME}-%{VERSION}.%{RELEASE}.%{ARCH}\n&#8221;</span></strong></p>
<p>ตัวอย่างการระบุออปชั่นและเลือกเฉพาะ package ที่มีชื่อ png</p>
<pre>[root@server ~]#<strong> rpm --query -a --queryformat "%{NAME}-%{VERSION}.%{RELEASE}.%{ARCH}\n"  | grep png
</strong>libpng-1.2.10.7.1.el5_3.2.x86_64
libpng-1.2.10.7.1.el5_3.2.i386
libpng-devel-1.2.10.7.1.el5_3.2.x86_64</pre>
<p>เพื่อความสะดวก ไม่ต้องพิมพ์ออปชั่นยาวๆ ทุกครั้ง สามารถใส่ออปชั่นไว้ในไฟล์คอนฟิกกลางของเครื่อง</p>
<pre>[root@server ~]#<strong> cat /etc/rpm/macros
<span style="color: #0000ff;">%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}</span></strong></pre>
<p>ตัวอย่างการใช้คำสั่ง rpm หลังจากใส่ออปชั่นไว้ในไฟล์คอนฟิก</p>
<pre>[root@server ~]# <strong>rpm -qa | grep png
</strong>libpng-1.2.10-7.1.el5_3.2.x86_64
libpng-1.2.10-7.1.el5_3.2.i386
libpng-devel-1.2.10-7.1.el5_3.2.x86_64</pre>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2010/11/rpm_query_format/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>รันโปรเซสเป็น user อื่น</title>
		<link>http://spalinux.com/2010/03/run_process_as_another_user</link>
		<comments>http://spalinux.com/2010/03/run_process_as_another_user#comments</comments>
		<pubDate>Sat, 06 Mar 2010 05:52:51 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Linux Shell]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Users]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[unix process]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=1088</guid>
		<description><![CDATA[เป็นวิธีง่ายๆ เพื่อให้ผู้ใช้ root สามารถรันโปรเซสหรือโปรแกรมบน Linux/UNIX ภายใต้สิทธิหรือ permission ผู้ใช้ user อื่นบนเครื่องเดียวกัน คำสั่งที่ใช้คือ su ตามด้วยออปชั่น &#8216;-c&#8217; รูปแบบการใช้คำสั่งคือ # su - &#60;user_name&#62; -c "&#60;command&#62;" ตัวอย่าง root รันคำสั่ง id ภายใต้สิทธิผู้ใช้ชื่อ user1 # su - user1 -c "id" uid=501(user1) gid=100(users) groups=100(users) ข้อมูลอ้างอิง &#8216;su&#8217; man page]]></description>
			<content:encoded><![CDATA[<p>เป็นวิธีง่ายๆ เพื่อให้ผู้ใช้ root สามารถรันโปรเซสหรือโปรแกรมบน Linux/UNIX ภายใต้สิทธิหรือ permission ผู้ใช้ user อื่นบนเครื่องเดียวกัน</p>
<p><span id="more-1088"></span>คำสั่งที่ใช้คือ su ตามด้วยออปชั่น &#8216;-c&#8217; รูปแบบการใช้คำสั่งคือ</p>
<pre># su - &lt;user_name&gt; -c "&lt;command&gt;"</pre>
<p>ตัวอย่าง root รันคำสั่ง id ภายใต้สิทธิผู้ใช้ชื่อ user1</p>
<pre># <strong>su - user1 -c "id"
</strong>uid=501(user1) gid=100(users) groups=100(users)</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>&#8216;su&#8217; man page</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2010/03/run_process_as_another_user/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>copy ไฟล์ให้เหมือนเดิม</title>
		<link>http://spalinux.com/2009/10/copy_preserve_file_information</link>
		<comments>http://spalinux.com/2009/10/copy_preserve_file_information#comments</comments>
		<pubDate>Sat, 03 Oct 2009 11:02:44 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[cp preserve]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=956</guid>
		<description><![CDATA[ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11 สร้างไฟล์ทดสอบด้วย user1 [user1@fc11-64a tmp]$ echo "Hello World, this is test file." &#62; user1-file.0 [user1@fc11-64a tmp]$ ls -l total 4 -rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0 คำสั่ง cp ไม่มีออปชั่น ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น [root@fc11-64a tmp]# date Sat [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร</p>
<p><span id="more-956"></span></p>
<p>หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11</p>
<h4>สร้างไฟล์ทดสอบด้วย user1</h4>
<pre>[user1@fc11-64a tmp]$ <strong>echo "Hello World, this is test file." &gt; user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>ls -l</strong>
total 4
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0</pre>
<h4>คำสั่ง cp ไม่มีออปชั่น</h4>
<p>ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:06:52 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp user1-file.0 user1-file.1</strong></pre>
<pre>[root@fc11-64a tmp]# ls -l
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
<span style="color: #ff0000;"><strong>-rw-r--r--</strong></span> 1 <strong><span style="color: #ff0000;">root  root</span></strong>  32 2009-10-03 <strong><span style="color: #ff0000;">17:06</span></strong> user1-file.1</pre>
<p>ไฟล์ที่ copy ได้มา จะมี permission, owner, group, timestamp ไม่ตรงกับไฟล์ต้นฉบับ เพราะดีฟอลต์ คำสั่ง cp จะไม่ preserve ข้อมูลของไฟล์เลย</p>
<h4>cp -p เก็บข้อมูลของไฟล์</h4>
<p>หากต้องการ preserve ข้อมูลของไฟล์ด้วย ต้องระบุออปชั่น &#8216;-p&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -p    same as --preserve=mode,ownership,timestamps</pre>
<p>ทดสอบ cp ด้วยออปชั่น &#8216;-p&#8217;</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:08:01 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-r--r-- 1 root  root  32 2009-10-03 17:06 user1-file.1
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.2</pre>
<p>หมายเหตุ หากใช้ user อื่น ที่ไม่ใช่ root เช่น user2 จะไม่สามารถคงข้อมูล owner, group ของไฟล์ได้</p>
<pre>[user2@fc11-64a tmp]$ <strong>cp -p user1-file.0 user1-file.3
</strong>[user2@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rw-r-- 1 <span style="color: #ff0000;"><strong>user2 user2</strong></span> 32 2009-10-03 17:03 user1-file.3</pre>
<h4>ทดสอบ preserve ข้อมูล ACL</h4>
<p>ใช้ user1 คอนฟิก ACL เพิ่มเติมในไฟล์</p>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
group::rw-
other::r--</pre>
<pre>[user1@fc11-64a tmp]$ <strong>setfacl -m user:user2:rwx user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
user:user2:rwx
group::rw-
mask::rwx
other::r--</pre>
<p>การใช้ออปชั่น &#8216;-p&#8217; สามารถ preserve File ACL ที่คอนฟิกไว้ได้ด้วย</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.3
</strong>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.3</pre>
<pre>[root@fc11-64a tmp]# <strong>getfacl user1-file.3
</strong># file: user1-file.3
# owner: user1
# group: user1
user::rw-
<span style="color: #0000ff;"><strong>user:user2:rwx</strong>
</span>group::rw-
mask::rwx
other::r--</pre>
<h4>cp -v แสดงไฟล์ที่กำลัง copy</h4>
<p>หากต้องการดูไฟล์ที่กำลัง copy อยู่ สามารถใช้ ออปชั่น &#8216;-v&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -v, --verbose    explain what is being done</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pv user1-file.0 user1-file.4
</strong>`user1-file.0' -&gt; `user1-file.4'</pre>
<h4>soft link file</h4>
<p>ใช้ user1 สร้าง soft link ชื่อ user1-link.0 เพื่อ link ไฟล์ไปยัง user1-file.0</p>
<pre>[user1@fc11-64a tmp]$ <strong>ln -s user1-file.0 user1-link.0
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0</pre>
<p>ใช้คำสั่ง cp -p เพื่อ copy ไฟล์ soft link</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-link.0 user1-link.1</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 <span style="color: #ff0000;">32</span> 2009-10-03 17:03 user1-link.1</pre>
<p>ผลลัพธ์กลับเป็นการ copy ไฟล์ต้นฉบับ user1-file.0 ไม่ใช่ link file</p>
<h4>cp -d เก็บสถานะ link file</h4>
<p>หากต้องการ copy ไฟล์แล้วยังคงสถานะ link file ไว้ ต้องใช้ ออปชั่น &#8216;-d&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -d    same as --no-dereference --preserve=links</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-link.0 user1-link.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 8
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-link.1
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:18 user1-link.2 -&gt; user1-file.0</pre>
<h4>copy ทั้งไดเร็คทอรี</h4>
<p>ใช้ user1 สร้างไดเร็คทอรี และไฟล์ย่อยๆ ข้างใน</p>
<pre>[user1@fc11-64a tmp]$ <strong>mkdir user1-dir.0
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file1.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file2.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file3.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file4.txt
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
[user1@fc11-64a tmp]$ <strong>ls -l user1-dir.0/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<p>ทดลองใช้ root เพื่อ copy ไฟล์ทั้งไดเร็คทอรี</p>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-dir.0/ user1-dir.1
</strong>cp: omitting directory `user1-dir.0/'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0</pre>
<p>ออปชั่นแค่นี้ ไม่สามารถ copy ไดเร็คทอรี ได้</p>
<h4>cp -R ทั้งไดเร็คทอรี</h4>
<p>หากต้องการ copy ทั้งไดเร็คทอรี ต้องใช้ออปชั่น &#8216;-R&#8217; หรือ &#8216;-r&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -R, -r, --recursive    copy directories recursively</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pvdR user1-dir.0/ user1-dir.1
</strong>`user1-dir.0/' -&gt; `user1-dir.1'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.1/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.1/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.1/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.1/sub-file4.txt'</pre>
<p>ตรวจสอบไดเร็คทอรี และไฟล์ที่อยู่ข้างใน</p>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
[root@fc11-64a tmp]# <strong>ls -l user1-dir.1/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>cp -a ออปชั่นเดียวทำทุกอย่าง</h4>
<p>ออปชั่นที่ยกตัวอย่างข้างบนมาทั้งหมด (ยกเว้น -v) สามารถเปลี่ยนเป็นออปชั่นเดียวได้คือ &#8216;-a&#8217; เพื่อการ copy ไฟล์แล้วคงข้อมูลของไฟล์ไว้ทั้งหมด รวมทั้ง copy ไดเร็คทอรี ไฟล์ย่อยๆ ได้ทั้งหมด</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -a, --archive    same as -dR --preserve=all</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -av user1-dir.0/ user1-dir.2
</strong>`user1-dir.0/' -&gt; `user1-dir.2'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.2/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.2/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.2/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.2/sub-file4.txt'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
<span style="color: #0000ff;">drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.2
</span>[root@fc11-64a tmp]# <strong>ls -l user1-dir.2/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>man cp(1)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2009/10/copy_preserve_file_information/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>การใช้ GPG Public Key ตรวจสอบไฟล์ rpm</title>
		<link>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm</link>
		<comments>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm#comments</comments>
		<pubDate>Sat, 27 Dec 2008 18:13:10 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Linux Installation]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[rpm]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=409</guid>
		<description><![CDATA[ก่อนที่จะติดตั้งไฟล์ rpm ที่ได้มา ไม่ว่าจากแผ่นดีวีดีติดตั้งของ distribution ต่างๆ หรือดาวน์โหลดมาจากอินเตอร์เน็ต แนะนำให้อิมพอร์ต Public Key ของไฟล์ rpm ลงในเครื่องที่จะติดตั้งก่อน เพื่อใช้ตรวจสอบความถูกต้องของไฟล์ rpm ว่าไฟล์ที่ใช้ในการติดตั้งเป็นไฟล์ที่มาจากผู้พัฒนาหรือสร้างไฟล์ rpm จริงๆ ไม่ได้ถูกเปลี่ยนแปลงใดๆ การอิมพอร์ต Public Key ไฟล์ Public Key ที่จะอิมพอร์ตนั้น แนะนำให้ดาวน์โหลดจากแหล่งที่น่าเชื่อถือได้ เช่น mirror site ที่เป็นทางการต่างๆ ซึ่งสามารถตรวจสอบได้จากเว็บไซต์ผู้ผลิต หรือถ้าเราดาวน์โหลดไฟล์ rpm จาก mirror site ที่นึง แนะนำให้โหลดไฟล์ Public Key จากเว็บอีกทีหนึ่ง ในบทความนี้จะทดสอบกับไฟล์ rpm ที่มีอยู่ในแผ่นดีวีดีติดตั้ง Fedora 10 แต่จะโหลดไฟล์ Public Key จาก http://mirrors.kernel.org/ โดยส่วนใหญ่แล้วไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง [...]]]></description>
			<content:encoded><![CDATA[<p>ก่อนที่จะติดตั้งไฟล์ rpm ที่ได้มา ไม่ว่าจากแผ่นดีวีดีติดตั้งของ distribution ต่างๆ หรือดาวน์โหลดมาจากอินเตอร์เน็ต แนะนำให้อิมพอร์ต Public Key ของไฟล์ rpm ลงในเครื่องที่จะติดตั้งก่อน เพื่อใช้ตรวจสอบความถูกต้องของไฟล์ rpm ว่าไฟล์ที่ใช้ในการติดตั้งเป็นไฟล์ที่มาจากผู้พัฒนาหรือสร้างไฟล์ rpm จริงๆ ไม่ได้ถูกเปลี่ยนแปลงใดๆ</p>
<p><span id="more-409"></span></p>
<h4>การอิมพอร์ต Public Key</h4>
<p>ไฟล์ Public Key ที่จะอิมพอร์ตนั้น แนะนำให้ดาวน์โหลดจากแหล่งที่น่าเชื่อถือได้ เช่น mirror site ที่เป็นทางการต่างๆ ซึ่งสามารถตรวจสอบได้จากเว็บไซต์ผู้ผลิต หรือถ้าเราดาวน์โหลดไฟล์ rpm จาก mirror site ที่นึง แนะนำให้โหลดไฟล์ Public Key จากเว็บอีกทีหนึ่ง ในบทความนี้จะทดสอบกับไฟล์ rpm ที่มีอยู่ในแผ่นดีวีดีติดตั้ง Fedora 10 แต่จะโหลดไฟล์ Public Key จาก http://mirrors.kernel.org/ โดยส่วนใหญ่แล้วไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง จะใช้ไฟล์ Public Key เดียวกันในการตรวจสอบ เพราะฉะนั้น ถ้าเราอิมพอร์ตคีย์ครั้งหนึ่งลงไปแล้ว เราก็สามารถใช้ตรวจสอบไฟล์อื่นๆ ที่อยู่ในแผ่นติดตั้งได้ โดยไม่ต้องอิมพอร์ตซ้ำ</p>
<p>ตัวอย่างการตรวจสอบไฟล์ rpm ก่อนการอิมพอร์ต Public Key</p>
<pre>[root@fc10 ~]# <strong>mount /dev/dvd /media</strong>/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@fc10 ~]# <strong>cd /media/Packages/</strong></pre>
<pre>[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm</strong>
samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 <span style="color: #ff0000;"><strong>(GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)</strong></span></pre>
<p>ออปชั่น &#8216;&#8211;checksig&#8217; หรือ &#8216;-K&#8217; ใช้เพื่อการตรวจสอบความถูกต้องเช่น digest, signature ของไฟล์ rpm ด้วยเทคนิคต่างๆ ผลลัพธ์จะแสดงค่าหลายอย่าง ในที่นี้จะเห็นว่ามีคำว่า (GPG) NOT OK (MISSING KEYS:&#8230;) ฟ้องขึ้นมา แสดงว่าการตรวจสอบ Public Key ของไฟล์ไม่ถูกต้อง ซึ่งอาจเป็นเพราะว่าไฟล์ที่ดาวน์โหลดนั้นถูกเปลี่ยนแปลงไปจริงๆ โหลดมาไม่สมบูรณ์ หรืออีกเหตุผลนึงในที่นี้คือ ไม่มี Public Key ของไฟล์นั้น</p>
<p>สำหรับ Fedora 10 (i386) สามารถดาวน์โหลด Public Key ได้จาก <a href="http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/RPM-GPG-KEY-fedora-10-primary">http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/RPM-GPG-KEY-fedora-10-primary</a></p>
<p>หมายเหตุ ในแต่ละเวอร์ชั่น จะใช้ Public Key ไม่เหมือนกัน</p>
<pre>ตัวอย่างไฟล์ Public Key ของ Fedora 10 (i386) (ผลลัพธ์ถูกตัดออกไปบางส่วน)
 
[root@fc10 ~]# <strong>cat RPM-GPG-KEY-fedora-10-primary</strong>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)</pre>
<pre>mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----</pre>
<p>ใช้คำสั่ง rpm ด้วยออปชั่น &#8216;&#8211;import&#8217; เพื่ออิมพอร์ตไฟล์ Public Key เข้าไปในเครื่อง</p>
<pre>[root@fc10 ~]# <strong>rpm --import RPM-GPG-KEY-fedora-10-primary</strong></pre>
<p>ตรวจสอบไฟล์ rpm ที่อยู่ในแผ่นติดตั้งอีกครั้ง</p>
<pre>[root@fc10 ~]# <strong>cd /media/Packages/</strong>
[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm</strong>
samba-client-3.2.4-0.22.fc10.i386.rpm: (sha1) dsa sha1 md5 <span style="color: #339966;"><strong>gpg OK</strong></span></pre>
<p>หลังจากที่อิมพอร์ตคีย์เข้าไปแล้ว ผลลัพธ์การตรวจสอบ gpg จะแสดงผลว่าถูกต้อง</p>
<h4>ตรวจสอบ Public Key ที่อิมพอร์ตเข้าเครื่องแล้ว</h4>
<p>เราสามารถใช้คำสั่ง rpm ด้วยออปชั่น &#8216;-q&#8217; เพื่อตรวจสอบ Public Key ที่ถูกอิมพอร์ตเข้าเครื่องแล้ว ดังตัวอย่าง</p>
<p>ตัวอย่างการตรวจสอบ Public Key ที่อิมพอร์ต</p>
<pre>[root@fc10 ~]# <strong>rpm -qa gpg-pubkey*</strong>
gpg-pubkey-4ebfc273-48b5dbf3</pre>
<pre>[root@fc10 ~]# <strong>rpm -qil gpg-pubkey-4ebfc273-48b5dbf3</strong>
Name        : gpg-pubkey                   Relocations: (not relocatable)
Version     : 4ebfc273                          Vendor: (none)
Release     : 48b5dbf3                      Build Date: Sat 27 Dec 2008 11:27:03 PM ICT
Install Date: Sat 27 Dec 2008 11:27:03 PM ICT      Build Host: localhost
Group       : Public Keys                   Source RPM: (none)
Size        : 0                                License: pubkey
Signature   : (none)
Summary     : gpg(Fedora (10) &lt;fedora@fedoraproject.org&gt;)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.6.0-rc1 (NSS-3)</pre>
<pre>mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----</pre>
<pre>(contains no files)</pre>
<h4>ถอด Public Key ออกจากเครื่อง</h4>
<p>ถ้าเราต้องการถอด Public Key ออกจากเครื่อง (uninstall) สามารถใช้คำสั่ง rpm ด้วยออปชั่น &#8216;-e&#8217; ได้ดังนี้</p>
<p>ตัวอย่างการถอด Public Key และผลลัพธ์ที่เกิดขึ้น</p>
<pre>[root@fc10 ~]# <strong>rpm -ev gpg-pubkey
</strong>[root@fc10 ~]# <strong>rpm -qa gpg-pubkey*</strong></pre>
<pre>[root@fc10 ~]# <strong>cd /media/Packages/</strong></pre>
<pre>[root@fc10 Packages]# <strong>rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm
</strong>samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 <span style="color: #ff0000;"><strong>(GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)</strong></span></pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>Manual Page &#8211; rpm(8)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/12/using_gpg_public_key_to_verify_rpm/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>คอนฟิก Window Title ของโปรแกรม PuTTY ด้วยคำสั่ง echo</title>
		<link>http://spalinux.com/2008/10/set_putty_window_title_using_echo</link>
		<comments>http://spalinux.com/2008/10/set_putty_window_title_using_echo#comments</comments>
		<pubDate>Sat, 25 Oct 2008 18:44:36 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Utility]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=311</guid>
		<description><![CDATA[เพื่อป้องกันการสับสนในการเปิดโปรแกรมหลายๆ วินโดวส์พร้อมๆ กัน ในโปรแกรม PuTTY ที่ใช้สำหรับ Telnet หรือ Secure Shell เราสามารถตั้งค่า Window Title เพื่อแยกแยะความแตกต่างระหว่างวินโดวส์แต่ละอันที่เปิดขึ้นมา  ซึ่งทำได้โดย กดที่ไอคอนเล็กๆ มุมบนซ้ายของโปรแกรม PuTTY แล้วเลือก Change Settings&#8230; จากนั้นคลิก Window-Behaviour หน้าจอจะมีให้ตั้งค่า Window title ให้กับโปรแกรมได้ เปลี่ยน Window Title ด้วยคำสั่ง echo การเปลี่ยนแปลง Window Title นี้ นอกจากจะคอนฟิกในตัวโปรแกรม PuTTY เอง ยังสามารถทำได้จากลีนุกซ์ที่ล็อกอินอยู่ในวินโดวส์นั้นๆ โดยใช้คำสั่ง echo ตามด้วยออปชั่น &#8216;-e&#8217; เพื่อระบุ backslash escapes ได้ เช่นถ้าต้องการตั้งค่า Window Title ให้เป็น &#8220;Set PuTTY Window [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://spalinux.com/wp-content/uploads/2008/10/set-putty-window-title1.png"></a>เพื่อป้องกันการสับสนในการเปิดโปรแกรมหลายๆ วินโดวส์พร้อมๆ กัน ในโปรแกรม PuTTY ที่ใช้สำหรับ Telnet หรือ Secure Shell เราสามารถตั้งค่า Window Title เพื่อแยกแยะความแตกต่างระหว่างวินโดวส์แต่ละอันที่เปิดขึ้นมา  ซึ่งทำได้โดย กดที่ไอคอนเล็กๆ มุมบนซ้ายของโปรแกรม PuTTY แล้วเลือก Change Settings&#8230; จากนั้นคลิก Window-Behaviour หน้าจอจะมีให้ตั้งค่า Window title ให้กับโปรแกรมได้</p>
<p><span id="more-311"></span></p>
<h4>เปลี่ยน Window Title ด้วยคำสั่ง echo</h4>
<p>การเปลี่ยนแปลง Window Title นี้ นอกจากจะคอนฟิกในตัวโปรแกรม PuTTY เอง ยังสามารถทำได้จากลีนุกซ์ที่ล็อกอินอยู่ในวินโดวส์นั้นๆ โดยใช้คำสั่ง echo ตามด้วยออปชั่น &#8216;-e&#8217; เพื่อระบุ backslash escapes ได้ เช่นถ้าต้องการตั้งค่า Window Title ให้เป็น &#8220;Set PuTTY Window Title&#8221; สามารถทำได้ดังนี้</p>
<pre>
[user01@server ~]$ <strong>echo -e "\033]0;Set PuTTY Window Title\007";</strong>
</pre>
<p>ตัวอย่างโปรแกรม PuTTY ที่ถูกเปลี่ยน Window Title</p>
<p><img title="Set PuTTY Window Title" src="http://spalinux.com/wp-content/uploads/2008/10/set-putty-window-title1.png" alt=""/></p>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>ขอขอบคุณนิตยสาร Linux Journal สำหรับไอเดียของบทความนี้</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2008/10/set_putty_window_title_using_echo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

