Tuesday 7 June 2011

Grub2

මෙහෙයුම් පද්ධති එකකට වඩා (multi boot) දාගන ඉන්න අයට නම් අහල පුරුදු නමක් තමා grub කියන්නෙ.(සිංහලෙන් GRand Unified Bootloader කියන එක තමා ඔය ඉංගිරිසියෙන් කොට කරලා තියෙන්නෙ). LOADLIN, SYSLINUX සහ LILO ආදී වෙනස් වෙනස් bootloaders ගැන එහෙමත් සමහර විට අහලා ඇති ඔයාලා.

පරිගණකයක් පණගන්වපුවම BIOS මගින් POST (Power On Self Test) කියලා ක්‍රියාවලියක් වෙනවා කියලා අහලා තියනවා නේද? එතනදි වෙන්නෙ පරිගණකයට සම්බන්ධ කරලා තියන අංගෝපාංග හරියට තියනවද කියලා කෙරෙන මූලික පරීක්ශණයකට. අර ඉස්කෝලෙ පටන්ගනිද්දි සිරිපාල ඉන්නවද?? ඉන්නවා.. කමලාවතී ඉන්වනචද?? ඉන්නවා.. ඇම්ඩන් ඉන්නවද??? නෑ.. කියලා කෙරෙන ජාතියෙ වැඩක් ඔය. මෙමරි (RAM) කචල් නම්, VGA අල නම් වෙනස් විදියට බීප් ගාන්න පරිගණකය දන්නෙ ඔය POST එක කෙරෙන නිසා. ඔය වැඩේ සාර්ථකව උනාට පස්සෙ මෙහෙයුම් පද්ධතිය පණ ගන්වන්න BAIOSයි මෙහෙයුම් පද්ධතියයි අතර ඉන්න වැඩකාරයා තමා bootloader එක. අපේ කථානායකයා, grub, දැන් අවුරුද්දකට විතර කලින් අලුත් වෙලා grub2 උනා නෙ. (උබනටු පාවිච්චි කරන කට්ටියට එහෙම මතක ඇති 10.04 ආවෙ grub2 එක්කනෙ). පරණ grub එකට කරන වෙනස්කම් කරන්න තිබ්බෙ menu.list කියන ගොනුවට අපිට උවමනා විදියට වෙනස්කම් කරන්න. සරලයි සුගමයි. grub2 ගෙ menu.list ගොනුවක් නෑ, grub.cfg කියලා ගොනුවක් (/boot/grub/ ඇතුලෙ) තමා ඒ වෙනුවට තියෙන්නෙ. වැඩේ කියන්න ඒකට කෙලින්ම වෙනස්කම් කරන්න එපා, කරලා අල උනොත් අපි දන්නෑ කියලා user guide එකේ සිංහලෙන්ම කියලා තියනවා. එහෙමයි කියලා අපිට උවමනා විදියට OS Selection screen එක වෙනස් කරගන්නෙ නැතිව ඉන්න බෑනෙ? ඒකට තමා /etc/grub.d/ කියන directory එක ඇතුලෙ තියන ගොනු ටික දීලා තියෙන්නෙ. බලමුද ඕවා පාවිච්චි කරලා අපිට උවමනා විදියට grub2 ගෙ boot screen එක වෙනස් කරගන්නෙ කොගොමද කියලා?

/etc/grub.d ඇතුලට ගිහිල්ලා බැලුවොත් පෙනෙයි 00_header, 10_linux, 20_memtest86+, 40_custom, 05_debian_theme, 20_linux_xen, 30_os-prober, 41_custom කියලා text files වගයක් තියනවා. ඔය තියන ගොනු කියවන්නෙ ඒවයෙ මුල තියන ඉලක්කම අනුව. ඒ කියන්නෙ 00_header තමා මුලටම කියවන්නෙ, ඊලගට 10_linux ආදී වශයෙන්. තමන්ට ඕන විදිහට menu entry එකක්‌ දාන්න නමර 40_custom කියන ගොනුවට අදාල කේතය දාන්න කියලා තමා (පරිශීලක අත්)පොතේ තියෙන්නෙ. හැබැයි එහෙම කලාම අපි දාන entry එක (හෝ දෙක තුන හතර) වැටෙන්න ඉබේ හොයාත්ත ඒවට පස්සෙ. එහෙම හරියන්නෙ නෑනෙ නේද? අපි වැඩේ කරනවනම් අපේ එක මුලට එන්න එපායෑ. වැඩේ බොහොම සරලයි, 40_custom කියන ගොනුවෙ 40 වෙනුවට 01ත් 09ත් අතර ඉලක්කමක් දාන්න. ඇන්ටා බොරු කියනවද දන්නෑ නෙ.... ඒක නිසා 40_custom වල නම වෙනස් කරන්නෙ නැතිව කොපියක් දාගෙන කොපියෙ නම වෙනස් කරන්න 01ත්‌ 09ත් අතර ඉලක්කමකට. එහෙම කරලා දෙකටම entry එක ගානෙ දාල බලමු කව්ද මුලට එන්නෙ කව්ද අගට එන්නෙ කියලා. අහ්, /etc/grub.d ඇතුලෙ දගලන්න ඇම්ඩන් (root) බලතල ඕනා හරිද?

 sudo bash
 cd /etc/grub.d
 cp 40_custom 03_custom

අපි මුලින්ම 03_custom ගොනුව වෙනස් කරමු.

# gedit 03_custom&

අගට & දාන්නෙ ඇයි කියලා දන්නවා නේද? gedit 03_custom කියලා විධානය දුන්නම ඔයා text editor එක වහනකම් ඒ විධානය දීපු shell එක පාවිච්චි කරන්න බෑ. නමුත් අගට & දුන්නම ඒයා ඒ චිධාය ක්‍රියා කරවලා ඊලග පේලියට යනවා.

