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) สถานะของโปรเซส เพื่อบันทึกสถานะของดิสก์ไฟล์ในขณะนั้น
ครั้งหน้า(ไม่รู้เมื่อไหร่) จะมาเล่าต่อละกัน ไม่ได้เขียนนาน เริ่มเขียนไม่ถูกแระ <(")