Компилиране на kernel под Debian 7.
Публикувано на: 17 Май 2015 16:42
Здравейте!
Музата ми дойде отново и ето я новата тема от поредицата за системното администриране. Надявам се да ви е полезна и да научите нещо ново.
И така: какво ни трябва, за да можем да изпълним заданието:
1. инсталирана виртуална машина под Debian 7, без никакви екстри (махнати отметки от всичко, което ни е предлагано като софтуер; или още както му казват някои - правим си инсталация само с конзола, from stratch).
2. Инсталираме необходимия софтуер:
# aptitude install bc gcc make ncurses-dev openssh-server vim
3. Изтегляме и разархивираме последното stable ядро от kernel.org:
За работна директория ще използваме /usr/src.
# cd /usr/src
Изтегляме ядрото без проверка на сертификат.
# wget --no-check-certificate https://www.kernel.org/pub/linux/kernel ... 9.8.tar.xz
Разархивираме с -J (създава поддиректория с името на архива).
# tar -xJvf linux-3.19.8.tar.xz
Създаваме софт линк към разархивираното съдържание.
# ln -s linux-3.19.8 linux
# cd linux
4. Компилиране на ядрото и модулите.
# make menuconfig
и записваме в .config файл. След това копираме старата конфигурация от посл. работещо ядро (намира се в /boot).
# cp /boot/config-3.2.0-4-amd64 /usr/src/linux/.config
Започваме компилирането:
# make -j 10 bzImage
# make -j 10 modules
# make -j 10 modules_install
Новото ядро се намира в /usr/src/linux/arch/x86_64/boot/. Копираме го и преименуваме в подходящ вид в /boot:
# cp /usr/src/linux/arch/x86/boot/bzImage /boot/vmlinuz-3.19.8.c1
# cp /usr/src/linux/System.map /boot/System.map-3.19.8.c1
5. Създаваме ramfs:
# mkinitramfs -o /boot/initrd-3.19.8.c1.img 3.19.8
6. Редактираме файла /boot/grub/grub.cfg:
#Custom kernel 3.19.8 v.1.
menuentry 'Debian GNU/Linux, with Linux 3.19.8.c1 (custom)' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root c6f28e3c-8332-4e09-a670-4cdf9f74cdbd
echo 'Loading Linux 3.19.8.c1 (custom) ...'
linux /last_core root=UUID=c3d1230a-55ba-4c0e-8739-15a85f54627a ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd-3.19.8.c1.img
}
Обърнете внимание на следното: има два uuid номера, които се вземат от локалния за машината /boot/grub/grub.cfg.
# init 6
Музата ми дойде отново и ето я новата тема от поредицата за системното администриране. Надявам се да ви е полезна и да научите нещо ново.

И така: какво ни трябва, за да можем да изпълним заданието:
1. инсталирана виртуална машина под Debian 7, без никакви екстри (махнати отметки от всичко, което ни е предлагано като софтуер; или още както му казват някои - правим си инсталация само с конзола, from stratch).
2. Инсталираме необходимия софтуер:
# aptitude install bc gcc make ncurses-dev openssh-server vim
3. Изтегляме и разархивираме последното stable ядро от kernel.org:
За работна директория ще използваме /usr/src.
# cd /usr/src
Изтегляме ядрото без проверка на сертификат.
# wget --no-check-certificate https://www.kernel.org/pub/linux/kernel ... 9.8.tar.xz
Разархивираме с -J (създава поддиректория с името на архива).
# tar -xJvf linux-3.19.8.tar.xz
Създаваме софт линк към разархивираното съдържание.
# ln -s linux-3.19.8 linux
# cd linux
4. Компилиране на ядрото и модулите.
# make menuconfig
и записваме в .config файл. След това копираме старата конфигурация от посл. работещо ядро (намира се в /boot).
# cp /boot/config-3.2.0-4-amd64 /usr/src/linux/.config
Започваме компилирането:
# make -j 10 bzImage
# make -j 10 modules
# make -j 10 modules_install
Новото ядро се намира в /usr/src/linux/arch/x86_64/boot/. Копираме го и преименуваме в подходящ вид в /boot:
# cp /usr/src/linux/arch/x86/boot/bzImage /boot/vmlinuz-3.19.8.c1
# cp /usr/src/linux/System.map /boot/System.map-3.19.8.c1
5. Създаваме ramfs:
# mkinitramfs -o /boot/initrd-3.19.8.c1.img 3.19.8
6. Редактираме файла /boot/grub/grub.cfg:
#Custom kernel 3.19.8 v.1.
menuentry 'Debian GNU/Linux, with Linux 3.19.8.c1 (custom)' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root c6f28e3c-8332-4e09-a670-4cdf9f74cdbd
echo 'Loading Linux 3.19.8.c1 (custom) ...'
linux /last_core root=UUID=c3d1230a-55ba-4c0e-8739-15a85f54627a ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd-3.19.8.c1.img
}
Обърнете внимание на следното: има два uuid номера, които се вземат от локалния за машината /boot/grub/grub.cfg.
# init 6