Обновление FreeBSD

Тут описывается нелёгкий путь настройки ОС FreeBSD, начиная с установки дистрибутива и заканчивая настройкой каждого сервиса
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Обновление FreeBSD

Сообщение RomA »

завалялся у меня диск с сабжем 6.3 при сегодняшнем актуальном 6.4, а вообще есть уже 8.0... По хорошему новый бы скачать да поставить, но было лениво, потому решил использовать этот.
Сервер стоит за прокси, потому:

Код: Выделить всё

ee /etc/make.conf
и вставляем туда следующую строчку

FETCH_ENV=HTTP_PROXY=http://login:password@192.168.1.7:3128/
ну вот, теперь через прокси мы сможем ставить программы. и первое что мы поставим - прогу которая обновила бы нашу систему

Код: Выделить всё

cd /usr/ports/net/cvsup-without-gui
make install clean
О том как работать с этим приложение хорошо по русски написано в хендбуке http://www.freebsd.org/doc/ru/books/handbook/cvsup.html
На возникающие вопросы я отвечал так

Код: Выделить всё

                      ┌────────────────────────────────────────────────────────────────────┐
                      │                   Options for libiconv 1.13.1                      │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │  [X] EXTRA_ENCODINGS  Include extra character sets             │ │  
                      │ │  [ ] EXTRA_PATCHES    Apply patches to fix CP932 add EUCJP-MS  │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                                                                                              
Как все завершится - делаем конфиг обновлялки

Код: Выделить всё

mkdir /root/cvsup
cd /root/cvsup
touch ports-supfile
touch update.sh
chmod +x update.sh
файл ports-supfile выглядит так

Код: Выделить всё

*default host=192.168.1.7      
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_8
*default delete use-rel-suffix  
*default compress 
src-all
ports-all tag=.  
(вы должны написать *default release=cvs tag=RELENG_7 если хотите обновиться до 7 версии FreeBSD, или *default release=cvs tag=RELENG_7_0 для обновления до релиза, а не стабильной)

На 192.168.1.7 странслирован сервер обновлений с основного репозитория FreeBSD и зачастую он занят, потому на адрес 192.168.1.1 странслирован дополнительный сервер - там посвободнее, то есть если с такого примера обновление не проходит, попробуйте первую строчку заменить вот этой *default host=192.168.1.1

файл update.sh чисто что бы не забыть как это все пускается :-)

Код: Выделить всё

#!/bin/sh                                                                                                         
cvsup -g -L 2 /root/cvsup/ports-supfile
cd /usr/ports
make fetchindex
запускаем (./update.sh ) - все работает!

Код: Выделить всё

motiw# ./update.sh 
Parsing supfile "/root/cvsup/ports-supfile"
Connecting to 192.168.1.7
Connected to 192.168.1.7
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Процесс занимает время - потому я пока занялся своими делами. Как видно из конфига мы обновим исходники до 7 версии.
Так как это не пустая система и я туда уже поставил программный продукт, то переставлять мне его не хочется, если вдруг что нить слетит, потому я собрался резервироваться самым варварским способом, который бы мог тут подойти - вытаскиванием дисков. Дело в том, что моя система стоит на райд массиве, где 2 диска работают в зеркале. Следовательно я могу вытащить один диск и иметь копию рабочий системы.
Если вдруг что-то пойдет не так, и новая фря откажется крутить программу, которую я поставил - я просинхрю данные с вытащенного диска.
Ну вот и закончилось обновление исходников

Код: Выделить всё

Applying fixups for collection ports-all/cvs
 Fixup ports/graphics/vcg/files/tMakefile
 Fixup ports/net/wmwave/files/patch-wmwave.c
Shutting down connection to server
Finished successfully
Теперь надо обновить базу пакетов для этого в /usr/ports/ делаем make fetchindex
Последний раз редактировалось RomA 13 янв 2010, 17:14, всего редактировалось 3 раза.
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Re: Обновление FreeBSD

Сообщение RomA »

Процесс обновления закончился. надо начать пересборку, но сначало бекап :-)
проверяем состояние райда

Код: Выделить всё

motiw# atacontrol status ar0
ar0: ATA RAID1 status: READY
 subdisks:
   0 ad4  ONLINE
   1 ad6  ONLINE
