Есть сервер, который находится в датацентре в г. Москва. Есть я, который находится в уездном городе N™ :-) Единственный доступ к серверу — SSH и Remote PDU для перезагрузки.
Появилась нужда перейти на FreeBSD amd64, за одно обновив ПО и пересобрав ядро.
Что было до:
FreeBSD hostname FreeBSD 7.1-RELEASE i386.
Что стало после:
FreeBSD hostname FreeBSD 7.1-RELEASE amd64.
Short disclamer:
Примем за основу:
FreeBSD 7.x i386.
Наличие двух HDD (или разделов).
Для начала нам нужны полные исходники системы и ядра (каталог /usr/src/). Установить их можно через CVSup (директива src-all), либо через sysinstall (sysinstall -> Distribution -> src).
В принципе, весят исходники не много и качаются быстро.
После этого мы должны создать новый конфиг ядра для нашей системы.
Опции ядра зависят от ваших задач и железа, свои здесь приводить не буду. Единственное, что советую добавить от себя —
Это пригодится, т.к. в новой системе на момент первого старта не будет в том числе и конфигураций ipfw (а по умолчанию он блокирует все, в т.ч. наш SSH). Я так попал :) Пришлось отправлять сервер в ребут и переносить конфигурацию.
После того, как закончим настройку ядра — «устанавливаем» наш конфиг обратно путем копирования. Главное не забыть, что берем и ставим мы конфиг не в sys/i386, как обычно, а sys/amd64.
Я лично убрал из /etc/make.conf все «лишние» опции, которые могли помешать компиляции — оптимизацию и т.д, чего и вам советую.
После этого нужно собрать мир:
И ядро:
Ключем -s мы говорим make, что не нужно выводить каждый файл, только называния каталогов, которые он собирает.
Вся процедура у меня (C2D E7200) заняла примерно два — два с половиной часа.
Далее будем считать, что наш второй HDD — примонтирован в /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/.
Если все пункты выполнены — sudo shutdown -r now
Если вы все сделали правильно, а еще вам немного повезло и система не выкинула финт ушами — мы увидим работающую amd64 FreeBSD :)
Если же не увидели ее в сети через несколько минут — перезагружаем сервер через удаленное управление питанием и ищем, где мы ошиблись :)
Осталось только пересобрать все нужное Вам ПО.
Появилась нужда перейти на 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 :)
Если же не увидели ее в сети через несколько минут — перезагружаем сервер через удаленное управление питанием и ищем, где мы ошиблись :)
Осталось только пересобрать все нужное Вам ПО.