0


[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS && 开启AP模式

Why Do I Need Docker, and How Do I Use It? | Hexlet Guides

🌈 博客个人主页: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 = yesinvalid 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"

标签: docker ubuntu 软路由

本文转载自: https://blog.csdn.net/sdhajkdghjkawhd/article/details/136138267
版权归原作者 Chris在Coding 所有, 如有侵权,请联系我们删除。

“[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS && 开启AP模式”的评论:

还没有评论