作者: 星耀晨曦
MediaWiki 1.32.0 已于1月11日发行
MediaWiki 1.32版本是目前最新的版本,计划将支持到2020年1月。1.32.0已于1月11日发行。
下载地址
https://www.mediawiki.org/wiki/Download
新的配置选项
- $wgJpegQuality - 现在可以设置JPEG缩略图的质量。默认值是80,等同ImageMagick生成的缩略图。之前GD生成的缩略图质量为95,但现在由这个配置决定生成的缩略图质量。
- $wgCookieSetOnIpBlock - 这个配置决定了IP用户在被封禁的时候是否设置Cookie,此举意味着被封禁的用户移动到新的IP时,仍然保持封禁
- $wgRawHtmlMessages - 这个新配置决定了哪些消息可以包含原生HTML。
- $wgCSPHeader和$wgCSPReportOnlyHeader -- 您现在可以定义一个适用于您的wiki的“内容安全策略”。这是一个深度防御功能,用于阻止攻击者在发现解析器漏洞的情况下插入恶意属性。默认情况下禁用。(T135963)
- $wgGroupPermissions -- 该版本添加了一个新的内建用户组,interface-admin(界面管理员)。该用户组可以编辑全站的JS和CSS并且可以修改其他用户的JS和CSS。默认没有任何其它用户组持有这些权限(editsitecss、editusercss、editsitejs、edituserjs)。
- $wgGrantPermissions -- 新增一个授权组,editsiteconfig,赋予上述权利。
- $wgDBDefaultGroup -- 维护脚本使用的默认数据库组。
- $wgResourceLoaderEnableJSProfiler -- 这个新配置可以让你启用JavaScript模块的客户端分析,它默认是关闭的。
- (T193868)$wgChangeTagsSchemaMigrationStage -- 此临时配置变量允许系统管理员逐步迁移数据库表模式,以了解如何存储更改标记。
- (T199334)$wgTagStatisticsNewTable -- 此临时配置变量允许系统管理员通过新的change_tag_def表缓存Special:Tags。
更改的配置
- $wgUseAjax -- 这个配置变量已于1.31版本中弃用并在本版本中忽略。
- $wgDefaultUserOptions -- 监视列表的默认显示时间从3天增加到7天。(T194414)
- $wgGroupPermissions -- 编辑全站的JS/CSS/JSON所需要的权限已经从“editinterface”拆分到“editsitejs/editsitecss/editsitejson”。但编辑MediaWiki页面仍然需要“editinterface”权限。
- $wgMultiContentRevisionSchemaMigrationStage -- 现在默认同时往旧数据库模式和新数据库模式写入数据,但只从新模式中读数据。所以多内容版本(MCR)默认启用。该配置变量的默认值为“
SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW
”。 - $wgActorTableSchemaMigrationStage -- 这个配置变量已经不再接受“
MIGRATION_WRITE_BOTH or
”。作为代替,请使用“
MIGRATION_WRITE_NEWSCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD
”和“SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW
”。 - $wgDBTableOptions -- 默认表选项现在使用二进制字符集。默认值已在安装程序生成的LocalSettings.php中重写,因此在删除安装程序UI选项后始终设置为二进制字符集。默认值仅在安装程序安装扩展时使用。
- $wgPopularPasswordFile -- 常见密码的存储文件已经移动到非PHP文件用于其它库和类使用。
- $wgEnableImageWhitelist -- 这个配置现在默认被禁用,因为它打开了管理员潜在隐私的泄漏。 您可以在Wiki上查看“MediaWiki:External image whitelist”以查看该功能是否曾被使用过,以及是否需要重新启用该功能。
本版本移除的配置
- $wgEnableAPI和$wgEnableWriteAPI -- 这两个配置已于1.31弃用并于本版本移除。(T115414)
- $wgSiteSupportPag -- 该配置从1.5版本起就未被使用,于本版本移除。
- $wgBrowserBlacklist -- 该配置已于1.30版本弃用,于本版本移除。
- $wgExperimentalHtmlIds -- 该配置已于1.30版本弃用,于本版本移除。$wgFragmentMode的“html5-legacy”值不再被接受。
- $wgPasswordSenderName -- 这个配置自1.22版本以来就被MediaWiki和大多数扩展所忽略,已经不再所设置。作为代替,您应该修改系统消息“emailsender”。
- $wgTidyConfig -- 实验性的Html5Internal和Html5Depurate的Tidy驱动程序被删除。作为替代应该使用RemexHtml,它现在是默认值。
- (T181318)$wgStyleVersion -- 这个配置变量和其在OutputPage中各种脚本和样式的URL附件在1.31版本已经弃用,并在本版本移除。
- (T140807)$wgResourceLoaderLESSImportPaths --已经从ResourceLoader移除。相反,在LESS中使用
`@import`
语句直接从同一项目中的附近目录导入文件。 - (T140804)$wgResourceLoaderLESSVars -- 已在1.30版本弃用,并于本版本中移除。相反,要将变量从PHP公开到LESS,请使用“ResourceLoaderModule::getLessVars()”方法。
- $wgResourceLoaderValidateStaticJS -- 这个配置变量从1.18版本开始就不再使用,在这个版本中移除。
- 用于在更改列表上部署过滤器功能的两个临时变量,在1.30中引入的$wgStructuredChangeFiltersShowPreference和在1.31中引入的$wgStructuredChangeFiltersOnWatchlist已被移除。
新的功能
- (T112474)推广ResourceLoader机制,用于在编辑预览期间使用特定页面覆盖模块。
- (T12331)您现在可以通过将$wgPageCreationLog设置为
true
来记录页面创建事件。 - 新增“ApiParseMakeOutputPage”Hook。
- (T174313)在Special:ListUsers中添加了“只显示在临时用户组中的用户”的复选框。
- (T152462)现在可以在阻封禁IP用户时设置一个cookie,以便在用户移动到新IP地址时跟踪该用户。默认情况下禁用此功能
- (T194950)新增“ApiMaxLagInfo”Hook。
SpecialPage::checkLoginSecurityLevel()
现在将在重新登录时保留POST数据。FormSpecialPage::execute()
现在将在getLoginSecurityLevel()
返回非false
值时调用checkLoginSecurityLevel()
- “ImageBeforeProduceHTML”Hook现在接受3个参数:
$parser
、&$query
和&$widthOption
,允许扩展可以更好地控制生成的HTML代码。 - 新增“ArticleShowPatrolFooter”Hook,允许扩展判断是否应在可巡逻页面的页脚显示[标记为已巡逻]链接。
- 传递给“SpecialSearchPowerBox”Hook的($opts)隐藏选项现在以引用传递,允许扩展修改或者销毁它。
- 新增“OutputPageAfterGetHeadLinksArray”Hook,允许扩展修改
OutputPage::getHeadLinksArray
的返回值,以添加、删除或以其他方式更改要在页面中输出的元素。 - (T28934)“HistoryPageToolLinks”Hook允许扩展将额外的链接附加到历史记录页面的副标题。
- “GetLinkColours”Hook现在接受额外的
$title
参数。页面的Title对象将会解析为链接显示。 - DifferenceEngine支持多个插槽。添加SlotDiffRenderer用于在两个Content对象之间呈现差异,并且添加了DifferenceEngine::setRevisions()以在两个自定义(可能是多内容)修订之间呈现差异。添加了“GetSlotDiffRenderer”Hook,其作用类似于“GetDifferenceEngine”的插槽。
- 现在覆盖了
ContentHandler::getUndoContent()
的扩展需要更新因为改变了方法签名。 - 添加了“UserGetRightsRemove”Hook,用于动态删除一个用户所在用户组指定的权限。与“UserGetRights”Hook不同的是,它保证了已被删除的权限不会被重新插入。
- (T197535)现在扩展可以指定它依赖的PHP版本和PHP扩展。
本翻译说明的声明
- 本MediaWiki中文发行说明非官方翻译,请以原文为主。
- 本发行说明翻译自https://github.com/wikimedia/mediawiki/blob/REL1_32/RELEASE-NOTES-1.32,以GPL 2许可证授权。
- 本发行说明并未全部翻译原发行说明,只翻译了对网站运维人员来说有用的章节,其它章节对运维可有可无,它们是面对开发者的。
- 如翻译有任何问题,欢迎在留言区提出。
我的崩崩崩二周年历程
又咸鱼了一年
【视频】Arcaea cyanine 9+翻车
MediaWiki 1.31已于6月14日发行
MediaWiki 1.31版本是最新的LTS(长期支持版本)版本,计划将支持到2021年6月。1.31已于6月14日发行。
下载地址
https://www.mediawiki.org/wiki/Download
升级至1.31的注意事项
1.31版本包含了很多的兼容性变更,你必须在升级你的MW前检查你的环境已经达到1.31的要求。
PHP 7.0+
从1.31开始,MW要求PHP 7.0以上或者HHVM 3.18.5以上的运行环境。如果你还在用PHP5,则你需要将你的PHP升级到PHP7才可使用1.31。根据从MW使用者上收集的信息,现还有相当大部分的基数使用者PHP5.6。注意您的PHP版本得高于等于7.0。
MySQL 5.5.8+
从1.31开始,MW只支持5.5.8以上的MySQL。如果你运行着之前的版本,则你需要在升级MW前升级MySQL。
升级1.31前需要注意的重要事项
- 如果您使用的是MySQL、SQLite或MSSQL,并且未使用update.php来应用数据库模式更改,而且没有停机时间来运行migrateArchiveText.php手动应用patch-drop-ar_text.sql。则必须保存一个默认值到archive表的ar_text和ar_flags列,或者在升级到MediaWiki 1.31之前使这些列可以为空。maintenance/archives/patch-nullable-ar_text.sql显示了如何为MySQL执行此操作。
配置变更
- $wgEnableAPI和$wgEnableWriteAPI已于1.31版本弃用并在将来的版本彻底的移除。现在MW的API已经变得很稳定、安全而且必不可少。
- $wgUsejQueryThree已经被移除,因为已经无须使用jQuery 1。此配置于1.29版本弃用,在迁移到jQuery 3之前,这个配置被作为一个临时变量使用着。
- $wgLogoHD已经支持svg格式的图片并且有可能使用$wgLogo作为后备图片。
- 当用户没有权限巡查时,$wgFilterLogTypes将不再忽略“巡查”类型。
- 如果你的维基包含导入的修订版本或者由CentralAuth扩展提供的全域封禁,则应运行maintenance/cleanupUsersWithNoId.php。
- $wgResourceLoaderMinifierStatementsOnOwnLine和$wgResourceLoaderMinifierMaxLineLength已于1.31版本中被移除(自1.27版本以来弃用)。
- $wgReferrerPolicy现在支持多个来源地址策略的meta值。
- $wgFragmentMode现在默认值为
[ 'legacy', 'html5' ]
,这是迁移到人类可读的段落ID的第一步,在未来的版本html5
将成为默认值。 - CACHE_ACCEL现在只支持APC(u)或WinCache。XCache支持已被移除,因为此扩展的开发已不活跃,并且没有计划迁移到PHP 7。
- CategorizedRecentChanges(包括$wgAllowCategorizedRecentChanges配置变量)已被移除.
- 由于性能原因,$wgArticleCountMethod的'comma'值不再受支持,并且现在使用此设置将像使用'any'配置一样工作。
- MediaWiki现在默认使用RemexHtml整理用户输入,而不是默认关闭。如果您希望完全禁用HTML整理,请将$wgTidyConfig设置为null;如果您希望使用已弃用的Tidy外部二进制文件,则将$wgTidyConfig设置为null,将$wgUseTidy设置为true。
- $wgLogAutopatrol现在默认为false而不是true。
- $wgValidateAllHtml已经被移除。
- $wgScriptExtension于1.25版本起被弃用和忽略(见1.25发行说明),现已被移除。
- $wgUseAjax现在被标记为已弃用,就像它启用已弃用的AJAX框架一样。有些扩展错误地用它来检查是否应该启用任何AJAX功能。
- 为所有用户添加90次编辑/分钟的默认编辑速率限制。
- $wgDBmysql5已被弃用,并在未来移除它。这个功能自引入以来就一直标记为实验性功能。
新功能
- 用户子页面下以.json结尾的页面将会受到和以.js和.css结尾的页面一样的保护。
- Wikimedia\Rdbms\IDatabase->select()和类似的方法现在支持带括号的分组。
- 作为标准化MediaWiki产品对话框的第一步,Html类现在为messageBox、successBox、errorBox和warningBox的生成提供了辅助方法。
- 导入功能现在将未知(和已知)用户名的格式照
"iw>Example"
显示。 - 如果wikitext像这样子保存:
[[iw:User:Example|iw>Example]]
,Linker(用于历史页、日志页等等)将会把用户名显示为"iw>Example"
作为内部链接。 - ImportHandleUnknownUser钩子将允许扩展在导入时自动创建用户。
- 添加一个钩子,ParserOutput::getText(),允许扩展影响ParserOutput::getText()。
- 添加一个钩子,UploadForm:getInitialPageText,允许扩展改变文件上传的页面。
- 现在文件信息页的基础信息里显示文件的16进制的SHA-1。
- 具有'data-mw-deduplicate'属性的样式标签将作为ParserOutput::getText()后缓存转换进行重复数据删除。可以通过把'deduplicateStyles'=> false传递给该方法来禁用此功能。
- 登录用户或IP“actor”进行记录的操作的身份正在迁移进新的actor表,表中诸如修订和日志的行引用演员的ID而不是将用户ID和名称/IP存储在每一行中。
- 这当前由$wgActorTableSchemaMigrationStage控制。大多数维基可以将此设置为MIGRATION_NEW,并在更新任何必要的扩展后立即运行maintenance/migrateActors.php。
- 大多数访问数据库记录动作的代码应使用相关的getQueryInfo()方法来获取构建SQL查询所需的信息。ActorMigration类也可用于获取在迁移期间访问与actor相关的字段所需的功能标记的信息。
- 添加了Wikimedia\Rdbms\IDatabase::cancelAtomic()方法,可以回滚单个原子节(atomic section),而无需回滚整个事务。
- Wikimedia\Rdbms\IDatabase::doAtomicSection()、非本地 ::insertSelect()和非MySql的::replace()和::upsert()方法不再在失败的时候回滚整个事务。
- 向pingback功能添加每月心跳ping。
- 命令行安装程序(maintenance/install.php)学会检测并包含扩展。通过--with-extensions选项来启用该功能。
- rc_patrolled现在有三种状态,未巡查的“0”、手动巡查的“1”和自动巡查的“2”
- 如果扩展提供编辑器或增强编辑体验,现在可以将其扩展类型设置为“编辑器”。
- 现在扩展可以通过在extension.json中设置“AutoloadNamespaces”属性来使用PSR-4自动加载器。请参阅文档来获取更多信息和实例。
- 链接到不存在页面的标签(如未创建的讨论页面)现在有一个提示状态的工具提示,而不仅仅是颜色提示。
在1.31修复的Bug
- 标题ID中的非中断空格会打破定位。
- CSSMin现在允许
url()
语法中引用的URL以空格开头。 - 现在剥离了由分类和语言链接造成的空白,而不是在奇怪的地方留下空白行。
- 使用UTF-8名称的文件上传现在可以在Windows服务器上的PHP 7.1+环境的上使用。
- 修复
FileRepo::streamFile()
中ob_end_flush()
函数造成的PHP Notice
本翻译说明的声明
- 本MediaWiki中文发行说明非官方翻译,请以原文为主。
- 本发行说明翻译自https://github.com/wikimedia/mediawiki/blob/REL1_31/RELEASE-NOTES-1.31,以GPL 2许可证授权。
- 本发行说明并未全部翻译原发行说明,只翻译了对网站运维人员来说有用的章节,其它章节对运维可有可无,它们是面对开发者的。
- 如翻译有任何问题,欢迎在留言区提出。
如何在linux里安装php的扩展
本文章只面对同一个服务器只有一个PHP版本的环境。
编写约定
1.本文的“PHP”指的是PHP解释器,而不是PHP代码。
为什么不介绍windows系统下扩展的安装
因为官方自带的PHP包包括了一堆常用的扩展dll,不需要特别介绍。
事前
首先,你得确定你的PHP是通过什么安装的。如果是通过包管理软件安装的,则也用相同的包管理软件安装扩展,这种情况不建议通过编译源码的方式来安装扩展(因为这不适合升级你的PHP)。如果是通过编译源码安装的PHP,则只能用编译的安装方法来安装扩展。
Do
包管理软件安装
包管理软件大同小异,包的命名都有一定的规律,区别只是安装命令的差别(yum是yum install,apt是apt-get install)。注意:在安装扩展的时候要注意包的名称不要搞错依赖,导致多安装了一个PHP。
扩展包的名称一般是:<你之前安装的PHP的包名>-<扩展名>,比如:php5-tidy、php-gd。。。
源码编译安装
需要准备的东西
这种安装方法需要准备以下东西:
- 要安装的扩展的源代码
- 编译器(一般是gcc)
- 你也要搞清楚phpize命令的位置,如果你把php的bin目录都放入了环境变量里,那么你应该可以直接使用phpize命令的
- 其它在PHP手册的安装章节里提到的注意事项,比如扩展依赖的库(这种情况你得先安装依赖库)
开始编译
首先先把源代码压缩包里的东西解压出来,然后cd进解压出来的目录里。然后直接执行phpize命令,这个命令会根据当前安装到你系统的PHP的API来生成一个configure脚本。之后在当前目录运行./configure
。如果你看到类似成功的字眼,就直接执行make命令来编译源码。编译完成后你可以选择直接执行make install
也可以在执行安装命令前执行测试命令make test
。执行完make install
后,编译出来的so文件就会自动放到它应该放的地方。
加载扩展
到这里你应该安装完扩展了,现在只需要加载扩展的so文件就可以在PHP里使用这个扩展。编辑php.ini,
extension=<扩展名>.so
注意事项
最主要的还是用心去做这件事,遇到不会的英文就去翻译。
入侵开放的Git存储库
本文翻译自https://royduineveld.nl/hacking-public-git-repositories/,版权所有© 2018 Roy Duineveld.
公开你的git目录是一个坏主意,但为什么是一个坏主意?这样做的后果是什么?你怎么能防止被入侵呢?
让我们开始预防
预防这一点很容易,只要确保你的git目录不在你的虚拟主机中。以Laravel为例,你的虚拟主机的web目录应该指向“public”目录,这样你的Laravel项目就不是脆弱的。当你使用WordPress的时候,你可以选择Bedrock来充当版本控制系统,或者你不打算使用Bedrock的话,用你的web服务器去阻止外界访问git目录!对于Magento,你可以测试你的GIT目录是否可以通过Magereport访问。
Apache配置
RedirectMatch 404 /\.git
Nginx配置
location ~ /.git/ { deny all; }
可能性
当git目录是可访问时,你可以很容易地阅读git的配置文件,只需在网站url后面加上“/.git/config”即可。酷,我们可以看到remote,但我们还能做什么?我们还可以下载整个存储库!
下载一个开放的git存储库
Github有一个叫DVCS Ripper的工具可以下载git存储库。下载其中的“rip-git.pl”文件然后运行它。
./rip-git.pl -s -v -u http://www.example.com/.git/
下载时间视存储库的大小,如果是一个纯代码的库,几分钟就可以下载完成。如果是一个包含产品图片的库(随便说一句,把二进制文件存在git里是一个坏主意)可能需要几个小时。我最长的下载时间是4个小时,那次我一共下载了几千MB的数据。
接下来是什么?有啥危险?
有比下载你网站整个源代码的事还要危险的吗?他们可以制造出你网站的副本、搜索代码里的Bug去利用它们,或者在开发者真的很愚蠢的情况下,一个公开的git存储库包含了一个存储数据库密码的配置文件!我不是在开玩笑,我已经在众多网站或者多个大型商城体验过这点。为了让它们的网站更好(或者更糟糕),一些网站经常把PhpMyAdmin装在“/phpmyadmin”下面。从这一点来说,可能性是无限的,我可以做以下的几点:
- 玷污一个网站,把一个甘道夫萨克斯放上去
- 创建一个管理员账户来访问后台
- 更改一些支付提供商的凭据,以便所有的支付到我的银行账户
- 转储一个数据库并把它卖给竞争对手或者黑市
- 泄露用户名和密码
如何找到开放的git存储库
正如之前所提到的,只需在url后面尝试“/.git/config”。谷歌也可以帮到你,只需在谷歌搜索:
.git intitle:"Index of"
你会找到很多网站,但这些网站都启用了目录列表(所以你可以浏览那个网站都有啥文件)。谷歌不会直接索引诸如“/.git/config”之类的文件,所以说有更多的网站拥有这问题。
有哪些大网站有这个问题
我写了一个简单的脚本来循环访问Alexa排名前100万的网站,你可以在Github Gist中找到这个脚本。运行这个脚本几个小时扫描前1W排名的网站后,我发现有73个网站有着一个公开的git存储库。因为它是一个开源的网站,如列表中的AngularJS,但其中大部分的网站都是闭源的。我不打算在这里输入那些网站的名字,直到这个漏洞被修复为止。但我遇到下面这些“开放的网站”并这些网站的所有者同意在这里发布他们的站名:
- Webshops
- News sites
- File sharing sites
- Cloud providers
- Online advertising companies
- Online video streaming sites
- Stock image sites
- Proxy providers
再次强调,这些是在世界浏览量前1万的网站!后来,我遇到了这个网站,他们抓取了整个Alexa前100万的网站,并创建了一些奇特的图表。
结论
不要公开你的git存储库。包括诸如HG、Bazaar、SVN、CVS等其它的版本控制系统。
PHP7.2已经发布
PHP7.2.0的稳定版本已于2017-11-30发布。官方下载地址:http://php.net/downloads.php#v7.2.0
文件名 | 下载链接 | 文件大小 | sha256 |
php-7.2.0.tar.gz | 下载 | 17,849Kb | 801876abd52e0dc58a44701344252035fd50702d8f510cda7fdb317ab79897bc |
php-7.2.0-nts-Win32-VC15-x86.zip | 下载 | 22.64MB | f5c1317e557ec814377a18af3ad325a59da8a9d127660ab1a03562b14824f686 |
php-7.2.0-Win32-VC15-x86.zip | 下载 | 22.7MB | 28bd43ba9148549f8b70b28ae33415b3103e3b3cbaabcd4619fdac47a1739f7f |
php-7.2.0-nts-Win32-VC15-x64.zip | 下载 | 24.28MB | 85a325601d0442dcefbd02fd859f3c6cc1580349857c2d21c8be58cd1e4d8f23 |
php-7.2.0-Win32-VC15-x64.zip | 下载 | 24.41MB | 275c58e86e0490146684e4f731917484306a3f269dc6f6f55f31aabb808743d0 |
从低版本升级
windows系统
Win系统升级十分简单,下载官方已经编译好的二进制包,解压,更改环境变量之类的配置就可以用了。
linux系统
用apt、yum等包管理器安装的php无需多言。
编译安装的PHP,这个新版本的编译方式和上几个版本是一样的。如果你保留了上次你已经编译的php源代码,你可以把原来文件夹下的config.nice复制到新版本的源码包里,然后执行这个脚本。这个脚本可以执行你上次编译老版本时configure的命令,免去手动打选项的时间。configure后可直接make,make test,还有make install。注意,这次升级,必须重新编译php.ini里已经加载的扩展,否则PHP会出错。以前安装的扩展,新版本会忽视。
不向后兼容的修改
下面列出了PHP7.1升级到PHP7.2需要注意的事项。
尝试计数不可数的数据类型时会报错
当尝试向count函数(包括count函数的别名函数sizeof)传入不可数类型时,会抛出E_WARNING级别的错误。
<?php var_dump( count(1), // 整型不可数 count('abc'), // 字串符不可数 count(new stdclass), // 没有实现Countable接口的对象是不可计数的 count([1,2]) // 数组是可以计数的 );
以上例子会输出:
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d int(1) int(1) int(1) int(2)
简而言之,从PHP7.2开始,向count函数传入非数组或者没有实现Countable接口的对象时,PHP会报Warning级别的错误。
弃用的功能
each()函数已被弃用
linux下编译安装apache2.4
本文章翻译自Apache HTTP Server官网的内容。版权属于Apache软件基金会,根据Apache许可证2.0版许可。
本文在原文的基础上,做了点更改。
本文档仅涵盖Unix和类Unix系统上的Apache HTTP Server的编译和安装。
概览
这是一个快速入门。
下载 | 在官网http://httpd.apache.org/download.cgi下载最新版的源代码包。 |
解压 | $ gzip -d httpd-NN.tar.gz |
Configure | $ ./configure --prefix=PREFIX |
编译 | $ make |
安装 | $ make install |
定制 | $ vi PREFIX/conf/httpd.conf |
测试 | $ PREFIX/bin/apachectl -k start |
替换NN为当前版本号,并将PREFIX替换成你想要安装的路径。如果未指定PREFIX,则默认为 /usr/local/apache2。
下面将对编译和安装过程的每个部分进行更详细的描述,从编译和安装Apache httpd的要求开始。
要求
构建Apache httpd有以下要求:
APR和APR-util
确保你的系统上已经安装了APR和APR-Util。如果没有,或者不想使用已安装在系统上的版本,你可以在这里下载APR和APR-util的最新版本。然后分别解压到/Apache服务器源代码根目录/srclib/apr
和/Apache服务器源代码根目录/srclib/apr-util
下。在configure Apache HTTP Server的时候使用--with-included-apr
选项。在某些平台上,您可能需要安装相应的-dev开发包才能使httpd根据已安装的APR和APR-Util进行构建。
Perl兼容的正则表达式库(PCRE)
该库是必要的,但没有包含在Apache httpd的源代码包里。从http://www.pcre.org下载源代码。如果在configure的时候找不到已经安装的Perl库,请手动使用--with-pcre参数指向pcre-config脚本。在某些平台上,您可能需要安装相应的-dev软件包才能使httpd根据已安装的PCRE进行构建。
磁盘空间
确保您至少有50MB的磁盘空间可用。安装后,服务器占用大约10MB的磁盘空间。
ANSI-C编译器
编译Apache httpd需要GCC编译器,或者其它ANSI规定的编译器。此外,你的环境变量PATH必须包含基本的构建命令,如make。
Perl 5 [可选]
对于某些支持脚本,像apxs或者dbmmanage(这些脚本用Perl写的),需要Perl 5解释器(5.003或更高的版本就足够了)。如果configure脚本找不到Perl 5解释器,你将不能使用支持脚本。当然,你仍然可以构建和使用Apache httpd。
下载
Apache httpd可以从官网下载,其中有几个镜像可供选择。大多数使用类unix系统的Apache用户可以很好的在系统上下载和编译源代码版本。构建过程(如下所述)很容易,它允许您根据需求自定义服务器。此外,二进制版本通常不是最新的源代码版本。如果你下载了一个二进制文件,请按照INSTALL.bindist分发文件中的说明进行操作。
下载完成后,验证您是否具有完整且未修改的Apache HTTP Server版本是非常重要的。可以通过PGP签名测试下载的压缩包。
解压
解压源代码压缩包是一个简单的操作。
$ tar -xzvf httpd-NN.tar.gz
。再继续构建前,应该进入被解压出来的源代码文件夹里。
配置源码树
下一步为你的平台和个人需求配置Apache源代码树。这是使用根目录下的configure脚本完成的。(开发者下载的Apache源码树的未发行版本,需要系统安装autoconf和libtool,而且在进行下一步前要运行buildconf。官方发行版无需考虑这些问题。)
要使用所有默认选项配置源代码树,只需键入./configure。要更改默认选项,需向configure提供对应的变量或者命令行选项。
重要的配置选项是--prefix,它将定义之后Apache之后的安装路径。使用其他配置选项可以更精细地控制文件的位置。
在这一点上,你可以通过启用和禁用模块来控制Apache的功能。默认情况下,Apache附带了各种模块。它们将被编译为可以在运行时加载或卸载的共享对象(DSO)。你也可以通过--enable-module=static选项来静态编译这些模块。
使用--enable-module选项来启用其它模块,其中module是模块去掉mod_字串符后再将下划线改为破折号的名称。同样,你可以用--disable-module来禁用相应的模块。使用这些选项时要小心,因为如果你指定的模块不存在,configure脚本不会警告你;它将简单地忽略该选项。
此外,有时需要向configure脚本提供有关编译器,库或头文件位置的额外信息。通过传递环境变量或命令行选项来进行配置。有关configure的更多信息,请参考官网有关configure的手册。或者使用configure的选项--help
来获得帮助。
为了让你有更深刻的印象,下面列举了一个把Apache安装到/sw/pkg/apache并且启用mod_ldap和mod_lua这2个模块的示例。
./configure --
prefix=/sw/pkg/apache \
--enable-ldap=shared \
--enable-lua=shared
当configure运行时,将需要几分钟的时间来测试系统上功能的可用性,并构建将在以后用于编译源码的Makefile。
有关所有配置configure的详细信息,请参见configure手册页。
构建
现在你可以通过简单的命令来构建源代码。
$ make
请耐心等待,因为基本配置需要花费几分钟的时间才能编译,时间会根据您的硬件和已启用的模块数量而有所不同。
安装
现在是时候通过$ make install
,来将已经编译完成的二进制文件安装到PREFIX。此步骤通常需要root权限,因为 PREFIX通常是具有受限写入权限的目录。
如果你正在升级,安装将不会覆盖不的配置文件或文档。
定制
下一步,你可以通过配置文件来定制你的Apache httpd,配置文件通常在PREFIX/conf/下。
$ vi PREFIX/conf/httpd.conf
手册在PREFIX/docs/manual/下或者访问http://httpd.apache.org/docs/2.4/来获取更多的信息。这里有完整的配置指令。
测试
现在,你可以立即启动你的Apache服务器。
$ PREFIX/bin/apachectl -k start
你应该能访问http://localhost/。这个网页通常由DocumentRoot指定。通常位于PREFIX/htdocs/下。停止服务器用以下命令:
$ PREFIX/bin/apachectl -k stop
VOCALOID 4,安装情况总结
测试环境
操作系统:Windows Server 2012 R2 DataCenter(语言:简体中文)
测试编辑器版本:V4FE(v4.3.0)
测试声库:V4星尘
以管理员身份安装
测试结果
安装顺序 | 安装路径 | 同逻辑盘 | 结果 |
先库再编辑器 | 英文路径 | 是 | ✔ |
先编辑器再库 | 英文路径 | 是 | ✔ |
先编辑器再库 | 中文路径 | 是 | ✔ |