本帖最后由 linyuuki 于 2023-11-18 09:23 编辑
# 概要
mac Vscode中使用官方dev container在容器中部署linux环境进行开发。
# 优点
代码保存在本地,链接工具依赖包等都在容器中,不会污染本地环境。
# vscode
安装VSCODE,这个自己应该要会的。跳过不讲。
# dev container
vscode左边的扩展面板上搜索,安装就可以了。
# 安装容器
可以安装docker,也可以是其他的。
我推荐使用orbstack,不启动APP也可以操作,比较接近linux下的操作方式。
我使用homebrew安装。
先安装docker
- brew install --cask docker
复制代码
再安装orbstack
# 选取镜像
dockerhub搜索ubuntu,按下图找到最新版本的实际版本号。
不建议直接用lastest,直接固定版本号下载。
找到当前适合arm平台的最新版本哈希值,搜索一下,可以看到版本号为 jammy-20231004,右边有命令,可以直接复制。
# 下载镜像
打开终端,输入下面的命令
启动orbstack
告诉orb我想要arm架构的镜像,速度快
- export DOCKER_DEFAULT_PLATFORM=linux/arm64
复制代码
拉取镜像
- docker pull ubuntu:jammy-20231004
复制代码
等一会就OK了
# 拉取代码
访达,进入工作区文件夹,按Option键,下方会出现文件夹路径,右键文件夹,选择在终端打开(找不到就算了,到时候移动文件夹也行)
我是日文系统,无视即可。
输入命令,直接把代码拉取到文件夹dev_container_ubuntu22_Ai-Thinker-Open-Kits中。
- git clone https://github.com/Ai-Thinker-Open/AiPi-Open-Kits.git dev_container_ubuntu22_Ai-Thinker-Open-Kits
复制代码
dev_container_ubuntu22_Ai-Thinker-Open-Kits 表示在容器中开发,使用ubuntu22,代码是Ai-Thinker-Open-Kits。
这样操作和命名真的太优雅了。
# 创建容器开发
使用VSCODE打开这个文件夹,创建新的开发容器。
输入关键字ubuntu查找
选择jammy
其他功能不要,直接确定
自动生成文件夹和文件
修改一下.devcontainer/devcontainer.json
- // See https://containers.dev/implementors/json_reference/ for configuration reference
- {
- "name": "ubuntu22_Ai-Thinker-Open-Kits",
- "build": {
- "dockerfile": "Dockerfile"
- },
- "shutdownAction": "stopContainer",
- "remoteUser": "root"
- }
复制代码
再创建一个文件Dockerfile
- FROM ubuntu:jammy-20231004
复制代码
两个文件是这样的
# 启动容器
从下面三处可以看出,现在是在容器中。
刚才拉取的文件都在。
# 编译测试
安装基本工具
- apt-get install -y make gcc vim cmake git ninja-build
复制代码
初始化子模块
拉取子模块
文件挺大的,花了点时间
进入文件夹后执行
直接执行提示没给权限,可以用chmod给权限也可以不给
这里又开始拉取代码,这次是工具链
最后输出
# 翻车了
提示说没有找到/lib64/ld-linux-x86-64.so.2,因为我在arm上打算执行x86程序。。。。
# 解决错误
上图最下面给出了一个URL,关于交叉编译的说明。
- https://docs.orbstack.dev/machines/#multi-architecture
复制代码
这个镜像不支持sudo,已经是root用户,所以把sudo去除。
- dpkg --add-architecture amd64
- echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports lunar main restricted universe multiverse
- deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports lunar-updates main restricted universe multiverse
- deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports lunar-security main restricted universe multiverse
- deb [arch=amd64] http://archive.ubuntu.com/ubuntu lunar main restricted universe multiverse
- deb [arch=amd64] http://archive.ubuntu.com/ubuntu lunar-updates main restricted universe multiverse
- deb [arch=amd64] http://archive.ubuntu.com/ubuntu lunar-security main restricted universe multiverse' | tee /etc/apt/sources.list
- apt update
- apt install libc6:amd64
复制代码
安装很快。
重新执行输出,没有显示错误,输出正常
# 试编译
进入示例目录,并编译
# 编译失败
满眼错误。。。
王德发,看来用arm镜像是跑不动工具链,需要用x86镜像。
# 更改镜像
指定架构信息,重新编译。
Dockerfile如下,把基本工具的安装也集成进去。
- FROM --platform=linux/amd64 ubuntu:jammy-20231004
- RUN apt-get update &&
- apt-get install -y make gcc vim cmake git ninja-build
复制代码
虽然换了一个镜像,但是刚才说了,数据都在本地,而且更换为X86架构,也不需要理会交叉编译,所以不需要重头来过。
只需要进入目录,直接编译就可以了。
进入示例目录
重新编译,完美结束。
其他系统下使用容器开发也是一样的步骤。
翻车是不可能翻车的,这辈子都不可能翻车的。
翻车的不是我,是论坛的编辑器,我点发布时图片全丢了。。。
还好我设置了截图自动保存,重新找出来,打上标记,累死我了。
那这不得发几个模块是安慰下我(笑)
|
|