а теперь дергаем один из винтов

Код: Выделить всё

motiw# atacontrol status ar0
ar0: ATA RAID1 status: DEGRADED
 subdisks:
   0 ad4  ONLINE
   1 ---- MISSING
Отлично - райд развалит :-) теперь можно работать
Дабы не облажаться проверяем что за система у нас стоит

Код: Выделить всё

motiw# uname -a
FreeBSD motiw 6.3-RELEASE FreeBSD 6.3-RELEASE #0: Wed Jan 16 04:45:45 UTC 2008     root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP  i386
Значит интел. версия 6.3
О том как обновлять систему очень хорошо по русски написано в хендбуке http://www.freebsd.org/doc/ru_RU.KOI8-R ... world.html
Начинаем пересборку...

Код: Выделить всё

motiw# cd /usr/obj
motiw# rm -rf *
motiw# cd /usr/src
motiw# make -j4 buildworld
[... тут было много всего ...]
--------------------------------------------------------------
>>> World build completed on Mon Dec 21 19:31:37 MSK 2009
--------------------------------------------------------------
motiw# make -j4 buildkernel
[... тут было много всего ...]
--------------------------------------------------------------
>>> Kernel build for GENERIC completed on Mon Dec 21 19:51:59 MSK 2009
--------------------------------------------------------------
motiw# make installkernel
motiw# reboot
При загрузке сервера нам надо попасть в однопользовательский режим - то есть выбираем пункт 4 в меню. После загрузки монтируем операционную систему командой mount -a -t ufs после чего сравниваем файлы которые изменились командой

Код: Выделить всё

mergemaster -p
Как правило при обновлении я пренебрегаю этим, но тут я обновляюсь с одной ветки на другую, и лучше все сделать так, как этого хочет система
Цель всего этого заменить старые системные файлы на новые, но при этом не похерить наши конфиги - то есть смотрим на файл и думаем, меняли мы в нем что нить? Если не меняли - заменяем на новый - если меняли - оставляем старый и запоминаем.
Работа со скриптом:
d – оставить старый
i – установить новый
m – сравнить
Теперь можно закончить обновление

Код: Выделить всё

cd /usr/src
make installworld
make delete-old
mergemaster -i
reboot
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Обновление софта

Сообщение RomA »

Теперь займемся обновлением установленных программ. Посмотреть сколько же всего у нас устарело можно командой

UP:
pkg_version | grep "<" устарела с 14 года с версии FreeBSD 9.3 - на замену в новом пакетном менеджере пришла команда pkg version | grep "<")

- ого, не мало... Ставим, если она уже не стоит, программу обновления

Код: Выделить всё

kineshma# cd /usr/ports
kineshma# make fetchindex
kineshma# whereis portupgrade
portupgrade: /usr/ports/ports-mgmt/portupgrade
kineshma# cd /usr/ports/ports-mgmt/portupgrade
kineshma# make install clean
kineshma# rehash
Ставлю я как правило все по умолчанию

Код: Выделить всё

                      ┌────────────────────────────────────────────────────────────────────┐
                      │                Options for portupgrade 2.4.6_3,2                   │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │           [X] BDB4  Use Berkeley DB >=2 as backend             │ │  
                      │ │           [ ] BDB1  Use Berkeley DB 1.85 as backend            │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                   Options for ruby 1.8.7.248,1                     │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │  [ ] ONIGURUMA  Build with oniguruma regular expressions lib   │ │  
                      │ │  [ ] IPV6       Enable IPv6 support                            │ │  
                      │ │  [X] RDOC       Build and install Rdoc indexes                 │ │  
                      │ │  [ ] DEBUG      Compile-in debug info                          │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                      ┌────────────────────────────────────────────────────────────────────┐
                      │                     Options for perl 5.10.1                        │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │      [ ] DEBUGGING      Build with debugging support           │ │  
                      │ │      [ ] GDBM           Build GDBM_File extension              │ │  
                      │ │      [ ] PERL_MALLOC    Use Perl malloc                        │ │  
                      │ │      [X] PERL_64BITINT  Use 64 bit integers (on i386)          │ │  
                      │ │      [ ] THREADS        Build threaded perl                    │ │  
                      │ │      [ ] MULTIPLICITY   Use multiplicity                       │ │  
                      │ │      [ ] SUIDPERL       Build set-user-id suidperl binary      │ │  
                      │ │      [ ] SITECUSTOMIZE  Run-time customization of @INC         │ │  
                      │ │      [X] USE_PERL       Rewrite links in /usr/bin              │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘  
                     ┌────────────────────────────────────────────────────────────────────┐
                      │                     Options for m4 1.4.13,1                        │  
                      │ ┌────────────────────────────────────────────────────────────────┐ │  
                      │ │     [ ] LIBSIGSEGV  Use libsigsegv for better diagnostics      │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      │ │                                                                │ │  
                      ├─└────────────────────────────────────────────────────────────────┘─┤  
                      │                       [  OK  ]       Cancel                        │  
                      └────────────────────────────────────────────────────────────────────┘                                                                                                
                                                                                              
