我正在构建一个脚本,以便在CentOS上的一个命令中安装MediaWiki所需的所有内容。从完全最小的安装开始,这将从源代码构建Apache,PHP和Node.js,并设置所有其他必要的东西,以安装MediaWiki与所有的花里胡哨。这在root用户调用时效果很好。当由非root sudoer调用时,它有一些奇怪的问题。所有这些代码都可以在GitHub repo enterprisemediawiki / Meza1上找到(对不起,我在这个网站上没有足够的声誉来发布超过2个链接)
用户基本上会调用一个脚本install.sh
。此脚本会调用其他几个脚本,例如apache.sh
,php.sh
和VE.sh
。 VE.sh
安装Node.js和Parsoid(MediaWiki的Visual Editor的一部分)。
在VE.sh
内,只需运行npm install
在root下正常运行。在非root sudoer下,给出了“npm not found”错误。要尝试解决此问题,请使用/usr/local/bin/npm
的直接链接,而不是在/usr/local/lib/node_modules/npm/bin/npm-cli.js
使用符号链接到npm。但是,这导致“找不到节点”错误。为了解决这个问题,从/usr/local/bin/node
创建了一个符号链接到节点(/usr/bin/node
处的实际可执行文件)。这使得事情有效。
可能导致这种情况发生的原因是什么?默认情况下,/usr/local/bin
和/usr/bin
都在PATH中。从PATH中的其他位置添加符号链接应该没有效果,对吗?
类似的情况首先发生在Composer上。根据文档,composer.phar
文件已移至/usr/local/bin/composer
,因此无需通过php composer.phar <params>
调用,而只需composer <params>
调用php ~/sources/composer.phar <params>
。这不起作用,而在初始安装期间,作曲家始终由install.sh
调用。
请注意,这仅在初始安装期间发生,并且在 <script>
var name;
var id;
$(function () {
$("#tags").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
url: "<?php echo base_url() . 'dashboard/search'; ?>",
dataType: "json",
data: {'userA': request.term},
success: function (msgs)
{
var array = msgs.map(function (element) {
return {value: element['name'], id: element['id']};
});
response(array);
}
});
},
select: function (event, ui) {
name = ui.item.value;
id = ui.item.id;
$("#hotel_id").val(id);
$("#hotel_name").val(name);
}
});
});
</script>
<div class="ui-widget">
<label for="tags" style="color:#eee;">Search by hotel name, address or contact.</label>
<input placeholder="Select a Hotel..." id="tags" class="form-control">
<input type="hidden" id="hotel_id" />
<input type="hidden" id="hotel_name" />
</div>
脚本运行完毕后,然后可以访问composer,npm和node而不会出现任何问题。
一些有用的链接:
答案 0 :(得分:0)
sudo
配置为在运行命令之前重置PATH。例如,在我的/ etc / sudoers中,我有一个问题:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
强制PATH执行命令。请参阅man sudoers
。