我想使用apt
为测试安装一些软件包,但是由于sudo被禁用而失败。我在测试输出中找到了以下内容:
Sudo, the FireFox addon, setuid and setgid have been disabled.
似乎输出来自this line in travic-ci,但在paranoid_mode
中将.travis.yml
设置为false无效。
如何启用sudo访问?
PS:我正在使用私人回购。
编辑:运行.travis.yml
sudo: must be setuid root
,以下sudo apt-get update -qq
将失败
language: python
python:
- "3.4"
before_install:
- sudo apt-get update -qq
script:
- nosetests
设置sudo: true
和/或paranoid_mode: false
不起作用。
答案 0 :(得分:24)
基于Docker的架构关闭了Sudo访问,该架构将在两种情况下使用:
sudo: false
(另外需要在我们这边打开)由于LXC / Docker层中的某些安全问题,目前无法允许基于Docker的架构运行的构建sudo访问。我们希望在不久的将来能够解决这个问题,但遗憾的是这个问题不在我们手中。
我们也在努力改进目前使用sudo的Firefox插件,但不应该。一旦发生这种情况,我们将在我们的博客上发布。
答案 1 :(得分:15)
要扩展现有答案,如果你输入.travis.yml:
sudo: required
Travis应该将您的构建切换为使用他们的标准基础架构" (而不是他们的"基于容器的基础设施")然后你可以使用sudo。
参考文献:
https://docs.travis-ci.com/user/workers/standard-infrastructure
https://docs.travis-ci.com/user/workers/container-based-infrastructure/
基于容器的基础架构似乎已被弃用。来自docs:
目前正在弃用基于容器的基础架构。请 通过sudo:required使用完全虚拟化的infrastrstructure 代替。
答案 2 :(得分:0)
如“ Combining The Linux Infrastructures”中所述
展望未来,我们将逐步过渡基于容器的环境,以支持完全基于虚拟机的构建环境。
使用基于容器的基础架构的用户将是唯一受影响的人,并且此过渡将缓慢进行,具体取决于您是否在
sudo: false
中指定了.travis.yml
。
在Git 2.20(Q4 2018)中对此进行了说明,
Travis CI将很快弃用ce59dff中
sudo: false
启用的基于容器的基础结构(Git 2.8.0,2016年1月)。
请参见commit 0f0c511的SZEDER Gábor (szeder
)(2018年11月1日)。
(由Junio C Hamano -- gitster
--在commit 57f06d5中合并,2018年11月13日)
travis-ci:在“ ci / install-dependencies.sh”中安装软件包
自从我们开始使用Travis CI以来,我们就通过APT插件指定了要安装在“
.travis.yml
”中的软件包列表。在Travis CI基于容器的基础架构上运行构建时,我们别无选择,因为该环境不支持'
sudo
',因此我们没有权限自行安装软件包。在上一个补丁中切换到基于VM的基础架构后,我们确实获得了一个有效的'
sudo
',因此我们也可以通过运行'sudo apt-get -y install ...
'来安装软件包。让我们利用它并在“
ci/install-dependencies.sh
”中安装必要的软件包,以便所有依赖项(即软件包和“非软件包”(P4和Git-LFS))都在同一文件中处理。仅在“
gcc-8
”构建作业中安装linux-gcc
;到目前为止,它也已不必要地安装在了“linux-clang
”构建作业中。
有条件地打印P4和Git-LFS的版本,即仅在安装它们时打印;有了这一更改,即使静态分析和文档构建作业也开始使用“ci/install-dependencies.sh
” 安装软件包,这两个构建作业都不依赖于 因此安装这些。此更改可能会为即将发布的 Azure Pipelines integration 补丁程序系列的初始版本带来好处,这些命令会运行几个“
apt-get
”命令以在运行“ci/install-dependencies.sh
”,但是使用此补丁程序,仅运行“ci/install-dependencies.sh
”就足够了。