🌈 博客个人主页:Chris在Coding
🎥 本文所属专栏:[旭日X3派] [Docker实战]
❤️ 前置学习专栏:[Linux学习]
⏰ 我们仍在旅途
目录
1. 安装系统
1.1 烧录准备
1.2 烧录系统
1.3 启动系统
2. 远程登录
2.1 网络连接
2.2 开启vino服务
2.3 VNC登录
2.4 SSH连接--VsCode
2.4.1.安装VsCode及插件
2.4.2.添加服务器连接配置
3. 安装Docker OpenWrt
3.1 安装Docker
3.1.1 官方脚本一键安装
3.1.2 ARM架构静态安装包部署Docker
3.1.3 创建并加入docker组
3.2 安装Docker Portainer
3.3 安装Docker Openwrt
4. Samba局域网NAS
4.1 创建共享目录
4.2 Samba参数设置
4.3 挂载点设置
4.4 设置samba密码
4.5 远程访问
5. Soft AP模式
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"