ghcup 安装:写入 ~/.ghcup/cache 目录时权限被拒绝

问题描述 投票:0回答:2

我尝试在 Ubuntu 上安装 ghcup:

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

使用默认选项(添加到.bashrc,不安装HLS,不安装Stack)。

问题是,当脚本尝试将

permission denied
文件写入
ghcup-0.0.6.yaml.tmp
目录时,我收到
~/.ghcup/cache
错误,我不确定原因。

目录的权限为1775(drwxrwxr-x)。将它们升级到 1777 (drwxrwxrwt) 并重新运行curl 命令会产生相同的错误。目录所有者是我(不是 root),并且我按照 ghcup 安装说明的指示运行不带

sudo
的curl 命令。

完整命令输出:

                                 Dload  Upload   Total   Spent    Left  Speed
100 24.3M  100 24.3M    0     0  5782k      0  0:00:04  0:00:04 --:--:-- 5783k
[ Info  ] downloading: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.6.yaml as file /home/austin/.ghcup/cache/ghcup-0.0.6.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0Warning: Failed to create the file 
Warning: /home/austin/.ghcup/cache/ghcup-0.0.6.yaml.tmp: Permission denied
  0  134k    0   858    0     0   8429      0  0:00:16 --:--:--  0:00:16  8495
curl: (23) Failure writing output to destination
[ Warn  ] Could not get download info, trying cached version (this may not be recent!)
[ ...   ] If this problem persists, consider switching downloader via: 
[ ...   ]     ghcup config set downloader Wget
[ Error ] JSON decoding failed with: YAML exception:
[ ...   ] Yaml file not found: /home/austin/.ghcup/cache/ghcup-0.0.6.yaml
[ ...   ] Consider removing /home/austin/.ghcup/cache/ghcup-0.0.6.yaml manually.
[ ...   ] 
"_eghcup upgrade" failed!

希望能解释一下发生了什么以及如何解决它,以便我可以开始学习 Haskell!预先感谢。

haskell curl permissions ghcup
2个回答
7
投票

已解决:

原来

snap
版本的卷曲是半损坏的。运行后我成功安装了
ghcup

sudo snap remove curl

sudo apt install curl

0
投票

对我来说,导致错误的命令如下:

curl --dump-header /tmp/curl-header59263-0 -fL -o /home/heitor/.ghcup/cache/ghcup-0.0.8.yaml.tmp https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.8.yaml

然后我创建两个具有写入权限的目录:“x”和“.x”。运行命令使这些目录成为目标目录,我得到以下结果:

heitor@heitor-kubuntu:~$ curl -o x/ghcup-0.0.8.yaml  https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.8.yaml
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100  463k  100  463k    0     0  7838k      0 --:--:-- --:--:-- --:--:-- 7861k


heitor@heitor-kubuntu:~$ curl -o .x/ghcup-0.0.8.yaml  https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.8.yaml
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0Warning: Failed to open the file .x/ghcup-0.0.8.yaml: Permission denied
  3  463k    3 16375    0     0   711k      0 --:--:-- --:--:-- --:--:--  726k
  curl: (23) Failure writing output to destination

然后我得到的印象是,错误是由于将目标文件写入以点“.”开头的目录中造成的,在本例中是安装脚本使用的“.ghcup”目录。

我的分析正确吗?如果是这样,我如何建议修复安装脚本?如果不是,我做错了什么?

© www.soinside.com 2019 - 2024. All rights reserved.