云端IDE系列教程6:解决 WeTTY 在 Ubuntu 非 root 用户不能运行的问题

2023-02-28

406

原文作者:行云创新技术总监 邓冰寒


概述


上一期在使用官方容器镜像快速成功地在 TitanIDE 运行起来了 WeTTY,但是不适合开发人员使用,而我自己编译构建出来的容器镜像无法直接运行指定的应用(/bin/bash 或 /bin/zsh),本来在 WeTTY的开源项目下面提了 issue,但貌似没有得到响应,如果能在一个小时左右快速解决问题,折腾 WeTTY 这个开源软件对我来说是有价值的。


折腾经历


在经过权衡利弊(内心挣扎)之后,为了给开发者提供最好的使用体验,我决定花一个小时左右的时间在 TitanIDE 上看看是什么原因导致 WeTTY 不理会我传递的参数 --command。


首先在 TitanIDE 创建一个 NodeJS 的项目,这里我采用了 VS Code for Node.js 作为 WeTTY 的开发环境。


云端IDE玩转WeTTY


创建好项目之后,紧接着就是来执行使用开源项目的三把斧,fork,clone,run。


云端IDE玩转WeTTY


分析问题


如上一期文章所提到的,既然--command在官方提供的镜像可以正常工作的,没有理由我自己运行的不行,肯定是有环境的差异性。经过一番顺藤摸瓜式的盘查,在我预期的时间内找到了问题的根本原因。


首先,WeTTY 在启动的时候会先获取 cmmand,如下代码所示:


云端IDE玩转WeTTY

localhost 的判断函数又有一行代码判断 uid 是否为 0, 即 root 用户才能在 localhost 启动自定义命令,这逻辑很怪,不知道设计者是怎么考虑的. TitanIDE 使用了 Ubuntu 作为操作系统,默认用户为非 root,因此在 Ubuntu 没法正常运行。



解决问题


经过以上分析,问题已经得到解决,我传递的参数 --command /bin/zsh 已经起作用了,以下命令是完整的命令行:


yarn start --port=8080 --base / --command /bin/zsh


如下图所示,我将 process.getuid() === 0 这行代码去掉后,WeTTY 运行一切正常:


云端IDE玩转WeTTY


制作镜像


和上期所介绍的一样,我们也是在 TitanIDE 使用 TepmlateMaker 创建一个 WeTTY 的项目,用于制作 WeTTY for Ubuntu 的模板镜像。


云端IDE玩转WeTTY


创建好 template-wetty 之后,先编辑 WeTTY 的启动脚本以在 Dockerfile 备用:


云端IDE


然后编辑 Dockerfile 以实现 WeTTY 在 Ubuntu 下面作为一个开发环境。这里使用了 TitanIDE 的基础镜像 template-core:v20230119-1cfbd2e,该基础镜像基于 Ubuntu 20.04,包含了开发者常用的工具,如 kubectl, helm,git 等 。以下是完整的 Dockerfile:


在线代码编辑器


在 TitanIDE 的工作区直接执行 make 命令构建出 WeTTY 的模版镜像:


云端IDE


代码编辑器 在线


验证效果


然后使用 WeTTY 模板镜像 titan.hub:5000/demo/template-wetty:v20230131-1b25d1b 创建 WeTTY 模版:



最后,使用 WeTTY 模版来创建 WeTTY 项目。验证最终效果,如下图所示。



在云端使用 Vim,真香!



总结


在选用如 WeTTY 这样的开源软件过程中,和使用其他开源软件一样,并不是无偿完全无偿使用的,为了价值的最大化,这就需要像 TitanIDE 这样的开发环境,在 TitanIDE 上面折腾的这些开源软件有个好处就是,我不需要为了某个开源软件去准备开发环境,因为 TitanIDE 提供了我要的开发环境模板,开箱即用。在这个基础之上,我们又可以创建属于自己的模版,本文展示了如何在 TitanIDE 快速解决开源软件的问题,然后定制一个 WeTTY 云端 Terminal 作为开发环境的完整过程,希望能帮到有需要的开发者。


本文是系列文章《在 TitanIDE 玩转云原生 Terminal 系列》,我将会在下一篇继续就这个话题展开探索,敬请期待!


最后,感谢阅读!




点击链接,TitanIDE 免费体验>>


TitanIDE是什么



技术交流
我们建立了多个云原生技术交流群,其中有来自Oracle、Citrix、华为、腾讯等国内外云计算专家,立即扫码,拉你进群。目前已有2000+开发者加入我们......
云原生厂商 云原生技术服务商
在云原生时代,行云创新致力于通过赋能开发者,实现企业快速迭代与交付,大幅提升创新效率。
产品下载