Выкидывая откровенно лишнии вещи, такие как IPv6, дополнительную документацию и так далее...
Теперь можно посмотреть сколько же всего у нас устарело командой portversion | grep "<"
Прилично.. надо обновлять... можно обновить каждую программу персонально командой portupgrade Имя_Программы, а можно пересобрать с зависимостями и все, как я обычно и делаю (правда такой способ, как и всякая сборка из портов плодит много мусора в системе)

Код: Выделить всё

kineshma# portupgrade -arR
Отвечаем на вопросы и обновляем все, по окончании ещё раз проверяем актуальность, и если что опять запускаем обновление и так далее до полного обновления.

Иногда при переходе с одной ветки FreeBSD на другу получается так, что часть пакетов остаётся собранной под старую ветку, что плодит косяки - самый простой способ в такой ситуации это пересобрать все установленные пакеты - делается это командой

Код: Выделить всё

kineshma# portupgrade -afrR
Зачастую систему ставлю обновляться, а у самого есть другие дела, чем пристально за ней следить, а следить надо - ведь иногда обновление задаёт вопросы. Для того, что бы сразу ответить на все вопросы, а потом оно само собиралось есть ключик с

Код: Выделить всё

kineshma# portupgrade -acrR
Иногджа совсем не плохо почистить дерево портов от всякого мусора, в виде старых дистрибутивов, распакованых файликов да и ещё кучи всего лишнего - для этого тоже существует своя команда

Код: Выделить всё

kineshma# portsclean -D -C -L
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Обновление FreeBSD до 8.1

Сообщение RomA »

Итак, у нас вышла FreeBSD 8.1 и в силу тех или иных причин мне понадобилось обновить сервер... Опишу это в отдельном посте, дабы показать на конкретном примере как это делается, а вы, сравнив с предыдущими советами, уловили что надо менять при дальнейших обновлениях.
Итак, на сейчас у меня стоит

Код: Выделить всё

server# uname -a
FreeBSD server.sarhleb.ru 8.0-STABLE FreeBSD 8.0-STABLE #0: Wed May  5 13:50:53 MSD 2010     roman@server.sarhleb.ru:/usr/obj/usr/src/sys/GENERIC  amd64
С этой фрей у меня какой то косяк... я грешу на то, что я настраивал её удаленно, через пролохй канал интернета, и возможно там что-то не так сконфигурировалось, так как канал очень часто падал. Потому первое что я сделаю, это обнавлю систему, так сказать с чистого листа, для чего я удалю все имеющиеся файлы портов и исходники системы

Код: Выделить всё

rm -R /usr/ports/
rm -R /usr/src/
rm /usr/sup/ports-all/ *
rm /usr/sup/src-all/ *
Хотел я обновиться при помощи freebsd-update но мои начинания не увенчались успехом по следующим причинам
1) с наскока оно не заработало
2) почитав понял что со стабильными ветками оно не прокатывает
3) даже если обновится, то обновится только ГЕНЕРИК ядро, а потом все равно пересобирать руками до скоего
Потому решил забить на новые технологии и воспользоваться проверенными средствами, то есть cvsup
Следовательно смотрим в первую статью и делаем как там сказано. Мой файл выглядел так

Код: Выделить всё

