Linux Console Command Part1

Posted by AnnoMundi on August 08, 2008

ช่วงนี้ใช้งาน Linux Console บ่อยและด้วยความที่ขี้เกียจคำสั่งที่เคยพิมพ์ไปแล้ว และจำได้ว่ามันมี command ที่ใช้รันคำสั่งที่เราเคยพิมพ์ไปแล้ว ปกติผมจะใช้ปุ่มลูกศรขึ้นลงเพื่อเลือกคำสั่งที่ผ่านๆมา แต่มันไม่สะดวกเพราะคำสั่งที่เคยพิมพ์ๆไปมันอาจพิมพ์ไปนานแล้ว ก็เลยลอง Search ดูก็เจอคำสั่งที่จะช่วยให้ประหยัดเวลาในการทำงาน

คำสั่งแรกเลย history

history

จะเป็นการลิสท์คำสั่งต่างๆที่เราเคยเรียกใช้งานไปแล้วทั้งหมด

history 10

จะเป็นการลิสท์คำสั่ง 10 คำสั่งสุดท้ายออกมา
เราสารถใช้คำสั่ง ! เพ่ือทำการรันคำสั่งนั้นอีกครั้ง เช่น

annomundi@develone:~$ history
55  history
56  pwd
57  ls
58  cd ~
59  history
annomundi@develone:~$ !57
ls
MyThread.class  mbox  rails-projects  sources  www
annomundi@develone:~$

จะเห็นว่าคำสั่ง !57 จะสั่งรันคำสั่ง ls นอกจากนี้เราสามารถใช้คำสั่ง

!!

เพื่อรันคำสั่งก่อนหน้านี้
นอกจากนี้ก็มีคำสั่ง !$ จะหมายถึงข้อความที่ตามหลังคำสั่งที่แล้ว เช่น

ls /etc/hosts
vi !$

คำสั่งหลังก็คือคำสั่ง vi /etc/host นั่นเอง
คำสั่ง !<start of command> เป็นการรันคำสั่งหลังสุดที่ขุึ้นต้นด้วย <start of command> เช่น

pwd
ls -la
cd www
!ls

คำสั่ง !ls จะเป็นการรันคำสั่ง ls -la อีกครั้งนึงนั่นเอง
คำสั่ง !-<number> จะเป็นการรันคำสั่งที่ <number> ก่อนหน้านี้ เช่น

pwd
ls -la
cd www
!ls
!-4

คำส่ัง !-4 จะเป็นการรันคำสั่ง pwd อีกครั้งนึง

สำหรับคำสั่งพวกนี้บางคนอาจคุ้นเคยแล้ว แต่ผมเองเคยเห็นเพื่อนๆใช้กันแกต่ไม่ค่อยได้จำและเอามาใช้สักที เลยต้อง search หาเอามาใช้ซะหน่อยจะได้ประหยัดเวลาการพิมพ์คำสั่งบนคอนโซล ^^ ไว้อาจมีต่อภาค 2 เพราะผมยังไม่แม่นเรื่อง command parameter เท่าไหร่

Ubuntu 7.04 : วิธีสร้าง Self-Signed Certs สำหรับเว็ปไซต์

Posted by AnnoMundi on June 18, 2007

