Script สำหรับการ reset mysql root’s password

สำหรับ admin ของ Linux Server โดยทั่วไปแล้ว มักจะหลีกไม่พ้นที่จะต้อง ติดตั้ง database server สักครั้งนึง เพราะว่า สำหรับ application โดยส่วนใหญ่แล้ว โดยเฉพาะ web application ในปัจจุบัน มักจะต้องการใช้ database server เป็น backend สำหรับการเก็บข้อมูล และบน Linux ส่วนใหญ่ก็จะหนีไม่พ้นการใช้งาน MySQL เป็น Server … เพราะเป็นตัวที่มีคนใช้กันมากที่สุด และรองรับโดยหลายๆ framework ของ Web App ทั้งหลาย แน่นอน ตอนที่ติดตั้งครั้งแรก ตัวซอฟต์แวร์ที่ใช้ในการติดตั้ง ก็ถาม root password ของ MySQL สำหรับการ กำหนดสิทธิในการใช้งาน สำหรับคนที่ใช้งาน database server มานานระดับหนึ่ง ก็จะรู้ว่า password ที่จะใช้สำหรับ root ของ MySQL นั้น ไม่จำเป็นจะต้องเป็นตัวเดียวกับ root password ของระบบ … และ ไม่ควรที่จะเป็นตัวเดียวกัน … สำหรับคนที่ไม่รู้ในเรื่องนี้ ก็มักจะต้อง “เรียนรู้” ด้วยความยากลำบากในทีหลัง … ผมรู้สิน่า ผม “จ่าย” ค่าเล่าเรียนเรื่องนี้ด้วยราคาที่ “แพง” พอสมควรเชียวล่ะ หลังจากที่รู้แล้วว่า มัน “จะต้อง” ไม่ใช่ password เดียวกันกับ password ที่สำคัญของระบบ ปัญหาที่จะตามมาก็คือว่า เราก็อาจจะตั้ง password ของ root ของ MySQL แบบง่ายๆ เช่น “1234”, “abcd” อะไรทำนองนี้ เพราะว่า ในแง่ของการให้บริการ MySQL server ก็มักจะให้บริการกับ “client” ท่อยู่บนเครื่องเดียวกัน ไม่ได้ให้บริการผ่าน network ไปให้เครื่องอื่นๆ หรือ ถ้าจำเป้นจะต้องให้บริการ ก้ให้บริการกับ server  ที่อยู่ใน cluster เดียวกัน จะมีเฉพาะ admin ด้วยกันที่จะรู้ว่ามี mysql ให้บริการอยู่บนเครื่องนี้ แน่นอน ความคิดเช่นนี้ ก็มักจะนำบทเรียน “ราคาแพง” บทที่สอง เกี่ยวกับ root password ของ mysql มาให้ อีกเหมือนกัน และมันมักจะพ่วงมากับ “phpmyadmin” ที่จะทำให้ ตัว mysql server ซึ่งเคยเข้าใจว่า “ไม่สามารถเข้าถึงจาก server อื่นๆได้” กลับเข้าถึงได้ง่ายๆ ผ่าน “web” และเมื่อเจอกับ bot ที่โจมตีแบบอัตโนมัติ หายนะ … ก็มาเยือนได้ง่ายๆ เหมือนกัน นั่นก็จะเป็นบทเรียนราคาแพงอีกบทนึงเช่นกัน ข้อสรุปของผม หลังจากได้บทเรียนอย่างนั้นมาก็คือ password ของ root ไม่ว่าจะเป็นของระบบเอง หรือ จะเป็นของ database “จะต้อง” เป็นคนละตัวกัน  _และ_ จะต้องมีระดับของความปลอดภัยสูงใกล้ๆกัน ได้ password ที่ secure มา … ก็ดี … แต่ปัญหาของ password ที่ secure ก็คือ จำยาก … สำหรับ root’s password ของระบบ ที่ยังมีการใช้งานค่อนข้างบ่อย ก็จะมีโอกาสที่จะลืมได้น้อยกว่า … วิธีการที่จะทำให้ ไม่ลืม และยังมี password ที่ secure ก็มีแน่ๆ แต่นั่นไม่ใช่สิ่งที่ผมอยากจะพูดถึงในบันทึกนี้ (อันที่จริงก็เขียนเอาไว้ที่อื่นแล้วด้วย) ที่จะมาแก้ปัญหาในบันทึกนี้ ก็คือ