server# cat /root/cvsup/ports-supfile 
*default host=192.168.1.7
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_8_1
*default delete use-rel-suffix
*default compress 
src-all
ports-all tag=.

то, есть я буду в перспективе обновляться до релиза. Опять немного отвлекусь в моём понимании структура развития ядер FreeBSD движется по такому сценарию - пререлиз > релиз > стабиле > и тут мы расходимся на замороженый релиз и следующий пререлиз... иначе говоря то что у меня стоит STABLE - это нефига не стабильно, а это рабочая фигня в которой тестируют всякие новшества. самым стабильным будет ядро релиз-р... Вот какое у меня основания убрать это ядро и поставить другое. Приступим (процессор у меня мощьный, потому j8 - по 2 потока на каждое ядро? дабы быстрей было, пока инет не упал успеть)

Код: Выделить всё

server# make -j8 buildworld
--------------------------------------------------------------
>>> World build completed on Thu Aug 19 12:14:26 MSD 2010
--------------------------------------------------------------
server# make -j8 buildkernel
--------------------------------------------------------------
>>> Kernel build for GENERIC completed on Thu Aug 19 12:26:34 MSD 2010
--------------------------------------------------------------
server# rm /boot/kernel.old *
server# make installkernel
kldxref /boot/kernel
server# make installworld
install -s -o root -g wheel -m 555   ldd32 /usr/bin
server# reboot
Старое ядро я удалял потому что места у меня мало в корне, и новое бы не поместилось... ну и перегрузился
После перезагрузки у нас новое ядро

Код: Выделить всё

server# uname -a
FreeBSD server.sarhleb.ru 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Thu Aug 19 12:22:25 MSD 2010     roman@server.sarhleb.ru:/usr/obj/usr/src/sys/GENERIC  amd64
server#
Теперь можно приступить к обновлению программ... посмотрим что у нас устарело

Код: Выделить всё

server# cd /usr/ports
server# make fetchindex
/usr/ports/INDEX-8.bz2                        100% of 1415 kB   95 kBps 00m00s
server# portversion | grep "<"
5-Test-Simple              <
p5-gettext                  <
pcre                        <
pecl-pdflib                 <
php5                        <
php5-bz2                    <
php5-ctype                  <
php5-dom                    <
php5-filter                 <
php5-gd                     <
php5-iconv                  <
php5-imap                   <
php5-json                   <
php5-mbstring               <
php5-mcrypt                 <
php5-mysql                  <
php5-mysqli                 <
php5-openssl                <
php5-session                <
php5-xml                    <
php5-xmlrpc                 <
php5-zip                    <
php5-zlib                   <
phpMyAdmin                  <
pkg-config                  <
png                         <
popt                        <
postfix                     <
python26                    <
ruby                        <
sarg                        <
speex                       <
unixODBC                    <
Ничего жизненокритического не устарело(самба, астериск), потому обновим то что он хочет без страха и в автоматическом режиме. Но так как у меня что-то глючило я пересоберу на всякий случай все с максимальными параметрами - то есть перекомпелирую все зависимости, что бы быть уверенным что с этой стороны косяки у меня больше не полезут

Код: Выделить всё

server# portupgrade -aRr
Scorp
Сообщения: 22
Зарегистрирован: 16 янв 2009, 14:19

Re: Обновление FreeBSD

Сообщение Scorp »

Ефремов писал(а):Прошу описать процесс резервного копирования и восстановления данных корневого раздела FreeBSD на случай, если обновление до 8.1 не удастся и надо будет откатиться назад. Вариант с выдёргиванием жёстких дисков не предлагать :P
может пригодится, я напишу как сделано у меня
создал файлик etc_tar.sh и положил его в /usr/local/etc/rc.d/, дал права на выполнение
в нем прописал что мне нужно бэкапить на случай если сервер "умрет", периодически что то сюда добавляю

Код: Выделить всё

