在D1/openEuler上安装docker,并运行docker/Debian

实验时间:2021.9.1

需要的硬件有: D1开发板,TF卡,TF卡读卡器,串口转USB线

软件有: Linux系统,Windows下的Xshell, Windows下的串口转USB的驱动。

openEuler镜像: https://mirror.iscas.ac.cn/plct/openEuler-D1-wifi-hdmi-docker-20210826.img.bz2 (这是我目前使用的版本,镜像一直在更新中)

步骤

一、在D1上安装openEuler系统

简明步骤如下

1. 在x86/Ubuntu下烧录oE镜像。

我的Ubuntu系统信息:

a. 将TF卡放入读卡器,连接上x86主机。

b. 下载oE镜像:

sudo fdisk -l

d. 使用dd命令将镜像烧录到TF卡:

e. 对/dev/sdb中的系统分区进行扩容

sudo fdisk -ldf -hT
sudo fdisk -ldf -Th

现在烧录完成,之后将TF卡放入D1并开机。

说明:这里使用的镜像应该是支持HDMI的,也就是支持显示器的信号输入的,但是我在实验过程中,显示器始终起不来。因此我这里改成用串口登录系统了,遇到同样问题的小伙伴也可以采用这种方式,以及如果使用了不支持HDMI的镜像,也可以使用串口登录。下面来看,如何使用串口登录。

2. 使用串口登录uboot,并使用SSH登录oE系统

我是Windows下是用Xshell来进行串口和SSH登录的,在Linux中可以使用minicom来进行串口登录uboot。下面主要说一下Windows下的操作步骤。

a. 安装串口转USB的驱动程序

需要注册账号登录下载,下载的工具和位置参见下图:

留着,待会儿安装。

现在把TF卡插入D1里,接上HDMI线到显示屏(运气好显示屏可以起来),插上串口线到x86主机的USB上,串口端插在D1的板子上,针的顺序如下,从靠近typec口依次是白绿黑线,红线不用:

这时候,打开x86主机上的设备管理器(电脑->管理->设备管理器->COM口)COM口会多出一个无法识别的硬件,右键点击它,选择安装驱动,然后指定前面下载的FT232R驱动的文件夹,然后它会自动搜索并安装。安装成功之后,会显示出USB Serial Port,如下图所示:

b. 启动D1,进入uboot界面,设置wifi

下载Xshell软件,下面是官网地址,有30天免费试用版,家庭学校用户免费版,按需下载吧。

下载安装之后,启动Xshell,新建一个会话,协议选择SERIAL,其他默认,如下图所示:

然后连接进入这个会话,这时候串口线也是插上的,然后再给D1上电,Xshell界面就能显示出uboot的启动过程了。

(注意,一定是先插好线,开启SERIAL会话,再给D1上电)

uboot启动完成之后就可以登录系统了,登陆账号密码: root/openEuler12#$

登陆系统之后,赶紧设置WiFi吧,有wifi就能SSH登录了,不用忍受串口时不时打印出的信息。

Wifi的设置方法是:

这里使用的镜像已经支持wifi了,执行ifconfig可以看到wlan0,可以使用nmtui图形模式配置。

直接输入命令nmtui即可:

接着选择:Edit a connection -> -> Wi-Fi

填写Profile name、SSID、选择认证方式,然后就可以连接上WiFi了 : )

现在有了wifi,就可以使用SSH登录了,先查看一下D1的ip地址:

然后再Xshell中创建一个新的会话,协议选SSH,主机填入D1的IP,其他默认,确定,然后连接这个SSH会话,要求输入密码,选择保存密码。由于D1使用DHCP获得IP的,所以D1重启之后,IP就会变,那这里的IP就需要重新设置了。

到此,我们就成功登录了D1/oE,准备工作完成,下面要正式开始在D1/oE上安装Docker,并运行Docker/Linux了。

二、在D1/oE上安装Docker

  1. 安装依赖的包

2. 下载并安装go

目前还没有官网的go for RISCV的安装包,我们是从下面的github仓库里找到了prebuilt的安装包:

这里我用的版本是go1.17.linux-riscv64.tar.gz。

3. 下载docker安装包并安装

目前还没有官网的docker for RISCV的安装包,我们是从下面的github仓库里找到了prebuilt的安装包:

上面安装的oE系统的Glibc版本是2.31,适合的docker安装包是下面这个:

如果系统的Glibc版本是2.33的话,可以使用下面这个:

我这里用的是docker-19.03.8-dev_riscv64.tar.gz。下载之后解压缩,并且安装包的目录,拷贝到系统的相应目录下:

4. 安装CNI的插件

5. 设置LD_LIBRARY_PATH

6. 启动docker

上面的步骤都做完了之后,建议重启D1开发板,IP会改变,Xshell相应的SSH连接会话IP需要重新设置。(先用串口会话看IP,再设置SSH IP)

重启之后,查看一下后台进程,containerd和dockerd可能默认就是开启的,先把它们kill掉,例如:

总结一下命令如下:

docker version

下面就是拉取riscv64/debian的镜像,并且运行docker/debian:

运行成功会是类似这样的:

到这里就完成了,撒花!


PS: 后来我又重新执行了一遍这个流程,这次遇到找不到runc,解决方法是创建一个crun到runc的软连接:

之前是没有遇到这个问题,不知道问题出在哪里。