Удаленная замена FreeBSD на Debian/GNU Linux

Опубликовано admin в Сб, 14/08/2010 - 11:28
 
Оригинал: http://index.kaven.neolocation.net/switching.html (_http://index.kaven.neolocation.net/switching.html) 
 
   Удаление FreeBSD и установка Debian по SSH
 
   Задача - удалить 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 минут работы:
 
           echo "*/1 * * * * [ `cat /proc/uptime|cut -d. -f1` -lt 300 ] || /sbin/reboot" \
            >> /var/spool/cron/crontabs/root
 
 
2. из базовой системы делаем initrd.img
 
   Перезагружаемся  в  рабочую  (та,  что была до установки debian'a) ОС.
   Далее:
 
           mkdir /mnt/debian
           mount /dev/hda3 /mnt/debian
 
 
   Делаем снимок базовой системы , он понадобится для пункта 5:
 
           cd /mnt/debian
           tar -cpf ~/deb_base.tar *
 
 
   Теперь почистим :
 
           chroot /mnt/debian
           apt-get remove dhcp-client ed fdutils grub hotplug info \
              initrd-tools ipchains iptables locales mailx manpages nano \
              ppp* usbutils exim4*
           find /usr/share/{doc,locale,man} -type f -exec rm -f \;
           exit #from chroot
           df -h /mnt/debian
 
 
   Должно показать меньше 70Мб.
   Делаем initrd.img размером 80Мб :
 
           dd if=/dev/zero of=~/initrd.img count=80 bs=1M
 
 
   создаем там ext3fs и монтируем
 
           mke2fs -j -F -m0 ~/initrd.img
           mkdir /mnt/initrd
           mount ~/initrd.img /mnt/initrd -o loop
 
 
   копируем урезанную базовую систему внутрь :
 
           cp -rap /mnt/debian/* /mnt/initrd/
 
 
   размонтируем и проверяем целостность
 
           umount /mnt/initrd/
           umount /mnt/debian
           e2fsck ~/initrd.img
           gzip -9 ~/initrd.img.gz
 
 
   Результат - файлы ~/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 :
 
           echo "
           default saved
           fallback 0
           timeout 1
           title freebsd
           kernel (hd0,0,a)/boot/loader
           savedefault 0
           title debian
           kernel (hd0,0,b)/bzImage root=/dev/ram0 init=/sbin/init rw panic=1
           initrd (hd0,0,b)/initrd.img.gz
           savedefault 0
           " > ~/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Гб, помечаем его как загрузочный.
 
           mke2fs -j /dev/hda1
           mount /dev/hda1 /mnt/
 
 
   С локальной машины закачиваем файл deb_base.tar
 
           scp ~/deb_base.tar root@remoteserver:/mnt/
 
 
   и распаковываем. Ставим GRUB в MBR:
 
           tar -xpf /mnt/deb_base.tar -C /mnt/
           chroot /mnt/
           grub
           grub>install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2
           grub>quit
           exit #from chroot
 
 
   Ставим всё верно:
 
           vi /boot/grub/menu.lst
           reboot #and pray again
 
 
   ждем,  результат - логинимся на debian-хост, работающий с винчестера и
   выносим перезагрузку из cron
 
 
Примечание
 
   Данная  инструкция  может  содержать  ошибки,  смысловые или опечатки,
   однако дает общее представление о процессе.
 
   Paul Petruk aka Berserker, berserker()neolocation.com
   10.09.2005


Статья взята с http://www.opennet.ru (_http://www.opennet.ru/base/sys/freebsd_to_linux_debian.txt.html)