Установка LAMP на Windows Subsystem Linux (WSL). Прощай XAMPP, WAMP и прочее.

Автор: | 09.04.2017


Добрый день друзья. В виду выхода большого обновления Windows в апреле 2017 под названием Creators Update  невозможно не обратить внимание на обновление платформы Ubuntu Server которая стала доступна после Anniversary Update. И если там все было очень плохо, достаточное количество лагов, багов,  одних только проблем с MySQL сервером была целая куча, фактически его невозможно было корректно запустить. Так же были значительные проблемы с работой SSH сервисов, которые по сути не позволяли корректно настроить подключение по SSH  в подсистему Linux. Это было слишком критично, например для отладки кода используя современные IDE, такие как PHPStorm. Но в обновлении Creators Update произошли очевидные фундаментальные изменения в этом направлении.
Это обширная статья посвящена тому как корректно настроить полнофункциональный Web  сервер для локальной разработки,  под управлением Windows Subsystem Linux далее WSL  в среде Windows 10

Итак, начнем с того, что в обновлении Creators Update платформа WSL прибывает уже на базе Ubuntu 16.04.1  с обновленной пакетной базой  и целой кучей фиксов и улучшений после Anniversary  Update.  Список всех изменений можно посмотреть здесь https://msdn.microsoft.com/en-us/commandline/wsl/release_notes. Также наконец доработан терминал Ubuntu в Windows  который называется Bash,  он перестал глючит в разметке, стал более стабилен. Визуально ничего не изменилось, но те кто использовал его в Anniversary почувтсвует разницу.

Теперь давайте попытаемся установить типичный Ubuntu like LAMP стек и посмотреть как он там работает и себя чувтсвует.
Предусловие:  У Вас должна быть установлена WSL  в системе.
Как это сделать описано тут: http://freshnotes.org/ustanovka-windows-subsystem-linux/

ПОДГОТОВКА WSL.

  1.  Если мы напишем команду lsb_release -a мы увидим что у нас на борту Ububtu 16.04.1  На момент написания статьи уже доступен второй корректирующий релиз для Ubuntu, по этому сразу обновимся до него используя следующие команды:

  2. Проверим  доставим допольнительные пакеты:

УСТАНОВКА APACHE2 (WSL).
Открываем bash консоль и выполняем команду

УСТАНОВКА MYSQL SERVER (WSL).
В консоли bash пишем команду

УСТАНОВКА PHP 5.6 (WSL).
В консоли bash выполняем следующие команды:

УСТАНОВКА TASKSEL (WSL)
В консоли bash пишем команду:

УСТАНОВКА SSH СЕРВЕРА:
Выполняем команду:


УСТАНОВКА EMAIL СЕРВЕРА POSTFIX:
Выполняем команду:

 

На этом этапе заканчиваем  с установками.  Теперь у нас на борту есть базовый набор для разработки Web Приложений (Apache, MYSQL, PHP, SSH, Email Server)
Теперь мы можеи  в любом установленом браузере в системе перейти по адресу http://localhost/  и что мы увидим :

Далее самое интересное.  Пробуем все это запустить.
Выполняем по очереди следующие команды:

Видим определенное количество ошибок, а именно:
Со стороны Apache —  Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEP

Cо стороны MySQL — No directory, logging in with HOME=/

Со стороны SSH —
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key

Со стороны POSTFIX —  postfix: Postfix is running with backwards-compatible default settings

Не спешите с выводами. Давайте разберемся что это вообще такое и как это исправить.

Исправляем APACHE (WSL)
На самом деле ошибка Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEP имеет отношение исключительно к среде в которой запущена Ubuntu 16.04 Server под WSL и адресует конкретно на процесс upstream.  Как нам известно на данный момент  WSL  не поддерживает upstream,  да все сервисы нам нужно будет запускать самостоятельно каждый раз после перезагрузки устройства. Вполне сомнительная проблема которая не создает вообще ничего. Решается достаточно просто, добавлением параметра в конфиг Apache. В консоли открываем файл:

В конец файла добавляем параметр :

Должно получится так:

После этого перезапускаемся и убеждаемся что более Apache не выводит эту ошибку.

ИСПРАВЛЯЕМ MYSQL (WSL).
Команда разработчиков Bash On Linux  в промежутке между Anniversary и Creators обновлениями очень много внимания уделили работе нативного сервера MySQL  в среде WSL  что очень позитивно сказалось на стабильности и отсутствии фантомных ошибок конфигурации и прочей ерунды которая фактически ставила в тупик корректную работу нативного сервера баз данных в среде WSL.
Ошибка MySQL сервера  No directory, logging in with HOME=/  означает то, что MySQL пыталась создать папку для своих пользователей в папке home , но получила отказ, вероятно по пермишинам папки . Но это в корне не правильно, потому что папка home должна быть предназначена исключительно для физических пользлвателей но никак не для фиктивных пользователей mysql. Решаем эту проблему путем смены пути к этой папке в папку mysql.

  1. Останавливаем MySQL сервер

  1. Меняем домашнюю директорию  MySQL с несуществующего на исходную директори, где она и должна быть:

  1. Запускаем MySQL  сервер и проверем отсутствие ошибки:

ИСПРАВЛЯЕМ SSH SERVER (WSL).
Здесь вообще все просто.  По непонятным мне причинам в штатной сборке Ubuntu Server от Canonical для WSL,  openssh-server установлен не полностью. Соответственно не сгенерированы дефолные ssh ключи. Проблема решается простой переустановкой сервера. Выполняем следующие команды в терминале:

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

ИСПРАВЛЯЕМ POSTFIX (WSL).
Эта ошибка мне не была понятна. Я даже не стал разбираться а просто отключил режим совместимости, как было указано в терминале следующими командами

Вот таким образом решаются все ошибки связанные с нативным LAMP стеком в Creators Update.
Результат перезапуска всех сервисов

На этом все.  Любые вопросы или проблемы кидайте в коменты, будем разбираться.

 

Comments

comments

Установка LAMP на Windows Subsystem Linux (WSL). Прощай XAMPP, WAMP и прочее.: 3 комментария

  1. kenyawestdev

    Сделайте такую же статью про NodeJS + Angular 4 + MongoDB + Express, хотя там всё ещё проще.

Оставьте комментарий