为 Linux 在 Windows 子系统上安装 Apache

Installing Apache on Windows Subsystem for Linux

刚刚更新到最新的 Windows 10 版本(内部版本 14316),我立即开始使用 WSL,Linux 的 Windows 子系统,它应该 运行 Ubuntu 安装在 Windows。

也许我尝试在其上安装 Apache 来尝试不可能的事情,但是请有人向我解释为什么这不可能。

无论如何,在安装过程中(sudo apt-get install apache2),正确下载并安装依赖项后,我收到以下错误消息:

initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: No such file or directory
runlevel:/var/run/utmp: No such file or directory
 * Starting web server apache2                                                 *
 * The apache2 configtest failed.
Output of config test was:
mktemp: failed to create directory via template '/var/lock/apache2.XXXXXXXXXX': No such file or directory
chmod: missing operand after '755'
Try 'chmod --help' for more information.
invoke-rc.d: initscript apache2, action "start" failed.
Setting up ssl-cert (1.0.33) ...
Processing triggers for libc-bin (2.19-0ubuntu6.7) ...
Processing triggers for ureadahead (0.100.0-16) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...
WARN: / is group writable!

现在,我了解到 Apache2 似乎缺少一些文件夹和文件才能正常工作。在我开始更改任何会干扰我的 Windows 安装的内容之前,我想问一下是否有不同的方法?另外,我应该担心 / 是组可写的还是这只是标准的 Windows 行为?

注意输出中的以下内容

failed to create directory via template '/var/lock/apache2.XXXXXXXXXX': No such file 

我尝试列出 /var/lock。它指向 /run/lock,它不存在。

创建目录

mkdir -p /run/lock

现在应该可以安装(您可能需要先清理安装)

为了消除这个警告

Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEP

将此添加到 /etc/apache2/apache2.conf

的末尾
AcceptFilter http none

您必须以管理员模式启动 bash.exe 以避免出现很多与网络相关的问题。 我安装 Lamp (Apache/MySQL/Php) 没有任何问题:

  • 以管理员模式启动bash.exe

  • 类型:sudo apt-get install lamp-server^

  • /etc/apache2/apache2.conf 添加这两行:

服务器名称本地主机

AcceptFilter http none

然后你就可以启动apache了: /etc/init.d/apache2开始

根据此处的重要建议,我编辑了 apache2.conf 并在收到上述所有各种错误后将以下内容插入到文件末尾,然后 apache2 在 debian wsl 包上运行良好:

Servername localhost
AcceptFilter http none
AcceptFilter https none