🌈 博客个人主页:Chris在Coding****
🎥 本文所属专栏:[旭日X3派] [Docker实战]
❤️ 前置学习专栏:[Linux学习]
**⏰ 我们仍在旅途 **
1. 安装系统
旭日X3派开发板支持两个系统版本:Ubuntu 20.04 Desktop 和 Ubuntu 20.04 Server
- **Ubuntu Desktop:**版本支持图形化桌面
- **Ubuntu Server:**版本使用不带图形化桌面的命令行交互操作方式
这里我们安装Ubuntu Desktop版本
开发板Ubuntu镜像文件可从资源中心栏目中获取,如下图:
1.1 烧录准备
在烧录Ubuntu系统镜像前,用户需要做如下准备:
- 准备至少8GB容量的Micro SD卡
- SD 读卡器
- 下载Ubuntu镜像压缩包,并解压出Ubuntu系统镜像文件:system_sdcard.img
- 下载镜像烧录工具balenaEtcher,下载链接:https://www.balena.io/etcher/
1.2 烧录系统
balenaEtcher是一款支持Windows/Mac/Linux等多平台的PC端启动盘制作工具,制作SD启动卡流程如下:
打开balenaEtcher工具,点击Flash frome file按钮,选择解压出来的system_sdcard.img文件作为烧录镜像
点击Select target按钮,选择对应的Micro SD存储卡作为目标存储设备
点击Flash按钮开始烧录,待工具提示Flash Complete时,表示镜像烧录完成,您可以关闭balenaEtcher工具并取出存储卡
1.3 启动系统
首先保持旭日X3派开发板断电,然后将制作好的存储卡插入开发板的Micro SD卡槽,并通过HDMI线缆连接开发板与显示器,最后给开发板上电。用户可通过指示灯判断开发板状态,指示灯说明如下:
- 红色指示灯:点亮代表硬件上电正常
- 绿色指示灯:点亮代表系统启动中,熄灭代表系统启动完成
系统首次启动时会进行默认环境配置,整个过程持续45秒左右,配置结束后会在显示器输出Ubuntu系统桌面(Ubuntu Server显示logo图标)。
如果开发板上电后长时间没有显示输出(2分钟以上),说明开发板启动异常。此时用户可通过指示灯确认系统状态,方法如下:
- 绿灯常亮:说明系统启动失败,可检查使用的电源适配器是否满足5V3A的要求,可尝试重新制作Micro SD卡系统镜像
- 绿灯熄灭:说明系统启动成功,但显示服务启动失败,请确认连接的显示器符合支持列表规格
2. 远程登录
注意:
本章节的操作,我是先将开发板接到独立的显示器并连接键鼠进行的,完成远程登陆的任务后,才能实现跨设备开发
远程连接需要保证设备与开发板处于同一个局域网内 ,这里我事先准备好了一个笔记本,准备与开发板连接到同一个WiFi下进行远程连接
2.1 网络连接
安装了Ubuntu 20.04 Desktop版本的开发板开机后会进入图形化桌面,直接点击右上角
(安装Ubuntu Server版本系统的用户,可通过命令行完成无线网络配置,这里就不再赘述)
查看开发板当前IP地址
使用下面这个命令可以查看当前设备的ip地址
ifconfig
我们主要看wlan0口的inet下的ip地址,这里我的地址是192.168.31.77
开发板有线网络默认采用静态IP配置,连接后同一路由器下的IP地址不会改变
2.2 开启vino服务
vino 是linux上一个用于远程桌面连接的VNC 服务端。这时如果我们直接打开VNC连接,是连不上的,主要原因是开发板是没有安装Vino服务的
我们需要自己去安装Vino服务
我们使用的地平线镜像中软件包是旧的,我们首先先更新软件包以及对应的软件:
1.按顺序执行下面两条命令
更新软件源列表,以获取最新的软件包信息
sudo apt update
用于安装已经在软件源中更新的软件包,使系统中的软件保持最新状态。
sudo apt upgrade
(该过程需要保证网络的通畅,建议连接稳定的网络,整个过程可能花费10分钟左右,请耐心等待)
2.更新完后我们执行下面这条命令来安装vino
sudo apt install -y vino
**3.再通过systemctl 命令启动: **
systemctl --user restart vino-server.service # 启动 vino 服务
** 4.查看vino状态:**
systemctl --user status
此时则代表vino服务运行
2.3 VNC登录
VNC Viewer是一个图形桌面共享软件,可在电脑上实现设备远程登录和控制桌面。该软件可以通过电脑显示器预览开发板系统桌面,并使用电脑的鼠标、键盘进行远程操作。用户通过VNC Viewer操作,可以获得跟开发板本地操作相同的效果,下载链接VNC Viewer。
目前VNC支持直接、云端两种连接方式,我们使用直接连接方式,连接步骤如下:
1.上方输入设备ip地址,这里我自己是:192.168.31.77
**2.输入完后回车连接时可能会弹出如下面的窗口 **
之所以出现这种问题是因为,远程连接Ubuntu桌面,Vino需将安全认证关闭才能通过VNC Viewer连接。
3.这时我们可以通过以下命令可以关闭安全认证方式:
sudo gsettings set org.gnome.Vino prompt-enabled false
4.输入该命令后,系统可能会继续报错
failed to commit changes to dconf: Failed to execute child process “dbus-launch” (No such file or directory)
不要急,这说明我们的系统中缺少需要的包
sudo apt-get install dbus-x11 -y
5.安装好后再次执行关闭安全认证命令,没有再报错后,我们重启vino服务
systemctl --user restart vino-server.service # 启动 vino 服务
6.这个时候我们再去使用VNC Viewer连接,如果再弹出相同错误的弹窗,可能是重启Vino出了问题(我在实际操作中用地平线官方镜像时遇到了!)
这个时候我们只需要用万能的关机重启大法就好了
2.4 SSH连接--VsCode
通过VNC我们确实可以做到远程连接开发板桌面了,但是实际上开发依然十分低效,我这里十分推荐在VNC的基础上再用VsCode进行SSH连接
2.4.1.安装VsCode及插件
Visual Stdio Code简称VS Code,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎 主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰富的插件,用户能获得更多高效的功能.
vsCode官网下载
下载安装后我们还需要安装远程连接的插件Remote - SSH
除此之外我还推荐安装以下的插件
- Chinese (Simplified)
- vscode-icons
- C/C++ Extension Pack
- GBKtoUTF8
2.4.2.添加服务器连接配置
- 我们先点击左边多出来的远程资源管理器
- 再点击左上角的+号新建远程
- 然后在弹出来的方框中输入命令,这里我输入的是ssh sunrise@192.168.31.77,其中ssh和@是固定语法不能更改,sunrise是对应的用户名字(地平线官方镜像默认sunrise),192.168.31.77是自己开发板的IP地址
这是将连接的信息文件保存
我们在SSH栏中找到我们需要连接的对应服务器,点击旁边的两个图标任一都可以
之后输入对应用户的密码即可,我用的地平线官方镜像用户名与密码都默认是sunrise
成功进入后,我们后面就可以通过VsCode来实现编程开发
我们再按下CTRL+`就可以进入命令行终端,这样开发就更方便了
3. 安装Docker OpenWrt
3.1 安装Docker
安装docker这里有两种方案,分别是手动静态软件包安装还有官方脚本部署
这里更推荐后者:官方脚本部署,特点:简单,快捷
当然我也会详细写出怎么手动安装的方案,喜欢折腾的朋友也可以参考学习一下
3.1.1 官方脚本一键安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
3.1.2 ARM架构静态安装包部署Docker
由于我使用的旭日X3派是ARM架构,这使得我们跟着官方的步骤走,也会报出很多莫名奇妙的错误,
所以这里我们采用了静态安装包部署Docker的办法(不是ARM架构的朋友跟着官方或者别人的博客走都问题不大,这里我就不再赘述)
1.下载Docker静态包
Docker静态安装包的下载地址为:Index of linux/static/stable/aarch64/
这里我直接在我板子上的FireFox浏览器上打开下载
这里我直接选择下载我当前的最新版本docker-25.0.3
2.解压Docker静态包
文件是默认下载到路径 /home/用户名/Downloads/
我们先进入下载目录
cd /home/sunrise/Downloads/
解压并移动到/usr/bin/目录
tar xvf docker-20.10.24.tgz
cp docker/* /usr/bin/
3 将docker注册为service
用vim创建并编辑docker.service
sudo vim /etc/systemd/system/docker.service
进入后我们单击 i ,进入插入模式
再复制粘贴下面内容到文件
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false -H unix://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
复制粘贴完后我们先按ESC进入普通模式
再单击 : 进入命令模式,输入wq后再回车,就写入并保存
** 4 启动docker**
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
**3.1.3 创建并加入docker组 **
在安装成功并运行好后,我们在使用docker命令时,会遇到如下报错
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get
报错称是权限问题,这时候得加上sudo才行.我们可以通过加入docker组的方法解决权限问题
静态安装包安装是不会给你创建docker的group的,所以我们需要自己创建一个
sudo groupadd docker
**然后再执行添加用户操作就可以成功了,最后重启docker **
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
restart后仍出现相同问题的,可能是重启容器环节有纰漏,推荐关机重启大法
3.2 安装Docker Portainer
portainer是一款容器管理可视化界面,不想在虚拟中使用命令管理容器的小伙伴,可以选择安装portainer对容器进行管理,查看日志、启动、停止容器等非常方便。
1.拉取并启动镜像
docker run -d --network host -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
2.使用Docker Portainer
这时候我们只需要输入在浏览器中输入 开发板IP:9000 就可以访问
3.3 安装Docker Openwrt
OpenWrt是一款开源的嵌入式操作系统,专门设计用于智能路由器和网络设备。它基于Linux内核,提供了丰富的功能和灵活的定制化选项,成为开发智能路由器的强大工具。
Github地址 这里包含了很全的镜像文件包含了 arm x86 x64 的 docker 镜像文件,我的机器是旭日X3派 所以只能安装这个镜像 sulinggg/openwrt:latest 。其他机器请去链接自行下载
1.拉取并启动镜像
docker run -d --restart always --name openwrt --privileged --network host sulinggg/openwrt:armv8 /sbin/init
2.使用Docker Openwrt
这时候我们只需要输入在浏览器中输入 开发板IP 就可以了
默认密码是 password
4. Samba局域网NAS
如果是安装的我前面提到的Docker Openwrt,里面是已经集成了Samba,我们不需要格外安装
4.1 创建共享目录
我们可以使用Portainer连接openwrt容器的界面,进入界面后我们先创建好共享目录
mkdir -p /home/share
设置权限
chmod 777 /home/share
4.2 Samba参数设置
我们先来到可视化界面中的NAS栏中的网络共享,目录就写前面创建的共享目录,用户我们这里就写root
来到编辑模板一栏,把bind interfaces only = yes和invalid users = root两栏注释掉(在行前面加#)
修改完后保存
4.3 挂载点设置
勾选启用挂载点,再把挂载点设置成共享目录
4.4 设置samba密码
我们在回到Portainer连接openwrt容器的界面
smbpasswd -a root
我们为root用户设置专门的samba服务密码,设置完后我们重启samba服务
service samba restart
4.5 远程访问
我们按下Win+R组合键打开运行,输入\:开发板IP地址后回车
用户输入我们的root用户,再输入好我们前面设置的samba密码
这时后,成功访问共享文件,并创建新的文件夹
5. Soft AP模式
这章的代码内容都是直接用的官方文档,我这里主要说一下思路
- 由于我们使用的docker openwrt里面是没有集成热点模块的,想要在docker openwrt上开启AP模式就无从谈起了.我也试了几个不同的docker镜像,里面只有一个x86架构的支持,但旭日X3派是arm架构.
- 想要加入热点模块,我们就只能在宿主机上的Ubuntu系统动刀,后面也是在下面几个大神的博客中才得到启发:
斐讯 N1 部署 Docker 和 OpenWRT,并利用 Hostapd 开启 Wi-Fi 热点 · Oaker's Blog
利用hostapd启动ac 5G无线AP
[N1盒子] 【原创】Docker内OpenWRT设置成主路由,为WiFi接入的客户提供源自有线网口的网络服务
- 说来也是好笑,在实操的过程中报错频出不断,差点要放弃时,最后才发现地平线官方已经给出了开启AP模式的办法,也是希望各位朋友不要像我这样踩坑.
开发板无线网络默认运行在Station模式下,如需使用Soft AP模式,请按照以下步骤进行配置。
1.安装hostapd 和 isc-dhcp-server
sudo apt update
sudo apt install hostapd
sudo apt install isc-dhcp-server
2.运行 sudo vim /etc/hostapd.conf命令来配置hostapd.conf,主要关注下面几个字段:
interface=wlan0 #作为AP热点的网卡
ssid=Sunrise #WiFi名字
wpa=2 #0为WPA 2为WPA2 一般为2
wpa_key_mgmt=WPA-PSK #加密算法 一般为WPA-PSK
wpa_passphrase=12345678 #密码
wpa_pairwise=CCMP #加密协议,一般为CCMP
- 无密码的热点配置,请在hostapd.conf文件添加以下内容:
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
- 有密码的热点配置,请在hostapd.conf文件添加以下内容:
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=12345678
3.配置isc-dhcp-server文件,步骤如下:
- 执行 sudo vim /etc/default/isc-dhcp-server修改isc-dhcp-server文件,添加如下定义的网络接口:
INTERFACESv4="wlan0"
- 执行 sudo vim /etc/dhcp/dhcpd.conf修改dhcpd.conf文件, 取消以下字段的注释
authoritative;
- 然后在 /etc/dhcp/dhcpd.conf文件末尾增加以下配置:
subnet 10.5.5.0 netmask 255.255.255.0 { #网段和子网掩码
range 10.5.5.100 10.5.5.254;#可获取的IP范围
option subnet-mask 255.255.255.0; #子网掩码
option routers 10.5.5.1;#默认网关
option broadcast-address 10.5.5.31;#广播地址
default-lease-time 600;#默认租约期限,单位秒
max-lease-time 7200;#最长租约期限,单位秒
}
4.停止 wpa_supplicant 服务,并重启 wlan0
systemctl stop wpa_supplicant
ip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up
5.按如下步骤启动 hostapd服务
- 执行sudo hostapd -B /etc/hostapd.conf命令
root@ubuntu:~# sudo hostapd -B /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
Using interface wlan0 with hwaddr 08:e9:f6:af:18:26 and ssid "sunrise"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
- 通过ifconfig命令,配置无线接口wlan0的IP和网段,注意要跟第三步的配置保持一致
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
- 最后开启dhcp服务器,连上热点会从10.5.5.100到10.5.5.255之间分配一个ip地址给客户端
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
sudo systemctl start isc-dhcp-server
sudo systemctl enable isc-dhcp-server
**6.连接开发板热点,例如
sunrise
**
7.如需切换回Station模式,可按如下方式进行:
# 停止 hostapd
killall5 -9 hostapd
# 清除 wlan0 的地址
ip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up
# 重启 wpa_supplicant
systemctl restart wpa_supplicant
# 连接热点,,具体操作可以查看上一章节 “无线网络”
wifi_connect "WiFi-Test" "12345678"
版权归原作者 Chris在Coding 所有, 如有侵权,请联系我们删除。