Home

upgrade php 5.4 (port deleted) to 5.6

Для справки: дело происходит на FreeBSD 9.3-STABLE/amd64.

Дошли руки проапгрейдить php 5.4. Загвоздка оказалась в том, что порт уже удалён (port deleted) и pkg его обновлять не хочет и pkg upgrade свою магию не творит.

Также оказалось, что perl 5.16 тоже уже port deleted.

Поэтому сначала обновляем perl до 5.20

pkg upgrade по вышеуказанной причине (не видит, что php 5.4-* надо апгрейдить) я не использовал, потому что он удалит все упоминания про установленные php расширения и нужно будет разбираться что там было установлено и переустанавливать, а если что-то не переустановить, но по всей видимости нарисуются старые версии файлов где-нибудь в системе, которые могут всплыть через какое-то время и потом придётся ломать репу, а что собственно происходит.

поэтому сначала мы обновляем дерево портов

#svn up /usr/ports/

далее

#portupgrade pkg

#portupgrade portupgrade

заменяем origins для perl'а.

#pkg set -o lang/perl5.16:lang/perl5.20

далее редактируем файл make.conf

#vi /etc/make.conf

добавляем/исправляем туда/там строку

DEFAULT_VERSIONS+=perl5=5.20

Также я туда сразу добавил строку

DEFAULT_VERSIONS+=php=56

теперь собственно обновляем perl

#portupgrade -fr lang/perl5.20

 

Теперь переходим собственно к обновлению php 5.4

Первым делом сохраняем список установленных модулей.

#pkg info php5\* > ~/installed-php-ports-list

#pkg set -o lang/php5:lang/php56

#portupgrade -fr php5

И вот тут как раз и возникла загвоздка. Ни portupgrade ни pkg upgrade не видят, что нужно обновить кучу php-extensions, а обновляют только сам php5 до php56.

Поэтому лезем в файл ~/installed-php-ports-list и видим там список модулей.

Каждую строку нужно преобразовать в строку вида (при этом строки php5-5.4.45 и php5-extensions-1.7 нужно удалить)

yes|pkg install php56-bz2

Ещё один момент, прежде чем мы продолжим. Я решил удалить модули, которые мне за эти годы ни разу не пригодились (а это был апгрейд не www сервера) и при этом по умолчанию они не включены в php 5.6. Чтобы посмотреть, что там по умолчанию в php 5.6 можно сделать make config в cd /usr/ports/lang/php56-extensions/ (пока мы ни разу там ничего не меняли, ясное дело)

Так вот php56-bz2 и некоторые другие я решил удалить, а для того, чтобы не осталось непонятных файлов и (умозрительно, так как на деле не пробовал) скорее всего тупо #pkg delete php56-bz2 не сработает, потому что этот модуль от php56 у меня ещё не был установлен, поэтому его я сначала установил, а потом тут же удалил. При этом при установке pkg удаляет версию модуля для php54 и ставит для php56, здесь всё хорошо.

Поэтому после модулей, которые я хочу удалить я добавил строку вида

yes|pkg delete php56-bz2

Ещё один тонкий момент с php56-gd.

В первую попытку он не устанавливается, потому что происходит конфликт jpeg и jpeg-turbo, поэтому строку c php56-gd нужно исполнить дважды. В первом проходе pkg обновляет php5-gd и неудачно пытается поставить jpeg. Во втором проходе pkg удаляет jpeg и ставит jpeg-turbo.

yes|pkg install php56-gd
yes|pkg install php56-gd

В моём случае список получился такой:

yes|pkg install php56-bz2
yes|pkg delete php56-bz2
yes|pkg install php56-ctype
yes|pkg install php56-curl
yes|pkg install php56-dom
yes|pkg install php56-filter
yes|pkg install php56-ftp
yes|pkg install php56-gettext
yes|pkg delete php56-gettext
yes|pkg install php56-hash
yes|pkg install php56-iconv
yes|pkg install php56-json
yes|pkg install php56-mbstring
yes|pkg delete php56-mbstring
yes|pkg install php56-mcrypt
yes|pkg delete php56-mcrypt
yes|pkg install php56-mysql
yes|pkg install php56-mysqli
yes|pkg install php56-openssl
yes|pkg install php56-pdo
yes|pkg install php56-pdo_sqlite
yes|pkg install php56-phar
yes|pkg install php56-posix
yes|pkg install php56-session
yes|pkg install php56-simplexml
yes|pkg install php56-snmp
yes|pkg install php56-sqlite3
yes|pkg install php56-tokenizer
yes|pkg install php56-xml
yes|pkg install php56-xmlreader
yes|pkg install php56-xmlwriter
yes|pkg install php56-zip
yes|pkg delete php56-zip
yes|pkg install php56-zlib
yes|pkg delete php56-zlib
yes|pkg install php56-gd
yes|pkg install php56-gd

Дальше мы смотрим, что у нас там происходит c php

#pkg info|grep -i php

Должно остаться php5-extensions-1.7 и mod_php5-5.4.38.1. Остальное должно быть от версии php56. В таком случае обновляем оставшееся:

#yes|pkg delete php5-extensions-1.7
#cd /usr/ports/lang/php56-extensions/
#make reinstall clean

#yes|pkg delete mod_php5-5.4.38,1
#cd /usr/ports/www/mod_php56/
#make install clean

Далее смотрим #portupgrade -an

Должно быть что-то типа того:

 Upgrade tasks 131: 89 done, 0 ignored, 0 skipped and 0 failed

Вот этого необходимо добиться: 0 ignored, 0 skipped and 0 failed. Что означает, что у нас не осталось старых, битых, убитых или игнорируемых из-за старых и убитых портов.

