|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> настройка
—> 4.x => 7.x
Удаленная бинарная миграция с 4.x на 7.x
Автор: Ivanko.
Стоял себе сервер малый, делал свои нехитрые дела, и не потребовался бы ему никакой апгрэйд, но, к сожалению, ClamAV давно перестал собираться на четвёрке без дополнительных пинков. И вот, после выхода очередной версии сего антивируса, я решил, что хватит извращаться, пора идти в ногу со временем.
Поскольку контора, где живёт сервер, далеко, ехать лениво, то решил попытать счастья с удалённым апгрэйдом.
Понимая, что затея непростая, да и в src/UPDATING честно написано, что ниже пятой версии даже и не пробуйте, то я решил сначала потренироваться на кошках, т.е. в виртуальной машине. Вся процедура была проведена двумя способами. В довешении всего, там же были собраны необходимые порты с нужными параметрами и сжаты в пакаджи, чтобы на реальном железе всё заняло как можно меньше времени.
Сразу оговорюсь, что в силу природной лени я пытаюсь не совершать лишних движений, поэтому не ждите в статье особо правильных переименований и использований хитрых утилит, которые делают всё за один раз, но после того, как полдня почитаешь ман. Так же предупреждаю, что стопроцентный результат зависит только от вашего внимания и аккуратности. Лично мне так и не удалось сделать всё самостоятельно и пришлось по телефону два раза просить юзера нажать ресет. Один раз из-за того, что модуль ACPI на этом железе отказался работать, второй - из-за банальной опечатки.
Что ж, приступим.
# uptime
3:02PM up 215 days, 15:03, 3 users, load averages: 0.00, 0.08, 0.07
| Красиво, но придётся испортить.
Для начала надо было придумать, как загрузиться с ядром от седьмой версии.
При первых же тренировках обнаружилось, что loader от четвёрки седьмое ядро загрузить не в состоянии, а наоборот - запросто.
Возиться с всякими MFS было не менее лениво, но, на счастье, на диске имелся раздел, на который можно было установить систему и который не жалко было стереть - это был отдельный раздел для сквидового кэша.
# mount
/dev/ad0s1a on / (ufs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1f on /usr (ufs, local, soft-updates)
/dev/ad0s1h on /var (ufs, local, soft-updates)
/dev/ad0s1g on /var/squid (ufs, local, soft-updates)
| Положим систему с диска куда-нибудь, где есть место.
У меня место было на /var и, не мудрствуя лукаво, я создал директорий под именем "1" (сейчас понимаю, что единица выглядит в этом шрифте как буква l, но поздно)
Для промежуточной перезагрузки с диска нам понадобится только base и boot. Но, поскольку место было достаточно, я положил туда ещё man, src и свежесобранные пакаджи.
Разворачиваем систему руками в очищенный сквидовый слайс.
# cd /var/1/7.1-RELEASE/base
# export DESTDIR=/var/squid; ./install.sh
You are about to extract the base distribution into /var/squid - are you SURE
you want to do this over your installed system (y/n)? y
| В процессе распаковки будет некоторая ругань на невозможность развернуть некоторые файлы.
Это не страшно, всего-лишь вместо флагов, которые нам пока несущественны, появится несколько директорий под названием PaxHeader, которые можно удалить потом (или вообще не удалять).
Cтавим загрузчик от седмой версии, предварительно сбэкапив старый
# mv /boot /boot.old
# cp -R /var/squid/boot
| Поскольку в четвёрке ядро тупо валялось в корне, а в загрузчик седьмой версии хочет его видеть в /boot/kernel, то, чтоб не править никаких конфигов, не менее тупо копируем ядро туда, куда ему надо.
# cp /kernel /boot/kernel
| Копируем новое ядро с модулями в наш промежуточный слайс
# cd /var/1/boot
# cp -R kernel /var/squid/boot
# cd /var/squid/boot
| Перетаскиваем rc.conf и редактируем его
# cp /etc/rc.conf /var/squid/etc
# ee /var/squid/etc/rc.conf
| Выключаем в нём все ненужные демоны, оставляем sshd и firewall.
Контролируем название сетевого интрефейса, так как некоторые драйверы в четвёртой и седьмой версиях имеют разные названия.
Копируем ещё несколько необходимых для сетевого доступа вещей
# cp /etc/resolv.conf /var/squid/etc
# cp /etc/ssh/ssh_host* /var/squid/etc/ssh
| А теперь ещё более необходимая для загрузки штука - fstab
# cp /etc/fstab /var/squid/etc
# ee /var/squid/etc/fstab
| Меняем следующие вещи
/dev/ad0s1g теперь у нас должен быть /
/dev/ad0s1a положим в /mnt/oldroot
А /usr и /var переименуем в /mnt/oldusr и /mnt/oldusr.
Создаём директории для этого всего
# mkdir -p /var/squid/mnt/oldroot
# mkdir -p /var/squid/mnt/oldvar
# mkdir -p /var/squid/mnt/oldusr
| Перетаскиваем юзеров и группы
# cp /etc/master.passwd /var/squid/etc/temp
# ee /var/squid/etc/temp
# cat /var/squid/etc/temp >> /var/squid/etc/master.passwd
# vipw -d /var/squid/etc
| Там удаляем пустую по умолчанию рутовую запись и системных юзеров из старого файла.
Обращаем внимание на то, какой шелл установлен у того пользователя, каким мы собираемся туда логиниться.
В том смысле, что у нас имеется в наличии только sh, csh и tcsh, соответственно, если записан bash, то мы не попадём никуда при логине.
В результате всех этих действий мы получили новый загрузчик со старым ядром и рабочую седьмую версию
на другом разделе. То есть, для установленной системы мы изменили пока только загрузчик.
Reboot!
Если после перезагрузки всё нормально - мы наблюдаем всю ту же четвёрку, какая и была.
Продолжаем.
Сейчас попробуем загрузиться в седьмую версию. Для этого подсунем загрузчику новое ядро и попробуем перегрузиться.
# mkdir /boot/kernel7
# cp /var/squid/boot/kernel/kernel /boot/kernel7
# cp /var/squid/boot/kernel/acpi.ko /boot/kernel7
| Если железо у вас старое и вызывает подозрение, то acpi.ko можно не копировать.
Воспользуемся полезной фичей загрузчика
Запишем в этот файл указание включить эту фичу, указание на директорий с новым ядром и слайс, который должен быть рутом для него.
nextboot_enable="YES"
kernel="kernel7"
vfs.root.mountfrom="ufs:ad0s1g"
| В процессе следующей загрузки системы, если загрузка не дойдёт до режима multiuser, а конкретнее - до скрипта /etc/rc, который удалит nextboot.conf, то можно нажать ресет, или дёрнуть питание, и следующая загрузка будет прежней. Разумеется, это потребует наличие кого-нибудь, кто этот ресет нажмёт.
Итак, reboot!
Если всё удачно - мы наблюдаем свежепоставленную седьмую версию на бывшем сквидовом разделе (прости, друг кальмар, мы тебе его вернём позже).
Старая система у нас смонтирована в /mnt/oldroot
Начинаем её методично удалять. После этого, конечно, обратного пути уже нет.
# cd /mnt/oldroot
# rm -rf bin boot boot.old dev modules modules.old sbin stand
# chflags noschg kernel
# rm -f kernel
# mv etc etc.old
| В процессе удаления некоторые файлы могут не удалиться по той же причине, что и ядро.
Помогаем себе командой chflags
Копируем новую систему
# cd /
# cp -pR bin boot etc lib libexec sbin /mnt/oldroot
# cd /mnt/oldroot
# cp etc.old/fstab /etc
# mkdir dev
|
# /mnt/oldusr
# rm -rf bin include lib libdata libexec sbin share
# rm -rf obj src
# cd /usr
# cp -pR bin include lib libdata libexec sbin share /mnt/oldusr
| Тут тоже может потребоваться помощь chflags
После всех этих действий мы имеем ту же самую свежепоставленную систему, но уже на настоящем рутовом слайсе.
Пробуем делать reboot.
Если всё удачно и на сервер удалось залогиниться, продолжаем.
Теперь надо поставить систему по-человечески.
Набираем
Там выбираем Upgrade.
В качестве Media Type выбираем File System, указываем место, где лежат файлы с сидюка, а именно /var/1
В процессе установки программа сообщит две важные штуки.
Первое - что текущее ядро оно снесло в /boot/kernel.prev, поэтому по выходу из программы вернём его обратно
# cd /boot
# mv kernel.prev kernel
| Второе - что она забэкапила /etc. Впрочем, она спросит, куда его класть. Выбираем сами.
Reboot!
Получаем свеженькую седьмую версию.
Далее - ставим заготовленные пакаджи, правим конфиги и пр. рутинные работы.
Не забываем вернуть сквиду его кэш.
В процессе тренировок на виртуальной машине был испробован способ загрузки седьмого ядра старым загрузчиком. Для этого в / надо положить файл boot.config следующего содержания
то есть, вместо ядра ему подсовывается новый загрузчик, что вполне успешно происходит.
Ссылка на обсуждение: Incorrect URL.
размещено: 2009-04-21,
последнее обновление: 2009-04-21,
автор: Ivanko
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Комментарии пользователей [3 шт.]