由于公司笔记本的隐私问题前阵子购买了自用的 M1 Max 芯片的 MacBook Pro,64G 内存,心想着好好利用一下,装个虚拟机,然后运行 Oracle,结果很悲催。
先是尝试在 Parallels Desktop 上加载之前下载的 Linux iso 镜像文件,根本不能用。原来基于 Intel x86 架构的 Linux 不能装在基于 ARM 架构的 M1 芯片的笔记本上。
尝试下载最新的基于 ARM 架构的 Oracle Linux,https://download.oracle.com/otn-pub/otn_software/linux/OracleLinux-R9-U0-aarch64-dvd.iso ,安装没问题。装好以后抱有侥幸心理装一下 Oracle 12c,runInstaller 直接报错。
一顿谷歌,搜索了很多文章,总结一下有几种可行方案。
- 用 Parallel,VMware 或者 UTM 安装基于 ARM 的 Windows 11,然后在 Windows 11 里安装 Oracle。
直接放弃,我要的是在 Linux 下的 Oracle db。 - 用 docker。 直接放弃,不想弄个黑盒子。
- 用 UTM 安装基于 x86 平台的 Linux,然后再装 Oracle。 这个看起来不错,开心去尝试。结果安装 Redhat Linux 就用了非常之久,性能问题太严重了。放弃。
以上探索过程花了几个小时,我已经基本上放弃在笔记本上安装 Oracle 实验环境的打算了。
于是只好转换思路,不在本地安装虚拟机,能 ssh 到远程的 db server 上也可以。
首先想到的是自己在 “搬瓦工” 上买的两个 VPS,平时只用来 “科学上网”,正好利用一下。找到原来的账号密码 ssh 上去一看,只有 1G 内存,放弃。
尝试注册 Oracle Cloud,有文章说它可以提供永久免费的主机。注册搞了半天,最后通不过,应该是信用卡的问题。放弃。
尝试 AWS,注册成功,看一下 4G 内存的云机器,不便宜,放弃。
又看了下阿里云,4G 内存的主机每个月也要六七十块钱,偶尔用一下,不是很划算,放弃。
最后,竟然在最后,才想到自己改造成家用服务器的 2013 年买的 MacBook Pro。只要在上面安装 VMware,然后直接加载以前保存的虚拟机文件就可以飞速得到一个 Oracle 实验环境。
剩下的问题就是如何访问 Home Server (旧 MacBook Pro) 上的虚拟机,特别是不在家的时候该如何访问。
基本思路就是先 ssh 到 Home Server,然后再 ssh 到虚拟机里的 Linux,这样就可以运行 sqlplus 了。
在家里、同一个网段下访问很方便。
ssh -t -l <username> 10.0.0.6 ssh -o StrictHostKeyChecking=no [email protected]
外网访问的话有两个问题要解决,一是如何访问家里局域网里的 Home Server,二是安全问题。
因为我有公网 IP,在路由器上简单做个端口映射就好。没有公网 IP 的话需要去研究一下内网穿透方案。
ssh -t -l <username> -p <port> <public ip or dns name> ssh -o StrictHostKeyChecking=no [email protected]
因为我的 IP 是暴露在公网上,所以安全问题尤为重要。
- 路由器端开启了防火墙,只开放了两个必要的端口,一个是 sceen sharing,还有一个是 ssh,都端口映射到非默认端口。
- 先把 M1 笔记本上的 public key 复制到 Home Server 上的
~/.ssh/authorized_keys
,然后关闭 Home Server 的密码登录,只允许使用 public key 登录。这样安全性会更高。
vi /etc/ssh/sshd_config
MaxAuthTries 6
MaxSessions 10
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
-- restart sshd
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
在另外的机器上测试 ssh,会得到下面的报错。
➜ ~/.ssh > ssh -t -l <username> -p <port> <public ip or dns name>
xxx@xxxx: Permission denied (publickey).
先这样吧,不折腾了。