Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  ipfw nat
  Использование csup
  UTF-8 console
  dump/restore
  hast carp zfs ucarp cluster
  ng_nat
  Wi-FI роутер + DHCP + DNS
  backup/restore & ZFS
  Обновление ОС и портов через SVN.
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


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, то мы не попадём никуда при логине.
# rm /var/squid/etc/temp

В результате всех этих действий мы получили новый загрузчик со старым ядром и рабочую седьмую версию
на другом разделе. То есть, для установленной системы мы изменили пока только загрузчик.

Reboot!

Если после перезагрузки всё нормально - мы наблюдаем всю ту же четвёрку, какая и была.
Продолжаем.
Сейчас попробуем загрузиться в седьмую версию. Для этого подсунем загрузчику новое ядро и попробуем перегрузиться.
# mkdir /boot/kernel7
# cp /var/squid/boot/kernel/kernel /boot/kernel7
# cp /var/squid/boot/kernel/acpi.ko /boot/kernel7

Если железо у вас старое и вызывает подозрение, то acpi.ko можно не копировать.
Воспользуемся полезной фичей загрузчика
# ee /boot/nextboot.conf

Запишем в этот файл указание включить эту фичу, указание на директорий с новым ядром и слайс, который должен быть рутом для него.
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.

Если всё удачно и на сервер удалось залогиниться, продолжаем.
Теперь надо поставить систему по-человечески.
Набираем
# sysinstall

Там выбираем Upgrade.
В качестве Media Type выбираем File System, указываем место, где лежат файлы с сидюка, а именно /var/1
В процессе установки программа сообщит две важные штуки.
Первое - что текущее ядро оно снесло в /boot/kernel.prev, поэтому по выходу из программы вернём его обратно
# cd /boot
# mv kernel.prev kernel

Второе - что она забэкапила /etc. Впрочем, она спросит, куда его класть. Выбираем сами.

Reboot!

Получаем свеженькую седьмую версию.
Далее - ставим заготовленные пакаджи, правим конфиги и пр. рутинные работы.
Не забываем вернуть сквиду его кэш.

В процессе тренировок на виртуальной машине был испробован способ загрузки седьмого ядра старым загрузчиком. Для этого в / надо положить файл boot.config следующего содержания
0:ad(0,g)/boot/loader

то есть, вместо ядра ему подсовывается новый загрузчик, что вполне успешно происходит.



Ссылка на обсуждение: Incorrect URL.

размещено: 2009-04-21,
последнее обновление: 2009-04-21,
автор: Ivanko

оценить статью:

coool, 2010-01-11 в 1:13:36

Красиво, спасибо:)

Gendalf, 2010-03-04 в 14:59:03

:) блин... сразу не увидел эту статью. Два дня бился с обновлением системы с 5,4 до 6,2 путем обновления мира по здешней статье. Ну ничего, еще есть три сервака которым предстоит обновление.

^-^ автору респект.

222, 2010-06-19 в 4:28:35

Бредятина


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

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
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 25 чел.
За последние 30 мин было: 91 человек
За сегодня было
7198 показов,
1001 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1423 секунд
Из них PHP: 49%; SQL: 51%; Число SQL-запросов: 77 шт.
Исходный размер: 100511; Сжатая: 18177