VirtualBox Linux虚拟机opam init运行失败:无法创建临时文件问题求助
opam init执行curl报错退出码23解决方案
问题原因确认
curl退出码23属于写入目标文件失败,经排查确认是curl无法自动创建/tmp/下的多级临时目录导致,以下是3种可行解决方案:
解决方案
方案1:修改opam临时目录(最便捷)
opam支持通过环境变量自定义临时存储路径,替换默认的/tmp路径规避权限问题:
# 在家目录下创建专属临时目录,确保你有完整读写权限 mkdir -p ~/.opam-tmp # 配置环境变量指定opam使用该目录作为临时目录 export OPAMTMP=~/.opam-tmp # 重新执行opam init命令 opam init
方案2:给opam配置curl默认携带--create-dirs参数
方式A:全局配置(永久生效)
编辑~/.opamrc文件(不存在则新建),添加如下配置:
download-command: "curl --create-dirs --write-out %{http_code} --retry 3 --retry-delay 2 --user-agent opam/2.1.0 -L -o %{out} %{url}"
配置完成后直接执行opam init即可生效。
方式B:单次命令生效
执行opam init时直接指定下载命令参数:
opam init --download-command 'curl --create-dirs --write-out %{http_code} --retry 3 --retry-delay 2 --user-agent opam/2.1.0 -L -o %{out} %{url}'
方案3:排查snap版curl的沙箱限制
你当前使用的是snap安装的curl,snap应用默认自带沙箱权限限制,可能无法访问/tmp下第三方程序创建的目录:
- 卸载snap版curl:
sudo snap remove curl - 安装系统原生curl:Debian/Ubuntu系执行
sudo apt install curl,其他发行版对应使用yum/dnf等包管理器安装即可 - 完成后重新执行
opam init
内容的提问来源于stack exchange,提问作者Motorhead
相关产品推荐
相关产品推荐

