vashal

 
<<< Назад

Есть ли жизнь на PHP8?

Сказ о том, как я на PHP8 переходил.

Не так давно новые дистрибутивы linux принесли с собой установку PHP8 по-умолчанию. Факт данный - это обычная эволюция. Что-то новое всегда заменяет собой что-то старое. Но для пользователей Majordomo PHP8 принес с собой много проблем. Он стал более строгим, и там, где раньше позволялось "допустить неорганизованность", теперь, в лучшем случае, сыплет ворнингами, в худшем, вызывает исключения.
А так как 90% кода нашего любимого Majorfomo - это PHP, это напрямую отразилось на системе. Благодаря стараниям автора, проделана большая и нудная работа по приведению основной части кода в рабочее состояние на PHP8, а с модулями, увы, все печально. Большинство модулей, как это ни прискорбно, заброшены авторами и никоим образом не поддерживаются...
В Телеграм-чате то и дело задаются вопросы типа "Поставил MDM на новый ****биан, вроде работает, но не всё, циклы не стартуют, ПОМОГИТЕ!!!". Любимый совет завсегдатаев того самого чата таков "Поставь PHP7 и будет тебе щастье". И вроде бы они и правы, учитывая описанную мной выше ситуацию, но, с другой стороны... С другой стороны все развивается, не стоит на месте, соответственно и Majordomo просто необходимо развиваться, а установка PHP7 - увы, шаг назад.
После того, как Сергей анонсировал поддержку PHP8, я решил, что пора свои модули тоже проврить на совместимость с новой версией языка. Расчехлил старенькую 3ю малинку, накатил свежий Распбиан, установил МДМ и он заработал! С отвалами циклов, ошибками, но заработал. А вот поставить свои модули у меня не получилось. Была какая-то ошибка в функции Инсталл, не помню уже конкретно. Вроде поправил все ошибки в модулях, выложил обновления и.. все. Продолжил дальше сидеть на PHP7 и радоваться, что все работает. Пробовал, конечно поставить всякие модули, которые использую для проверки их работоспособности на будущее. Помню, как модуль Broadlink намертво ложил систему ))) Но в общем и целом, малинка просто работала вхолостую и подмигивала мне зеленым светоиодом, приглашая продолжить тесты.
Для дальнейшего понимания стоит рассказать, что Majordomo у меня установлен на домашнем сервере - полноценный комп с i3-9100F, 8 гигами оперативки, 5м рейдом из 4 стареньких 2х террабайтных дисков и одельным HDD на 320 гигов для системы. Изначально там стоял кокой-то б/у AMD с Алиэкспресса с б/у материнкой оттуда же. Для ОС изначально был выбран Debian 10, который идет в комплекте с Openmediavault 5 (на то время), так как сервер все-же не в последнюю очередь - домашнее хранилище, а чистый Debian позволяет накрутить на него все, что угодно. Ну я и накрутил на него, собственно, MDM, Nextcloud, Plex, и много всего еще по мелочи. По итогу китайская материнка отработала чуть больше года и скоропостижно скончалась. Таким образом произошел апгрейд сервера до указанной выше конфигурации. К тому времени вышла новая версия Openmediavault 6 и я решил развернуть все с нуля уже на Debian 11. С развертыванием проблем не возникло, благо у меня каждый день ночью полностью бэкапится весь системный диск на рейд.
Время шло, был анонсирован Debian 12, потом Openmediavault 7. Я по натуре человек, который любит все новое, вышла новая прошивка - надо поставить, новая версия ОС - пора обновляться, и т.д. А тут... Тут PHP8... Последней каплей стало то, что Nextcloud перестал обновляться, если установлен PHP7, и тогда я решил: "Пора! Если никто не будет переходить на новый PHP, то и Majordomo перестанет развиваться, ибо некому будет исправлять ошибки в новых системах. Так пусть я внесу свой посильный вклад в это хорошее общее дело."
В Openmediavault есть скрипт, который автоматом обновляет Debian и саму OMV до новых релизов. А если он есть, грех им не воспользоваться. И вот, собрав всю волю в кулак, я запустил этот скрипт...
И знаете, каких-то глобальных проблем не было, хотя на сервере и стоит много всякого, но практически все успешно обновилось и запустилось без каких-то либо действий с моей стороны. А по поводу Majordomo опишу подробней, вдруг кто-то захочет повторить мой опыт? ;)

ОТСЮДА ЧИТАТЬ ТЕМ, КТО НЕ ЛЮБИТ МНОГОБУКАВ

Итак, первое что делаем после обновления системы - доустанавливаем модули PHP, почему-то они не установились новых версий, хотя ранее в системе присутствовали:
sudo apt install php8.2-fpm php8.2-mysql php8.2-common php-json php8.2-opcache php8.2-readline php8.2-zip php8.2-bz2 php8.2-cli php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-redis
Поставили? Отлично! Далее идем в конфиг вашего сайта Nginx и меняем php7.4-fpm на php8.2-fpm. По настройкам Nginx у меня в блоге есть отдельная статья. По настройкам Apache подсказать, увы не могу, ибо в Openmediavault используется Nginx.
Ну и на этом, собственно, всё. Все настройки завершены. Пробуем стартануть Majordomo: sudo systemctl restart majordomo и проверяем ее статус sudo systemctl status majordomo. Если у вас нет несовместимых (читай неисправленных) с PHP8 модулей - запуск пройдет успешно. Если же такие модули присутствуют - это уже диагностика и исправление кода. Для начала надо запустить цикл из консоли и посмотреть, на что ругается PHP php /var/www/папкаMDM/cycle.php. Исправлем ошибки и радуемся обновленной системе )

Ну а далее, я пару дней исправлял ядро системы и используемые мной модули от исключений, которых было совсем мало и от ворнингов, которые летели сотнями, а то и тысячами (5 мегабайт лога забивали за пару минут). На данный момент практически все ворнинги, которые вылазят при работе системы у меня исчезли. Воринги, которые появляются при перемещениях по админке, я исправлять не стал, итак проделал очень много работы, а эти на работу системы никак не влияют. Может потом как-нибудь и до них руки дойдут. А пока что все исправления уже на Гите и у вас в системе, если вы, как и я, любите обновляться ;)

В итоге, я получил полностью рабочую и стабильную Majordomo на PHP8. Как говорится "Не так страшен Чёрт, как его малюют!". Засим откланиваюсь и желаю всем успешных обновлений, и помните - все в ваших руках! ;)

Бонус:
Список исправленных мною модулей:

  • magichome
  • yadevices
  • broadlink
  • zigbeedev
  • xiamimiio
  • tyua
  • nspanel
  • rumbler
  • earthquakes
  • yandexhome
  • lgwebostv
  • telegram
  • homekit
  • app_gpstrack
  • rhvoice
  • optimizer
  • lgsmartthings
  • livegpstracks

Последний модуль отсылать автору не стал, потому как внес в него много изменений, убрал лишние записи в БД, исключил запись одинакового местоположения. Если кому интересно, можете скачать его из моего Гита.

Обсуждение (0) (8)

Смотрите так же:
17.05.2023 Алиса, заведи машину!
07.12.2022 Управление гирляндами Twinkly
29.09.2022 PHP cURL на Windows и штатной установке
15.02.2020 Конфиг nginx
13.06.2019 gps-trace.ru

Иркутск, Россия

На форуме: V.A.S.t