17 สิงหาคม, 2560

Override default Django forms attribute

งานที่ใช้อยู่ปัจจุบัน คือ สร้าง Form สำหรับ Register โดยใช้ ModelForm ที่ inherit มาจาก class อื่น 

ปัญหาคือ เมื่อ render html form ออกมา พวกค่าต่างๆ เช่น help_text จะใช้จาก default ที่ตั้งมาจาก class แม่ และแท็ค input จะไม่มี class กำหนดมา ซึ่งอยากใช้ form-control ของ bootstrap 

ลองไปค้นๆ ดู ก็เจอคนทำ เลยเอามาบล็อกเก็บไว้เสียหน่อย




class UserRegistrationForm(RegistrationFormUniqueEmail):
    def __init__(self, *args, **kwargs):
        super(UserRegistrationForm, self).__init__(*args, **kwargs)
        self.fields['password1'].help_text = "My new help_text"
        self.field['username'].widget.attrs.update({'class': 'form-control'})


08 เมษายน, 2560

แก้ไขปัญหา เสียงไม่ออกไปที่ลำโพง bluetooth บน Debian

ปัญหาคือ สามารถ pair กับลำโพงได้ แต่ไม่มี device, audio profile ใหม่ขึ้นมาในระบบให้เลือก

search ไปมาก็เจอวิธีแก้ใน wiki ของ Debian เอง วิธีการมีดังนี้

  • ติดตั้ง package เหล่านี้
    • apt-get install pulseaudio pulseaudio-module-bluetooth pavucontrol bluez-firmware
  • จากนั้น restart service bluetooth และ pulseaudio
    • service bluetooth restart
    • killall pulseaudio
  • ใช้โปรแกรมจัดการ bluetooth ตัวไหนก็ได้ pair กับอุปกรณ์ตามปกติ
  • เปิดตัวจัดการเสียงของ pulseaudio โดยใช้โปรแกรมเช่น pavucontrol ก็จะเห็น device ของลำโพงปรากฏขึ้นมาแล้ว

REF:

05 ตุลาคม, 2559

Supervisord : Adding new program

ต้องการเพิ่ม program เข้าไปใน supervisord และ start เพื่อเริ่มใช้งาน สามารถทำได้ดังนี้


  1. เพิ่ิมไฟล์ .conf เข้าไปที่ /etc/supervisor/conf.d/
  2. ใช้คำสั่ง sudo supervisorclt reread
    • ตรงนี้จะบอกว่า มีโปรแกรมใหม่ขึ้นมาให้ใช้ (แต่จะยังเพิ่มเข้าไปจริงๆ)
  3. ใช้คำสั่ง sudo supervisorclt update
    • หลังจากคำสั่งนี้ supervisord จะ add เข้าไป และเริ่มใช้งาน program ใหม่ทันที เช็คโดยใช้ sudo supervisorctl status
REF:

15 เมษายน, 2559

[Ubuntu/Debian] วิธี downgrade package

เนื่องจากต้องการติดตั้งระบบตัวนึง ซึ่งใน ansible จะรัน playbook เริ่มต้นตัวที่เป็น bootstrap เพื่อเตรียมติดตั้งจริงต่อไป พบว่า ต้องมีการเพิ่ม repository และ ติดตั้งแพคเกจเพิ่มเติม ดูเหมือนไม่มีอะไรใช่ไหม?

ปัญหาคือ แพคเกจที่ต้องการจะลง ดันบังคับต้องเป็นเวอร์ชั่นที่ต่ำกว่าที่อยู่ในระบบ ซึ่งก็คือ python2.7
ปัญหาถัดมาคือ ถ้าจะลบออกมันจะลากญาติโยมที่พึ่งพา(depend) python2.7 ลงไปด้วย เพราะงั้นทำไงดี

วิธีแก้ง่ายๆ หลังจากหาดูมาตั้งนานนมคือ ใช้ aptitude !

ใช้ยังไง? แบบนี้เลย บอกมันไปว่าจะลบทิ้งนะ

$ sudo aptitude remove python2.7

เท่านั้นล่ะ มันจะร่ายยาวมาเลยว่าอะไรจะเกิดขึ้นบ้าง สิ่งที่ต้องทำคือ กด n ไปเรื่อยๆ คือให้มัน resolve ให้ใหม่นั่นล่ะ จนกว่าจะเจอว่าให้มัน downgrade ไปยังเวอร์ชั่นที่ต้องการ
แค่นี้ก็เรียบร้อย ไม่กระทบกับแพคเกจใดๆ

07 มีนาคม, 2559

Unattended security update in Debian

ในระบบ package ปกติเช่น apt ของ Debian, Ubuntu เราสามารถติดตั้ง software ใหม่ๆ หรือ security update ได้อยู่แล้วไม่ว่าจะผ่าน command line หรือ GUI

ทีนี้หากเราได้ดูแล server อยู่เป็นจำนวนนึง การรีโมทเข้าไปติดตั้งทีละเครื่องคงไม่สนุกแน่

ในบทความนี้จะมาทำให้ server เรา security update อย่างสม่ำเสมอแบบอัตโนมัติกัน

สิ่งที่ต้องเตรียม

