The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE
Удаленное бинарное обновление 4.11 до 6.2-RELEASE,
без доступа с консоли с двумя перезагрузками и
минимальным downtime, безопасное настолько, насколько
это возможно при обновлении "по месту".

Требуется доступность первого инсталляционного CD
из дистрибутива 6.2-RELEASE, либо нужно будет
скачать с десяток мегабайт из него для пункта 3 ниже.

1. Подготовить новое содержимое для /boot

Скопировать с дистрибутивного CD 6.2-RELEASE
каталог boot в /boot6, loader.conf оставить старый
(если дистрибутив машине недоступен, сначала скачать
/boot с него по сети в каталог /cdrom/boot):

cd /
CDROM=/cdrom
cp -r $CDROM/boot boot6
cd boot6
mv loader.conf loader.conf6
cp ../boot/loader.conf . || true
mv kernel kernel6
mkdir kernel
ln ../kernel kernel

2. Меняем местами старый и новый loader:

cd ..
mv boot boot4
mv boot6 boot

Теперь у нас новый loader, который грузит старое ядро
из файла /boot/kernel/kernel (это хардлинк на /kernel),
и старые модули из /modules. Система пока работает по-старому,
при перезагрузке ничего не поломается.

3. Подготовка mfsroot.

Если дистрибутива на четверке нет, этот пункт можно полностью
выполнять на другой машине, и готовый mfsroot.gz (5.5Mb)
потом скачать в /boot/mfsroot.gz. Если выполняется на свежей
FreeBSD, заменить vnconfig на mdconfig и disklabel
на bsdlabel (убрать слово auto):

TMPDIR=/var/tmp # можно и другое место
cd $TMPDIR

# быстрый и простой способ требует mfsroot на 14Mb
# создаём файл образа на основе такого же
# из дистрибутива
dd if=/dev/zero of=mfsroot bs=1m count=14
dev=vn0c
vnconfig -c -s labels $dev mfsroot
disklabel -w -B -b $CDROM/boot/boot $dev auto
newfs -m 0 -o space -b 4096 -f 512 $dev

# Монтируем оригинальный и новый mfsroot
mkdir /mnt/omfs /mnt/mfs
gzcat $CDROM/boot/mfsroot.gz > mfsroot.orig
odev=vn1c
vnconfig -c -s labels $odev mfsroot.orig
mount -o ro /dev/$odev /mnt/omfs
mount /dev/$dev /mnt/mfs

# Для начала копируем оригинальный в новый
cd /mnt/omfs
tar -cf - * | tar -C /mnt/mfs -xf -

# Оригинальный mfsroot больше не нужен
cd /mnt/mfs
umount /mnt/omfs
vnconfig -d $odev
rm $TMPDIR/mfsroot.orig

# Затачиваем новый mfsroot под неинтерактивную загрузку
rm -r etc bin sbin var stand/etc stand/help
ln -s stand bin
ln -s stand sbin
mkdir -p tmp

# В тестовой системе /usr и /var - отдельные от рута fs,
# при промежуточной загрузке будут смонтированы так:
# /mnt          - рут
# /mnt/usr      - /usr
# /mnt/var      - /var
# Таким образом, chroot /mnt при желании
# после загрузки даст нам оригинальный расклад
# и позволит воспользоваться новым sysinstall-ом
ln -s mnt/usr usr
ln -s mnt/var var

# Hовые бинарники используются новым ядром
# при загрузке с md0
cd $CDROM
# игнорировать ошибки касательно "File exists"
tar cf - bin etc lib libexec sbin | tar -C /mnt/mfs -xkf -

# Минимально необходимый набор файлов со старой системы для успешного
удаленного
# входа в систему; nsswitch.conf берем с новой системы
cd /etc
cp -rp fstab host.conf rc.conf ssh passwd group master.passwd pwd.db spwd.db
/mnt/mfs/etc
cat <<EON > /mnt/mfs/etc/nsswitch.conf 
group: files
hosts: files dns
networks: files
passwd: files
shells: files
EON

Теперь нужно привести /mnt/mfs/etc/fstab к примерно следующему виду:
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/md0                /               ufs     rw              1       1
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /mnt            ufs     rw              2       2
/dev/ad0s1f             /mnt/usr        ufs     rw              2       2
/dev/ad0s1e             /mnt/var        ufs     rw              2       2

Первая строка обязательно такая, остальные - из оригинального fstab,
точку монтирования для рута заменяем на /mnt,
/usr и /var тоже смещаем внутрь /mnt, остальные файловые системы
(если есть) намеренно не упоминаем.

В /mnt/mfs/etc/fstab желательно отключить все сервисы, кроме
sshd и каналообразующих (учитывать, что грузиться будет GENERIC),
что-то типа этого:

ifconfig_rl0="inet x.x.x.x netmask 255.255.255.0"
hostname="host.domain.ru"
sendmail_enable="NONE"
firewall_enable="NO"
inetd_enable="NO"
sshd_enable="YES"
fsck_y_enable="YES"
background_fsck="NO"
# EOF

