把笔记本变成远程开发机
-
date_range 23/12/2023 infosortSmart Home
1 概述/前言
在上家公司零元购了一台淘汰的办公电脑, 本来是把他放在Window PC娱乐机旁边。 但这样就挤占了本来就不宽裕的桌面空间, 而且需要在两套键鼠之间切换。 在尝试了一些方案过后, 最后找到了一个比较舒服的解法 ———— 把笔记本配置成Linux Server, Windows PC作为FrontEnd。
2 安装操作系统
操作系统是Linux, 选择什么Linux发行版需要再讨论一下。
选择Debian Testing 根据我以往的使用经验,开发机长期使用的几个问题:
- 过于高频的折腾。 比如配置开发环境, 结果导致系统挂逼,被迫重装。
- 系统软件版本过低,但升级系统又升级不上去
考虑上面的问题,开发机最好安装是Debian Testing (https://wiki.debian.org/DebianTesting)。 不同ubuntu 20.04这样的固定版本。 debian testing是rolling update的,不会说出现系统软件版本过低的情况。
但是使用Rolling update会导致的折腾的频率更高了,因此还需要: 我的选择是把Debian变成一个CoreOS来使用 ———— 也就Debian作为Host System, 只做网络配置,容器运行,文件系统管理这些工作。 至于开发环境的配置,全部放到Docker容器里来。
下载安装Debian Testing MacBook所需要的驱动大部分都已经集成到MainLinux Linux Kernel, 因此无需按照那些历史文章去安装Custom Kernel/Driver, 只需要只做一个Debian安装盘即可。 如何制作安装盘请看链接: https://wiki.debian.org/DebianInstall 制作完后,插入Macbook,按住Option启动进入USB。 按照Debian安装页面走完安装过程
3 配置笔记本
连接网络
在笔记本上通过Gui的NetworkManager连接网络,设置自动连接。
连接好了在UI上配置连接, 记得把连接方式从DHCP改为固定IP。
打开ssh
执行命令sudo apt install openssh-server*
把目录通过NFS导出
执行命令sudo apt install nfs-kernel-server*
, 修改脚本/date/exports
, 把/home目录export出来。
其他
其他还可以做一些增加可维护性的操作,比如自动更新APT,比如自动重启。
4 配置开发Docker
选什么开发Docker 我个人选用的是ubuntu vnc docker(https://github.com/HarGit14/dorowu-docker-ubuntu-vnc-desktop) , 理由如下:
- 比较习惯Ubuntu的使用
- 远程GUI无法使用(其实还有远程X11,但是兼容性差和配置麻烦), 个别需要UI的场景必须要有解决方案。
有VNC就可以通过浏览器登录远程开发机的桌面, 效果如下:
运行Docker
首先要在开发机器上安装Docker环境,sudo apt install docker.io*
然后输入如下命令运行Docker。 命令的含义是Docker容器使用宿主机的网络(也就是Docker容器里的端口外部都可以直接访问,减少映射配置成本); 自动重启; root权限; 把外部目录挂载到宿主机。
sudo docker run --network host --restart=always --privileged -v /dev/shm:/dev/shm -v /home:/home -v /:/mnt/home dorowu/ubuntu-desktop-lxde-vnc
运行直接,访问开发机的IP, 比如说http://192.168.2.103/, 就可以看到桌面了。
5 配置Windows PC
配置SSH Client 这里我强烈推荐一个Terminal: https://tabby.sh/ 是我目前用下来,体验最好的一个多系统共用的Terminal了。还可以通过Github在机器里同步配置。 安装VScode并配置Remote模式 参考文档:** **https://code.visualstudio.com/docs/remote/ssh** **Windows通过NFS挂载远程机目录 参考文档: https://help.aliyun.com/zh/nas/user-guide/mount-a-general-purpose-nfs-file-system-on-a-windows-ecs-instance
6 开发
Now Enjoy Developing with Windows Frontend/Linux Backend~