User Tools

Site Tools


shitbox:remote_bsd_reinstall

Задача: Установка FreeBSD на удаленном сервере, к которому имеется доступ только через SSH и на котором отсутствует возможность обновления FreeBSD штатными средствами (например, установлен Linux или очень старая версия FreeBSD).

Решение: 1. Сформировать отдельный загрузочный образ с настроенными параметрами сетевого соединения и активным ssh-сервером. 2. Записать данный образ на диск удаленного сервера и перезагрузиться.

Готовим загрузочный образ на локальной FreeBSD-системе.

Загружаем установочный ISO-образ:

 fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.1/FreeBSD-8.1-RELEASE-amd64-disc1.iso

Загружаем mfsBSD:

 fetch http://people.freebsd.org/~mm/mfsbsd/mfsbsd-latest.tar.gz

Распаковываем и переходим в получившуюся директорию:

 tar xvzf mfsbsd-1.0-beta1.tar.gz
 cd mfsbsd-1.0-beta1/conf/

Правим файлы конфигурации и добавляем параметры сетевого соединения удаленного хоста:

На базе примера loader.conf.sample создаем loader.conf

 geom_uzip_load="YES"
 mfs_load="YES"
 mfs_type="mfs_root"
 mfs_name="/mfsroot"
 tmpfs_load="YES"
 vfs.root.mountfrom="ufs:/dev/md0"
 mfsbsd.rootpw="123456"

На базе примера rc.conf.sample создаем rc.conf

 # Настраиваем параметры сети для сетевого интерфейса em0
 hostname="mfsbsd"
 defaultrouter="192.168.1.1"
 ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
 varmfs="YES"
 varsize="64m"
 # Включаем SSH-сервер
 sshd_enable="YES"

Добавляем адрес DNS-сервера:

 echo "nameserver 8.8.8.8" >resolv.conf

Монтируем установочный ISO-образ

 mdconfig -a -t vnode -f ../../FreeBSD-8.1-RELEASE-amd64-disc1.iso md0
 mount_cd9660 /dev/md0 /cdrom/

Собираем загрузочный образ для удаленного сервера:

 make BASE=/cdrom/8.1-RELEASE/

В результате будет получен файл mfsboot.img, который следует скопировать на удаленный сервер.

 scp mfsboot.img user@remotehost:~/

Внимание ! Перед манипуляциями с удаленным сервером, рекомендуется обязательно провести эксперимент на локальной машине, повторив на ней все дальнейшие шаги.

Заходим на удаленный сервер.

Записываем созданный загрузочный образ в начало диска:

 dd if=mfsboot.img of=/dev/sda bs=1m

Перезагружаем сервер:

 shutdown -r now

После перезагрузки заходим на сервер по ssh и запускаем инсталлятор sysinstall.

Если возникнут проблемы с созданием устройств в devfs, то разбиваем диск вручную:

Пометим системный диск как пустой:

 dd if=/dev/zero of=/dev/ad0 count=2

Создадим слайс, размером во весь диск с записью загрузочного кода в сектор 0:

 fdisk -BI /dev/ad0

Создаем стандартную разметку диска и устанавливаем загрузчик:

 bsdlabel -wB /dev/ad0s1 auto

Форматируем разделы:

 newfs /dev/ad0s1a
 newfs /dev/ad0s1e
 newfs /dev/ad0s1d
 newfs /dev/ad0s1f

Создаем точки монтирования:

 mount /dev/ad0s1a /mnt/
 mkdir /mnt/var
 mkdir /mnt/usr
 mkdir /mnt/tmp
 mount /dev/ad0s1d /mnt/var/
 mount /dev/ad0s1e /mnt/tmp/
 mount /dev/ad0s1f /mnt/usr/

Запускаем sysinstall и выбираем пункт меню “Custom”. В пункте Options обязательно меняем значение “Install Root” на /mnt. Далее посещаем раздел “Distributions” и выбираем опцию Minimal. В блоке “Media” выбираем ближайшее ftp-зеркало. Жмем Commit.

Копируем созданные для установочного образа настройки сети или устанавливаем параметры в процессе работы sysinstall (не забудьте активировать ssh-сервер):

 cp /etc/resolv.conf /mnt/etc/
 cp /etc/rc.conf /mnt/etc/

Если диск разбивался вручную, после установки необходимо откорректировать fstab.

Копируем GENERIC-ядро в директорию /boot/kernel:

 chroot /mnt
 cp -Rp /boot/GENERIC/* /boot/kernel
 

Еще раз все проверив перезагружаем сервер.

shitbox/remote_bsd_reinstall.txt · Last modified: 2010/12/12 10:25 by slayer