งานที่ใช้อยู่ปัจจุบัน คือ สร้าง 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'})
17 สิงหาคม, 2560
08 เมษายน, 2560
แก้ไขปัญหา เสียงไม่ออกไปที่ลำโพง bluetooth บน Debian
ปัญหาคือ สามารถ pair กับลำโพงได้ แต่ไม่มี device, audio profile ใหม่ขึ้นมาในระบบให้เลือก
search ไปมาก็เจอวิธีแก้ใน wiki ของ Debian เอง วิธีการมีดังนี้
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 เพื่อเริ่มใช้งาน สามารถทำได้ดังนี้
- เพิ่ิมไฟล์ .conf เข้าไปที่ /etc/supervisor/conf.d/
- ใช้คำสั่ง sudo supervisorclt reread
- ตรงนี้จะบอกว่า มีโปรแกรมใหม่ขึ้นมาให้ใช้ (แต่จะยังเพิ่มเข้าไปจริงๆ)
- ใช้คำสั่ง sudo supervisorclt update
- หลังจากคำสั่งนี้ supervisord จะ add เข้าไป และเริ่มใช้งาน program ใหม่ทันที เช็คโดยใช้ sudo supervisorctl status
REF:
21 กรกฎาคม, 2559
Set default protocol for git repository using HTTPS instead of GIT
In any git repository
add these line to .gitconfig file
[url "https://github.com/"]
insteadOf = git://github.com/
[url "https://github.com/"]
insteadOf = git@github.com:
15 เมษายน, 2559
[Ubuntu/Debian] วิธี downgrade package
เนื่องจากต้องการติดตั้งระบบตัวนึง ซึ่งใน ansible จะรัน playbook เริ่มต้นตัวที่เป็น bootstrap เพื่อเตรียมติดตั้งจริงต่อไป พบว่า ต้องมีการเพิ่ม repository และ ติดตั้งแพคเกจเพิ่มเติม ดูเหมือนไม่มีอะไรใช่ไหม?
ปัญหาคือ แพคเกจที่ต้องการจะลง ดันบังคับต้องเป็นเวอร์ชั่นที่ต่ำกว่าที่อยู่ในระบบ ซึ่งก็คือ python2.7
ปัญหาถัดมาคือ ถ้าจะลบออกมันจะลากญาติโยมที่พึ่งพา(depend) python2.7 ลงไปด้วย เพราะงั้นทำไงดี
วิธีแก้ง่ายๆ หลังจากหาดูมาตั้งนานนมคือ ใช้ aptitude !
ใช้ยังไง? แบบนี้เลย บอกมันไปว่าจะลบทิ้งนะ
$ sudo aptitude remove python2.7
เท่านั้นล่ะ มันจะร่ายยาวมาเลยว่าอะไรจะเกิดขึ้นบ้าง สิ่งที่ต้องทำคือ กด n ไปเรื่อยๆ คือให้มัน resolve ให้ใหม่นั่นล่ะ จนกว่าจะเจอว่าให้มัน downgrade ไปยังเวอร์ชั่นที่ต้องการ
แค่นี้ก็เรียบร้อย ไม่กระทบกับแพคเกจใดๆ
ปัญหาคือ แพคเกจที่ต้องการจะลง ดันบังคับต้องเป็นเวอร์ชั่นที่ต่ำกว่าที่อยู่ในระบบ ซึ่งก็คือ 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
- คอนฟิคไฟล์
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
ทีนี้หากเราได้ดูแล 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) แล้วดันรันได้ งมไปงมมาเลยได้วิธีมาแชร์นี้ล่ะ
ตัวที่สั่งมา หน้าตาเป็นอย่างนี้
REF:
ปัญหาที่เจอคือแฟลชแล้ว ไม่มี 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.gitcd esptoolsudo 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 ขึ้นมาให้เสร็จสรรพ
23 ธันวาคม, 2557
List listening UNIX socket in Linux system.
คำสั่งต่อไปนี้ ใช้ในการ list ดูว่ามี Unix socket ไฟล์ไหนที่กำลัง Listening อยู่บ้าง
REF:
http://serverfault.com/questions/124517/whats-the-difference-between-unix-socket-and-tcp-ip-socket
$ netstat --listen --unix
REF:
http://serverfault.com/questions/124517/whats-the-difference-between-unix-socket-and-tcp-ip-socket
22 ธันวาคม, 2557
Resolving Stale NFS
ถ้าเจอเหตการณ์ Stale file blah blah blah อะไรสักอย่างนี่แหละใน NFS บน Linux ให้ใช้คำสั่งนี้ก่อนเลย
REF:
http://blogs.opusvl.com/technical/resolving-stale-nfs-file-handle-issues-on-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 แต่มันดันทำแล้วเอาไปเสียบบูตไม่ได้ ก็ไม่ได้หาสาเหตุหรือวิธีแก้จริงๆ จนไปเจอวิธีแก้อันนึงเข้าลองแล้วใช้ได้ เลยเอามาแบ่งปันกันในคราวนี้
สิ่งที่ต้องเตรียม
วิธีทำ
จนมาใช้ Mac ก็ยังใช้ Unetbootin แต่มันดันทำแล้วเอาไปเสียบบูตไม่ได้ ก็ไม่ได้หาสาเหตุหรือวิธีแก้จริงๆ จนไปเจอวิธีแก้อันนึงเข้าลองแล้วใช้ได้ เลยเอามาแบ่งปันกันในคราวนี้
สิ่งที่ต้องเตรียม
- โหลด syslinux มาไว้ที่เครื่องแล้วแตกไฟล์ออกมา มองหา mbr.bin แล้วจำไว้ (ตอนนี้ลองไฟล์ mbr.bin ที่อยู่ใน bios/mbr/ แล้วใช้ได้)
- ISO image ในที่นี้ใช้ Debian netins
วิธีทำ
- ใช้ Disk Utilities สร้าง Partition ให้ USB Flash drive โดยให้เลือก Option เป็น Master Boot Record (MBR) พอทำเสร็จ disk util จะ mount ให้อัตโนมัติ ให้ใช้คำสั่ง mount ดูว่า flash drive เราเป็น device อะไร เช่น /dev/disk2
- ใช้คำสั่งดังนี้ในสิทธิ์ rootdd conv=notrunc bs=440 count=1 if=/path/to/syslinux/bios/mbr/mbr.bin of=/dev/disk2
- จากนั้นใช้ 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.
- 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 แพคเกจมาด้วย ทำได้ดังนี้
แก้ไขไฟล์คอนฟิค (ถ้าไม่มีก็สร้างใหม่เลย)
เพิ่มบรรทัดต่อไปนี้ลงไป
การคอนฟิคไม่ให้ apt มันติดตั้ง recommend แพคเกจมาด้วย ทำได้ดังนี้
แก้ไขไฟล์คอนฟิค (ถ้าไม่มีก็สร้างใหม่เลย)
/etc/apt/apt.conf
เพิ่มบรรทัดต่อไปนี้ลงไป
APT::Install-Recommends "0";เป็นการบอกว่า ไม่ต้องติดตั้งทั้ง Recommend และ Suggest แพคเกจ
APT::Install-Suggests "0";
01 มกราคม, 2557
# หนองคาย | ลาว | เวียงจันทน์
# หนองคาย | ลาว | เวียงจันทน์
นี่คงเป็นครั้งแรกที่ได้บันทึกการเดินทาง (เป็นการเดินทางที่แขนขาและอวัยวะต่างๆ ไม่ได้อยู่หน้าคอมฯ)
ใกล้ปีใหม่ หลังจากที่ไม่ได้กลับบ้านมา ๒ ปี ก็ฤกษ์กลับบ้านเสียที การกลับบ้านแต่ละครั้ง ก็มักจะมีเรื่องเซอร์ไพรส์ต่างๆ เช่น ครั้งก่อน พ่อได้เปลี่ยนชื่อเป็นชื่อใหม่ หรือ ครั้งนี้ กลับมาบ้านหลังใหม่ที่เป็นบ้านจริงๆ (อยู่ในแฟลตห้องแถวมาเกือบตลอดชีวิต) แล้วบังเอิญอีกอย่างคือ ที่บ้านมีจักรยานสำหรับทุกคนในบ้านเลย ทั้งแม่ พ่อ น้องชาย มีทุกคน ก็เลยเกิดอยากปั่นไปลาวขึ้นมา โดยที่ไม่ได้หาข้อมูลมากนัก ดูแต่ในแผนที่คร่าวๆ ว่า เวียงจันทน์อยู่ในระยะที่ปั่นถึงไหว ก็เลยตั้งเป้าไว้ที่เวียงจันทน์เมื่อถึงวันจริง ก็ออกจากบ้านประมาณ ๙ โมงนิดๆ มั้ง จำไม่ได้เหมือนกัน พอปั่นไปที่ด่าน ตม. ที่สะพานมิตรภาพ (แอบเห็นป้ายห้ามจักรยานและมอไซด์ขับขี่บนสะพานด้วย แอบหวั่นๆ ) ด้วยความที่ไม่เคยไปลาวเลยสักครั้งเดียวตั้งแต่เกิดมา ก็เลยเดินงงๆ ไปยื่นพาสปอร์ตให้ จนท. แล้วเค้าก็ส่งกระดาษมาใบนึงที่ต้องเขียนเพื่อขอออกนอกประเทศ ผมเขียนไปซีกเดียวคือ ขาเข้า (มันจะมีสองซีกให้เราเขียน คือขาขอออกนอกประเทศและขอเข้าประเทศ) ซึ่งตรงนี้มันต้องเขียนขาออก คิดในใจว่า ก็ตูจะเข้าประเทศเค้านี่หว่า ฮา ก็เลยต้องเขียนอีกซีกนึง พอเสร็จก็เริ่มปั่นข้ามสะพาน บนสะพานมิตรภาพ มีรางรถไฟด้วยนะ รางอยู่ตรงกลางสะพานเลยล่ะ ตอนปั่นก็เสียวๆ จะโดนซิวอยู่เหมือนกัน ขับรถกันเร็วมาก แต่ก็ผ่านไปได้
พอถึง ตม. ลาว ก็เริ่มเจอเรื่องงงๆ อีก เพราะไม่รู้ว่าต้องทำไรก่อน ไม่มีป้ายบอกเป็นสเต็ปๆ ว่า ๑ ต้องทำอะไร ๒ ต้องทำอะไรต่อ อะไรประมาณนี้ อาศัยดูเอาว่า เค้าต่อคิวกันตรงไหนเยอะๆ ก็ไปต่อคิวตรงที่เค้าทำบัตร RFID อะไรสักอย่าง ลืมถ่ายรูปมา ได้มาเป็น one way ticket ซึ่งจนบัดนี้ก็ยังไม่อยู่ดีว่าเอาไปทำอะไร สงสัยคงใช้กับพวกรถยนต์หรือรถโดยสาร พอทำบัตรเสร็จ ก็ไปเขียนใบขอเข้าประเทศ แล้วก็ยื่นให้ จนท. เค้าก็ถามเราว่าเอารถไรมา (ช่องที่ใช้ยื่นเอกสารมันมี ๒ ที่ คือ คนปกติ กะ คนที่เอารถมา สงสัยว่าผมคงไปยื่นที่ช่องหลัง) ผมก็บอกไปว่าจักรยาน เค้าก็ไม่ได้ว่าหรือห้ามอะไร ก็ผ่านไปได้
เมื่อปั่นผ่านด่านมาแล้ว ก็จะพบกับทางออก ซึ่งมีทางแยกอยู่ ๒ ทางคือ ซ้ายกับขวา แล้วที่นู่นไม่รู้ว่างบทำป้ายเค้าหมดหรือยังไง เพราะมันไม่มีป้ายบอกเลยว่า เลี้ยวซ้ายจะไปที่ไหน เลี้ยวขวาจะไปที่ไหน ผมต้องจอดดูแผนที่ในมือถือซึ่งมันต่อเน็ตไม่ได้แล้วตั้งแต่อยู่กลางสะพาน ยังดีที่เคยโหลดแผนที่บางส่วนไว้ ก็เลยพอดูออกว่าต้องไปทางไหน (เลี้ยวขวา) ผมก็ปั่นไปตามเส้นทางเรื่อยๆ ระหว่างทางก็คล้ายๆ อำเภอๆ นึงในบ้านเรานี่แหละ ไม่เจริญอะไรมาก ถนนก็ ๔ เลน (ปั่นชิดขวาสุดตลอด) ข้างๆ ทางก็มีฝุ่นมีอะไรพอสมควร เพราะเป็นเส้นทางขนส่งอะไรหลายอย่างเหมือนกัน และเหมือนเดิม ไม่มีป้ายบอกทางว่าอีกกี่กิโลจะถึงเวียงจันทน์ เท่าที่สังเกตได้คือ ที่ลาวเค้าก็ใช้ผลิตภัณฑ์ของเราเยอะทีเดียว ตั้งแต่อาหาร (มาม่า, น้ำปลา) ไปจนถึงของใช้ประจำวัน (ยาสระผม, น้ำยาล้างจาน) ผมก็ปั่นไปเรื่อยๆ จนถึงเวียงจันทน์ แล้วก็พักกินสนีกเกอร์บาร์กับน้ำเปล่า น้ำเปล่านี่ก็กินเรื่อยๆ ระหว่างทาง แถมไม่ได้แลกเงินไว้ด้วย ปั่นเล่นอยู่สักพัก ก็คิดว่าจะกลับ บังเอิญไปโผล่ถนนเส้นนึงมองไปไกลๆ ก็เห็นอะไรสักอย่างเหมือนที่เคยเห็นในรูป มันคือประตูชัย ทีแรกผมไปเวียงจันทน์โดยไม่ได้คิดว่าจะไปไหนบ้าง พูดง่ายๆ ก็คือไม่ได้วางแผนไว้ ก็เลยปั่นไปที่ประตูชัยถ่ายรูปสักนิดหน่อยก็ปั่นกลับ
ทริปนี้ทำให้รู้ว่า
ควรพกปากกาติดตัว แล้วก็ควรฟิตร่างกายดีๆ
สาวลาวน่ารัก :P
05 พฤศจิกายน, 2556
Role และ Permission ใน Alfresco
Site permission - Permission ที่กำหนดใน Alfresco Site
- Manager - มีสิทธิ์ในทุก content ที่อยู่ใน site ไม่ว่าจะเป็นเอกสารที่สร้างจากตนเอง หรือ สมาชิกคนอื่นที่อยู่ใน site
- Collaborator - มีสิทธิ์ในทุก content ที่เป็นเจ้าของอยู่ สามารถแก้ไข content ของสมาชิกคนอื่นๆ แต่ไม่สามารถลบได้
- Contributors - มีสิทธิ์ในทุก content ที่เป็นเจ้าของอยู่ แต่ไม่สามารถ แก้ไขและลบ content ของสมาชิกคนอื่นๆ ได้
- 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 ล้าสมัยบ้าง กำลังจะตายบ้าง ก็เลยถามคนเหล่านั้นว่า ทำไมถึงเชื่ออย่างนั้นล่ะ คำตอบสุดฮิตที่ได้มา จะมีสามข้อดังนี้
- เคอร์เนล ของ OpenVZ เก่าจัด เพราะอิงอยู่กับรุ่น 2.6.32 ในขณะที่คนอื่นปาไปรุ่น 3.x ละ
- LXC คืออนาคต ส่วน OpenVZ นั้นคือ อดีต ~
- OpenVZ ไม่มีการพัฒนาต่อแล้ว จนโดนถอดออกจาก Debian Wheezy
- "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 - "OpenVZ vs LXC" - เคอร์เนลของ OpenVZ พัฒนามาอย่างยาวนาน และเป็นการพัฒนาที่แยกจากคนอื่นมาโดยตลอด หรืออีกนัยนึงก็คือ พัฒนาแยกจากเคอร์เนลของลินุกซ์ ความผิดพลาดเกิดขึ้นในปี 2005 และตั้งแต่นั้น ทีม OpenVZ ก็ยังคงพยายามที่จะรวมส่วนต่างๆ OpenVZ เข้าไปยังเคอร์เนลต้นน้ำ โดยหวังว่าเมื่องานส่วนนี้เสร็จ ที่เคอร์เนลต้นน้ำจะสามารถใช้ความสามารถของ OpenVZ ได้ครบทุกฟังก์ชัน
แล้ว LXC ล่ะ? LXC เป็น user-space tool ซึ่งรันอยู่บนเคอร์เนล ในขณะที่ทีมของ OpenVZ ทำงานเกี่ยวกับการรวมเข้าไปยังลินุกซ์เคอร์เนลอยู่นั้น LXC ได้เริ่มใช้ฟีเจอร์เหล่านั้น ซึ่งฟีเจอร์กว่าครึ่งนึงถูกพัฒนาโดยทีมของ OpenVZ
ทั้ง OpenVZ และ LXC ต่างมีการพัฒนากันอย่างต่อเนื่องและต่างมีอนาคตเป็นของตัวเอง อาจจะมีการรวมเครื่องมือกันในบางจุด ซึ่งมาถึงตรงนี้ก็พูดได้เลยว่า LXC ไม่ได้เป็นตัวตายตัวแทนของ OpenVZ แต่เป็นโปรเจ็คคนละโปรเจ็คกันเลย OpenVZ ถือว่าเป็น LXC++ เพราะมีฟีเจอร์หลายอย่างที่ยังไม่มีในเคอร์เนลต้นน้ำ เช่น การจัดการทรัพยากรณ์ที่ดีกว่า หรือเทคโนโลยีอย่าง ploop - "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 มักจะใช้คำสั่งประมาณนี้
ก็เลยเป็นที่มาของบล็อกนี้ จะใช้ไฟล์ config เพื่อทำให้การ ssh ง่ายขึ้นและแม่นยำขึ้น มาดูกันว่าทำไง
ก่อนอื่นเลย ใช้ editor สร้างไฟล์ขึ้นมาไฟล์นึงที่ เช่นผมใช้ vim ก็จะสร้างด้วยคำส่ัง
ปล. หา REF ไม่เจอ T__T
$ 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 (ตอนที่ ๑)
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
สมัครสมาชิก:
บทความ (Atom)