- ติดตั้งแพคเกจที่จำเป็น
# apt-get install unattended-upgrades apt-listchanges
- คอนฟิคไฟล์

  • ไฟล์แรกจะอยู่ที่ /etc/apt/apt.conf.d/50unattended-upgrades ซึ่งค่าที่ตั้งมา ก็สามารถนำมาใช้ได้เลย
  •  อีกไฟล์คือ /etc/apt/apt.conf.d/20auto-upgrades ถ้าไม่มีไฟล์นี้ สามารถสร้างขึ้นมาใหม่ได้เลย หรือใช้คำสั่ง  sudo dpkg-reconfigure -plow unattended-upgrades ก็ได้เช่นกัน จากนั้นให้ไขไฟล์ดังนี้

APT::Periodic::Update-Package-Lists "1";

APT::Periodic::Unattended-Upgrade "1";



REF:

28 กุมภาพันธ์, 2559

ls command with color in black-background terminal in Mac OSX

ตอนนี้ Terminal ใน Mac ที่ใช้อยู่คือ iTerm2 
ทีนี้สีพื้นหลังที่ใช้อยู่เนี่ยมันเป็นสีดำ เวลาสั่ง ls มันจะมีบางประเภทที่กลืนไปกับสีพื้นหลัง คือมันไม่เด่น

วิธีแก้คือ ให้เพิ่มค่าต่างๆ เหล่านี้ไปที่ไฟล์ ~/.profile หรือ ~/.bash_profile (ใช้อันนี้ล่ะ)

alias ls="ls -G" # อันนี้คือทำให้มันแสดงผลเป็นสีทุกครั้งที่ ls#export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx # สีนี้ก็ใช้ได้export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd # อันนี้โฟลเดอร์จะสีน้ำเงินเข้ม
สั่ง source ~/.bash_profile แล้วลอง ls ดู ก็จะโอเคขึ้นละ

ref:

23 สิงหาคม, 2558

Flashing NodeMCU firmware on Mac OS X

เรื่องของเรื่องคือได้ยินชื่อเสียงของ NodeMCU มานาน เลยสั่งมาลองเล่นบ้าง แต่ไม่เคยมีประสบการณ์กับการเล่นกับ IoT มาก่อน ค่อนข้างจะมั่วอยู่มากเหมือนกัน 

ปัญหาที่เจอคือแฟลชแล้ว ไม่มี lua prompt ขึ้นมา แต่ใช้ Arduino IDE ต่อเข้าแล้ว upload script (ที่ไม่ใช่ lua) แล้วดันรันได้ งมไปงมมาเลยได้วิธีมาแชร์นี้ล่ะ

ตัวที่สั่งมา หน้าตาเป็นอย่างนี้


ที่เคยอ่านๆ มาคือ Windows ก็จะมีเครื่องมือช่วยในการแฟลชง่ายๆ เลย 
ในแมคก็มีเหมือนกันแต่ใช้ผ่าน command line แทน 
แต่ก่อนจะแฟลช ต้องเตรียมเครื่องมือก่อน ดังนี้
  • ติดตั้ง CP2102 USB to UART bridge เหมือนเป็น driver เวลาเสียบเข้าเครื่องแล้วจะมองเห็นเป็น device ชนิดนึง โหลดได้ ที่นี่
  • ESPTool เป็น command line tool สำหรับแฟลช firmware ลง esp8266 วิธีติดตั้ง ใช้คำสั่งดังนี้ใน terminal
    • git clone https://github.com/themadinventor/esptool.git
    • cd esptool
    • sudo python setup.py install
  • nodemcu-firmware โหลดตัวล่าสุดมาเลยก็ได้ (ในขณะนี้คือ 0.9.6-dev ) สมมติว่าไฟล์ชื่อ nodemcu_float_0.9.6-dev_20150704.bin
เมื่อเตรียมพร้อมแล้ว มาเริ่มแฟลชกัน โดยวิธีการมีดังนี้
  • เสียบสาย micro usb เข้ากับ esp8266 แล้วเช็คดูว่ามองเห็น device รึเปล่า แบบในรูป
  •  เช็คว่าเมื่อเสียบแล้วได้ device ชื่ออะไร อย่างที่ใช้อยู่จะเป็น device อยู่ที่ /dev/tty.SLAB_USBtoUART
  •  ถ้าได้ device ขึ้นมาแล้ว สามารถใช้คำสั่งนี้ใน terminal ได้เลย
    • esptool.py -b 115200 -p /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio 0x00000 nodemcu_float_0.9.6-dev_20150704.bin (spec baud rate ของตัวนี้เขียนไว้ที่ 9600 เท่าที่ลองคือสำหรับตอนที่ใช้โปรแกรมอย่าง minicom, ESPlorer ต่อเข้าไป แต่เวลาแฟลชใช้ buad rate นี้ได้ ลองแล้ว เร็วด้วยนะ)
      ขึ้นแบบนี้ถือว่าถูก
    • แล้วก็รอจนเสร็จ ก็จะสามารถใช้งาน NodeMCU พร้อมกับเขียนสคริปต์โดยใช้ภาษา lua ได้ มี lua prompt ขึ้นมาให้เสร็จสรรพ
REF:

23 ธันวาคม, 2557

22 ธันวาคม, 2557

Resolving Stale NFS

ถ้าเจอเหตการณ์ Stale file blah blah blah อะไรสักอย่างนี่แหละใน NFS บน Linux ให้ใช้คำสั่งนี้ก่อนเลย
# exportfs -f
ได้ผลรึเปล่า ค่อยว่ากัน! 

REF:
http://blogs.opusvl.com/technical/resolving-stale-nfs-file-handle-issues-on-linux

21 พฤศจิกายน, 2557

Fixing: Create USB Linux installer Unetbootin in OS X

ปกติเวลาจะทำตัว Linux installer usb ก็จะใช้ Unetbootin เคยใช้แต่อยู่ในลินุกซ์ มันก็เวิร์กมาตลอด
จนมาใช้ Mac ก็ยังใช้ Unetbootin แต่มันดันทำแล้วเอาไปเสียบบูตไม่ได้ ก็ไม่ได้หาสาเหตุหรือวิธีแก้จริงๆ จนไปเจอวิธีแก้อันนึงเข้าลองแล้วใช้ได้ เลยเอามาแบ่งปันกันในคราวนี้

สิ่งที่ต้องเตรียม

  • โหลด syslinux มาไว้ที่เครื่องแล้วแตกไฟล์ออกมา มองหา mbr.bin แล้วจำไว้ (ตอนนี้ลองไฟล์ mbr.bin ที่อยู่ใน bios/mbr/ แล้วใช้ได้) 
  • ISO image ในที่นี้ใช้ Debian netins 

วิธีทำ

  1. ใช้ Disk Utilities สร้าง Partition ให้ USB Flash drive โดยให้เลือก Option เป็น Master Boot Record (MBR) พอทำเสร็จ disk util จะ mount ให้อัตโนมัติ ให้ใช้คำสั่ง mount ดูว่า flash drive เราเป็น device อะไร เช่น /dev/disk2
  2. ใช้คำสั่งดังนี้ในสิทธิ์ rootdd conv=notrunc bs=440 count=1 if=/path/to/syslinux/bios/mbr/mbr.bin of=/dev/disk2 
  3. จากนั้นใช้ Unetbootin ตามปกติ ก็จะสามารถบูตจาก USB Flash drive ได้แล้ว

REF:
 



20 มีนาคม, 2557

Recover failed HDD using Open Source tools

This will show how to recover failed hard disk using Linux and open source tools

Failed hard disk in this case means:

  • S.M.A.R.T. not healthy.
  • Hard disk have some bad sector
  • Some data cannot read and make system slow
  • The disk are still available in /dev/

The tools

  • Ubuntu Linux or other GNU Linux
  • GNU ddrescue

Process:

  • install the tools
  • # apt-get install gddrescue smartmontools
  • Plug your failed hdd to linux system, use dmsg | tail to determine what device name were shown in this case is sdb ( /dev/sdb )
  • If you want to recovery whole drive to another new healthy disk (disk to disk), 
    • # ddrescue -f -n /dev/sdb /dev/sdX logfile.log # where X is your new healthy disk
      • The option -f and -n said force dump "only" the good parts from your failed hdd to new one, this will skip the error parts and make this activity faster than the dd command.
      •  ddrescue use logfile.log file next time for recover the error parts.
    • Now the error parts.
    • # ddrescue -d -f -r3 /dev/sdb /dev/sdX logfile.log # where X is your new healthy disk
      •  The option -r3 said try 3 times to read error parts, you can change the desire value depends on your hdd health.
    • You may or may not check your  new disk (fsck) when finish.
Summary and suggestion:
  • Always monitor your hard disk health, use smartmontools and setup the daemon will help.

06 กุมภาพันธ์, 2557

การคอนฟิค apt ไม่ให้ติดตั้งแพคเกจที่ apt recommend (รวมถึง suggest)

ปกติเวลาจะ apt-get install แพคเกจที่ต้องการ ใน Ubuntu มันจะติดตั้งแพคเกจส่วนที่เพิ่มเข้ามาคือ แพคเกจที่เป็น dependency (ถ้ามี) และ แพคเกจที่ recommend ซึ่ง recommend เนี่ย ไม่ต้องติดตั้ง เพิ่มเข้าไปก็ได้แต่ apt ใน Ubuntu มันทำให้(เปลือง space) 

การคอนฟิคไม่ให้ apt มันติดตั้ง recommend แพคเกจมาด้วย ทำได้ดังนี้

แก้ไขไฟล์คอนฟิค (ถ้าไม่มีก็สร้างใหม่เลย)  


/etc/apt/apt.conf

เพิ่มบรรทัดต่อไปนี้ลงไป


APT::Install-Recommends "0";
APT::Install-Suggests "0";
เป็นการบอกว่า ไม่ต้องติดตั้งทั้ง Recommend และ Suggest แพคเกจ

01 มกราคม, 2557

# หนองคาย | ลาว | เวียงจันทน์

 # หนองคาย | ลาว | เวียงจันทน์

นี่คงเป็นครั้งแรกที่ได้บันทึกการเดินทาง (เป็นการเดินทางที่แขนขาและอวัยวะต่างๆ ไม่ได้อยู่หน้าคอมฯ)

