为私人项目安装 Slash

作者:Paul Barry

爱尔兰卡洛理工学院的每个学术部门都必须每五年进行一次外部验证的课程审查。简而言之,审查旨在检查部门的运作及其有效性,并为诸如此类的问题提供答案

  • 我们的课程是否与行业相关?

  • 我们的课程是否是最新的?

  • 我们做得好的地方是什么?

  • 我们可以做得更好的地方是什么?

我所属的计算、物理和数学系目前正在进行这样的审查。迄今为止最大的问题是组织涉及 30 多名员工的会议。由于时间安排的限制,并非每个人都可以在不取消课程的情况下参加每次会议。简短的会议经常变成漫长的辩论会议。当然,还有让每个人都参加可能涵盖他们不感兴趣的主题的会议的问题。最初讨论评估方法的会议变成了关于首选编程语言或操作系统的辩论。举行大型部门范围的聚会往往适得其反,就重要问题达成共识非常困难,即使并非不可能。当然,较小的“每个人都对这个话题感兴趣”的会议很常见,电子邮件也被用来征求意见和想法。然而,目前还没有一个共同的机制来收集和整理正在表达的各种意见或正在做出的决定。最重要的是,我们正在严格的截止日期下努力工作。

问题的症结在于传统部门会议的同步性质对我们不利。我们特定环境需要的是一种异步媒介,允许员工在方便的时候相互交流,让他们听到自己的意见并——至关重要的是——记录下来,并为推进课程审查提供重点。这种认识使我接触到了 Slash。

你们大多数人可能已经熟悉 Slash。它是一个 GPL 许可的系统,运行着全球极客新闻网站 Slashdot。我很少访问 Slashdot,更喜欢每天查看 Use Perl 以获取有关 Perl 的八卦新闻。这两个网站以及许多其他网站都使用 Slash 系统。我的想法是采用 Slash,在本地安装它,然后使用它来支持部门的课程审查活动。

在本文的剩余部分,我将描述我为使 Slash 正常工作而经历的过程。正如您将看到的,这并非一帆风顺,并且我犯了一些错误。通过记录我所做的事情,我希望如果您发现自己需要安装 Slash,您可以从我的经验中吸取教训。

安装 Slash 有七个步骤。

步骤 1:安装数据库后端

Slash 需要数据库后端。目前,MySQL 是最受支持的数据库技术(对 PostgreSQL 的支持正在开发中)。我的目标平台是一台老化的 Apple Macintosh G3 服务器,运行 YellowDogLinux 的 2.3 版本,这是一个基于 Red Hat 的 PowerPC 发行版。在此之前,我从未在这台服务器上运行过数据库,因此我的首要任务是安装和配置 MySQL。幸运的是,各种 MySQL RPM 已经到位,所以我所要做的就是使用一些 chkconfig 命令(以 root 身份发出)启动 MySQL 守护程序。这些命令将适当的 MySQL 启动脚本安装并配置到我的启动序列中

    chkconfig --add mysqld
    chkconfig mysqld on

Slash 文档建议在执行 MySQL 的脚本(在我的系统上是 /usr/bin/safe_mysql)中添加两行。作为 root 用户,我使用 vi 将这两行添加到文件的开头

    TZ=GMT
    export TZ

快速重启确认 MySQL 已安装并在服务器上执行。由于这是我第一次执行 MySQL 服务器,我在 Linux 提示符下发出了以下命令,将 MySQL root 密码设置为我选择的密码

    mysqladmin -u root password 'passwordhere'

现在可以使用以下命令安全地访问 MySQL Monitor 命令行实用程序,并在提示时提供正确的密码

    mysql -u root -p

在 MySQL 准备就绪后,我使用 Linux adduser 命令创建了一个名为 slash 的用户,该用户将拥有 Slash 使用的 MySQL 数据库。这可能不是必需的,但我这样做是为了以防在安装 Slash 系统期间被要求识别“所有者”。

从 MySQL Monitor 中,我为我的 Slash 系统创建了一个数据库,以及一个名为 slash 的 MySQL 用户,并将新创建的数据库的所有权限授予给该用户

    mysql -u root -p
    mysql>  create database PROGREVIEW;
    mysql>  use mysql;
    mysql>  grant all on PROGREVIEW.* to slash identified by 'passwordhere';
    mysql>  quit

请注意,用户 slash 是在 MySQL 中创建的,作为授予这些权限的副作用。顺便说一句,Slash 文档建议授予数据库的所有权限。这可能不适合您(或您的数据库管理员),因此请务必查看 Slash README/INSTALL 文档,了解数据库权限的最低要求集。

