Mac OSX 10.8下安装idris遇Cabal/Stack多问题求助
解决Mac OS X 10.8下安装Idris的一系列问题
我来逐个拆解你遇到的问题,这些都是旧系统(OS X 10.8)搭配老版本Haskell工具链常见的兼容性坑:
1. Cabal update 503错误,陷入更新循环
原因
Hackage早在多年前就强制要求HTTPS访问,但你使用的旧版Cabal默认还是走HTTP地址http://hackage.haskell.org,服务器直接返回503拒绝请求;另外OS X 10.8自带的OpenSSL版本过旧,即便改成HTTPS,也可能因为不支持TLS 1.2+无法建立安全连接。
解决办法
- 先修改Cabal配置强制用HTTPS:
编辑~/.cabal/config,找到remote-repo行,把地址替换成https://hackage.haskell.org/ - 如果修改后仍失败,先升级Cabal本身:
尝试运行cabal install cabal-install,如果这个命令也失败,手动下载兼容OS X 10.8的Cabal二进制包,替换系统里的旧版本。
2. regex-base安装失败,日志文件不存在
原因
旧版本Cabal存在bug:构建失败时会声称日志写入指定文件,但实际上要么~/.cabal/logs目录没创建,要么你没有该目录的写入权限,导致日志根本没生成。
解决办法
- 先手动创建日志目录:
之后再重新运行mkdir -p ~/.cabal/logscabal install idris - 如果还是不行,加上
--verbose参数执行命令,这样构建日志会实时输出到终端,不用依赖本地日志文件,方便排查具体编译错误。
3. Stack工具链的各类错误
原因
两个Stack问题的核心都是版本不兼容:
- 你安装的Stack 1.1.2太老旧,无法解析新版本snapshot的YAML配置(比如
extra-deps格式、新的flag命名规则) - OS X 10.8自带的OpenSSL不支持TLS 1.2,导致无法从GitHub下载新的Stack二进制包——GitHub早已禁用TLS 1.0/1.1协议。
解决办法
先搞定Stack的安装/升级
- 手动下载兼容OS X 10.8的旧版Stack:找Stack 1.6.x或更早的版本(这些版本的下载链接还支持旧TLS协议,或者用浏览器直接下载对应二进制包,浏览器可能有更新的SSL支持),解压后把
stack二进制放到/usr/local/bin覆盖旧版本。 - 或者用Homebrew安装支持TLS 1.2的OpenSSL,再重新编译curl:
之后再重新运行Stack的安装脚本。brew install openssl@1.0 export PATH="/usr/local/opt/openssl@1.0/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl@1.0/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.0/include"
用Stack安装Idris
安装好兼容的Stack版本后,指定一个适配OS X 10.8的旧snapshot(lts-10+的依赖库大多不再支持旧系统),比如:
stack --resolver lts-9.21 install idris
4. Curl下载Stack失败的SSL错误
原因
OS X 10.8自带的curl依赖系统旧版OpenSSL,不支持TLS 1.2,而GitHub现在只允许TLS 1.2及以上的连接,导致握手失败。
解决办法
- 用浏览器打开Stack的发布页面,找到适配OS X 10.8的旧版本(比如
stack-1.6.5-osx-x86_64.tar.gz),手动下载解压后,把stack二进制放到/usr/local/bin覆盖旧版本。 - 或者按照上面的方法,用Homebrew安装新的OpenSSL和curl,再重新运行安装脚本。
另外提一句:OS X 10.8确实太老旧了,很多现代软件的官方支持都已停止,如果条件允许,升级到更高版本的macOS会从根本上解决这类兼容性问题。
内容的提问来源于stack exchange,提问作者Dmitri Zaitsev
相关产品推荐
相关产品推荐