ใกล้ปีใหม่ หลังจากที่ไม่ได้กลับบ้านมา ๒ ปี ก็ฤกษ์กลับบ้านเสียที การกลับบ้านแต่ละครั้ง ก็มักจะมีเรื่องเซอร์ไพรส์ต่างๆ เช่น ครั้งก่อน พ่อได้เปลี่ยนชื่อเป็นชื่อใหม่ หรือ ครั้งนี้ กลับมาบ้านหลังใหม่ที่เป็นบ้านจริงๆ (อยู่ในแฟลตห้องแถวมาเกือบตลอดชีวิต) แล้วบังเอิญอีกอย่างคือ ที่บ้านมีจักรยานสำหรับทุกคนในบ้านเลย ทั้งแม่ พ่อ น้องชาย มีทุกคน ก็เลยเกิดอยากปั่นไปลาวขึ้นมา โดยที่ไม่ได้หาข้อมูลมากนัก ดูแต่ในแผนที่คร่าวๆ ว่า เวียงจันทน์อยู่ในระยะที่ปั่นถึงไหว ก็เลยตั้งเป้าไว้ที่เวียงจันทน์

เมื่อถึงวันจริง ก็ออกจากบ้านประมาณ ๙​ โมงนิดๆ มั้ง จำไม่ได้เหมือนกัน พอปั่นไปที่ด่าน ตม. ที่สะพานมิตรภาพ (แอบเห็นป้ายห้ามจักรยานและมอไซด์ขับขี่บนสะพานด้วย แอบหวั่นๆ​ ) ด้วยความที่ไม่เคยไปลาวเลยสักครั้งเดียวตั้งแต่เกิดมา ก็เลยเดินงงๆ ไปยื่นพาสปอร์ตให้ จนท. แล้วเค้าก็ส่งกระดาษมาใบนึงที่ต้องเขียนเพื่อขอออกนอกประเทศ ผมเขียนไปซีกเดียวคือ ขาเข้า (มันจะมีสองซีกให้เราเขียน คือขาขอออกนอกประเทศและขอเข้าประเทศ) ซึ่งตรงนี้มันต้องเขียนขาออก คิดในใจว่า ก็ตูจะเข้าประเทศเค้านี่หว่า ฮา ก็เลยต้องเขียนอีกซีกนึง พอเสร็จก็เริ่มปั่นข้ามสะพาน บนสะพานมิตรภาพ มีรางรถไฟด้วยนะ รางอยู่ตรงกลางสะพานเลยล่ะ ตอนปั่นก็เสียวๆ จะโดนซิวอยู่เหมือนกัน ขับรถกันเร็วมาก แต่ก็ผ่านไปได้

พอถึง ตม. ลาว ก็เริ่มเจอเรื่องงงๆ อีก เพราะไม่รู้ว่าต้องทำไรก่อน ไม่มีป้ายบอกเป็นสเต็ปๆ ว่า ๑ ต้องทำอะไร ๒ ต้องทำอะไรต่อ อะไรประมาณนี้ อาศัยดูเอาว่า เค้าต่อคิวกันตรงไหนเยอะๆ ก็ไปต่อคิวตรงที่เค้าทำบัตร RFID อะไรสักอย่าง ลืมถ่ายรูปมา ได้มาเป็น one way ticket  ซึ่งจนบัดนี้ก็ยังไม่อยู่ดีว่าเอาไปทำอะไร สงสัยคงใช้กับพวกรถยนต์หรือรถโดยสาร พอทำบัตรเสร็จ ก็ไปเขียนใบขอเข้าประเทศ แล้วก็ยื่นให้ จนท. เค้าก็ถามเราว่าเอารถไรมา (ช่องที่ใช้ยื่นเอกสารมันมี ๒ ที่ คือ คนปกติ กะ คนที่เอารถมา สงสัยว่าผมคงไปยื่นที่ช่องหลัง) ผมก็บอกไปว่าจักรยาน เค้าก็ไม่ได้ว่าหรือห้ามอะไร ก็ผ่านไปได้

เมื่อปั่นผ่านด่านมาแล้ว ก็จะพบกับทางออก ซึ่งมีทางแยกอยู่ ๒ ทางคือ ซ้ายกับขวา แล้วที่นู่นไม่รู้ว่างบทำป้ายเค้าหมดหรือยังไง เพราะมันไม่มีป้ายบอกเลยว่า เลี้ยวซ้ายจะไปที่ไหน เลี้ยวขวาจะไปที่ไหน ผมต้องจอดดูแผนที่ในมือถือซึ่งมันต่อเน็ตไม่ได้แล้วตั้งแต่อยู่กลางสะพาน ยังดีที่เคยโหลดแผนที่บางส่วนไว้ ก็เลยพอดูออกว่าต้องไปทางไหน (เลี้ยวขวา) ผมก็ปั่นไปตามเส้นทางเรื่อยๆ ระหว่างทางก็คล้ายๆ อำเภอๆ นึงในบ้านเรานี่แหละ ไม่เจริญอะไรมาก ถนนก็ ๔ เลน (ปั่นชิดขวาสุดตลอด) ข้างๆ ทางก็มีฝุ่นมีอะไรพอสมควร เพราะเป็นเส้นทางขนส่งอะไรหลายอย่างเหมือนกัน และเหมือนเดิม ไม่มีป้ายบอกทางว่าอีกกี่กิโลจะถึงเวียงจันทน์ เท่าที่สังเกตได้คือ ที่ลาวเค้าก็ใช้ผลิตภัณฑ์ของเราเยอะทีเดียว ตั้งแต่อาหาร​ (มาม่า, น้ำปลา) ไปจนถึงของใช้ประจำวัน (ยาสระผม, น้ำยาล้างจาน) ผมก็ปั่นไปเรื่อยๆ จนถึงเวียงจันทน์ แล้วก็พักกินสนีกเกอร์บาร์กับน้ำเปล่า น้ำเปล่านี่ก็กินเรื่อยๆ ระหว่างทาง แถมไม่ได้แลกเงินไว้ด้วย ปั่นเล่นอยู่สักพัก ก็คิดว่าจะกลับ บังเอิญไปโผล่ถนนเส้นนึงมองไปไกลๆ ก็เห็นอะไรสักอย่างเหมือนที่เคยเห็นในรูป มันคือประตูชัย ทีแรกผมไปเวียงจันทน์โดยไม่ได้คิดว่าจะไปไหนบ้าง พูดง่ายๆ ก็คือไม่ได้วางแผนไว้  ก็เลยปั่นไปที่ประตูชัยถ่ายรูปสักนิดหน่อยก็ปั่นกลับ