วิธีการสร้าง Self-Signed Certificate สำหรับเว็ปไซต์บนเครื่องที่ใช้ Ubuntu
Feisty Fawn สำหรับบทความนี้ผมขอไม่กล่าวถึงการลง Apache2, PHP5 และ
MySQL นะครับ จะกล่าวถึงเฉพาะการสร้าง Self-Signed Certificate เท่านั้น

  1. ถ้า Apache ที่ลงไว้แต่ยังไม่ได้ Enable mod_ssl ก็ให้เปิดใช้งานด้วยคำสั่ง
    sudo a2enmod ssl
  2. เริ่มด้วยการสร้าง Private Key สำหรับเครื่องเซิร์ฟเวอร์ หรือเครื่องที่เรารัน
    เว็ปเซิร์ฟเวอร์

    $ sudo openssl genrsa -des3 -out server.key 1024

    เมื่อโปรแกรมให้เราใส่ pass phrase ซึ่งเราจะใส่หรือไม่ใส่ก็ได้

  3. จากนั้นก็สร้าง Certificate File ขี้นมาด้วยคำสั่ง
    $ sudo openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt

    ซึ่งมันจะถาม Pass Phrase ที่เราตั้งไว้ในขึ้นตอนที่แล้วและให้เราใส่ชื่อโดเมนที่
    เราต้องการจะใช้งาน SSL ตอนที่โปรแกรมให้เราใส่ Common Name ในที่นี้ผม
    จะใส่เป็น *.mydomainname.com เผื่อไว้ใช้กับsubdomain ได้ด้วย

  4. ให้ทำการสร้างไดเร็กทอรี่ /etc/apache2/ssl แล้วคัดลอกไฟล์ทั้งสองไปยัง
    ไดเร็กทอรี่ที่สร้างขึ้น

    $ sudo mkdir /etc/apache2/ssl
    $ sudo mv *.crt /etc/apache2/ssl
    $ sudo mv *.key /etc/apache2/ssl
    $ sudo chmod 400 /etc/apache2/ssl/*.key
  5. ถ้าในขั้นตอนแรกเรากำหนด Pass Phrase ไปด้วย ทุกครั้งที่ทำการ
    restart apache จะมีการถาม pass phrase ทุกครั้ง ดังนั้นเพื่อให้เราไม่ต้องเสีย
    เวลาใส่ pass pharse ก็ให้้เราสร้างไฟล์ /etc/apache2/ssl/password.sh
    ขึ้นมา แล้วแก้ไขไฟล์โดยพิมพ์คำสั่งตามด้านล่างลงไป แต่ให้เปลี่ยน password
    เป็น pass pharse ที่เราได้ระบุไว้นะครับ

    #!/bin/bash
    echo "password";

    จากนั้นก็ให้แก้ไขไฟล์ /etc/apache2/mods-enabled/ssl.conf ให้มองหา
    บรรทัดตามด้านล่างนี้

    SSLPassPhraseDialog  builtin

    แล้วแก้เป็น

    SSLPassPhraseDialog  exec:/etc/apache2/ssl/password.sh

    ที่ทำแบบนี้เพื่อแทนที่ apache จะรอถาม pass pharse ทุกครั้งที่ start/restart
    ก็ให้มันไปรัน script ที่เราสร้างไว้แทน

  6. จากนั้นให้เราทำการแก้ไขไฟล์ /etc/apache2/ports.conf ตามด้านล่าง
    Listen 80
    Listen 443

    แล้วจึงแก้ไขไฟล์คอนฟิกของเว็ปไซต์ในที่นี้ของผมจะอยู่รวมกันในไฟล์
    /etc/apache2/sites-available/default ซึ่งบางคนอาจแยกคอนฟิกของแต่ล่ะ
    เว็ปเป็นไฟลๆ์แยกกัน ก็ให้เปิดแก้ไขคอนฟิกเว็ปที่ต้องการใช้งาน SSL โดยแก้ไข
    คอนฟิกดังนี้

    <VirtualHost *:443>
            ...
            SSLEngine on
            SSLCertificateFile /etc/apache2/ssl/server.crt
            SSLCertificateKeyFile /etc/apache2/ssl/server.key
            ...
    </VirtualHost>

    และในตอนต้นไฟล์ /etc/apache2/sites-available/default ต้องมีคำสั่งตาม
    ด้านล่างด้วยนะครับ

    NameVirtualHost *:80
    NameVirtualHost *:443

    จากนั้นก็สั่ง restart apache ได้เลย

    sudo /etc/init.d/apache2 restart

เสร็จแล้ว เราก็จะสามารทดสอบและพัฒนาเว็ปซึ่งจำเป็นต้องมีส่วนที่ใช้งานผ่าน SSL ได้

เอกสารอ้างอิง : Creating Self-Signed Certs on Apache 2.2

วิธีแปลงฟอร์แมทไฟล์วิดีโอบนลินุกส์

Posted by AnnoMundi on May 31, 2007

ช่วงนี้หลังจากหลับมาใช้ลินุกส์ ก็มีพวกไฟล์วิดีโอที่เก็บๆไว้มันเป็นฟอร์แมท WMV
ซึ่งมีปัญหาภาพมันจะเละๆเวลาเลื่อแถบเวลาไปยังตำแหน่งที่ต้องการจะดู เลยต้อง
หาวิธีแปลงฟอร์แมทไปเป็น avi ซึ่งที่เคยใช้ก็คือโปรแกรม mencoder ซึ่งเป็นโปรแกม
Command line ที่เราต้องเปิด Shell/Terminal ขึ้นมาพิมพ์คำสั่งเรียกใช้ ซึ่งที่ใช้
ถ้าใครไม่ได้ลงโปรแกรมนี้ไว้ ถ้าใช้ Ubuntu ก็จัดการลงก่อนครับ

sudo apt-get install mencoder

จากนั้นวิธเรียกใช้โปรแกรมเพ่อเปลงฟอร์แมตแบบง่ายๆก็คือ

mencoder inputfile.wmv -ofps 23.976 -ovc x264 -oac mp3lame -o outputfile.avi

ซึ่งจะแปลงไฟล์ฟอร์แมท WMV เป็น AVI โดย encode video/audio codec
เป็น H.264 และ mp3

แต่ถ้าใครชอบแปลงไฟล์โดยใช้โปรแกมแบบ GUI ก็มีเหมือนกันครับคือ avidemux
ก็จัดการลงโปรแกรมด้วยคำสั่ง

sudo apt-get install avidemux

หน้าตาของโปรแกรมจะเป็นแบบนี้ครับ
Avidemux
โดยโปรแกรม avidemux นี่นอกจากแปลงฟอร์แมทไฟล์ได้แล้วยังใช้ตัดไฟล์
ได้ด้วย โดยเลือกช่วงหนังที่เราต้องการตัดและก็เซฟ

ส่วนถ้าใครอยากศึกษาเพิ่มเติมเกี่ยวกับ Mencoder ก็ลองดูตามลิ้งก์ด้านล่างเลยครับ

Mencoder
HOWTO Mencoder Introduction Guide
HOWTO Rip DVD mencoder

เริ่มการอัพเกรด Gentoo ในเครื่องโคโล ตอนที่ 2

Posted by AnnoMundi on November 10, 2006

หลังจากที่รอเครื่องคอมไพล์ Package ต่างๆเสร็จโดยระว่างคอมไพล์ก็มี error ใน
บาง Package ซึ่งก็ใช้คำสั่ง emerge –resume –skipfirst ข้ามไป หลังจากนั้น
ก็สั่ง Compile Kernel ใหม่เพราะของเดิมคอมไพล์ด้วย Gcc 3.4.x คำสั่งคอมไพล์
ก็คือ

genkernel --menuconfig all

ซึ่งจะมีเมนูขึ้นมาให้เซ็คคอนฟิกต่างที่ใน Kernel ซึ่งผมใช้วิธีโหลดคอนฟิกที่เคยเซฟไว้
ตอนคอมไพล์เคอร์เนลในครั้งก่อนซึ่งหลังจากคอมไพล์เสร็จผมก็จะแก้ grub แล้วรีสตาร์ต
เครื่องใหม่ ซึ่งคงต้องลุ้นต่อว่าจะรีสตาร์ตแล้วบูตเข้า gentoo ได้สำเร็จหรือเปล่า

และแล้วผมก็คอมไพล์ไฟล์ต่างๆจนเสร็จจึงสั่งรีบูต….แล้วเครื่องผมก็หายเงียบสาปสูญ
ไปจากโลกไซเบอร์เน็ต T_T คืนนี้จะนอนหลับไหมนี่
ถ้าพรุ่งนี้ว่างผมคงต้องไปแก้ที่ IDC แต่ถ้าปัญหามันมากเกินเยียวยา ผมอาจต้องยกเครื่อง
กลับบ้าน แต่ทีนี้คงโดนคนที่ใช้ Free Webhosting บนเครื่องนั้นบ่นด่าแหงๆเลย
คืนนี้ผมคงต้องเอา backup เว็ป CodeSniper.Org ขึ้นโฮสท์นี้ก่อนชั่วคราว(มัง)

สรุปการรีโมทอัพเกรด Gentoo ของผมก็ล้มเหลวจนได้ เฮ้อ T_T

เริ่มการอัพเกรด Gentoo ในเครื่องโคโล ตอนที่ 1

Posted by AnnoMundi on November 09, 2006

วันนี้ได้เลิกปุบปับรีโมทเข้าไปแบ็คอัพข้อมูลเว็ปมาเก็บไว้ก่อน จากนั้นก็เิริ่มอัพเกรด
โปรแกรมต่างๆในเครื่องซึ่งเริ่มต้นที่ GCC ก่อนเลย เพราะตัวนี้ตัวสำคัญ
และเป็นตัวที่หลังจากอัพเกรดเสร็จแล้วจำเป็นต้องคอมไพล์โปรแกรมต่างๆในเครื่อง
ใหม่แทบทั้งหมด – -”

Step 1: Upgrade GCC

emerge -uav gcc

ในการสั่ง emerge เพื่ออัพเดท gcc นี้เครื่องผมจะมี package ที่เกี่ยวข้อง 8 ตัวที่
ถูกดึงมาคอมไพล์ และหลังจากรอมันคอมไพล์มาจนถึง package สุดท้่ายซึ่งก็คือ
glibc ก็มี error ออกมาบอกว่าให้เราใส่ USE=’nptl nptlonly’ ด้วย ผมจึงต้อง
สั่ง emerge glibc ใหม่อีกครัง

USE='nptl nptlonly' emerge glibc

หลังจากคอมไพล์ glib อยู่นานก็เสร็จ ผมก็ทำการเซ็ตให้ระบบเปลี่ยนไปใช้ gcc 4.1.1
แล้วก็ทำการ fix แก้ไข library ต่างที่ใช้ gcc 3.4.6 และ rebuild libtool ใหม่

Step 2: Change GCC Compiler to 4.1.1

gcc-config i686-pc-linux-gnu-4.1.1
env-update && source /etc/profile

Step 3: Fix and Re-build libtool

fix_libtool_files.sh 3.4.6
emerge --oneshot -av libtool

Step 4: Rebuild System

จากนั้นผมก็ทำการสั่งให้ทำการ compile system package ใหม่ด้วยคำสั่ง

emerge -eav system

ในขั้นนี้ผมมี package ที่ต้องคอมไพล์ถึง 97 pacakge คงต้องใช้เวลาหลายชั่วโมง
หลังจากที่รอเครื่องคอมไพล์ system เสร็จซึ่งกว่าจะเสร็จก็มี error ในระหว่าง
คอมไพล์ เนื่องจากการ emerge -eav system นี่มีการคอมไพล์บาง package ซ้ำ
กับในขั้นตอนที่ 1 ซึ่ง package ที่มีปัญหาคือ glibc เพราะผมดันไม่ได้ใส่ USE flags
ใน /etc/make.conf ผมเลยต้องใส่ nptl nptlonly เข้าไปใน make.conf แล้วจึงสั่ง

emerge --resume

เครื่องก็จะทำการ emarge ต่อจากตรง package ที่ error ซึ่งถ้าไม่ใช้คำสั่งนี้แต่ไป
สั่ง emerge -eav system ใหม่มันก็จะทำการเริ่มคอมไพล์ใหม่ตั้งแต่แรก

Step 5: Rebuild World

ในขั้นนี้ก็สามารถสั่ง

emerge -eav world

แล้วก็นั่งรอเลยก็ได้ แต่ผมเลือกคอมไพล์ mySQL ก่อนโดยทำตามขั้นตอนในเว็ปนี้
Upgrade Guide MySql to 4.0 or 5.0 แต่ผมอาจรวบยอดข้ามบางขั้นตอนไป

สรุปเมื่อคืนหลังจาก upgrade MySql เสร็จลอง restart service ดูปรากฏว่า
ใช้งานได้ไม่มีปัญหาเว็ปสามารถเปิดใช้งานได้ ก็เลยสั่ง Rebuild World ต่อ ซึ่ง
มี Package ที่ต้องคอมไฟล์รวมแล้ว เกือบ 500 Package -*- ผมก็นั่งเฝ้าจนเช้า
จึงไปนอน ตื่นมาบ่ายมาก็เปิดคอมรีโมทเข้าไปดูปรากฏว่ามี Error ขณะที่ยังเหลือ
Package ทีต้องคอมไพล์อีกเกือบ 200 Package เซ็งเลย Package ที่ Error
ก็คือ PEAR-Auth_SASL ซึ่งเป็น

!!! ERROR: dev-php/PEAR-Auth_SASL-1.0.1-r1 failed.
Call stack:
ebuild.sh, line 1546:   Called dyn_install
ebuild.sh, line 1020:   Called src_install
ebuild.sh, line 1255:   Called php-pear-r1_src_install
php-pear-r1.eclass, line 66:   Called die

!!! Unable to install PEAR package

ผมก็นั่ง Search ใน Gentoo Forums ดูก็มีคนเจอ Error แบบเดียวกันหลายคน
แต่เขาจะเจอ Error นี้กับ Pear module อื่นๆ ซึ่งก็มีคนบอกวิธีแก้มา แต่บางคน
ก็ใช้ไม่ได้ ซึ่งผมเองก็ด้วย T_T หลังจากพยายามหาวิธีแก้ต่างๆนาอยู่หลายชั่วโมง
ผมก็ต้องยอมแพ้ ต้องสั่งให้มัน emerge ข้าม Package ที่ Error ไปก่อน โดยใช้
คำสั่งตามด้านล่าง

emerge --resume --skipfirst

ซึ่งเครื่องจะ emerge ต่อจากเดิมแต่จะทำการข้าม Package แรกไป ซึ่งถ้าเราไม่ใช้
–skipfirst เครื่องก็จะ emerge ต่อแต่ก็จะเจอ error และหลุดออกมาเหมือนเดิม

ตอนนี้ผมก็ได้แต่รอมันคอมไพล์ที่เหลือให้หมดก่อน แล้วจะ compile kernel ใหม่
จากนั้นก็ Restart เครื่องโดยหวังว่าเมือ restart เครื่องแล้วเมื่อกลับมาคอมไพล์
package ที่ error มันจะสามารถคอมไพล์ผ่าน

*โคโล = Colocated Server

ติดตามต่อ >> ตอนที่ 2