Дальше я делаю #portupgrade -afrR, что переустановит все установленные порты по всем зависимостям. Тут иногда нужно будет нажимать enter на синих экранах.

Ну и далее #reboot, чтобы все сервисы (apache24, unbound, postfix, etc) стартовали в новых версиях.

UPD.

Нарисовалась ошибка при обновлении одного порта.

** Listing the failed packages (-:ignored / *:skipped / !:failed)
        * databases/ruby-bdb (ruby20-bdb-0.6.6_4)

Лечим так (принудительно пересобирая):

#portupgrade -f ruby20-bdb-0.6.6_4

Теперь нормуль.

Настройка FreeBSD 10 для интернет доступа

Настраиваем FreeBSD сервер для доступа других компьютеров в интернет.

1. Устанавливаем FreeBSD 10.2.

2. Настраиваем NAT на FreeBSD 10

3. Устанавливаем DHCPd

4. Настраиваем local_unbound для обслуживания DNS запросов

 

Перенос физического сервера FreeBSD 8.4 на vmWare ESXi 6

Делал по мотивам

http://security-corp.org/administration/sys_admin/5566-variant-migracii-freebsd-s-fizicheskogo-servera-v-virtualnuyu-sredu-vmware-esxi-s-pomoschyu-nfs.html

0. Готовим физический сервер для переноса.
Все службы, работающие с данными в режиме записи должны быть остановлены, например, mysqld и apache. Это можно сделать потом, перед переносом данных с помощью pax.

0.0. создаём файл /etc/exports, содержащий строку (ip и маску указываем такие, откуда будет приходить виртуальный сервер). Если диск был разбит на несколько разделов, то должно быть несколько строк, по строке на раздел.
/ -maproot=root -network 172.17.17.17 -mask 255.255.255.255

0.1.
/etc/rc.d/rpcbind onestart
/etc/rc.d/nfsd onestart
на эту команду /etc/rc.d/mountd onestart оно ругается, потому что mountd запустился сам перед запуском nfsd

0.2. Если всё верно, то будет что-то типа того:

# mount
/dev/ad4s1a on / (ufs, NFS exported, local, soft-updates)
devfs on /dev (devfs, local, multilabel)

1. Теперь работаем с виртуальной машиной.

1.0. Загружаемся с ISO образа FreeBSD 10.2.

1.1. Начинаем устанавливать систему (мне лень искать, как размечать HDD, поэтому я поставлю систему, а потом отформатирую раздел):
Keymap Selection
Set Hostname вводим что попало
Distribution select снимаем все галки, они нам не нужны
Partitioning выбираем Auto (UFS)
Partition выбираем Entire Disk
Partition Scheme на GPT 8.4 отлично встаёт
Partition Editor нажимаем Finish
Confirmation выбираем Commit
И оно побежало устанавливаться
Дальше оно хочет пароль на root пользователя, мы его не вводим, сетевую карту не настраиваем, юзера не добавляем. Доходим до конца и

1.2. Заходим в Live CD

ls /dev показывает нам три раздела da0p1 da0p2 (это /) da0p3 (это swap)

# newfs /dev/da0p2

# ifconfig em1 172.17.17.17/24

# /etc/rc.d/rpcbind onestart

# /etc/rc.d/nfsclient onestart

файловую систему виртуального сервера монтируем в /mnt
# mount /dev/da0p2 /mnt

Файловую систему физического сервера монтируем в /var/nfs
# mkdir /var/nfs
mount_nfs 172.17.17.172:/ /var/nfs

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

Переносим данные:

# cd /var/nfs
# pax -p eme -X -rw . /mnt

Оно будет ругаться на разные файлы сокетов - не обращаем внимания.

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

На виртуальном сервере идём редактировать /etc/fstab, который сейчас находится в /mnt/etc/fstab
Из 1.2. мы помним, что /dev/da0p2 это корень, а /dev/da0p3 это swap
Меняем названия интерфейсов в /mnt/etc/rc.conf, если они изменились.

Перезагружаем виртуальный сервер и оно полетело.

Как перенести WIndows Server 2008 R2 на другой жёсткий диск

Не нужно ни Acronis bla bla (тем более что с обычный оно это делать не хочет, говорит типа купите бузинес версию) ни Windows Backup (почитал отзывы о методе в интернете - не порадовался, с учётом того, что нужен какой-то промежуточный носитель).

Основная мысль метода - сделать зеркало работающей системы на другом диске, а потом отключить старое зеркало.

Windows 8.1 так не переносится - новая копия не загружается. Видимо нужно шаманить с mbr и прочими тонкостями загрузки.

1. Подключаем новый диск/RAID в систему.

2. Грузимся и входим в систему. Она должна установить драйвера и увидеть этот диск/RAID.

3. Открываем Управление дисками. (В проводнике правой кнопкой на "Компьютер" и выбираем "Управление". "Хранилице" - "Управление дисками".

4. Сначала нужно зазеркалировать раздел "Зарезервировано системой". Оба диска должны быть в одинаковых разметках (MBR или GPT). Новый диск можно конвертировать в нужный формат, нажав на нём правую кнопку. Если новый диск меньше старого, то для переноса Windows нужно сначала уменьшить размер старого раздела с системой. Правой кнопкой на разделе и "Сжать том".

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

6. Ждём пока оно завершит ресинхронизацию.

7. Выключаем компьютер, отключаем старый диск/RAID.

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

9. Заходим в "Управление дисками" и отключаем недоступные зеркала обеих партиций, они будут соответствующим образом помечены.

10. Ставим в Загрузке системы, чтобы windows всегда грузилась со вторичного плекса. "Система" - "Дополнительные параметры системы".

11. Радуемся жизни.