ทริปนี้ทำให้รู้ว่า
ควรพกปากกาติดตัว แล้วก็ควรฟิตร่างกายดีๆ
สาวลาวน่ารัก :P

05 พฤศจิกายน, 2556

Role และ Permission ใน Alfresco


ใน Alfresco จะมี Permission ซึ่งจะแบ่งตาม Role ที่กำหนดให้กับ User ซึ่ง มีไม่เยอะหรอก แต่จำไม่ค่อยได้  ก็เลยมาบล็อกเก็บไว้

Site permission - Permission ที่กำหนดใน Alfresco Site
  1. Manager - มีสิทธิ์ในทุก content ที่อยู่ใน site ไม่ว่าจะเป็นเอกสารที่สร้างจากตนเอง หรือ สมาชิกคนอื่นที่อยู่ใน site
  2. Collaborator - มีสิทธิ์ในทุก content ที่เป็นเจ้าของอยู่ สามารถแก้ไข content ของสมาชิกคนอื่นๆ  แต่ไม่สามารถลบได้
  3. Contributors - มีสิทธิ์ในทุก content ที่เป็นเจ้าของอยู่ แต่ไม่สามารถ แก้ไขและลบ content ของสมาชิกคนอื่นๆ ได้
  4. Consumer - สามารถเข้าถึง content ที่ได้รับอนุญาติเท่านั้น ไม่สามารถสร้าง content ของตัวเองได้

User roles และ Permission - สิทธิ์ของแต่ละ role ใน Alfresco

All permissions apply to the invited space Owner (1) Coordinator Collaborator Contributor Editor Consumer
See invited space
View content
Copy content
Preview content in template
View content properties
Check in content to invited space

Checkout content to different space.

Update/edit content created by other users

Update properties for content created by other users

Edit existing discussions

Create/add new content (1)

Cut/delete content created by other users



Create child spaces in the invited space

View content rules

Checkout content to same space.
(2)
Contribute to existing discussions

Invite others



Start new discussion topic

Delete content created by other users



Same access rights as content owner



Take ownership of content



Create space rules



03 พฤศจิกายน, 2556

ฤๅ OpenVZ กำลังจะตาย!? | Is OpenVZ obsoleted?

 
มีหลายคนเชื่อว่า OpenVZ ล้าสมัยบ้าง กำลังจะตายบ้าง ก็เลยถามคนเหล่านั้นว่า ทำไมถึงเชื่ออย่างนั้นล่ะ คำตอบสุดฮิตที่ได้มา จะมีสามข้อดังนี้
  1. เคอร์เนล ของ OpenVZ เก่าจัด เพราะอิงอยู่กับรุ่น 2.6.32 ในขณะที่คนอื่นปาไปรุ่น 3.x ละ
  2. LXC คืออนาคต ส่วน OpenVZ นั้นคือ อดีต ~
  3. OpenVZ ไม่มีการพัฒนาต่อแล้ว จนโดนถอดออกจาก Debian Wheezy
