
Извините, но я новичок в системном администрировании и совсем новичок в Linux (полный новичок), поэтому прошу вас о помощи, потому что понятия не имею, что вызывает это (как я уже говорил, я совсем новичок в Linux). Я случайно удалил (мне повезло...) всякое с tasksel, пытаясь установить GUI, а затем переустановил некоторые из них (по крайней мере те, которые я смог вспомнить). Сейчас у меня не запускается apache2:
и синтаксическая ошибка в строке 146 файла /etc/apache2/apache2.conf выглядит так
Третья ошибка в /etc/apache2/mods-enabled/php7.1.load выглядит так:
Действительно, в /usr/lib/apache2/modules/ нет такого файла как "libphp7.1", только "libphp8.1" (извините за новые скриншоты здесь) может кто-нибудь подсказать, что мне теперь делать? Изменить файл конфигурации с 7.1 на 8.1 или просто установить 7.1?
решение1
Вероятнее всего, версия PHP изменилась в вашей системе (применимо для Debian/Ubuntu и производных, в других дистрибутивах некоторые пути могут отличаться), но не в вашей конфигурации Apache, выполните:
php -v
Проверьте, какая версия загружается, выполнив:
ls -l /etc/apache2/mods-enabled/php*
тогда если ваша версия отличается от той, что загружается Apache, предположим, что результат будет
lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.conf -> ../mods-available/php7.4.conf
lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.load -> ../mods-available/php7.4.load
и ваша новая версия теперь 8.1, проверьте, какие модули доступны для запуска:
ls -l /etc/apache2/mods-available/
-rw-r--r-- 1 root root 855 jun 13 08:43 php7.4.conf
-rw-r--r-- 1 root root 102 jun 13 08:43 php7.4.load
-rw-r--r-- 1 root root 855 ago 15 07:24 php8.1.conf
-rw-r--r-- 1 root root 101 ago 15 07:24 php8.1.load
в списке отображаются старые (не работающие) и новые php8.1, выполните следующее, чтобы создать новые символические ссылки на эти новые версии модулей
sudo ln -s /etc/apache2/mods-available/php8.1.conf /etc/apache2/mods-enabled/php8.1.conf
sudo ln -s /etc/apache2/mods-available/php8.1.load /etc/apache2/mods-enabled/php8.1.load
удалить старые символические ссылки
sudo rm /etc/apache2/mods-enabled/php7.4.*
и перезапустите Apache
sudo service apache2 restart
решение2
libphp-7.1.so
либо отсутствует в вашей системе, либо находится в месте, не настроенном таким образом, чтобы Apache мог его найти. Вероятно, он был удален во время обновления чего-то, но трудно сказать.
Вы обнаруживаете, что PHP — это беспорядок в поддержке на сервере Linux. Особенно на чем-то вроде Ubuntu LTS (который может быть вашим дистрибутивом, а может и нет, это только моя точка зрения), где вы получаете стабильность LTS, но затем попадаете в затруднительное положение, которое заставляет вас отставать на месяцы или годы от новых релизов другого программного обеспечения, которое зависит от новой функциональности «пакета X» для корректной работы. Ниже описано, как я справляюсь с этим на Ubuntu. Если вы используете Redhat, Slack, SuSE или Yggdrasil Linux, это не поможет.
Вы не можете просто установить более новую версию PHP, не столкнувшись в какой-то момент с проблемами зависимости с программным обеспечением ОС. Иногда эти зависимости могут столкнуться с функциональностью MySQL/MariaDB, что может привести к суперзапутанной проблеме типа красной таблетки. Как один человек прокомментировал выше, иногда версия PHP, входящая в стандартную ОС, настолько устарела, что ее нецелесообразно использовать (что, безусловно, касается всего, что ниже PHP 8.0, и, безусловно, сомнительно для 7.4 по состоянию на 29.03.22). Также это сбивает с толку новых администраторов, потому что«почему в вашей ОС установлено настолько устаревшее программное обеспечение?», верно? Ubuntu, по-видимому, делает бэкпорт проблем безопасности в LTS-релизы, но для этого нужно изрядно покопатьсяпроверятьзаданная CVE фактически исправлена в пакетах LTS. Иногда исправление будет доступно и уже реализовано в tarball/git-репозитории заданного пакета, но патч/бэкпорт все еще ждет, когда сопровождающий Ubuntu фактически внесет его в deb-пакет, чтобы вы могли его установить. Выход за рамки и установка программного обеспечения без репозитория опасна с точки зрения безопасности, потому что тогда вы полагаетесь на ручной процесс, чтобы не забыть обновить этот OOB-пакет, и это никогда не сработает. Администраторы уходят, люди забывают.
К счастью, есть этот мейнтейнер Debian Ондржей Сури (больше похожий на волшебника, на самом деле) из Чешской Республики, который взял на себя смелость выложить репозиторий, включающий все основы для обновления PHP в системе Debian/Ubuntu. Вы можетенастроитьэтот чудесныйрепои обновить PHP и все еще иметь возможность его поддерживать. В качестве бонуса, вы можете обновитьNginXиАпачичерез его репозиторий, так как некоторые из новых функций PHP требуют изменений в этих пакетах. Вы, вероятно, найдете некоторые лучшие инструкции по одной из ссылок выше, но есть несколько сайтов, которые могутпроведу вас через этоа также любые необходимые изменения стека Nginx или Apache.
Одно предостережение: перед установкой репозитория Ондржея Сури получите списоквсепакеты PHP/NginX/Apache, установленные в данный момент (например: dpkg -l | egrep -i '(apache|nginx|php)'
(или что-то похожее заклинание apt
aptitude
apt-get
). Имена этих пакетов иногда меняются, а зависимости иногда приносят смесь версий пакетов PHP. Например, что-то случилось смбстрингпакет пару версий PHP назад. Это потребовало некоторыхручное вмешательство
Конечно, иногда всего этого можно избежать, обновив ОС (например, «Crazy Camel» -> «Damaged Dingo»), но даже в этом случае в последнем выпуске LTS могут отсутствовать передовые функции, необходимые некоторым сторонним стекам, и вы все равно окажетесь в той же ситуации.
В любом случае, удачи и не забудьте сделать снимок вашей виртуальной машины, прежде чем что-либо делать!