The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Удаленное бинарное обновление FreeB..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Удаленное бинарное обновление FreeB..."  
Сообщение от auto_tips (??) on 12-Авг-07, 23:10 
Удаленное бинарное обновление 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.

URL: http://groups.google.com/group/fido7.ru.unix.bsd/msg/efd1942...
Обсуждается: http://www.opennet.dev/tips/info/1442.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от qwerty email(??) on 12-Авг-07, 23:10 
клево, сенкс
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от Backspace on 05-Сен-07, 17:04 
-- "В /mnt/mfs/etc/fstab желательно отключить все сервисы"
++ "В /mnt/mfs/etc/rc.conf желательно отключить все сервисы"
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от qaz (??) on 17-Окт-07, 08:20 
ln ../kernel kernel
вот на этом этапе пишет, "Operation not permitted".
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от Vladimir Larkin email on 27-Фев-08, 20:15 
>ln ../kernel kernel
>вот на этом этапе пишет, "Operation not permitted".

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от bin_ka email on 04-Дек-07, 08:55 
Для FreeBSD 4.0 и FreeBSD 4.10 это тоже актуально?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Удаленное бинарное обновление FreeBSD 4.11 до 6.2-RELEASE"  
Сообщение от ne4to email on 12-Мрт-08, 22:12 
>Авторизация через keyboard-interactive
>не срабатывает, зато срабатывает через password, >то есть в систему
>пустит после четвертой попытки набора пароля. >Эту косметическую
>проблему править не стал, всё равно на это один >только раз наталкиваемся.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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