Задача - удалить freebsd и установить debian на далеком сервере.
Итак, у нас есть :
1. freebsd-сервер с доступом по ssh далеко в инете. RAM=>256Mb.
2. локальный комп с 500 Мб свободного места на винчестере и быстрым инетом
3. инсталляционный CD debian sarge
Краткий порядок действий:
1. ставим базовую систему debian к себе на комп
2. из базовой системы делаем initrd.img
3. компилируем ядро linux
4. закачиваем на freebsd initrd и ядро linux, ставим grub
5. грузим linux из initrd , ставим linux на диск.
Теперь подробнее.
1. ставим базовую систему debian к себе на комп
Тут все просто, грузимся с компакта, ставим базовую систему debian
(linux26) куда-нибудь к себе на винчестер, на отдельный раздел. Все
сетевые настройки (IP, gateway, netmask,DNS-server) указать такие же,
как на freebsd-сервере. Не забыть пароль root'a !
Базовую систему поставили на /dev/hda3, GRUB ставим также на
/dev/hda3. Перегрузились, настроили, не добавляя CD-ROM в индексы apt
(экономим объем). Ставим ssh:
mount /media/cdrom
dpkg -i /media/cdrom/pool/main/o/openssh/ssh_3.8.1p1-8.sarge.4_i386.deb
Разрешаем логиниться root'у и обязательно проверяем :
grep -i permitrootlogin /etc/ssh/sshd_config
Добавляем автоматический ребут после 5 минут работы:
Результат - файлы ~/initrd.img.gz и ~/deb_base.tar.
3. компилируем ядро linux
Скачиваем не слишком древнее ядро на свою рабочую машину,
конфигурируем. Основные моменты :
а) обязательно включить поддержку той сетевой карты, что стоит на сервере
б) обязательно включить поддержку ramdisk, initrd, ext2fs, ext3fs
в) если надо что-то включить, надо включать сразу в ядро, а не модулем.
г) CONFIG_BLK_DEV_RAM_SIZE выставить больше чем `du -k initrd.img`
д) желательно включить поддержку DMA для чипсета сервера
После конфигурирования проверить :
grep -E "RAM|INITRD|E100|EXT2|EXT3" .config
make
Компилируем, результат - файл bzImage.
4. закачиваем на freebsd initrd и ядро linux. Ставим grub.
Сейчас надо освободить субраздел внутри слайса, желательно наименьший.
Под это хорошо подойдет своп (к примеру /dev/ad0s1b, 200Mb)
swapoff /dev/ad0s1b
newfs -O1 /dev/ad0s1b
mkdir /small
mount /dev/ad0s1b /small
Выносим /dev/ad0s1b из /etc/fstab
Скачиваем в /small файлы bzImage и initrd.img.gz
Создаем предварительно ~/menu.lst :
То есть, freebsd грузим с 1-го слайса, подраздела a, а linux - с 1-го
слайса, подраздела b.
Причем в случаях kernel panic ядра linux случится перезагрузка через 1
сек , и при невозможности загрузки или ядра linux, или initrd - будет
загружена freebsd (fallback).
Качаем и ставим grub версии 0.97 или выше (ЭТО ВАЖНО, в предыдущих
версиях неполная поддержка savedefault) .
cd /usr/ports/sysutils/ && make clean install
# pkg_add grub-0.97.tbz - я сделал себе бинарный пакет и ставил его
sysctl kern.geom.debugflags=16
grub-install /dev/ad0
grub-set-default 1
cp ~/menu.lst /boot/grub/menu.lst
reboot #and pray
5. грузим linux из initrd , ставим linux на диск.
Итак, через некоторое время мы логинимся на ssh как root. Если все
прошло нормально, должен подойти пароль root'a от debian'a :) Иначе
пробуем войти с паролем root'a от freebsd. Если порт 22 вообще не
откликается, и сервер не пингуется, значит something goes wrong :))
ВНИМАНИЕ - после того, как залогинились, сразу вынести перезагрузку из
cron. Иначе придется 5-й пункт делать за время, меньшее 5 мин.
ВНИМАНИЕ - все делать осторожно и вдумчиво, т.к. возврата уже не
будет.
Дальше все просто - сейчас система работает с диска в ОЗУ. Запускаем
cfdisk, сносим все на винчестере, делаем первый раздел /dev/hda1
размером 2Гб, помечаем его как загрузочный.