如何在MAMP服务器上安装mod_ftp模块

4

背景:

我最近安装了MAMP,并将其用作生产服务器。该服务器设置没有附带FTP服务器,根据我所读的内容,您可以通过Apache模块mod_ftp设置FTP服务器。虽然我可以快速学习,但我不是Apache软件或服务器管理员的专家。我可以到达以下点,然后就卡住了。有谁能帮帮我吗?

我从此处检出了存储库中的mod_ftp模块文件: http://svn.apache.org/repos/asf/httpd/mod_ftp/trunk/ 然后我将其解压缩到:

/Applications/MAMP/mod_ftp

我打开了README-FTP文件(这里):
http://svn.apache.org/repos/asf/httpd/mod_ftp/trunk/README-FTP README-FTP:
To build and install as a DSO outside of the httpd source
build, from the ftp source root directory, simply;

    ./configure.apxs
    make
    make install

...

To build static, or as a DSO but within the same build as httpd,
copy the entire ftp source directory tree on top of your existing 
httpd source tree, and from the httpd source root directory

    ./buildconf  (to pick up ftp)
    ./configure --enable-ftp {your usual options}

and proceed as usual.

一些问题:

  1. "从 ftp 源根目录构建和安装一个 httpd 外的 DSO"——ftp 源根目录是我从存储库中签出的压缩文件创建的 mod_ftp 文件夹吗?

  2. 什么是 "在 httpd 源构建之外" 的意思?——这是我在 httpd.conf 中设置为 "/Applications/MAMP/Library" 的 ServerRoot 值吗?

  3. 同样,"在同一个 httpd 构建内" 的意思是什么——这指的是哪个位置?

  4. 我如何知道我需要静态构建还是 DSO 构建?

  5. 声明 "将整个 ftp 源目录树复制到现有的 httpd 源树顶部" 实际上要求我做什么?(顶部的意思是在 httpd 源树的父目录中,还是在相同的目录中?)

  6. 如果你已经走到了这里,我想表扬你!

从这一点开始,我选择了第一种选项,并在我的终端中输入了 README-FTP 中看到的命令。

这是我的终端内容:

$ ./configure.apxs
Configuring mod_ftp for APXS in /usr/sbin/apxs
Detecting features

Finished, run 'make' to compile mod_ftp

Run 'make FTPPORT=8021 install' to install mod_ftp
(The default FTPPORT is 21 if not specified)

The manual pages ftp/index.html and mod/mod_ftp.html
will be installed to help get you started.

The conf/extra/ftpd.conf will be installed as an example
for you to work from.  In your configuration file,
  /private/etc/apache2/httpd.conf
uncomment the line '#Include conf/extra/ftpd.conf'
to activate this example mod_ftp configuration.
$ make
Making all in modules/ftp
$ sudo make install
Password:
Making install in modules/ftp
/usr/share/apr-1/build-1/libtool --silent --mode=install cp mod_ftp.la /usr/libexec/apache2/
Installing configuration files
for i in /private/etc/apache2/httpd.conf /private/etc/apache2/original/httpd.conf; do \
        if test -f $i; then \
        (awk -f /applications/mamp/library/mod_ftp/build/addloadexample.awk \
            -v MODULE=ftp -v DSO=.so -v LIBPATH=libexec/apache2 \
            -v EXAMPLECONF=/private/etc/apache2/extra/ftpd.conf \
            < $i > $i.new && \
            mv $i $i.bak && mv $i.new $i \
            ) || true; \
        fi; \
        done
Preserving existing FTP documents
Installing header files
Installing online manual
$ 

那么我接下来该怎么做呢?我在这个目录中没有看到mod_ftp.so文件,特别是我在寻找这个文件:

/Applications/MAMP/Library/modules (where all of Apache's other mod_*.so files are...)

还有这个目录:

/Applications/MAMP/mod_ftp/modules/ftp (where all of mod_ftp's various .c, .h and other files are)

最终,我认为我遇到的问题是我不理解我的mod_ftp源文件夹和httpd源文件夹之间的文件结构需要如何集成才能使模块正常运行。此外,我不知道自己不知道什么,所以可能有一个简单的问题需要问,但不幸的是我无法弄清楚如何提问。谢谢你的帮助和耐心!
干杯!
附言,是的,我已经在互联网上搜索了几个小时。

你最终解决了这个问题吗?如果是的话,你应该把你的解决方案添加为一个答案... - Chris Krycho
1
不幸的是,我最终放弃了MAMP并使用了Mac内置服务器。通过“系统偏好设置>共享”菜单,您可以启用文件共享,其中有一个选项面板,允许您“使用FTP共享文件和文件夹”。我能够通过Comcast Business获得静态IP地址,并在我的路由器上配置了端口转发,以接受流量。然后,我可以使用我的FTP客户端连接到我的路由器,例如将“123.456.789:21”作为主机。这可能不是最好或最安全的解决方案,但它有效,所以需要量力而行。 - Danny Bullis
好的了解。我一直在研究mod_wsgi,虽然这显然不是完全相同的问题,但它是同样基本的问题。MAMP Pro允许您在内置和捆绑的Apache服务器之间切换,因此我认为我可能只会使用内置服务器和/或使用homebrew安装最新的Apache进行测试。感谢您的反馈。 - Chris Krycho
2个回答

1

好的,我终于成功地在Ubuntu LTS 16.04上安装了这个程序。

首先,您应该通过运行sudo apt-get install subversion apache2-dev来安装svn和apxs功能。

然后,cd到一个方便的文件夹,并运行svn co http://svn.apache.org/repos/asf/httpd/mod_ftp/trunk/。这将下载文件夹/trunk中的所有内容。然后,cd进所下载仓库的/trunk文件夹。

接下来,按照指示运行以下命令:
./configure.apxs --> 在子文件夹中进行某些操作以启用makefile工作
make --> 这将编译仓库的内容并进行更改。
make install --> 您可能想要使用建议的标志运行此命令。它会将东西复制到需要复制的位置,并创建必要的模块。

建议只有在同时编译apache2和ftp时才应该执行./buildconf和./configure。由于您应该已经安装了apache2,所以这不是您应该执行的选项。只需按照第一组指示进行操作,这些指示用于独立编译mod_ftp,并根据需要进行修补。
此时,安装技术上应该可以工作。但是,您还没有完全摆脱困境。如果此时重新启动apache2,则应该无法启动。如果运行systemctl -xe,则会看到由于各种地方的配置文件中存在语法错误而导致失败,其中某人忘记添加正斜杠,因此指定的目录最终相对于/etc/apache2而非相对于根给出。使用行号作为指南修复这些问题。遗漏可能在apache2.conf文件中找到,该文件指定了mod_ftp模块的位置,以及在ftpd.conf文件中找到,该文件指定了错误日志的位置。
您现在需要处理apache2.conf和ftpd.conf(位于/etc/apache2文件夹的/extra子文件夹中)。确保以下行存在并取消注释:
include /etc/apache2/extra/ftpd.conf
LoadModule ftp_module /usr/lib/apache2/modules/mod_ftp.so
第一行基本上告诉主要的apache2.conf文件包括mod_ftp的配置文件,以帮助分区http和ftp配置设置。第二个仅确保加载了ftp模块,以便它可以解释ftpd.conf文件中的指令。因此,您不需要添加“FTP on”或指定端口,因为这些在ftpd.conf中处理得非常好。

现在你应该准备好了。只需注意,由于某种奇怪的原因,如果您将ftpd.conf中的文档根设置为与apache2.conf中的文档根相同,则apache2仍将正常运行。ftp服务器将正常工作,但http服务器将无法工作。不知道为什么,但如果您想这样做,一个简单的解决方法是将http文档根目录做成符号链接,并将其设置为ftp文档根目录。


1
我最终放弃了MAMP,使用了Mac内置的服务器。通过“系统偏好设置”>“共享”菜单,您可以启用文件共享,其中有一个选项面板,允许您“使用FTP共享文件和文件夹”。我能够通过Comcast Business获得静态IP地址,并在我的路由器上配置端口21的端口转发以接受流量。然后,我可以使用我的FTP客户端连接到我的路由器,例如将“123.456.789:21”作为我的主机。虽然不是最佳或最安全的解决方案,但它能正常工作,所以请谨慎对待。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接