在使用和测试 MySQL 时,我收到了一些奇怪的身份验证错误。我使用 MySQL Monitor 进行调查,注意到数据库中的 user 表中有许多行具有空的用户 ID。我从表中删除了这些行,身份验证错误就消失了。以下是我使用的命令

    mysql -u root -p
    mysql>  use mysql;
    mysql>  select * from user;
    mysql>  delete from user where User = '';
    mysql>  quit

MySQL 现在已准备就绪。

步骤 2:安装 Apache/mod_perl

接下来是安装支持 mod_perl 的 Apache。同样,我的 YellowDogLinux 也没有运行这些服务,并且与 MySQL 不同,它们都没有到位。我没有下载它们的源代码 tarball,而是选择从 YellowDogLinux FTP 服务器下载并安装预构建和预配置的二进制文件。此过程由 apt-get 系统自动完成,Debian 和 SuSE 用户应该很熟悉。Red Hat 用户有一个类似的工具,名为 up2date。

以下命令(以 root 身份发出)下载、安装和配置了这些服务

    apt-get install apache
    apt-get install mod_perl
    chkconfig --add httpd
    chkconfig httpd on

然后我编辑了位于 /etc/httpd/conf/httpd.conf 的 Apache 配置文件,并取消注释以下行以启用 mod_perl

    <IfModule mod_perl.c>
        Alias /perl /var/www/perl
        <Directory /var/www/perl>
            SetHandler perl-script
            PerlHandler Apache::Registry
            Options +ExecCGI
        </Directory>
    </IfModule>

另一次快速重启确认 Apache 正在系统上运行。我使用了我的书第 4 章中的一个小 Perl 程序(参见参考资料)来显示 Apache 返回的标头

    ./wwwb HEAD localhost /index.html

此步骤产生以下输出

    HTTP/1.1 200 OK
    Date: Thu, 30 Jan 2003 10:29:53 GMT
    Server: Apache/1.3.27 (Unix)  (Yellow-Dog/Linux) mod_perl/1.24_01
    Last-Modified: Tue, 24 Dec 2002 07:46:41 GMT
    ETag: "11b5-933-3e0810e1"
    Accept-Ranges: bytes
    Content-Length: 2355
    Connection: close
    Content-Type: text/html

此输出的 Server: 行确认 Apache 正在运行,并启用了 mod_perl 1.24 版本。我不希望从源代码构建 Apache/mod_perl,现在看起来没有必要了。Slash 文档确实建议某些 Apache/mod_perl 设置与 Slash 配合使用效果不佳,但我决定尝试一下,并告诫自己,如果遇到麻烦,则必须从源代码构建 Apache/mod_perl。

步骤 3:安装 Perl

Slash 完全用 Perl 编写,建议使用 5.6.1 版本的语言。YellowDogLinux 配置了 5.6.0 版本。为了升级,我决定让 CPAN 模块为我更新 Perl,它可以自动完成此操作。作为 root 用户,我启动了 CPAN shell 并要求系统安装 CPAN 包。这不仅安装了最新的 CPAN 模块,还下载、编译和安装了 5.8.0 版本的 Perl

    perl -MCPAN -e "shell"
    cpan>  install Bundle::CPAN
    cpan>  quit

如果这是您第一次使用 CPAN shell,系统会要求您提供一些初始化设置。回答提出的问题。如果出现问题或者您犯了错误,请按 Ctrl-C 中止初始化,然后发出此命令重新启动它

    cpan>  o conf init

安装了最新的 Perl 后,我再次重置了机器(只是为了安全起见)。

步骤 4:安装 Bundle::Slash

Slash 需要安装 32 个第三方 Perl 模块。Slash 文档警告说,在安装某些必需模块之前,需要安装 zlib 和 expat。我查询了 RPM 数据库以确认情况确实如此

    rpm -q zlib
    rpm -q expat

如果您的系统上未安装这些技术,请参阅本文末尾的参考资料,了解 zlib 和 expat 网站。

现在,如果您是受虐狂,并且无事可做,您可以手动安装每个必需的 Perl 模块,从您最近的 CPAN 下载它们。或者,使用 CPAN shell 安装 Bundle::Slash 发行版,它可以一次完成所有操作。这就是我所做的

    perl -MCPAN -e "shell"
    cpan>  install Bundle::Slash
    cpan>  quit

我最终照看了整个过程,因为该软件包要求我响应来自各个模块的许多提示。所以您知道,下载和安装所有这些模块的过程需要相当长的时间。安装此软件包时要记住的最重要信息是分配给虚拟用户名的值,因为 DBIx::Password 模块会提示输入该值。安装 Slash 源代码时需要此值。任何字母数字字符串都可以,我选择了“Programmatic”。DBIx::Password 模块安装还会提示输入我的数据库和 MySQL 用户名的详细信息,我根据我在步骤 1 中选择的值回答了提示。我仔细检查了软件包安装结束时显示的任何消息。少量模块在安装时遇到问题,因此我必须手动安装它们以解决这些困难。

完成此软件包的安装后,我准备开始安装 Slash 源代码。

步骤 5:安装 Slash

www.slashcode.com 我通过访问 Current Slash 快速链接下载了最新的源代码,该链接重定向到 SourceForge。从这个位置,我下载了 slash-2.2.6.tar.gz,然后使用熟悉的命令集开始安装

    tar zxvf slash-2.2.6.tar.gz
    cd slash-2.2.6
    make

这产生了一个错误:找不到 Apache/ExtUtils.pm 模块,并且 make 中止。这不是 32 个必需的 Perl 模块之一,所以我启动了 CPAN 来获取和安装它,如下所示

    perl -MCPAN -e "shell"
    cpan>install Apache::ExtUtils
    cpan>quit

令我完全惊讶的是,这导致安装了 mod_perl 1.27 版本(以支持 Apache::ExtUtils)。当我被要求提供我的 Apache 源代码的位置时,我更加惊讶。问题是我没有源代码,因为我已从其二进制 RPM 文件安装了 Apache。为了尝试继续,我打开了另一个控制台终端,使用 lynx 浏览到 Apache 网站并下载了 1.3.27 版本。我在临时目录中解压缩了 tarball,然后将此目录位置提供给 mod_perl 安装。我祈祷好运。

然后我被问到是否要使用此源代码来构建 mod_perl。默认响应是 y,所以我选择了 yes。然后我被问到是否要从相同的源代码构建 httpd。默认响应再次是 y。我继续选择了 yes,尽管说实话,在这个阶段我对实际发生的事情有点担心。

经过相对快速的编译后,模块(以及,我假设是 mod_perl 和 Apache)的安装完成了。我退出了 CPAN shell,并从 Slash 源代码目录中重试了 make

这次事情进展得顺利一些,直到安装程序尝试将一些文件复制到受保护的位置,意识到它不是以 root 身份运行,然后再次崩溃。当然,Slash README 和 INSTALL 文档已告诉我以 root 身份执行所有操作。因此,这是我自己的错,因为我以我的常规用户 ID 登录。我以 root 身份再次尝试 make。

我进一步进入了 make,但再次崩溃,这次是因为缺少某些头文件。令我震惊的是,在检查生成的错误消息后,似乎系统引用的是 Perl 5.6.0,而不是升级后的 5.8.0 版本。事实上,perl -v 证实 5.6.0 版本正在运行。我发出了 whereis perl 命令,并被告知 Perl 同时存在于 /usr/bin/perl 和 /usr/local/bin/perl 中。前者是 5.6.0 可执行文件,后者是 5.8.0 版本的可执行文件。我可以将 /usr/bin/perl 变成指向 /usr/local/bin/perl 的链接来解决此问题。但是,刚刚安装了大量 Perl 模块,我不确定它们是安装到了 5.6.0 版本还是 5.8.0 版本的 Perl 中,所以我很担心。我执行了适当的 ln 命令,然后再次运行 make。

令我欣慰的是,这次 make 似乎工作正常。我屏住呼吸并输入了

    make install

经过一长串消息后,屏幕上出现了“感谢您安装 Slash”行。最后一项任务是将生成的 slash.conf 文件的 Include 添加到 Apache 的 httpd.conf 文件的底部。我快完成了。

步骤 6:安装 Slash 站点

Slash 站点的初始化很简单。我输入了这些命令(请注意使用步骤 4 中的“Programmatic”虚拟用户名)

    cd /usr/local/slash
    bin/install-slashsite -u Programmatic

不幸的是,此命令失败,并抱怨 Perl 5.8.0 模块路径中未安装 DBIx::Password。似乎步骤 4 中的模块是为 Perl 5.6.0 而不是 5.8.0 安装的,所以我重新运行了步骤 4 中的命令。由于 CPAN 模块已经下载了 Perl 5.6.0 的所有必需模块并将它们存储在其缓存中,因此它们都可以在本地用于 5.8.0。

不幸的是,在将模块安装到 Perl 5.8.0 后,我的麻烦仍然没有结束。当我重新启动 Apache 时,httpd 启动失败,并显示与 5.6.0 路径中缺少 Perl 模块相关的错误。