tar cf /work/arh/etc.tar /etc/* /var/named/etc/namedb/* /usr/local/etc/* /usr/local/stc/* /usr/local/www/* /usr/home/www/proxy/*.* /usr/home/www/proxy/style/* /var/db/mysql/* /var/db/squidGuard/*
добавил в /etc/crontab

Код: Выделить всё

30<---->0<----->*<----->*<----->*<----->root<-->/usr/local/etc/rc.d/etc_tar.sh
каждую ночь делается бэкап основных конфигов, с которыми поднять новый сервер не составит труда, также ночью виндовый сервер этот бэкап копирует себе
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Re: Обновление FreeBSD

Сообщение RomA »

Ефремов писал(а):
RomA писал(а):Итак, у нас вышла FreeBSD 8.1 и в силу тех или иных причин мне понадобилось обновить сервер...
Прошу описать процесс резервного копирования и восстановления данных корневого раздела FreeBSD на случай, если обновление до 8.1 не удастся и надо будет откатиться назад. Вариант с выдёргиванием жёстких дисков не предлагать :P
1) при обновлении на корневом разделе ничего не случится
2) всегда остаётся старое ядро, которое называется /boot/kernel.old - с него можно загрузиться, если ты накосячил в новом ядре
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Пересборка ядра

Сообщение RomA »

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

Код: Выделить всё

srvbsd# uname -a
FreeBSD srvbsd 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Wed Aug  4 08:26:09 MSD 2010     admin@srvbsd2:/usr/obj/usr/src/sys/GENERIC  amd64
srvbsd# 

Пока что меня интересует разрядность системы - она amd64 и тут же указан пусть до работающего ядра - судя по назканию оно стандартное...
Давайте соберем своё. Идём в директорию с конфигом ядра

Код: Выделить всё

cd /usr/src/sys/amd64/conf
Копируем стандартное ядро в наше

Код: Выделить всё

cp /usr/src/sys/amd64/conf/GENERIC /usr/src/sys/amd64/conf/khps
Теперь поправим наш файлик ядра. Процедура эта очень ответственное - одно неосторожное движение, и ваш сервер больше не загрузится. потому делаем только то, что знаем. Ну например я заменил название на своё ident KHPS, убрал из ядра флопи - у меня нет его на сервере device fdc и прочий тюнинг. Сохраняем.
Теперь собираем наше ядро. В начале этой процедуре мы должны находиться в директории с ядром, где и выполняем компанду config khps - где config это команда, а khps - имя нашего нового файла ядра

Код: Выделить всё

srvbsd# config khps 
Kernel build directory is ../compile/khps
Don't forget to do ``make cleandepend && make depend''
srvbsd#
srvbsd# cd ../compile/khps
srvbsd# make
Пошло собираться новое ядро...
Конечно, он предупредил меня что надо проверить новое ядро на корректность, но я этого не сделал, потому что точно знаю те правки что я правил - если же вы работаете методом тыка - тогда лучше воспользуйтесь советом и проверьте ядро. Да, если вы действительно допустили какую-то ошибку в написании команды, например, то ядро у вас не соберётся и без проверок ))))
После того как всё успешно закончится

Код: Выделить всё

objcopy --only-keep-debug zlib.ko.debug zlib.ko.symbols
objcopy --strip-debug --add-gnu-debuglink=zlib.ko.symbols zlib.ko.debug zlib.ko
srvbsd# 
Устанавливаем новое ядро

Код: Выделить всё

srvbsd# make install
и когда ядро установилось

Код: Выделить всё

install -o root -g wheel -m 555   zlib.ko.symbols /boot/kernel
kldxref /boot/kernel
srvbsd# 
перезагружаем сервер
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Создание пакетов из своих установленных программ

Сообщение RomA »

Иногда после обновления что нить глючит, и хочется откатиться на старую проверенную программу, которая у тебя работала верой и правдой до обновления. Есть много способов это сделать - это лиш один из них - создание своих портов.
Ну, наверное, немного почему именно этот способ я выбрал из множества других - всё просто - у нас много одинаковых конфигураций серверов, там стоят одни и те же программы - таким образом в масштабах компании такой способ не только позволяет иметь несколько копий ПО на разных серверах в один момент времени, но так же и можно обновляться с сервера соведа, который уже раньше тебя пересобрал порты - ты просто скачиваешь у него пакетик и ставишь себе. Необходимость этого возникла после моей первой статьи на эту тему http://corp.stniva.ru/forum/viewtopic.p ... &t=58#p263 где указывал на свой репозиторий http://stat.stniva.ru/packages/
Итак - создание пакетов у себя. Дело это совсем не сложное и делается очень быстро. Для начала мы создадим директорию, в которой будут находиться наши пакетики

Код: Выделить всё

srvbsd# mkdir /usr/ports/packages
Теперь нам нужен скрипт, который автоматизирует всю работу - скрипт был найден когда-то давно на просторах интернета и с тех пор верой и правдой служит

Код: Выделить всё

stat# cat paket.sh 
#!/bin/sh
#
# Create all packages with sym-links for FreeBSD 5.x+
#
# Version: 1.2.2
# Copyright (c) 2006 Alexey Tsvetnov, vorakl@fbsd.kiev.ua
#
# All error in  /var/log/<script_name>.err
#

# Path to packages directory
packagespath="/usr/ports/packages"

# Command for get package's version
pkgvercmd="/usr/sbin/pkg_version -v"
#pkgvercmd="/usr/local/sbin/portversion -v"	# more faster than pkg_version

#-------------------------------------------------------------------------------

err="\033[0;40;31mError\033[0m"
ok="\033[1;40;33mOk\033[0m"


checkPackagesPath ()
{
    [ -d $packagespath ] || { /usr/bin/printf " *** $err: $packagespath doesn't exist.\n"; 
			      /bin/echo " *** Error: $packagespath doesn't exist." > /var/log/`basename $0`.log; 
			      exit 1; }
    [ -d $packagespath/All ] || { /bin/mkdir $packagespath/All || exit 1; }
    [ -d $packagespath/Latest ] || { /bin/mkdir $packagespath/Latest || exit 1; }
    return 0
}

checkPkgAll ()
{
    [ -f $packagespath/All/$fullname.tbz ] && return 0
    return 1
}

checkPkgLatest ()
{
    [ -L $packagespath/Latest/$shortname.tbz ] && [ -r $packagespath/Latest/$shortname.tbz ] && return 0
    return 1
}

checkPkgCat ()
{
    [ -L $packagespath/$subdir/$fullname.tbz ] && [ -r $packagespath/$subdir/$fullname.tbz ] && return 0
    return 1
}

createPkgAll ()
{
    /usr/sbin/pkg_create -jb $fullname $packagespath/All/$fullname.tbz && return 0
    return 1
}

createPkgLatest ()
{
    /bin/rm -f $packagespath/Latest/$shortname.tbz
    cd $packagespath/Latest && /bin/ln -s ../All/$fullname.tbz $shortname.tbz && return 0
    return 1
}

createPkgCat ()
{
    if [ -d $packagespath/$subdir ]; then
	/bin/rm -f $packagespath/$subdir/$fullname.tbz
    else
	/bin/mkdir -p $packagespath/$subdir
    fi

    cd $packagespath/$subdir && /bin/ln -s ../All/$fullname.tbz $fullname.tbz && return 0
    return 1
}

getPkgFullVersion ()
{
    echo -n "Geting full version package list..."
    pkglist=`$pkgvercmd | /usr/bin/awk '{print $1}'`
    /usr/bin/printf "$ok\n"
}

work ()
{
 for fullname in $pkglist; do
    /bin/echo "Check $fullname"

    shortname=`/bin/echo $fullname | /usr/bin/sed 's/\-[^-]*$//'`
    subdir=`/usr/sbin/pkg_info -o $fullname | /usr/bin/sed -e '1,3d' -e '$d' | /usr/bin/awk -F/ '{print $1}'`

    if ! checkPkgAll; then
	/bin/echo -n " ==> Create package..."
	if createPkgAll; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	/bin/echo -n " ==> Create Latest sym-link..."
	if createPkgLatest; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	/bin/echo -n " ==> Create Category sym-link..."
	if createPkgCat; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi

	continue
    fi

    if ! checkPkgLatest; then  
	/bin/echo -n " ==> Create Latest sym-link..."
	if createPkgLatest; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi
    fi

    if ! checkPkgCat; then  
	/bin/echo -n " ==> Create Category sym-link..."
	if createPkgCat; then /usr/bin/printf "$ok\n"
	  else /usr/bin/printf "$err\n"
	fi
    fi
 done
}

main ()
{
    exec 2>/var/log/`basename $0`.log

    checkPackagesPath
    getPkgFullVersion
    work

    exec 2>&-
}

main

exit 0

stat#
Так же скрипт можно скачать тут http://stat.stniva.ru/packages/paket.sh.txt

Код: Выделить всё

srvbsd# /usr/ports
srvbsd# fetch http://stat.stniva.ru/packages/paket.sh.txt
srvbsd# cp /usr/ports/paket.sh.txt /usr/ports/paket.sh
srvbsd# chmod 755 /usr/ports/paket.sh
Скачали, переименовали, сделали исполняемым - осталось запустить

Код: Выделить всё

srvbsd# cd /usr/ports
srvbsd# ./paket.sh 
Geting full version package list...Ok
Check amspsfnt-1.0_5
 ==> Create package...Ok
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
Check ap22-mod_ntlm2-0.1_3
 ==> Create package...Ok
Скрипт пошёл работать - ждём и смотрим - иногда скрипт не может создать пакет

Код: Выделить всё

Check php5-pdo-5.3.6
 ==> Create package...Error
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
Check php5-pdo_sqlite-5.3.6
 ==> Create package...Error
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
Check php5-posix-5.3.6
 ==> Create package...Error
 ==> Create Latest sym-link...Ok
 ==> Create Category sym-link...Ok
Это сигнал вам что этот порт собран как-то неверно... Задуймайтесь

После того, как скрипт закончит свою работу - в папке /usr/ports/packages окажутся папки

Код: Выделить всё

srvbsd# ls /usr/ports/packages/
All		converters	graphics	misc		ports-mgmt	textproc	x11-toolkits
Latest		databases	lang		multimedia	print		www
accessibility	devel		mail		net		security	x11
archivers	ftp		math		net-mgmt	sysutils	x11-fonts

srvbsd#
Как в портах :-)
Вот и всё - у нас есть пакетики, которые мы сможем развернуть, если наже обновление решит подпортить нам жизнь

Да, я думаю вы догадываетесь что моё репозиторий не единственный - по адресу ftp://ftp.freebsd.org/pub/FreeBSD/ports/ есть сборки пакетов для любой фри, например ftp://ftp.freebsd.org/pub/FreeBSD/ports ... .2-release
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Концепция обновления сервера FreeBSD

Сообщение RomA »

Вспупление:
У каждого из нас есть сервер c фрёй, который надо переодически обновлять - в это статье я опишу концепцию обновления, так что бы оно во первых не мешало работать другим, а во вторых что бы вы делали работу на работе, а не в выходной.

Дано:
Все сервера типовые, и если у кого-то не так, то вы сделали что-то не правильно в своей жизни
сервер - 1 шт.
жёские диски в нём - 4 шт.
зеркала - 2 шт
винт для бекапа - 1 шт

Подготовка:
Данные на нашем сервере должны быть распределены следующим образом:

первое зеркало:
1) система
2) неменяющиеся файлы (системные, конфиги и так далее)

Второе зеркало:
1) меняющиеся файлы
2) почтовые ящики
3) самба
4) архив скуля

Бекапятся эти разделы тоже по своему:
Первое зеркало бекапится полность на внешний жёский
Второе зеркало бкапится по сети просто архивом

Собстно суть вопроса:
Итак, нам в очередной раз надо обновить ядро
1) делаем бекап первого зеркала на жёский
2) вставляем этот жёский в обычную машину и обновляем
3) вставляем жёский в сервер и загружаемся с него

Почему так можно:
ну во первых все меняющиеся данные у нас на втором зеркале, которое мы не трогаем
а во вторых фря не привязана к железу и будет работать на любом компе.

Таким образом сервер будет недоступен только один раз за всю процедуру и то не более чем на 1 минуту, когда он будет перегружаться.
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Обновление FreeBSD до версии 9.1

Сообщение RomA »

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

Обновление ядра:
Необходимо всегда помнить, что фря обновляется всегда - тиаким образом если пересборка ядра или мира вылетает в ошибкой - вывод всегда один - вы что-то не то сделали - вот список ошибок, с которыми пришлось столкнуться:
1) слишком мало ресурсов - благо машина была вертуальная и добавил ресурсов
2) 64х разрядная система на одном ядре - опять же добавил второе ядро машине, собрал, потом забрал
3) исходники скачались с ошибкой - удалил всё /usr/src и скачал заново
4) внимательно делайте mergemaster -p - всегда читайте что изменилось, что бы знать что ищите - так при переходе с версий ниже 9.1 вы увидите вот такое сообщение

Код: Выделить всё

zabbix# make installkernel
ERROR: Required auditdistd user is missing, see /usr/src/UPDATING.
*** [installcheck_UGID] Error code 1

Stop in /usr/src.
*** [installkernel] Error code 1

Stop in /usr/src.
как написано в /usr/src/UPDATING вы должны сделать
20121218:
With the addition of auditdistd(8), a new auditdistd user is now
depended on during installworld. "mergemaster -p" can be used to add
the user prior to installworld, as documented in the handbook.
Сделать можно 2мя путями - или правильно:

Код: Выделить всё

zabbix# mergemaster -p
и примерно на 3тьем экране видим то что надо

Код: Выделить всё

+auditdistd:*:78:77::0:0:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
ставим i

Код: Выделить всё

How should I deal with this? [Leave it for later] i
потом n и y - примерно так

Код: Выделить всё

*** Comparison complete

*** Files that remain for you to merge by hand:
/var/tmp/temproot/etc/group

Do you wish to delete what is left of /var/tmp/temproot? [no] 
 *** /var/tmp/temproot will remain

*** You installed a new master.passwd file, so make sure that you run
    '/usr/sbin/pwd_mkdb -p /etc/master.passwd'
     to rebuild your password files

    Would you like to run it now? y or n [n] y
    Running /usr/sbin/pwd_mkdb -p /etc/master.passwd
или быстро:

Код: Выделить всё

pw useradd -n auditdistd -g audit -c "Auditdistd unprivileged user" -d /var/empty -s /usr/sbin/nologin
после чег продуем ставить ядро еще раз

5) Следите за временем - оно должно быть актуальным! Так в процесс установки мира make installworld вы можете столкнуться с примерно такой проблемой - она всегда выходит на разных строках, но не суть

Код: Выделить всё

install -o root  -g wheel -m 444  sv_SE.ISO8859-1.cat  /usr/share/nls/sv_SE.ISO8859-1/libc.cat
install -o root  -g wheel -m 444  uk_UA.UTF-8.cat  /usr/share/nls/uk_UA.UTF-8/libc.cat
gencat zh_CN.GB18030.cat /usr/src/lib/libc/nls/zh_CN.GB18030.msg
gencat: No such file or directory
*** [zh_CN.GB18030.cat] Error code 1

Stop in /usr/src/lib/libc.
*** [realinstall] Error code 1

Stop in /usr/src/lib.
*** [realinstall] Error code 1

Stop in /usr/src.
*** [reinstall] Error code 1

Stop in /usr/src.
*** [installworld] Error code 1

Stop in /usr/src.
*** [installworld] Error code 1

Stop in /usr/src.
Это значит неверное время... надо его править. Проверяем

Код: Выделить всё

zabbix# date
Sat Feb 25 15:36:04 MSK 2012
zabbix# ntpdate -b 193.225.14.162
25 Feb 15:36:31 ntpdate[25552]: the NTP socket is in use, exiting
убиваем процесс который не хочет работать что бы не мешал

Код: Выделить всё

zabbix# killall ntpd
и исправляем время

Код: Выделить всё

zabbix# /etc/rc.d/ntpdate onerestart
Setting date via ntp.
27 Mar 07:35:07 ntpdate[25831]: step time server 85.21.78.8 offset 34185366.855184 sec
После чего надо пересобрать мир заново...

Обновление портов:
Всё как обычно, только что бы не напороться на много граблей заранее читаем что в этой версии заменён менеджер пакетов, и потому прежде, чем пересобрать пакеты, делаем:

Код: Выделить всё

pkg_delete -f pkg-config-0.25_1
cd /usr/ports/devel/pkgconf
make install clean
подробно это раписано тут

Так же много времени сэкономили строчки в /etc/make.conf

Код: Выделить всё

OPTIONS_UNSET=DOCS IPV6 X11
WITH_PKGNG=yes
Ответить