.comment-link {margin-left:.6em;}

Utthawit's Weblog

ไม่ตายไม่เลิก...

วันพฤหัสบดี, ตุลาคม 20, 2011

Virtualization บน RHEL 6

สำหรับ RHEL 6 KVM ก็กลายเป็นมาตรฐานแทน Xen ไปแล้ว แต่การใช้งานก็ไม่ได้ต่างไปกันมากเท่าไร เนื่องจากยังใช้คำสั่งตระกลู virt-? ได้เหมือนเดิม

สำหรับวิธีการ ขั้นแรกไปเปิด Virtualization ใน BIOS ของ server เสียก่อน เมื่อบูตเสร็จ ก็รัน
# lsmod | grep kvm
kvm_intel 47790 4
kvm 300762 1 kvm_intel
ถ้าเจอโมดูล kvm ก็เป็นอันใช้ได้

ต่อไปติดตั้ง library ที่เกี่ยวข้อง
# yum groupinstall "Virtualization Platform"
ติดตั้ง kvm
# yum groupinstall "Virtualization"
ลงเครื่่องมือสำหรับเรียกใช้งานและจัดการ VM เช่น console หรือดูสถานะการใช้งาน
# yum groupinstall "Virtualization Client"
เริ่มติดตั้ง Linux ซึ่งเลือก CentOS 6 64 บิต โดยให้
  • มีดิสก์ 1 ลูกขนาด 20GB
  • RAM 4GB
  • CPU 2 core
# virt-install --name=centos \
--disk path=/export/vm/centos/disk1.img,size=20 \
--vcpus=2 \
--ram=4096 \
--location=http://mirror1.ku.ac.th/centos/6/os/x86_64/ \
--os-type=linux
แล้วจึงรันคำสั่งด้านล่างเพื่อเปิด console สำหรับทำขึ้นตอนการติดตั้งที่เหลือจนจบ
# virt-viewer centos

วันพฤหัสบดี, กุมภาพันธ์ 25, 2010

clone partition

วันนี้ซื้อฮาร์ดดิสก์มาใหม่ขนาด 1TB เพราะอยากจะรวบรวมข้อมูลที่กระจายอยู่ในฮาร์ดดิสก์หลายๆ ตัวมาให้อยู่ตัวเดียว จะได้หาได้ง่ายๆ ได้ยี่ห้อ Western Digital แคชขนาด 32 MB อืมๆ ไม่น้อยเลย ราคาแทบไม่ต่างจากที่ซื้อครั้งที่แล้ว แต่แคชเยอะกว่า 2 เท่า

คำเตือน: ผมแค่แสดงวิธีการที่ผมทำเพื่อเป็นตัวอย่างเท่านั้น ใครจะทำตามก็ตรวจสอบดิสก์กับพาร์ติชั่นดีๆ เน้อ เกิดพลาดไปช่วยไม่ได้น่ะ :P

