Pull to refresh

FreeBSD 7.1 — i386 -> amd64 migration via SSH only :)

Reading time 3 min
Views 3.9K
Есть сервер, который находится в датацентре в г. Москва. Есть я, который находится в уездном городе N™ :-) Единственный доступ к серверу — SSH и Remote PDU для перезагрузки.

Появилась нужда перейти на FreeBSD amd64, за одно обновив ПО и пересобрав ядро.

Что было до:
FreeBSD hostname FreeBSD 7.1-RELEASE i386.

Что стало после:
FreeBSD hostname FreeBSD 7.1-RELEASE amd64.



Short disclamer:
  • Вы все делаете на свой страх и риск.
  • Я не советую так делать. Правда. Если есть возможность приехать или заказать KVM и поставить систему как обычно — лучше поставить как обычно. Установка-настройка FreeBSD занимает пару часов, а на эту «процедуру» (включая чтение манов и издевательство над гуглом) у меня ушло почти два дня.
  • Использовались материалы с FreeBSD.org, OpenNet.ru, lissyara.su. Ну и гугл, куда без него.


Примем за основу:

FreeBSD 7.x i386.
Наличие двух HDD (или разделов).

Для начала нам нужны полные исходники системы и ядра (каталог /usr/src/). Установить их можно через CVSup (директива src-all), либо через sysinstall (sysinstall -> Distribution -> src).

В принципе, весят исходники не много и качаются быстро.

После этого мы должны создать новый конфиг ядра для нашей системы.

cp /usr/src/sys/amd64/conf/GENERIC ~/<название_ядра>
ee <название_ядра>


Опции ядра зависят от ваших задач и железа, свои здесь приводить не буду. Единственное, что советую добавить от себя —

options IPFIREWALL_DEFAULT_TO_ACCEPT


Это пригодится, т.к. в новой системе на момент первого старта не будет в том числе и конфигураций ipfw (а по умолчанию он блокирует все, в т.ч. наш SSH). Я так попал :) Пришлось отправлять сервер в ребут и переносить конфигурацию.

После того, как закончим настройку ядра — «устанавливаем» наш конфиг обратно путем копирования. Главное не забыть, что берем и ставим мы конфиг не в sys/i386, как обычно, а sys/amd64.

Я лично убрал из /etc/make.conf все «лишние» опции, которые могли помешать компиляции — оптимизацию и т.д, чего и вам советую.

После этого нужно собрать мир:

cd /usr/src/
make -s buildworld TARGET_ARCH=amd64


И ядро:

make -s buildkernel TARGET_ARCH=amd64 KERNCONF=<имя_ядра>


Ключем -s мы говорим make, что не нужно выводить каждый файл, только называния каталогов, которые он собирает.
Вся процедура у меня (C2D E7200) заняла примерно два — два с половиной часа.

Далее будем считать, что наш второй HDD — примонтирован в /backup/, который чист.

Устанавливаем мир:
make -s installworld TARGET_ARCH=amd64 DESTDIR=/backup/

Устанавливаем ядро:
make -s installkernel TARGET_ARCH=amd64 DESTDIR=/backup/ KERNCONF=<имя_ядра>

Устанавливаем конфигурационные файлы и пр. мелочь:
cd etc/
make -s distribution DESTDIR=/backup/


На этом шаге могут возникнуть проблемы с недостатком каких либо конф. файлов (лично у меня — ругалось на sendmail и sshd). Их можно просто скопировать из рабочей системы.

Перетаскиваем ядро:

cp -pr /backup/boot/kernel /boot/kernel.test

И редактируем\переносим конфиг. файлы в /backup/etc. Нам интересны rc.conf (хостнейм, сетевые настрйки), sshd_conf и passwd-shadow. Если вы не ставили default_to_accept, не забывайте открыть себе SSH в rc.firewall.

Пришло время пробовать.

Для разовой загрузки в новую систему мы будем использовать nextboot. Это очень хорошая программа, которая позволяет загрузится с другим ядром\миром ОДИН раз. Если сервер будет перезагружен — снова загрузится наша старая система.

nextboot -D
nextboot -o vfs.root.mountfrom=ufs:/dev/ad2s1d -k kernel.test

Ключ -D сбрасывает конфигурацию nextboot, если она уже была. -o vfs.root.mountfrom указывает, где находится корневой раздел. Естественно, вместо ad2s1d должен быть указан ваш второй диск\раздел, а не мой, а -k — путь к ядру относительно /boot/.

Последний чеклист:



  • Проверим, установлен ли мир и ядро в правильные места.
  • Проверим, перенесли ли конфигурационные файлы SSHd, rc.conf, passwd, shadow…
  • Проверим, перенесли ли настройки сети — resolv.conf, IP-alias-ы (если были), опять-же rc.conf
  • Проверим, перенесен и исправлен ли /etc/fstab под новую систему.
  • Проверим наличие и содержимое /boot/nextboot.conf
  • Помолимся (в зависимости от религиозности).


Если все пункты выполнены — sudo shutdown -r now

Если вы все сделали правильно, а еще вам немного повезло и система не выкинула финт ушами — мы увидим работающую amd64 FreeBSD :)
Если же не увидели ее в сети через несколько минут — перезагружаем сервер через удаленное управление питанием и ищем, где мы ошиблись :)

Осталось только пересобрать все нужное Вам ПО.
Tags:
Hubs:
+32
Comments 17
Comments Comments 17

Articles