在适用于 Linux 的 Windows 子系统上安装 Apache

Posted

技术标签:

【中文标题】在适用于 Linux 的 Windows 子系统上安装 Apache【英文标题】:Installing Apache on Windows Subsystem for Linux 【发布时间】:2016-07-27 22:36:36 【问题描述】:

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

也许我通过尝试在其上安装 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 行为?

【问题讨论】:

mkdir /var/run/httpd 【参考方案1】:

请注意输出中的以下内容

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

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

创建目录
mkdir -p /run/lock

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

【讨论】:

谢谢。我试过这个,但它仍然给我错误,最值得注意的是: initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: No such file or directory [Mon Apr 11 01:30:25.532677 2016] [core:crit] [pid 3046:tid 140694537176960] (22)无效参数:AH00069:make_sock:地址 [::]:80,apr_socket_opt_set:(IPV6_V6ONLY) (22)无效参数:AH00072:make_sock:无法绑定到地址 0.0.0.0:80 没有可用的监听套接字,正在关闭 AH00015:无法打开日志 您是否有可能在端口 80 上侦听另一台服务器?我知道这是微不足道的,但它发生在我们最好的人身上。尝试更改 conf 文件中的侦听套接字? 你的方法对我有用。但是,我仍然遇到这两个错误,但是 apache 已启动并正在运行 :)!:[Tue Apr 12 12:31:22.726611 2016] [core:crit] [pid 979:tid 140694537176960] (22)Invalid argument: AH00069: make_sock: for address [::]:80, apr_socket_opt_set: (IPV6_V6ONLY)[Tue Apr 12 12:31:22.726611 2016] [core:warn] [pid 979:tid 140694537176960] (22)Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT 在端口 100 上运行它有效。产生与 Laurens 报告的相同的错误,但仍然有效。但是,我看不到端口 80 上运行的内容。 lsof -i :80 不返回任何内容(lsof -i 也不返回)。 你是对的,Skype 正在监听 80 端口。非常感谢【参考方案2】:

为了消除这个警告

Invalid argument: AH00076: Failed to enable APR_TCP_DEFER_ACCEP

将此添加到/etc/apache2/apache2.conf的末尾

AcceptFilter http none

【讨论】:

这到底是做什么的? 这是我需要的。谢谢! @megamaiku 这是警告,详情请看:github.com/microsoft/WSL/issues/1953【参考方案3】:

你必须以管理员模式启动 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 启动

【讨论】:

感谢您的信息。即使没有管理员模式,这也适用于我。唯一的区别是,我在安装后立即重新启动了 Apache。 @MarisB。完全正确。您需要在安装后立即重新启动服务以使其正常工作。 我尝试了 sudo apt-get install lamp-server 但它无法获取 php 包并且似乎没有 apache2 目录所以我认为一旦它无法获得剩余的 30 整个事情就会失败包裹的百分比。 404 Not Found [IP: 91.189.88.149 80] Err:7 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-mysql amd64 7.2.17-0ubuntu0.18.04.1 404 Not Found [IP: 91.189.88.149 80] E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/php7.2/php7.2-common_7.2.17-0ubuntu0.18.04.1_amd64.deb 404 Not Found [IP: 91.189.88.149 80] E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/php7.2/libapache2-mod-php7.2_7.2.17-0ubuntu0.18.04.1_amd64.deb 404 Not Found [IP: 91.189.88.149 80] E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/php7.2/php7.2-mysql_7.2.17-0ubuntu0.18.04.1_amd64.deb 404 Not Found [IP: 91.189.88.149 80] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?【参考方案4】:

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

Servername localhost
AcceptFilter http none
AcceptFilter https none

【讨论】:

以上是关于在适用于 Linux 的 Windows 子系统上安装 Apache的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Linux 的 Windows 子系统安装指南 (Windows 10) (微软官方文档)

Windows操作系统无法打开适用于Linux的文件名

在Windows上运行Linux

win10开启适用于linux的子系统重启后依旧没有开启

Anaconda Python virtualdev 在适用于 Linux 的 Windows 子系统(Ubuntu 14.04)上找不到 libpython3.5m.so.1.0

为啥没有适用于 Linux 的 DirectX API?