以root身份成功完成长安装脚本; npm和composer未被发现为非root sudoer

时间:2015-07-10 05:08:40

标签: linux bash shell

我正在构建一个脚本,以便在CentOS上的一个命令中安装MediaWiki所需的所有内容。从完全最小的安装开始,这将从源代码构建Apache,PHP和Node.js,并设置所有其他必要的东西,以安装MediaWiki与所有的花里胡哨。这在root用户调用时效果很好。当由非root sudoer调用时,它有一些奇怪的问题。所有这些代码都可以在GitHub repo enterprisemediawiki / Meza1上找到(对不起,我在这个网站上没有足够的声誉来发布超过2个链接)

用户基本上会调用一个脚本install.sh。此脚本会调用其他几个脚本,例如apache.shphp.shVE.shVE.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而不会出现任何问题。

一些有用的链接:

1 个答案:

答案 0 :(得分:0)

可以将

sudo配置为在运行命令之前重置PATH。例如,在我的/ etc / sudoers中,我有一个问题:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

强制PATH执行命令。请参阅man sudoers