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


Добрый день друзья. В виду выхода большого обновления 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, по этому сразу обновимся до него используя следующие команды:
    sudo apt update
    sudo apt upgrade

  2. Проверим  доставим допольнительные пакеты:
    sudo apt install build-essential dkms
    sudo apt-get install linux-headers-$(uname -r)
    sudo apt-get install linux-headers-generic

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

sudo apt install apache2

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

sudo apt install mysql-server

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

sudo add-apt-repository ppa:ondrej/php
sudo apt-get -y update
sudo apt-get -y install php5.6 php5.6-mcrypt php5.6-mbstring php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-intl php5.6-xsl php5.6-zip php5.6-soap php5.6-xdebug php5.6-dev

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

sudo apt install tasksel

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

sudo tasksel install openssh-server


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

sudo tasksel install postfix

 

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

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

sudo service apache2 start
sudo service mysql start
sudo service ssh start
sudo service postfix start

Видим определенное количество ошибок, а именно:
Со стороны 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. В консоли открываем файл:

sudo nano /etc/apache2/apache2.conf

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

AcceptFilter http none

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

После этого перезапускаемся и убеждаемся что более 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 сервер
sudo service mysql stop
  1. Меняем домашнюю директорию  MySQL с несуществующего на исходную директори, где она и должна быть:
sudo usermod -d /var/lib/mysql/ mysql
  1. Запускаем MySQL  сервер и проверем отсутствие ошибки:
sudo service mysql start

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

sudo apt-get remove openssh-server
sudo apt-get install openssh-server

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

sudo service ssh restart

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

sudo postconf compatibility_level=2
sudo service postfix restart

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

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

 

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

  1. kenyawestdev

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

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

%d такие блоггеры, как: