Оновлюємо freebsd, виконую установку, настройку, супровід серверів
Тут будуть розглянуті 3 способи: через svn. через cvsup (вже не працює) і через freebsd-update (бінарне оновлення).
через freebsd-update (бінарне оновлення, тільки для ядра GENERIC)
Це так би мовити повне оновлення всіх бінарників і ядра на GENERIC.
Послідовно виконаємо наступні команди (за умови, що у вас ядро GENERIC. Інакше буде лайка):
# Freebsd-update -r 7.2-RELEASE upgrade
# Freebsd-update install
#reboot
# Freebsd-update install
#reboot
Якщо при виконанні freebsd-update ... upgrade отримуємо помилку:
no mirrors remaining giving up
то пробуємо вказати IP одного з серверів (update.freebsd.org - update7.freebsd.org):
# Freebsd-update -s 63.140.118.125 -r 7.2-RELEASE upgrade
і далі як зазвичай.
Використовуйте одну з 2-х команд:
через cvsup / csup (Офіційно вже закритий, використовуйте тільки svn)
Тут буде описаний метод оновлення з FreeBSD 7.0 до FreeBSD 7.1-RELEASE-p2. тобто до останнього релізу на момент поновлення. Сам процес складається з декількох етапів.
У процесі оновлення потрібно дотримуватися такого порядку: зібрати світ (НЕ НЕ інсталювати), зібрати і інсталювати нове ядро (якщо раптом щось піде не так, можна завжди завантажити старе ядро) і тільки після того, як ви зрозуміли, що все нормально працює - інсталювати світ. В іншому випадку ви можете отримати новий світ і старе ядро (якщо наприклад, нове не грузиться) - а це вже дуже погано, аж до незагружаемості сервера.
1) Установка cvsup і попередня настройка.
Ставимо cvsup-without-gui. (У кого оболонка bash. Команду rehash робити не потрібно!) Якщо у вас 7.0 і вище, то cvsup ставити не треба, є вже штатний csup.
#cd / usr / ports / net / cvsup-without-gui make install clean rehash
А можна і не ставити csvup. а використовувати штатний csup. У нових версіях переходять посилено на svn. тому рекомендую використовувати утиліту snvup (є в портах) - легка заміна стандартному svn.
Після цього створюємо файл такого змісту
* Default tag = RELENG_7_1
* Default host = cvsup5.ua.freebsd.org
* Default prefix = / usr
* Default base = / var / db
* Default release = cvs tag = RELENG_7_1
* Default delete use-rel-suffix
# * Default compress
src-all
# * Default tag =.
# Ports-all
і обзивати його, наприклад, /etc/cvs.conf
Якщо вказати замість 7_1 просто 7. то ми оновили до PRERELEASE.
Ця процедура дуже тривала. До речі, є ще кілька альтернативних дзеркал
Після того, як все було викачано, приступаємо до пересброрке ядра. Якщо у вас ядро відрізняється від GENERIC. рекомендується пересобрать спочатку GENERIC. а потім після того, коли система оновлена - тільки тоді пересобрать вже змінений. Від версії до версії деякі змінні можуть змінюватися. Якщо ви перебуваєте в безпосередньо близько, можете збирати заново змінений ядро, а не GENERIC. Перший мій досвід був саме Перезбірка НЕ GENERIC. а мого. Хоча досить багато чув, як деякі адміни після віддалених оновлень поспішали до сервак, бо ядро не Грузія :). Таке найімовірніше буває, коли оновлюєте, наприклад, з 5 до 6. або 6 до 7. Якщо оновлення відбуваються в межах головної версії (з 7.0 до 7.1) то можна пробувати і не GENERIC збирати заново.
Перед складанням рекомендується зробити
#rm -rf / usr / obj / usr / src /
#cd / usr / src make -j4 -s buildworld make -j4 -s buildkernel KERNCONF = GENERIC INSTKERNNAME = kernel.new
Примітка: при апдейте на версію 10.3 і вище, потрібно додатково виконати:
# Cd / usr / src make -C sys / boot install
після цього продовжуємо:
#cd / usr / src make -s -j4 installkernel KERNCONF = GENERIC INSTKERNNAME = kernel.new
Параметр -j4 означає збирати в 4 потоки, а параметр -s - показувати тільки те, що скомпіллілось, а не повністю процес компіляції. Тобто, якщо у вас як мінімум dual-core. тоді має сенс використовувати цей параметр і збірка теоретично повинна пройти в кілька разів швидше.
Так само можна використовувати параметри:
- INSTKERNNAME = kernel.new. який встановить нове ядро з ім'ям kernel.new. Якщо цього не потрібно, то можете прибрати INSTKERNNAME = kernel.new
- KODIR = / boot / kernel.other. явно вказує куди встановлювати ядро
Якщо все вдало (а що б було все вдало, рекомендую використовувати nextboot), то виконуємо ребут щоб в разі проблем можна було залишитися зі старою версією системи (завантажити старе ядро і потім скопіювати його в / boot / kernel):
# / Sbin / shutdown -r now
3) mergemaster і узгодження паролів і груп.
Починаючи з 9-ої версії, рекомендують використовувати замість mergemaster використовувати etcupdate.
#cd / usr / src make -s -j4 installworld
При виконанні наступної команди, будьте уважні, так як вона видаляє старі бібліотеки, з якими можуть бути слінковани, наприклад, ssh або bash. Цю команду краще робити вже після повного пересбора критичного ПО. Якщо ви оновлюєтеся в межах релізу (наприклад, з 10.1 на 10.3), то дана команда практично нешкідлива, але краще ще раз все перевірити.
#yes | make delete-old yes | make delete-old-libs
5) mergemaster і оновлення всіх конфігураційних файлів.
Зараз має бути най-най трудомістка процедура. Будуть задаватися питання про заміну або збереженні існуючих файлів конфігурації. Для більшого пізнання mergemaster рекомендую прочитати хороший огляд цієї утиліти тут
А можна спробувати виконати і в автоматичному режимі (природно, на свій страх і ризик):
6) Заключний reboot.
Вообщем, робимо цю команду, і сидимо молимося :). Якщо щось пішло не так - тоді Новомосковськ, думаємо і гугл 🙂
Обов'язково перевірте, однією чи версії ядро і світ:
$ Uname -K
1003000
$ Uname -U
1001000
Після вдалої завантаження рекомендую перевірити встановлені пакети (якщо використовуєте pkg-ng):
і по можливості оновити порти і оновити весь софт, який стоїть. Як оновити порти описано тут. а як оновити софт - використовуємо таку команду:
Ця команда оновить все встановлених пакети, а так же оновить базу, в якій знаходиться інфа про пакетах (назва, версії, залежно, та інше).
PPS. А можна все це і однією командою зробити:
#csup /etc/cvs.conf rm -rf / usr / obj make cleanworld make buildworld make buildkernel KERNCONF = GENERIC make installkernel KERNCONF = GENERIC reboot
При оновленні з 7.2 на 8.0-RC2 після виконання кінцевого mergemaster - почали сипатися помилки. І що я тільки не робив, і очищав все оплатой заново сорци і збирати заново. Помилки почали сипатися вже при складанні світу. Почитав в інеті, що одному чола допоміг ребут. Я ребутнул, ядро загрузилось нове, а ось «світ» - залишився колишній. Це я зрозумів, тому що більшість прог відмовилися запускатися. Я пересобран ще раз ядро, світ і перевантажився. Після цього все запрацювало.
На іншій машині вилетіла помилка при виконанні mergemaster. Я перевантажився, і заново запустив mergemaster. після чого помилок вже не було.