අර උඩින් තියන ටික තියෙන්න ඇරලා අලුත් පේලියකින් ඔයාගෙ menu entry එක දාන්න පටන් ගන්න.

menuentry 'Ubuntu 11.04 from 03_custom' {
set root='(hd0,1)'
search --no-floppy --fs-uuid --set xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
linux /vmlinuz-2.6.38-8-generic root=UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy ro quiet splash
initrd /initrd.img-2.6.38-8-generic
}

මොකද්ද ඒ කියලා තියන කුනුහරුපෙ?????? 'Ubuntu 11.04 from 03_custom' කියල තියන ටික තමා boot menu එකේ පෙන්නන්නෙ, ඕකට කැමති දෙයක් දාගන්න කිසිම තහනමක් නෑ.

set root='(hd0,1)' ඔය කියන්නෙ ඔයාගෙ hard disk එකේ root partition එක කොහෙද තියෙන්නෙ කියලා. දෘඩ තැටි එකකට වැඩි ගනනක් තියනවනම් මිසක් hd0 කියන එක වෙනස් වෙන්නෙ නෑ. සම්මතයක් විදිහට අපි boot partition එක මුලින්මනෙ හදන්නෙ. (මම කලින් ලියපු partition කඩන ලිපිය කියෙව්වෙ නැතිනම් ඒක කියවල ඉන්න).

ඊලග පේලියෙ තියන්නෙ මොකද්ද කියලා බලන්න කලින් shell එක අරගෙන පහත විධානය දීලා බලන්න.
# blkid
මෙන්න මේ විදිහෙ උත්තරයක් තමා ඔය විධානය දුන්නම ලැබෙන්නෙ /dev/sda1: UUID="0b35873e-7c9e-44cd-9c41-d60a96d6b871" TYPE="ext4"
/dev/sda2: UUID="64cbf684-452a-44e0-b92b-366b7c11437e" TYPE="swap"
/dev/sda3: UUID="7a5806dd-31d7-4cf0-a6f3-3ae8ced4b974" TYPE="ext4"
/dev/sda4: UUID="0fcd8340-ab57-46b2-9ce8-42bfa567226d" TYPE="ext4"
/dev/sda5: UUID="fcd08a2b-dcb2-4db2-9378-6ed6bb5aec26" TYPE="ext4"

මගෙ /dev/sda1 එක තමා /boot එක. /dev/sda3 තමා / (root partition). ඔයාගෙ /boot එකයි / එකයි කොහෙද තියෙන්නෙ කියලා හොයාගෙන xxx වෙනුවට /boot එකේ UUID එකයි, yyy වෙනුවට / එකේ UUID එකයි ලබාදෙන්න ඕනා.

ඊලගට තියෙන්නෙ ඔයාගෙ ධාවනය වෙන Kernel එක හොයාගන්න. shell එකක් අරගෙන පහත චිධානය ලබාදෙන්න.
$ uname -r

ඊලගට
$ ls /boot

දීලා බලන්න /boot directory එක ඇතුලෙ uname -r වලින් ලැබුන relese version එක සහිත initrd ගොනුව සහ vmlinuz ගොනුව තියනවා නේද කියලා. ඊටපස්සෙ අදලාල ඉලක්කම සහිතව menu entry එකේ අන්තිම පේලි දෙක වෙනස් කරන්න. ඔය vmlinuz කියලා තියෙන්නෙ kernel එකේ binary එකයි initrd කියලා තියෙන්නෙ අදලාල drivers යි කියලා දන්නවා නේද?

දැන් තියෙන්නෙ ඔය සම්පූර්ණ කොටසම copy කරලා 40_custom ඇතුලට copy කරලා save කරන්න title එකට පොඩි වෙනස්කමක් කරලා

menuentry 'Ubuntu 11.04 from 40_custom' {
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 7a5806dd-31d7-4cf0-a6f3-3ae8ced4b974
linux /vmlinuz-2.6.38-8-generic root=UUID=0b35873e-7c9e-44cd-9c41-d60a96d6b871 ro quiet splash
initrd /initrd.img-2.6.38-8-generic
}

ගොනු දෙකටම execution rights තියනවා නේද කියලා බලන්න.
$ ls -all | grep *custom

execution rights නැතිනම් දෙනහැටි දන්නවනෙ?
# chmod a+x 03_custom

ඔය කරපු වෙනස්කම් ටික /boot/grub/grub.cfg ගොනුවට ලියවුනේ නැතිනම් ඔයා කරපු වෙනස්කම් මුකුත් apply වෙන්නෙ නෑ. පහත පරිදි විධානෙ දීලා ඒ වැඩේ කරගන්න.

# update-grub

ඊටපස්සෙ restart කරලා බලන්න. boot menu එකේ උඩින්ම Ubuntu 11.04 from 03_custom කියලායි ( හෝ ඔයා 03_custom ගොනුවෙ menu entry එකට දීපු නම) අන්තිමටම Ubuntu 11.04 from 40_custom කියලයි ( හෝ ඔයා 40_custom ගොනුවෙ menu entry එකට දීපු නම) පේන්න ඇති. කරුමෙකට හරි ඔය දෙකෙන් එකක් select කරපුවාම error message එකක් දුන්නොත් බයවෙන්නෙ නැතිව restart කරලා grub එක auto අරගත්තු option එකක්‌ seslect කරලා ඉස්සරහට යන්න පුලුවන්. දීලා තියන පියවර හරියට පිලිපැද්දනම් එහෙම වෙන අවදානමකුත් නෑ ;)

ඊලග ලිපියෙන් grub 2 ගැන වැඩිදුර කතා කරමු.