然后我突然想到:mod_perl 的 RPM 二进制文件是为在 YellowDogLinux 上使用而编译的,而 YellowDogLinux 假定安装了 Perl 5.6.0,mod_perl RPM 也是如此。尽管我已升级到 Perl 5.8.0,但 mod_perl 仍然是 Perl 5.6.0。依赖 RPM 二进制文件的愚蠢程度对我来说变得越来越清楚。

我从 httpd.conf 文件中删除了 Slash Include 行,启动了 Apache 并检查了哪个版本的 mod_perl 正在运行。它仍然是 1.24,即使作为步骤 5 的一部分,似乎 mod_perl 1.27 版本已被构建和安装。当然,它已被构建和安装,但不在 YellowDogLinux 支持的旧版 Apache/mod_perl 安装的同一目录结构中。

我使用以下命令从系统中删除了 YellowDogLinux 的 Perl 5.6.0 的所有痕迹

    rpm -e --nodeps perl

然后按如下方式删除了 mod_perl

    rpm -e mod_perl

这也从系统中删除了 Apache 可执行文件。别无选择:我必须回溯到步骤 2 并从源代码安装 Apache/mod_perl。我访问了 Apache 网站并下载了 1.3.27 版本的源代码,然后访问了 mod_perl 网站并下载了 1.27 版本。我将这些文件放入我的“要安装的东西”目录中,然后发出以下命令来安装 Apache/mod_perl

cd /home/barryp/toinstall
    tar zxvf apache_1.3.27.tar.gz
    tar zxvf mod_perl_1.27.tar.gz
    cd mod_perl_1.27
    perl Makefile.PL APACHE_SRC=../apache_1.3.27/             \
        DO_HTTPD=1 USE_APACI=1 PERL_MARK_WHERE=1              \
            EVERYTHING=1 APACHE_PREFIX=/usr/local/apache/
    make
    make test
    su
    make install
    Ctrl-D

为了安全起见,我重新运行了步骤 5 中的命令,一切似乎都进行得很顺利。

在现在成功执行 install-slashsite 程序期间,系统提示我输入许多值。我将 Slash 服务器的主机名以及 Slash 将在其下运行的用户和组标识为(我选择坚持使用建议的“nobody”)。显示了插件列表,并让我有机会从列表中添加/删除它们。我选择保留默认插件集。当被问及是否要将这些文件作为符号链接安装时,我再次选择了默认响应并选择了 yes。对于站点管理员用户名,我输入了 slash,然后提供了适当的密码和有效的电子邮件地址。来自 install-slashsite 程序的最后一条消息再次建议对 Apache httpd.conf 文件进行更改。

现在是真相大白的时候了。

步骤 7:试用一下!

我停止并启动了 httpd 守护程序(重新启动是不够的),然后启动了 /etc/init.d/slash 守护程序。从另一台机器上,我输入了我刚安装的 Slash 系统的 URL。短暂的停顿后,我的 Slash 站点弹了出来。从打开的页面,我以 slash 用户身份登录,单击 backSlash 超链接以访问管理员选项。我已启动并运行。

虽然可以立即开始使用 Slash,但我建议阅读随附的 Slashguide,该指南位于 Docs 目录中,或者通过单击主 Slash 菜单中的帮助来查找。本文档中有足够的内容让您开始改变 Slash 站点的外观和运行方式。之后,就是宣传您的站点的存在并让您的用户使用它。

Red Hat 8 脚注

我在 Red Hat 8 上测试了这些说明,最初预安装的 Apache 2 遇到了问题。当我降级到 1.3.27 版本的 Apache/mod_perl 时,一切都完美运行。唯一的缺点是生成的系统像糖蜜一样慢。这种缓慢更多地与 Red Hat 8 运行在我两年前的笔记本电脑上有关,该笔记本电脑配置了 64MB 内存(远低于 Slash 的建议最低配置),而不是其他任何原因。最重要的是,我使用 Mozilla 浏览器从 localhost 测试了系统,这无济于事。

参考资料

如果没有我信赖的参考资料,Paul DuBois 撰写并由 New Riders 于 2000 年出版的 MySQL,我就无法完成 MySQL 的安装和配置。

wwwb 的源代码是 bundle 的一部分。

SLASH 网站

Perl 网站

CPAN 仓库

zlib 网站

expat 网站

Apache 网站

mod_perl 网站

Slashdot

Use Perl

Paul Barry 在爱尔兰卡洛理工学院任教。他的第一本书 Programming the Network with Perl 于 2002 年 2 月由 Wiley 出版。他的下一本书 Bioinformatics, Biocomputing and Perl 是与 Michael Moorhouse 合作完成的。它预计将于 2003 年底再次由 Wiley 出版。

电子邮件:paul.barry@itcarlow.ie

加载 Disqus 评论