我是一名 Java 开发人员,尝试使用 Linux Mint 设置本地 CI 服务器。我想使用的重要工具之一是 SDKMAN - 该工具可以轻松安装和管理不同版本的库/语言(例如 Java/Scala/Maven)。
到目前为止,我总是以简单用户的身份在本地计算机上安装它,并且它运行得非常顺利。问题是,在我配置的机器上应该存在其他几个用户(例如 Jenkins/Docker/等的特定用户)。
为了让这些用户也能使用 SDKMAN,我遵循了指南在此介绍- 它几乎成功了。安装以 ROOT 身份执行。为了确保用户可以访问此文件夹,我运行了:
sudo chmod -R a+w /usr/local/sdkman
好的。来吧。我已以不同用户身份登录(詹金斯)并尝试安装最新版本的 Scala。安装过程很顺利。但是,当我重新登录并以其他用户身份登录时(码头工人)我尝试安装 Scala 但版本不同。这引起了一个问题。输出是:
$ sdk install scala 2.12.7
Downloading: scala 2.12.7
In progress...
Installing: scala 2.12.7
mv: cannot move '/usr/local/sdkman/tmp/out/scala-2.12.7' to
'/usr/local/sdkman/candidates/scala/2.12.7': Permission denied
Done installing!
Do you want scala 2.12.7 to be set as default? (Y/n): n
好像是文件夹/usr/local/sdkman/candidates/scala由用户创建詹金斯并将权限/所有权设置为以下。
drwxrwxr-x 3 jenkins jenkins 4096 May 9 12:06 scala
因此用户码头工人无法添加/修改其中的任何内容!所以使用 SDKMAN 的整个概念在这里不适用!我可以安装语言/库,但用户似乎无法安装它们的不同版本,因为他们似乎没有这样做的访问权限。
我的问题是 - 如何处理此处的权限以获得我期望的结果(每个用户都可以安装他们想要的任何内容)。我尝试为 SDKMAN 用户创建单独的组,并将基本文件夹的递归组所有权更改为“sdk”,但是当创建新候选者时,所有者/组是相同的,并且等于执行操作的用户名。
临时修复是继续进行组解决方案,安装所有必要版本的工具/语言,然后执行:
sudo chgrp -R sdk /usr/local/sdkman
在文件夹上。但是也许有一些更强大的解决方案?
答案1
这是来自sdkman
论坛的讨论,Glitter 上的 sdkman/用户问题:
sdkman
目前只是一个用户空间工具,并且是这样设计的。出于显而易见的原因,我建议您不要尝试共享该文件夹。您真的想让多个用户修改共享sdkman
文件夹状态吗?我觉得很难闻。