Read More »

shell script for download virtualbox packages Part 2

หลังจาก เกริ่นนำ เสียยืดยาว แต่ ยังไม่เข้าสู่เนื้อหาใน ภาคแรก ก็ขอเอามาต่อภาคสองที่นี่ … ความเดิมตอนที่แล้ว โจทย์มีอยู่ว่า เราต้องการ download package ของ virtualbox ตัวล่าสุด และต้องการไฟล์ package สำหรับ 1. Windows 2. Ubuntu โดยแยกเป็น 2.1 Ubuntu 12.04 — precise pangolin 2.2 Ubuntu 12.10 — quantal quetzal ทั้งสอง revision ต้องการ package สำหรับทั้ง i386 และ amd64 architecture 3. Extension pack 4. User manual 5. ไฟล์ MD5SUMS สำหรับตรวจสอบไฟล์ ที่ download มา โดยไฟล์ทั้งหมดจะเก็บอยู่ใน http://download.virtualbox.org/virtualbox/$version ส่วนของตัวเลข $version นั้นเรามีวิธีการที่จะใช้ script ในการอ่านค่านั้นมาโดยอัตโนมัติเอาไว้แล้ว ใน ตอนแรกของบทความ ชุดนี้ (เรียกซะเป็นชุด แต่จริงๆแล้วก็มีแค่ 2 เท่านั้นแหละครับ) ไฟล์ที่ต้องการจริงๆนั้นมีอะไรบ้าง? 1. Windows http://download.virtualbox.org/virtualbox/4.2.8/VirtualBox-4.2.8-83876-Win.exe 2. Ubuntu 2.1 Ubuntu 12.04 มี 2 file สำหรับ 2 architecture http://download.virtualbox.org/virtualbox/4.2.8/virtualbox-4.2_4.2.8-83876~Ubuntu~precise_amd64.deb http://download.virtualbox.org/virtualbox/4.2.8/virtualbox-4.2_4.2.8-83876~Ubuntu~precise_i386.deb เอาเท่านี้ก่อน … จะเห็นว่า URL ที่จะใช้ในการเข้าถึงไฟล์นั้น จะซับซ้อนพอดู ส่วนแรกที่เหมือนกัน ก็คือ URL ที่ระบุไปถึง directory และ version คือ http://download.virtualbox.org/virtualbox/4.2.8/ จะเหมือนกัน แต่หลังจากนั้น ส่วนของไฟล์จะได้เป็น VirtualBox-4.2.8-83876-Win.exe virtualbox-4.2_4.2.8-83876~Ubuntu~precise_amd64.deb virtualbox-4.2_4.2.8-83876~Ubuntu~precise_i386.deb และไฟล์ของ Ubuntu 12.10 virtualbox-4.2_4.2.8-83876~Ubuntu~quantal_amd64.deb virtualbox-4.2_4.2.8-83877~Ubuntu~quantal_i386.deb นั่นแน่ะ ตัวเลข release เฉพาะของ Ubuntu 12.10 เองก็ยังต่างกัน ระหว่าง amd64 (83876) กับ i386 (83877) อีกต่างหาก ถ้าจะระบุชื่อเองโดยหาข้อมูล version/sub version/release บวกกับ architecture บวกกับการตั้งชื่อที่แตกต่างกัน (ตัวเล็ก/ใหญ่ ของชื่อ VirtualBox ระหว่าง Windows กับ Ubuntu) ก็คงจะได้ script ที่ซับซ้อนน่าดู แต่จริงๆแล้วมีวิธีการที่ง่ายกว่านั้น ก่อนอื่นเรามา list ไฟล์ที่มีอยู่ออกมาดูกันก่อน เราสามารถใช้คำสั่ง wget -q -O- http://download.virtualbox.org/virtualbox/4.2.8/ ก็จะเห็น ข้อมูลของหน้า download อยู่ใน format ของ html มีขยะอะไรที่เราไม่ต้องการเยอะแยะไปหมด เราต้องการเฉพาะบรรทัดที่อ้างถึงไฟล์ที่เราสามารถเอามาใช้ download ได้ ลองสังเกตดู เราก็จะเห็นว่า บรรทัดเหล่านั้นจะเริ่มบรรทัดด้วย ‘<A HREF=’ … งั้นเอาละ เราก็กรองมาเฉพาะบรรทัดเหล่านั้น wget -q -O- http://download.virtualbox.org/virtualbox/4.2.8/ | grep ‘^<A HREF’ สวยงามขึ้น … แต่เราต้องการเฉพาะชื่อไฟล์ ไม่ได้ต้องการ html format ทั้งบรรทัด ในกรณีนี้ ส่วนที่เราต้องการอยู่ระหว่างเครื่องหมาย double qoute (“) คู่แรก ซึ่งเราใช้คำสั่ง cut ช่วยแยกสิ่งที่เราต้องการออกมาได้ โดยเพิ่มคำสั่งเป็น wget -q

Read More »

shell script for download virtualbox packages

หลังจากบรรยายเรื่อง Shell script ไปในสัปดาห์ที่แล้ว ด้วยหัวข้อเรื่องที่มีอยู่ค่อนข้างเยอะกว่าที่คิดไว้ และใช้เวลาบรรยายไปอย่างไม่ค่อยมีประสิทธิภาพสักเท่าไหร่ ทำให้เนื้อเรื่องบางส่วน ต้องทิ้งเอาไว้ ไม่ได้พูดต่อให้จบ ปล่อยคนที่เอา slide มาอ่านงงไปก็แล้วกันว่า มันคือเรื่องอะไรกัน เรื่อง slide ก็ … เหอะ … เดี๋ยวมีโอกาส ค่อยกลับไปปรับปรุงมันอีกที ผมยังพอมี idea อยู่บ้างว่าจะแก้ไขมันยังไง แต่เรื่องหนึ่งซึ่งจริงๆแล้ว มีปัญหาตั้งแต่ก่อนเริ่มบรรยายแล้วว่า จะยกตัวอย่างโจทย์ปัญหาอย่างไรดี ที่จะทำให้เห็น วิธีการที่ผมใช้ในการ “เขียน” shell script ตัวนึงออกมาได้ ตัวอย่างที่ยกให้ดูในตอนแรกของ การบรรยาย เป็นแค่ตัวอย่างหลอกๆ ที่เขียนไปเพื่อให้เห็น รูปแบบ ของการใช้ shell script แต่จะว่าไป ที่ผมใช้งานอยู่ปัจจุบัน ก็ไม่ได้ตัวอย่างที่ว่านั่น จะใช้ตัวอย่างอื่นที่มี ตัวอย่างเช่น psuautosigned ก็คงต้องอธิบายในเรื่องอื่นกันยาว ก่อนที่จะวกกลับมาที่เรื่องของ shell script ได้ จนกระทั่งวันนี้ ได้รับ email ฉบับนี้มา > อาจารย์ครับ >    มีเรืองปรึกษครับ > > สิ่งที่ต้องการคือ wget file หลายๆ  file ตามข้างล่างนี้ > wget > http://download.virtualbox.org/virtualbox/${version1}/VirtualBox-${version1}-83876-Win.exe > wget > http://download.virtualbox.org/virtualbox/${version1}/virtualbox-4.2_${version1}-83877~Ubuntu~quantal_i386.deb > wget > http://download.virtualbox.org/virtualbox/${version1}/virtualbox-4.2_${version1}-83876~Ubuntu~quantal_amd64.deb > wget > http://download.virtualbox.org/virtualbox/${version1}/virtualbox-4.2_${version1}-83876~Ubuntu~precise_i386.deb > wget > http://download.virtualbox.org/virtualbox/${version1}/virtualbox-4.2_${version1}-83876~Ubuntu~precise_amd64.deb > wget http://download.virtualbox.org/virtualbox/${version1}/MD5SUMS > wget > http://download.virtualbox.org/virtualbox/${version1}/Oracle_VM_VirtualBox_Extension_Pack-${version1}-83876.vbox-extpack > wget http://download.virtualbox.org/virtualbox/${version1}/UserManual.pdf > > ผมเขียน  script แบบนี้ > version1=4.2.8 > url1=http://download.virtualbox.org/virtualbox/${version1} > for i in Win  quantal  precise Oracle MD5 User >     do >        wget  ${url1}/*{i}* >    done > ไม่ work ครับ > ขอคำแนะนำด้วยครับ ผมตอบกลับไปว่า |        ใช้ *{i}* หรือ *${i}* ไม่ได้ครับ เพราะ * ที่ใช้บน command line |        ปกติ จะเป็นตัวอักษรที่ตีความโดย shell ที่เราใช้งานอยู่ ซึ่งโดยทั่วไป |        มันก็จะพยายาม match กับ ชื่อไฟล์ ใน directory บนเครื่องของเราครับ | |        ทีนี้ ตอนท่ีส่งให้กับ wget ถ้า shell ไม่สามารถ expand ตัว * ออกมาเป็น |        ไฟล์ได้ มันก็จะส่ง * ไปยังเครื่องปลายทาง ซึ่งก็จะเปรียบเทียบแบบ literal |     

Read More »

How to setup automatic start in virtual box,Hyper-v

เนื่องจากเครื่องสำรองไฟในคณะมักจะสำรองได้แค่ชั่วโมงนิดหน่อยเวลาไฟดับเกินกว่านั้นจะทำให้ server ที่เป็น virtual ที่อยู่บน virtualbox และ hyper-v ของผมใช้งานไม่ได้ ดังนั้นจึงต้องหาวิธีแก้ไขโดยวันนี้มีวิธีมาแนะนำครับ (ผมทดลองกับ MS เท่านั้นนะ) อันดับแรกเริ่มที่ Hyper-v ก่อนเลยครับ เปิดไปที่ Server Manager>Roles>Hyper-v>Hyper-V Manager> แล้วเลือกที่ Hyper-v >Setting ทางขวามือครับแล้วเลือก Automatic Start Action ดูตามรูปก็ได้ครับ   Virtualbox กรณีของ Virtualbox ใน windows เราต้องสร้าง  batfile ครับเพราะมันยังไม่มีปุ่มให้เรากดเหมือน Hyper-v แต่มันก็ไม่ได้ยากเย็นอะไรครับอันดับแรกสร้าง batfile ก่อน  ต่อมาให้พิมพ์ข้อความใน batfile ดังนี้ cd “C:\Program Files\Oracle\VirtualBox\” VBoxManage.exe startvm “vm1” VBoxManage.exe startvm “vm2” VBoxManage.exe startvm “vm3” VBoxManage.exe startvm “vm4” เช่นของผม cd “C:\Program Files\Oracle\VirtualBox\” VBoxManage.exe startvm “ubuntu-desktop” จากนั้นก็นำไฟล์ .bat ของเราไปวางไว้ใน startup ซึ่งของ win7  หายากหน่อย อยู่ที่  C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup  จากนั้นก็วางไฟล์ .bat ของเราไว้ในนั้นลองเปิดเครื่องอีกครั้ง virtual  ของเราก็จะทำงานเองโดยอัตโนมัติครับ   Ref. https://forums.virtualbox.org/viewtopic.php?f=2&t=18794 http://seoroot.com/blog/howto/how-to-autostart-a-virtual-machine-in-virtualbox.html

Read More »