Закрываем и запаковываем mfsroot:

cd $TMPDIR
umount /mnt/mfs
vnconfig -d $dev
gzip -1 < mfsroot > /boot/mfsroot.gz

4. Подгрузка полученного mfsroot:

cd /boot
cat loader.conf6 >> loader.conf

Это добавляет в loader.conf следующие команды:

mfsroot_load="YES"                                                            

mfsroot_type="mfs_root"                                                        

mfsroot_name="/boot/mfsroot"

Hа работу четвертой версии не влияет никак, пока по-прежнему
используется старая корневая файловая система, только увеличивается
размер оперативной памяти, зарезервированной ядром. Hа машине с 48M памяти
изменение составило те самые 14M, avail memory вместо 44316K стала 30140K.

5. Решающий момент. Для загрузки нового ядра с новым рутом посредством
nextboot:

cat <<EOF > nextboot.conf
nextboot_enable="YES"
kernel="kernel6"
vfs.root.mountfrom="ufs:md0"
EOF

Если новое ядро, скажем, зависнет на этапе определения оборудования
до перехода в multiuser, достаточно дернуть питание и машина
загрузит старое ядро и четвертую версию и у вас есть возможность
спокойно разобраться, система тем временем работает. При следующей
попытке этот пункт нужно повторить, nextboot.conf будет удалён
при перезагрузке.

При использовании cut-n-paste команд из этого пункта проверьте,
что в конце строк nextboot.conf нет лишних пробелов - загрузчик
этого не любит и может проигнорировать конфигурацию nextboot.

Перезагружаемся!

6. При успешной загрузке запускается старый /usr/sbin/sshd,
через него заходим в систему. Авторизация через keyboard-interactive
не срабатывает, зато срабатывает через password, то есть в систему
пустит после четвертой попытки набора пароля. Эту косметическую
проблему править не стал, всё равно на это один только раз
наталкиваемся.

Переименовываем /mnt/stand в /mnt/stand4,
создаём новый /mnt/stand, копируем /stand/sysinstall в
/mnt/stand/sysinstall, делаем chroot /mnt.

7. Это - точка, после которой нет возврата, кроме восстановления
из бекапа с консоли. Сейчас пока можно ещё перегрузиться обратно
в четверку и работать по-старому. Дальше уже нет.

# если не сделать этой правки loader.conf, система не поднимется
echo 'kernel="GENERIC"' >> /boot/loader.conf
/stand/sysinstall

Выбираем Upgrade. Я делал бинарное обновление по FTP,
из дистрибьюшнов ставил только base и kernels (меню Custom).
Во время обновления в терминал выдавалось куча мусора от распаковщика,
но это косметическое неудобство. Апгрейд прошел совершенно
гладко, система перезагрузилась уже в шестерку с винта
и доступна (теперь уже через свежий) sshd.

Убираем строки mfsroot_* из /boot/loader.conf
Hе забываем разгрести /etc/upgrade или сделать
обновление из исходников, mergemaster позаботится о /etc.
В любом случае перезагружаемся опять, теперь уже
это будет не из mfsroot. 
 
31.07.2007 , Автор: Eugene Grosbein , Источник: http://groups.google.com/group/fido...
Ключи: freebsd, upgrade, update
Раздел:    Корень / Администратору / Система / FreeBSD специфика / Установка и апгрейд FreeBSD и приложений.

Обсуждение [ RSS ]
  • 1.1, qwerty (??), 23:10, 12/08/2007 [ответить]  
  • +/
    клево, сенкс
     
  • 1.2, Backspace (?), 17:04, 05/09/2007 [ответить]  
  • +/
    -- "В /mnt/mfs/etc/fstab желательно отключить все сервисы"
    ++ "В /mnt/mfs/etc/rc.conf желательно отключить все сервисы"
     
  • 1.3, qaz (??), 08:20, 17/10/2007 [ответить]  
  • +/
    ln ../kernel kernel
    вот на этом этапе пишет, "Operation not permitted".
     
     
  • 2.5, Vladimir Larkin (?), 20:15, 27/02/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >ln ../kernel kernel
    >вот на этом этапе пишет, "Operation not permitted".

    перед ln ../kernel kernel нужно сделать
    chflags noschg /kernel

     

  • 1.4, bin_ka (?), 08:55, 04/12/2007 [ответить]  
  • +/
    Для FreeBSD 4.0 и FreeBSD 4.10 это тоже актуально?
     
  • 1.6, ne4to (?), 22:12, 12/03/2008 [ответить]  
  • +/
    >Авторизация через keyboard-interactive
    >не срабатывает, зато срабатывает через password, >то есть в систему
    >пустит после четвертой попытки набора пароля. >Эту косметическую
    >проблему править не стал, всё равно на это один >только раз наталкиваемся.

    поправить /mnt/mfs/etc/pam.d/sshd в соответствии с /etc/pam.conf.. на некоторых машинах авторизация вообще не проходила пока не поправил pam.d/sshd

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру