Difference between revisions of "Debian Kernel"
m |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Kernel compilation== |
==Kernel compilation== |
||
* Use make-kpkg to create a real Debian package with your home-made kernel and install this package |
* Use make-kpkg to create a real Debian package with your home-made kernel and install this package |
||
+ | ** Check /etc/kernel.pkg.conf |
||
* My method: a simple script /usr/src/make-kernel.sh, to use it enter the right kernel-tree as normal user then ../make-kernel.sh |
* My method: a simple script /usr/src/make-kernel.sh, to use it enter the right kernel-tree as normal user then ../make-kernel.sh |
||
− | + | <source lang=bash> |
|
+ | #!/bin/bash |
||
− | + | REVISION="3.06.Mercure" |
|
− | + | APPEND="-d600" |
|
⚫ | |||
− | + | make-kpkg --rootcmd fakeroot clean 2>&1 |tee ../trace.txt |
|
− | + | make-kpkg --rootcmd fakeroot --us --uc --revision $REVISION --append-to-version $APPEND kernel_image 2>&1 |tee -a ../trace.txt |
|
− | + | make-kpkg --rootcmd fakeroot modules_clean 2>&1 |tee -a ../trace.txt |
|
⚫ | |||
+ | </source> |
||
* modules is only if there are out of kernel-tree modules to compile (such as ndiswrapped), regular kernel modules are already compiled with make-kpkg kernel_image |
* modules is only if there are out of kernel-tree modules to compile (such as ndiswrapped), regular kernel modules are already compiled with make-kpkg kernel_image |
||
* Remark: I could never get a kernel with initrd booting properly :-( |
* Remark: I could never get a kernel with initrd booting properly :-( |
||
Line 15: | Line 18: | ||
** E.g. to compile fuse: m-a a-i fuse |
** E.g. to compile fuse: m-a a-i fuse |
||
* When you install a Debian kernel, of your own or from the feeds, you can always find the .config under /boot/config-<kernel version> |
* When you install a Debian kernel, of your own or from the feeds, you can always find the .config under /boot/config-<kernel version> |
||
+ | ---- |
||
+ | To know which version of gcc was used to compile a kernel: |
||
+ | cat /proc/version |
||
+ | |||
+ | ==Safe remote reboot== |
||
+ | copied from http://www.wains.be/index.php/2008/02/26/remotely-upgrade-your-kernel-without-dreading-a-kernel-panic/ |
||
+ | |||
+ | Tested on Debian Etch |
||
+ | |||
+ | If you’re trying to upgrade a kernel remotely, there’s always the risk of losing the machine by a kernel panic when rebooting. |
||
+ | |||
+ | In the following we will tell grub to try to boot the new kernel at least once, if it “kernel panics” the machine will reboot and boot with the working kernel instead. |
||
+ | |||
+ | Edit /boot/grub/menu.lst : |
||
+ | |||
+ | <pre> |
||
+ | default saved |
||
+ | timeout 5 |
||
+ | |||
+ | # new kernel, not tested |
||
+ | title Debian GNU/Linux, kernel 2.6.18-6-686 |
||
+ | root (hd0,0) |
||
+ | kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/sda1 ro panic=5 |
||
+ | initrd /boot/initrd.img-2.6.18-6-686 |
||
+ | savedefault 1 |
||
+ | |||
+ | # tested and working kernel |
||
+ | title Debian GNU/Linux, kernel 2.6.18-5-686 |
||
+ | root (hd0,0) |
||
+ | kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/sda1 ro |
||
+ | initrd /boot/initrd.img-2.6.18-5-686 |
||
+ | savedefault |
||
+ | </pre> |
||
+ | |||
+ | When you’re done setting grub up, type the following command, it will tell grub to boot the first kernel entry once : |
||
+ | |||
+ | # grub-set-default 0 |
||
+ | |||
+ | To recap : |
||
+ | |||
+ | In case of a kernel panic, the system will usually sit and wait forever for someone to physically act on the machine. |
||
+ | |||
+ | There are several ways to tell the system to reboot after 5 seconds when a kernel panic occurs : |
||
+ | |||
+ | in /proc : |
||
+ | # echo "5" > /proc/sys/kernel/panic |
||
+ | |||
+ | in /etc/sysctl.conf : |
||
+ | kernel.panic = 5 |
||
+ | |||
+ | in grub config : |
||
+ | <br>“panic=5″ at the end of the kernel line in the kernel entry |
||
+ | |||
+ | “savedefault 1″ in the first kernel entry is telling grub to pick up the second entry on next boot. |
||
+ | |||
+ | When the new kernel is tested and working, you can remove “panic=5″ and “savedefault” lines and set “default 0″ instead of “default saved”. |
||
+ | |||
+ | Keep in mind that 0 for grub means “1st kernel entry”. 1 is the..well, you got it.. “second kernel entry”. |
||
+ | <br>Also, if the system hangs for some reason but doesn’t panic, you’re still stuck deep in the mud. |
||
+ | |||
+ | * http://www.gnu.org/software/grub/manual/html_node/Booting-once_002donly.html |
||
+ | * http://www.gnu.org/software/grub/manual/html_node/savedefault.html#savedefault |
Latest revision as of 17:35, 28 March 2008
Kernel compilation
- Use make-kpkg to create a real Debian package with your home-made kernel and install this package
- Check /etc/kernel.pkg.conf
- My method: a simple script /usr/src/make-kernel.sh, to use it enter the right kernel-tree as normal user then ../make-kernel.sh
#!/bin/bash
REVISION="3.06.Mercure"
APPEND="-d600"
make-kpkg --rootcmd fakeroot clean 2>&1 |tee ../trace.txt
make-kpkg --rootcmd fakeroot --us --uc --revision $REVISION --append-to-version $APPEND kernel_image 2>&1 |tee -a ../trace.txt
make-kpkg --rootcmd fakeroot modules_clean 2>&1 |tee -a ../trace.txt
make-kpkg --rootcmd fakeroot --us --uc --revision $REVISION --append-to-version $APPEND modules_image 2>&1 |tee -a ../trace.txt
- modules is only if there are out of kernel-tree modules to compile (such as ndiswrapped), regular kernel modules are already compiled with make-kpkg kernel_image
- Remark: I could never get a kernel with initrd booting properly :-(
- There should be an easier way to build modules, I never tried:
- Use module-assistant package
- E.g. to compile fuse: m-a a-i fuse
- When you install a Debian kernel, of your own or from the feeds, you can always find the .config under /boot/config-<kernel version>
To know which version of gcc was used to compile a kernel:
cat /proc/version
Safe remote reboot
copied from http://www.wains.be/index.php/2008/02/26/remotely-upgrade-your-kernel-without-dreading-a-kernel-panic/
Tested on Debian Etch
If you’re trying to upgrade a kernel remotely, there’s always the risk of losing the machine by a kernel panic when rebooting.
In the following we will tell grub to try to boot the new kernel at least once, if it “kernel panics” the machine will reboot and boot with the working kernel instead.
Edit /boot/grub/menu.lst :
default saved timeout 5 # new kernel, not tested title Debian GNU/Linux, kernel 2.6.18-6-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/sda1 ro panic=5 initrd /boot/initrd.img-2.6.18-6-686 savedefault 1 # tested and working kernel title Debian GNU/Linux, kernel 2.6.18-5-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/sda1 ro initrd /boot/initrd.img-2.6.18-5-686 savedefault
When you’re done setting grub up, type the following command, it will tell grub to boot the first kernel entry once :
# grub-set-default 0
To recap :
In case of a kernel panic, the system will usually sit and wait forever for someone to physically act on the machine.
There are several ways to tell the system to reboot after 5 seconds when a kernel panic occurs :
in /proc :
# echo "5" > /proc/sys/kernel/panic
in /etc/sysctl.conf :
kernel.panic = 5
in grub config :
“panic=5″ at the end of the kernel line in the kernel entry
“savedefault 1″ in the first kernel entry is telling grub to pick up the second entry on next boot.
When the new kernel is tested and working, you can remove “panic=5″ and “savedefault” lines and set “default 0″ instead of “default saved”.
Keep in mind that 0 for grub means “1st kernel entry”. 1 is the..well, you got it.. “second kernel entry”.
Also, if the system hangs for some reason but doesn’t panic, you’re still stuck deep in the mud.