Linux 安装 GHCup,GHC, cabal 以及通过 cabal 安装 pandoc

安装 GHCUP

1. 指定国内镜像

GHCup 官方网站 上面提供了安装方式:

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

但是,大部分情况下我们都需要用到国内镜像来进行安装,可以通过以下方法指定国内镜像进行下载安装,这里参考了 如何安装 Haskell 工具链(2022 年版) 的安装介绍,指定了中科大的镜像。

首先,创建 ~/.cabal 目录,并创建 config 文件:

cd ~
mkdir .cabal
cd .cabal
vim config

config 文件中指定镜像:

repository mirrors.ustc.edu.cn
  url: https://mirrors.ustc.edu.cn/hackage/
  secure: True

2. 执行安装

在官方提供的命令中,指定刚刚配置的镜像地址,执行安装命令:

curl --proto '=https' --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/ghcup/sh/bootstrap-haskell | BOOTSTRAP_HASKELL_YAML=https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.8.yaml sh

这里需要注意,https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.8.yaml 为本文安装时的最新版本,建议安装时查看一下目前 中科大开源镜像-ghcup 索引页面中的最新版本,并指定该版本的配置文件进行安装。

安装过程中,安装程序会询问几个安装选项,没有特殊要求可以全部 Enter 使用默认选项进行即可,这个默认选项将会选择不安装 Haskell Language Server,后续如果需要使用,可以在 ghcup tui 中的界面再次安装。

3. 安装检查

安装完成之后,此时命令行中已经可以使用 ghcghcicabal 命令了,执行命令查看版本,检查是否安装成功:

ghc --version
ghci --version
cabal --version

安装 pandoc

安装 pandoc 有多种方式,这里采用的是cabal 的官方安装指引中提供的安装方法。

yum install pandoc
通过 yum 安装的 pandoc,默认安装版本较低,功能有限,建议安装较新版本,具体看个人需求。此方法不需要通过 ghcup 和 cabal,也不需要解决 gcc 版本问题。

1. 初始化包列表

首先需要更新一下 cabal 的包列表:

cabal init

2. 安装命令

安装命令:

cabal install pandoc-cli

默认安装的可执行路径在 ~/.cabal/bin 下,如果需要指定安装路径,可以添加选项 --installdir <your-dir>。另外,可以使用 --force-reinstalls 选项进行重新安装,但是需要注意这个选项将忽略其他包对此包的版本依赖,可能会影响其他包的使用。

测试安装的 pandoc:

cd ~/.cabal/bin
./pandoc --version

可以看到,已经安装了新版本的 pandoc:

pandoc 3.1.13
Features: -server +lua
Scripting engine: Lua 5.4
User data directory: /root/.local/share/pandoc
Copyright (C) 2006-2023 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.

3. Trouble Shooting

Failure to build crypton

注意,如果系统上的 gcc 版本太低,将会导致如上安装报错,可以通过 gcc --version 查看当前版本,例如在 CentOS 7 上的默认 gcc 版本为 4.8.5,此时需要升级 gcc 解决问题,在 Github 上面也有一个 issue 提到了这个问题

首先在 GNU 上面下载最新发型版本的 gcc 源码压缩包,本文更新版本为 13.2.0,下载文件 gcc-13.2.0.tar.gz,放到服务器上解压到指定的目录:

tar -zxvf /your-specified-dir gcc-13.2.0.tar.gz

例如 /home/icexk,解压之后进入该目录,执行依赖下载脚本安装依赖:

cd /home/icexk/gcc-13.2.0
./contrib/download_prerequisites

然后创建 build 目录,执行 configure 脚本进行编译前的配置:

mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

执行编译:

make && make install
# make -j 4 && make install

若资源允许可以添加 -j n 选项,其中 n 为指定 cpu 数量,提高编译速度,否则默认将会单线程进行,需要执行较长时间(具体根据设备资源情况)。

编译完成之后,查看 gcc 版本,此时仍然为旧版本,因为 gcc 命令依然指向 /usr/bin/gcc 这个旧版本的可执行文件,而新版本的 gcc 可执行文件默认在 /usr/local/bin 下面

因此,最后还需要将 /usr/bin 下面的可执行文件以及动态链接库替换成编译之后得到的新版本的 文件,可以将原命令文件备份,然后新建软链接到新版本的命令文件和动态库:

# 备份旧命令文件和动态链接库,具体名称可根据习惯定义
mv /usr/bin/gcc /usr/bin/gcc-default
mv /usr/bin/g++ /usr/bin/g++-default
mv /usr/bin/c++ /usr/bin/c++-default
mv /usr/bin/cc /usr/bin/cc-default
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.default
# 新建软链接
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/c++ /usr/bin/c++
ln -s /usr/local/bin/gcc /usr/bin/cc
ln -s /usr/local/lib64/libstdc++.so.6.0.32 /usr/lib64/libstdc++.so.6

在此检查 gcc 版本:

[root@localhost bin]# gcc --version
gcc (GCC) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

可以看到此时已经是新版本的 gcc 了。

Memory Exhausted 内存不足

可以尝试在虚拟机控制器上面增加内存,但是建议不要超过最大限制,另外可以尝试释放一些进程,或者关闭外部操作系统(对于大多数读者来说应该是你的 Windows 系统)上一些占用内存较多的程序,因为本质上虚拟机使用的还是系统的资源。

最后尝试重启一下虚拟机再执行安装命令,可以释放掉因上次安装内存不足而占用的 swap 交换内存,以及 cache 缓存。

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值