เอาล่ะ มาดูกันว่าข้อเท็จจริงแต่ละข้อมีอะไรบ้าง
  1. "Kernel ของ OpenVZ เก่าจัด" - Kernel ของ OpenVZ ในปัจจุบัน มีฐานมาจาก Red Hat Enterprise Linux 6 (RHEL6) ซึ่งเป็นรุ่นที่ใหม่ที่สุดและดีที่สุดจาก Red Hat ซึ่งเป็นบริษัทที่ทำตลาด Enterprise ที่มีส่วนร่วมในการพัฒนา Kernel ของลินุกซ์ มาโดยตลอด ไม่มี Kernel ไหนที่จะไม่มีบั๊กหรอก แต่อยากจะบอกว่า RHEL6 คือดิสโทรที่มี Kernel ที่มีคุณภาพใกล้เคียงที่สุดแล้ว

    สิ่งที่นักพัฒนาจาก Red Hat ทำก็คือ Fork Kernel มาจาก ต้นน้ำ, จัดการบั๊ก, แก้ปัญหาเรื่อง security, update ตัว driver และเพิ่มฟีเจอร์ที่ไม่มีในต้นน้ำ ซึ่งกระบวนการนี้ทำกันกว่าครึ่งปีกว่าจะปล่อยออกมา ซึ่งพอปล่อยออกมาก็จะกลายเป็นเคอร์เนลที่ "เก่าและล้าสมัย" ไปแล้ว ถ้ามองในมุมตัวเลขของรุ่นเคอร์เนล นั่นแหละ อย่าเพิ่งตัดสินตัวเคอร์เนลจากรุ่นของมัน เพราะนั่นไม่ได้แปลว่าเก่าหรือล้าสมัย มันความเสถียรและปลอดภัยมากกว่า ซึ่งหลังจากที่ปล่อยออกมา จะมีการ maintain ต่างๆ เช่น ทำให้รองรับฮาร์ดแวร์ใหม่ๆ ได้ หรือมี security bug fix ซึ่งสิ่งเหล่านี้ทำให้ OpenVZ ได้ใช้เคอร์เนลที่มีคุณภาพ

    ในอนาคตอันใกล้ RHEL7 กำลังพัฒนาตัวเคอร์เนลที่ใช้รุ่น 3.x เป็นฐาน ซึ่ง OpenVZ จะพอร์ตเคอร์เนลไปใช้ของ RHEL7 เช่นกัน แต่ตอนนี้ เคอร์เนลของ RHEL6 ที่ OpenVZ ใช้อยู่ คือเคอร์เนลที่ใหม่ที่สุดและดีที่สุด และขอเถอะ อย่าตัดสินกันที่ uname แล้วผลที่ออกมาคือ 2.6.32
  2. "OpenVZ vs LXC" - เคอร์เนลของ OpenVZ พัฒนามาอย่างยาวนาน และเป็นการพัฒนาที่แยกจากคนอื่นมาโดยตลอด หรืออีกนัยนึงก็คือ พัฒนาแยกจากเคอร์เนลของลินุกซ์ ความผิดพลาดเกิดขึ้นในปี 2005 และตั้งแต่นั้น ทีม OpenVZ ก็ยังคงพยายามที่จะรวมส่วนต่างๆ OpenVZ เข้าไปยังเคอร์เนลต้นน้ำ โดยหวังว่าเมื่องานส่วนนี้เสร็จ ที่เคอร์เนลต้นน้ำจะสามารถใช้ความสามารถของ OpenVZ ได้ครบทุกฟังก์ชัน

    แล้ว LXC ล่ะ? LXC เป็น user-space tool ซึ่งรันอยู่บนเคอร์เนล ในขณะที่ทีมของ OpenVZ ทำงานเกี่ยวกับการรวมเข้าไปยังลินุกซ์เคอร์เนลอยู่นั้น LXC ได้เริ่มใช้ฟีเจอร์เหล่านั้น ซึ่งฟีเจอร์กว่าครึ่งนึงถูกพัฒนาโดยทีมของ OpenVZ

    ทั้ง OpenVZ และ LXC ต่างมีการพัฒนากันอย่างต่อเนื่องและต่างมีอนาคตเป็นของตัวเอง อาจจะมีการรวมเครื่องมือกันในบางจุด ซึ่งมาถึงตรงนี้ก็พูดได้เลยว่า LXC ไม่ได้เป็นตัวตายตัวแทนของ OpenVZ แต่เป็นโปรเจ็คคนละโปรเจ็คกันเลย OpenVZ ถือว่าเป็น LXC++ เพราะมีฟีเจอร์หลายอย่างที่ยังไม่มีในเคอร์เนลต้นน้ำ เช่น การจัดการทรัพยากรณ์ที่ดีกว่า หรือเทคโนโลยีอย่าง ploop
  3. "OpenVZ หยุดพัฒนาแล้ว และถูกถอนออกจาก Debian" ทีมเคอร์เนลของ Debian ได้ตัดสินใจเอา OpenVZ ออกจาก Debian ซึ่งเป็นสิ่งที่เข้าใจได้ไม่ยากคือ การ maintain เคอร์เนล ใช้เวลาและทรัพยากรณ์ซึ่งทีม Debian มีสิ่งเหล่านี้ไม่พอ นั่นไม่ได้หมายความว่า OpenVZ หยุดพัฒนาแล้ว ซึ่งมันแปลกมากที่จะมากล่าวหากันแบบนี้ http://openvz.org/News/updates ในลิงก์นี้จะบอกได้ว่ามีการอัพเดตอะไรบ้าง ซึ่งในปีนี้มีการปล่อยซอฟต์แวร์ออกมาถึง 80 ครั้ง, อาทิตย์ละ 2 ครั้ง ซึ่งสำหรับ Debian ทางทีม OpenVZ ก็มี repository ให้ด้วย