มาเข้าถึงวิธิการกัน ไปรื้อแผ่น CD มาได้ Ubuntu 8.04 server (ใหม่ที่สุดที่เจอแล้ว - -') ก็บูตเข้า rescue broken system ไป เพื่อจะเข้า shell อย่างเดียว พอถึง shell ซึ่งฮาร์ดดิสก์ใหม่เป็น sda อันเก่าเป็น sdc ก็แบ่ง partition ด้วย

# fdisk /dev/sda

ก็สร้างไปตามต้องการ ณ ที่นี้ให้เก็บ OS ที่ sda2 ขนาด 80GB ที่เหลือเป็น sda3

# dd if=/dev/sdc2 /of=/dev/sda2 bs=1024

ก็ใช้เวลาไม่นาน ข้อมูล 30 GB ใช้เวลาแค่ประมาณครึ่งชั่วโมง เนื่องจากเราคัดลอกข้อมูลด้วย dd ทำให้ขนาดไฟล์ซิสเต็ม เท่ากับของเดิมด้วย แม้ว่าพาร์ติชันจะใหญ่กว่าก็ตาม ต่อไปก็ขยายไฟล์ซิสเต็ม จาก 30G เป็น 80G

# ntfsresize /dev/sda2

ก็อ่านคำเตือนกันไปจนจบแล้ว ก็ตอบ... [Y/N] เป็นอะไรเลือกเอา ฮึๆ

แล้วก็ย้ายเฉพาะ boot record มาด้วย

# dd if=/dev/sdc of=/dev/sda bs=1 count=446

ลองใช้ ntfs-3g เมาท์ดิสก์ได้ ก็เรียบร้อย เข้าวินโดส์แล้วย้ายข้อมูลที่เหลืออีกที









วันอังคาร, มกราคม 26, 2010

pecl ssh2
ช่วงนี้มีงานที่ต้องใช้ PHP ไปเรียก SSH ไปเรียกทั้งเรียกคำสั่งและดาว์นโหลดไฟล์จากเครื่องอื่น PHP ที่มีมันก็ยังใช้ไม่ได้ ทั้ง base ของ CentOS และ rpmforge repository ก็ไม่มีแพคเกจนี้ ก็เลยต้องติดตั้ง extension ผ่าน PECL (PHP Extension Community Library) เอง ดังนี้

$ yum install php-pear libssh2-devel php-devel
ติดตั้งแพคเกจ developer ให้ครบซะก่อน

$ pecl install ssh2-beta
(จริงๆ แพคเกจชื่อ ssh2 แต่เนื่องจากเป็น beta อยู่ ซึ่ง pecl จะไม่ยอมติดตั้งโดย default ถ้าจะบังคับก็ต้องเติม -beta ต่อท้าย)

$ echo extension=ssh2.so > /etc/php.d/ssh2.ini
เพิ่มไฟล์ config ให้มันโหลด extension นี้

$ service httpd restart
รีสตาร์ท Apache เป็นอันเสร็จ


ลองใช้ ssh2_connect ก็เรียกได้เรียบร้อยแล้ว :)

วันเสาร์, มกราคม 16, 2010

FUSE Function not implemented
ช่วงที่เขียนไฟล์ซิสเต็มด้วย FUSE ก็เจอปัญหา คือ พอจะสร้างส่วนสำหรับเขียนไฟล์ (ทดสอบด้วยคำสั่ง touch) แต่ดันเจอ

