Добрый день друзья. В виду выхода большого обновления 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.
- Если мы напишем команду lsb_release -a мы увидим что у нас на борту Ububtu 16.04.1 На момент написания статьи уже доступен второй корректирующий релиз для Ubuntu, по этому сразу обновимся до него используя следующие команды:
sudo apt update sudo apt upgrade
- Проверим доставим допольнительные пакеты:
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.
- Останавливаем MySQL сервер
sudo service mysql stop
- Меняем домашнюю директорию MySQL с несуществующего на исходную директори, где она и должна быть:
sudo usermod -d /var/lib/mysql/ mysql
- Запускаем 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.
Результат перезапуска всех сервисов
На этом все. Любые вопросы или проблемы кидайте в коменты, будем разбираться.
Сделайте такую же статью про NodeJS + Angular 4 + MongoDB + Express, хотя там всё ещё проще.
удваиваю за ноду
Огромное спасибо, все прошло как по маслу.