บล็อกนี้เป็นการแปลมาทั้งดุ้น ตัดออกบ้าง เสริมบ้าง อ่านแล้วอาจจะแปลกๆ นิดนึงโนะ <(") 
ปล. พาดหัวแรงไปนิดส์ :P
REF: http://openvz.livejournal.com/45647.html

29 ตุลาคม, 2556

การใช้ SSH config ไฟล์ เพื่อทำให้การ ssh ง่ายขึ้น

ปกติเวลาจะ ssh ไปที่ host มักจะใช้คำสั่งประมาณนี้
$ ssh user@host.domain
หรือถ้าใช้ port ที่นอกเหนือจาก 22 ก็จะใช้คำสั่ง
$ ssh user@host.domain -p 2222
ถ้ามีสัก 10 host อาจจะไม่สนุกละ จำผิดจำถูก อาจจะใส่ port ผิด หรือพิมพ์ชื่อโฮสยาวๆ ผิดไปตัวนึง เสียเวลา

ก็เลยเป็นที่มาของบล็อกนี้ จะใช้ไฟล์ config เพื่อทำให้การ ssh ง่ายขึ้นและแม่นยำขึ้น มาดูกันว่าทำไง

ก่อนอื่นเลย ใช้ editor สร้างไฟล์ขึ้นมาไฟล์นึงที่ เช่นผมใช้ vim ก็จะสร้างด้วยคำส่ัง
vim ~/.ssh/config
อธิบายได้คือ สร้างไฟล์ config ของ ssh ไว้ที่ home ของเรา โดยเนื้อหาข้างในจะมีรูปแบบดังนี้
Host hostnickname
    User username
    Hostname hostname หรือ ip address
เช่น
Host google     Username sergey     Hostname ssh.google.com
คราวนี้ เวลาจะ ssh ก็จะใช้คำสั่งสั้นลง เป็น
$ ssh google
ยกตัวอย่างอีกสักอัน
Host google     Username sergey     Hostname ssh.google.com 
Host myhost     Username phondanai     Hostname mysuperlonghostingnameever.com     Port 2222     Compression yes
แล้วการ ssh ก็จะง่าย~ ขึ้น (หมายเหตุ Compression ไม่ต้องมีกะได้ แต่ก็ช่วยได้นะเวลาเน็ตกาก)
$ ssh myhost
ยังมี option อีกมาก แต่เท่าที่ได้ใช้ตอนนี้ก็คงมีเท่านี้ล่ะ หวังว่าจะทำให้ชีวิตง่ายขึ้นนะ

ปล. หา REF ไม่เจอ T__T

25 ตุลาคม, 2556

ว่าด้วยเรื่อง OpenVZ (ตอนที่ ๒)

ถัดจาก ตอนที่ ๑ ได้เกริ่นเริ่มว่า OpenVZ คืออะไร อยู่ตรงไหนของ Virtualization
ตอนที่ ๒ นี้จะพามารู้จักทั้งสามส่วนที่ได้ทิ้งท้ายไว้เมื่อครั้งที่แล้วให้มากขึ้น ซึ่งได้แก่

  • Virtualization และ Isolation ที่ได้พูดไปว่า สามารถมีได้หลาย Virtual Environment (ต่อไปขอเรียกสั้นๆ ว่า VE) ใน physical server เพียงเครื่องเดียว
  • Resource management ซึ่งคือส่วนที่ OpenVZ เอาไว้จัดการทรัยากรทั้งหลายให้กับแต่ละ VE
  • Checkpointing ส่วนนี้ จะเกี่ยวข้องกับการทำ Live Migration ซึ่งจะเป็นยังไง ในโพสนี้มีบอกเช่นกัน

Virtualization และ Isolation

แต่ละ VE จะมีเซ็ตของทรัพยากร เป็นของตัวเอง (isolate) ซึ่งได้มาจาก kernel ของตัวโฮส OS  ซึ่งทรัพยากรเหล่านั้นจะแยกเป็นเอกเทศน์ไม่เกี่ยวข้องกับ VE อื่นๆ แต่อย่างใด ซึ่งทรัพยากรดังกล่าวจะมีดังนี้

  • ไฟล์ -- ไม่ว่าจะเป็น ไลบรารี่ของระบบ, แอพพลิเคชัน, /proc และ /sys, หรือการ lock ไฟล์ 
  • ผู้ใช้ และ กลุ่มผู้ใช้ -- แต่ละ VE จะมี root เป็นของตัวเอง รวมไปถึง ผู้ใช้และกลุ่มผู้ใช้ด้วย
  • โครงสร้างโปรเซส -- VE จะมองเห็นเฉพาะโปรเซสของตัวเอง โดยเริ่มตั้งแต่ init เหมือนกับลินุกซ์ทั่วไป และหมายเลยโปรเซส(PID) ของ init คือหมายเลข 1 นั่นเอง
  • เน็ตเวิร์ก -- VE จะได้อุปกรณ์เน็ตเวิร์ก เสมือน ซึ่งจะทำให้ VE สามารถมีหมายเลยไอพี เป็นของตัวเอง และรวมไปถึงกฏของ netfilter (iptables) และการ routing
  • อุปกรณ์ -- บางอุปกรณ์จะเป็นอุปกรณ์เสมือน ในบางกรณี หากต้องการให้ VE สามารถเข้าถึงอุปกรณ์จริงๆ บนเครื่องโฮส ก็สามารถทำได้ เช่น NIC, serial port เป็นต้น
  • IPC ออปเจ็กต์ -- ได้แก่  shared memory, semaphores และ mesages

Resource management

การจัดการทรัพยากร ถือเป็นเรื่องที่สำคัญที่สุดของ Virtualization ประเภท OS-Level เพราะทรัพยากรที่มีอยู่จำกัดได้ถูกแชร์โดย kernel เดียว ผ่านไปยัง VE หลายๆ ตัว ซึ่งทรัพยากรเหล่านี้ ต้องมีการจัดการที่ดี เพื่อที่จะทำให้ VE ที่รันอยู่ไปมีผลกระทบกับ VE ตัวอื่นๆ ที่รันอยู่ในโฮสเดียวกัน
OpenVZ มีการจัดการทรัพยการอยู่สามส่วน
  • จัดการโควต้าดิสก์แบบสองชั้น -- ชั้นแรก ที่ OpenVZ server สามารถจำกัดโควต้าของขนาดดิสก์และจำนวนของ inode, ชั้นที่สอง ที่ VE สามารถใช้ การจำกัดโควต้าโดยใช้เครื่องมือ UNIX quota ปกติ โดยสามาถจำกัดได้ทั้งแบบรายผู้ใช้ หรือแบบกลุ่มผู้ใช้
  • "Fair" CPU scheduler -- OpenVZ CPU scheduler ก็มีสองระดับเช่นกัน คือ ระดับแรก จะมองดูว่า VE ไหนที่จำเป็นต้องใช้พลังของ CPU รวมถึงมีการเซ็ตระดับความสำคัญไว้ ส่วนอีกระดับคือ ภายใน VE จะใช้ standard Linux scheduler ในการดูว่า โปรเซส ไหนที่จำเป็นต้องใช้พลังของ CPU โดยใช้ ระดับความคำคัญของโปรเซส
  • User Beancounters -- คือเซ็ตของ การนับ, การจำกัด และ การันตี ซึ่งจะมีอยู่ 20 พารามิเตอร์ซึ่งจะนำมาควบคุมการทำงานของ VE ผลที่ได้คือ จะไม่มี VE ไหน ใช้ทรัพยากรเกินกว่าที่ได้กำหนดไว้ ซึ่งอาจไปกระทบกับ VE อื่นได้ ซึ่งค่าส่วนใหญ่จะเกี่ยวกับหน่วยความจำ, IPC, network buffer เป็นต้น

Checkpointing และ live migration

การทำ checkpoint นำไปสู่การอนุญาติให้ทำ live migration หรือการย้าย VE จาก physical server นึง ไปยังอีก server นึงได้ โดยที่ไม่ต้องดาวน์ VE กระบวนการคือ VE จะถูก "แช่แข็ง" และสถานะทั้งหลายจะถูกเซฟลงดิสก์ โดยไฟล์นี้ล่ะจะถูกส่งต่อไปยัง server อีกเครื่อง จากนั้น VE ก็จะถูก ละลายน้ำแข็ง​ (เรียกว่า restore กะได้) กระบวนการทั้งหมดเกิดขึ้นภายในไม่กี่วินาที ซึ่งมองจากมุมผู้ใช้แล้ว จะไม่เหมือนเป็นการดาวน์ VE แต่จะเหมือนเป็นการดีเลย์ระหว่ากระบวนการซะมากกว่า 

หมดแล้วสำหรับครั้งนี้ ครั้งหน้าก็น่าจะยังคงเป็น OpenVZ อยู่ พอดีใช้บ่อย เลยมีอะไรมาเขียนนี่แหละ

22 ตุลาคม, 2556

ว่าด้วยเรื่อง OpenVZ (ตอนที่ ๑)


OpenVZ นั้น เป็นซอฟต์แวร์สำหรับทำ Operating system-level Virtualization บน Linux

Virtualization ประเภทนี้นอกจาก OpenVZ ก็จะมี FreeBSD Jail, Solaris Zones/Containers, Linux-VServer หรือที่ดังๆ เลยตอนนี้ก็ LXC (LinuX Containers) เป็นต้น Virtualization ประเภทนี้จะใช้ Kernel ตัวเดียวกันกับที่ Host รันอยู่ หรืออีกนัยนึงคือ ไม่สามารถสร้าง vm ที่ใช้ OS อื่นนอกเหนือจากที่ Kernel ของเครื่อง Host รองรับ (งงหนักกว่าเดิมไหมเนี่ย - -a )

เวลาพูดถึง OpenVZ มักจะต้องพูดถึงอีกคำนึงคือ Virtual Environment (VE) และพ่วงมาด้วยคำต่างๆ ที่พูดถึงสิ่งเดียวกัน เช่น VPS, container, partition
VE นั้นจะมีสภาพแวดล้อมเป็นของตัวเอง กล่าวคือ มี process init, filesystem, user (รวมถึง root), มี NIC และ IP address, routing tables, firewall rules(netfilter/iptables) เป็นของตัวเอง แต่โดยพ้ืนฐานก็จะไม่พ้นตัว Kernel ของ Host

Kernel ของ OpenVZ จะเป็น Kernel ที่ปรับแต่งมาสำหรับงาน Virtualization โดยมีฟังก์ชันต่างๆ เช่น

  • การทำ Virtualization และ isolation คือสามารถมีได้หลาย vm โดยใช้ kernel เพียงตัวเดียว
  • มีการจัดการทรัพยากรณ์ เช่น การจำกัด CPU, RAM, และพื้นที่ฮาร์ดดิสก์
  • การทำ Checkpoint จะเป็นการ แช่แข็ง(Freeze) สถานะของโปรเซส เพื่อบันทึกสถานะของดิสก์ไฟล์ในขณะนั้น
ครั้งหน้า(ไม่รู้เมื่อไหร่) จะมาเล่าต่อละกัน ไม่ได้เขียนนาน เริ่มเขียนไม่ถูกแระ <(")

01 สิงหาคม, 2555

Config proftpd with jail on Debian

install proftpd

# aptitude install proftpd

stop ftp service

# /etc/init.d/proftpd stop

config

edit the config file at /etc/proftpd/proftpd.conf
uncomment the line
DefaultRoot ~

start ftp service

# /etc/init.d/proftpd start