$ touch fuse/11111
touch: cannot touch `fuse/11111': Function not implemented

จาก debug log

unique: 5, opcode: OPEN (14), nodeid: 2, insize: 48
unique: 5, error: 0 (Success), outsize: 32
OPEN[0] flags: 0x8801 /11111
unique: 6, opcode: SETATTR (4), nodeid: 2, insize: 128
unique: 6, error: -38 (Function not implemented), outsize: 16
unique: 7, opcode: SETATTR (4), nodeid: 2, insize: 128
unique: 7, error: -38 (Function not implemented), outsize: 16
unique: 8, opcode: SETATTR (4), nodeid: 2, insize: 128
unique: 8, error: -38 (Function not implemented), outsize: 16
unique: 9, opcode: FLUSH (25), nodeid: 2, insize: 64
FLUSH[0]
unique: 9, error: -38 (Function not implemented), outsize: 16
unique: 10, opcode: RELEASE (18), nodeid: 2, insize: 64
RELEASE[0] flags: 0x8801
unique: 10, error: 0 (Success), outsize: 16

ไปไล่ดูเอกสารทั้งของ FUSE และโมดูล perl FUSE มันก็ไม่มี setattr ให้ implement นี่ ไปเจอใน paper ชื่อ "ReFUSE: Userspace FUSE Reimplementation Using puffs" บอกว่าจริงๆ แล้วเมื่อมันเรียก system call setattr มันจะไปเรียก chmod, chown, และ utime ให้เอง ดังนั้นเลยรู้ว่าถ้าเราไม่ได้ implement 3 ตัวนั้นมันก็จะเจอ error message แบบนั้นแหละ สรุปข้อความมันทำให้เข้าใจผิดไปเยอะเลย

วันจันทร์, ธันวาคม 21, 2009

AIS 3G ที่เชียงใหม่
อยากลอง 3G ที่เชียงใหม่มานานแล้ว แต่ก็ไม่ลองซักที เพราะเพิ่งมารู้ว่ามันต้องไปสมัครโปร 3G ซึ่งเป็นแบบ volumn based แต่ซิมเดิมเป็นแบบ time based ก็ไม่อยากเปลี่ยนโปร เลยกะว่าจะไปซื้อซิมใหม่มาลอง วันนี้ไปเดินถนนคนเดิน เจอเขาขายอยู่เลยซื้อมา 39 บาท แต่กว่าจะได้ลองก็ทุลักทุเล เพราะตอนแรกกะจะเติมผ่าน scbeasy ตอนแรกเติมไป 100 กับ 50 แต่หลังจากเติมไปแล้วและโทรไปคุยกับ call center รอบแรก call center โทรมาบอกว่าเงินไม่พอ ฮุๆ แต่พอจะเติมอีก 50 ปรากฎว่าเว็บ scbeasy เดี้ยง เติมไม่ได้บอกให้ลองใหม่ ลองใหม่ประมาณเกือบ 10 รอบก็ไม่ได้ เอากับมันซิ call center บอกจะเช็คอีกรอบตอน 5 ทุ่มครึ่ง เหลือเวลาอีก 10 นาทีเลยตัดสินใจเดินไป 7-11 แล้วเติมไปที่ร้านนั่นเลย ทันพอดี call center ก็ดีมากๆ ตามงานให้ตลอด 2 รอบ จนเปิดบริการให้เรียบร้อย

สำำหรับความเร็ว 2.58M/0.39K ถือว่าเร็วทีเดียว สำหรับอุปกรณ์ที่เป็น mobile phone ที่ไม่ใช่ air card เร็วกว่า ADSL ที่บ้านซะอีก :P latency ก็ 137 ms ถือว่าปกติสำหรับ mobile internet


วันจันทร์, กันยายน 14, 2009

เมื่อศุกร์ที่ผ่านมา มีเพื่อนเดินมาถามว่าทำไมเวลาสร้าง default route เป็น PPP หลายๆ session แล้วจึง ping ได้แค่ interface เดียว คือ interface แรกที่ ping ก่อนเข้าไปดูก็คิดว่าเป็นแค่ปัญหา packet ถูก drop ใน ฺBRAS เพราะ packet เข้าและออกคนละ interface กัน ซึ่งเป็นผลจาก routing caching ใน kernel ทำให้ BRAS เห็นว่าเป็น spoofing IP เพราะ source IP มาจาก interface ที่ไม่ถูกต้อง มันเลย drop ซะ

แต่พอเข้าไปดูจริงๆ มีแต่ ICMP request ไม่เจอ reply แฮะ เออ...มันหายไปไหน หาทุก interface ก็ไม่เจอ firewall ก็ไม่ได้ block ลองค้นๆ ดูก็เป็นเพราะค่า rp_filter นี่เอง ที่ทำหน้าที่ป้องกัน IP spoofing ใน kernel นั่นเอง มันเลย block reply ไม่ให้ออกมาเลย ถ้าจะยอมให้มันออกมาได้ (ซึ่งจริงๆ ก็ไม่ควร) ก็ใช้คำสั่งนี่ซะ

sysctl -w net.ipv4.conf.INTERFACE.rp_filter=0

โดยเปลี่ยน INTERFACE ให้เป็นชื่อ interface ที่จะปิดความสามารถนี้ คราวนี้มันก็จะออกมาได้แล้ว

วันอาทิตย์, พฤษภาคม 17, 2009

หลังจากอัพเกรดมาเป็น Ubuntu 9.04 มีปัญหาที่เจอคือ numpad ของคีย์บอร์ดที่ใช้ คือ Microsoft Comfort Wireless Keyboard มันกลายเป็นเป็นการควบคุมเมาส์ไปแทน ทำให้ไม่สามารถใช้ numpad เพื่อพิมพ์ตัวเลขได้ ปัญหาเกิดจากออพชัน Mouse Keys ใน Keyboard Perferences มันโดนเปิดขึ้นโดยอัตโนมัติ วิธีแก้คือไปปิดมันซะที่ System > Preferences > Keyboard > Mouse Keys และคลิกเอาเครื่องหมายถูกหน้า "Pointer can be controlled using keypad" ออก ก็เรียบร้อย หรือจะกด Alt+LShift+NumLock ก็ได้