天天看点

【CS143 Compiler】1. 环境配置、踩坑CS143 环境配置

CS143 环境配置

斯坦福 CS143 Compiler 课程。

课程主页在 https://learning.edx.org/course/course-v1:StanfordOnline+SOE.YCSCS1+2T2020/home。

它提供了一个预配置的虚拟机,是基于 Ubuntu 古老版本的 Bodhi,这个虚拟机必须跑在 x86 platform 下,我的 M1 Pro mbp 尝试了两个下午后放弃了。

CS143 的远古 VM

今天装 CS143 提供的虚拟机,由于这是 x86 下创建的,我 arm 架构的 mbp 没法跑。。我应该能猜到的,毕竟是十年前的课,肯定考虑不到十年后 Apple 能把 arm 的性能和生态拉到这种地步。

虚拟机是基于 Ubuntu 的 Bodhi,闻所未闻,于是被迫打开我的暗影精灵 5 来跑。

打算开 vscode ssh 到虚拟机里 coding,查了查才知道桥接网卡可以把虚拟机暴露到本机的内网。

然后又遇到一个问题,这个镜像居然没有 ssh server!瞬间有不好的预感。

sudo apt-get install openssh-server

,果然不行。

于是拉一下列表看看

sudo apt-get update

,直接歇了,报一堆 404,估计是系统实在是太老,Ubuntu 已经停止对它的支持了。

查了查资料才知道这种已经不受长期支持的系统也仍然提供软件源的,只不过需要从

old-releases.ubuntu.com/ubuntu

下拿。

Ubuntu 的软件源 config 在

/etc/apt/sources.list

,需要把所有三级域换成

old-releases.

一些坑

除此之外,也提供了直接在 Linux 系统下配置所需环境的方法,都在课程主页里。

不过,由于这门课程确实是有些古老了,还有一些坑要踩。

我使用的是 ubuntu-18.04 with wsl2,16.04 版本莫名其妙无法使用 spim。

第一个坑见这个 discussio。

第二个坑是关于 flex 的,课程主页直接写了

sudo apt install flex

,但现在的 flex 在 C/C++ 兼容性上存在一些差异,我们最好使用虚拟机中的版本。解决方法也比较简单,你可以直接

sudo apt install flex-old

最后 wsl 跑在我的 windows 本上,但还是习惯用 mac 写代码,可以将它们放在一个局域网中,例如一个 wifi 下。

在 windows 中通过 ssh 反向代理连接 mac 的 ssh server,也就是把 wsl 的 22 端口映射到 mac 的某个端口(例如 2222):

ssh -R macHost:2222:wslHsot:22 [email protected]
           

然后就可以在 mac 上连接本地 2222,这会直接转发到 windows wsl 的 22 端口。

ssh [email protected] -p 2222
           

两次 ssh

我的 windows 本太重,一般是拿着 mac 出去,但我的环境在 windows 上。

如果想在外边访问到 windows,可以使用一个具有公网 IP 的服务器,先用 windows ssh reverse proxy 到服务器上,然后配置 vscode 经由公网服务器两次 ssh 到我的 windows 本的 wsl 里。

Host jumper
  HostName 1.117.228.194
  User gaolihai
  Port 22
  
Host compilers
  Hostname localhost
  User gaolihai
  Port 2222
  ProxyJump jumper