nanopc t6 的ubuntu22.04用docker 安装openwrt 23.05.2,基于arm64 (aarch64)架构

我是用nanopc t6的官方系统,rk3588-XYZ-ubuntu-jammy-x11-desktop-arm64-YYYYMMDD.img.gz,可以从官方的百度网盘下载,根据官方教材刷入nanopc t6中即可。官方网址如下:

NanoPC-T6/zh - FriendlyELEC WiKi

1、首先更改宿主机(nanopc t6)的根系统

毕竟刚刷的系统,先设置root密码

sudo passwd root

默认的账户和密码都是pi,我是自己添加了sudo用户,删除了pi用户,默认不是root,因此执行部分命令前需要加上sudo,添加sudo用户的案例如下,根据自己的需要改名字即可

sudo adduser your_name
sudo usermod -aG sudo your_name

更改根系统的命令需要用root用户执行,更改完后需要重启

su - root -c 'echo "overlayfs=disable" > /.init_wipedata'
sudo reboot

2、宿主机换源

清华源的官方有更换的教程,跟着来就行

ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

更换完后记得更新一下

sudo apt update && sudo apt upgrade -y
sudo apt update && sudo apt full-upgrade -y

更新完记得重启

sudo reboot

3、 安装docker

这里是根据官方教程来的,但我习惯用aptitude作为包管理器,因此需要先安装一下,安装完最好重启一下

sudo apt install aptitude
sudo aptitude update && sudo aptitude full-upgrade -y
sudo reboot

运行下列代码安装docker

sudo aptitude install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo aptitude update
sudo aptitude install docker-ce docker-ce-cli containerd.io docker-compose-plugin

可以看下是否成功

sudo docker info

 docker默认的国外源太慢了,最好给docker换国内的源,例如我这里用的是docker中国的官方源,当然第三方源或许更快,例如163或者腾讯以及阿里的源。

这里用vim进行编辑,不会用 vi 或者 vim 的.........推荐学一下

sudo vim /etc/docker/daemon.json

其余的源可以删掉,只保留如下内容

{
 "registry-mirrors": ["https://registry.docker-cn.com"]
}

或许有人想要让docker命令不再需要sudo权限运行,可以如下操作

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker
sudo chmod a+rw /var/run/docker.sock

如果没有运行上述命令,后续使用docker时好像需要在命令前加 sudo 认证。无论如何,docker刚装完,使用前最好重启一下

sudo reboot

4、基于docker安装openwrt

重头戏来了

宿主机(nanopc t6)具有2个网口,看看机器外壳的2个网口应写有编号1和2。

通常这2个网口在系统里的名字是eth0和eth1,不是的话也没关系,可以在系统里确认一下,根据具体名字来。

ifconfig

根据这一命令的结果来看具体的网卡名,我这里是eth0和eth1。

在此,后续的部分需要提前申明,我的eth0是作为连接上层路由(上级路由器或者光猫)的网口,从该口获得网络访问;eth1目前没接下属设备,该网口目前没插网线。

后续设置一定要看清是给eth0设置,还是给eth1设置!!!

4.1、设置网卡模式

sudo vim /etc/rc.local

在exit 0前添加 

ip link set eth0 promisc on > /dev/null 2>&1
ip link set eth1 promisc on > /dev/null 2>&1

设置开机自动配置

sudo chmod a+x /etc/rc.local
sudo systemctl enable rc-local

4.2、设置系统支持转发

sudo vim /etc/sysctl.conf

添加下列内容

net.ipv4.ip_forward = 1

 确认设置

sudo sysctl -p /etc/sysctl.conf

4.3、虚拟网卡设置

eth0连接上层路由器,eth1暂时没连网线

 用eth1闲置的网口创建macvlan作为openwrt的lan口,IP的第三段地址可自己更改,例如我这里设为13,与后续openwrt配置文件中符合即可

docker network create -d macvlan --subnet=192.168.13.0/24 --gateway=192.168.13.1 -o parent=eth1 owrt-lan

需要用联网的eth0再创建一个 macvlan, 此时的 ip 设置需要和上层路由相同(例如我的上层路由器是 192.168.8.1),例如:当使用上述ifconfig命令发现设备的IP地址为192.168.8.112,则需要写为192.168.8.0192.168.8.1,注意网卡名和虚拟名

docker network create -d macvlan --subnet=192.168.8.0/24 --gateway=192.168.8.1 -o parent=eth0 owrt-wan

可以看一下创建的结果

docker network ls

4.4、拉取openwrt镜像,容器创建并启动

可以尝试目前最新的23.05.2

docker import https://mirrors.ustc.edu.cn/openwrt/releases/23.05.2/targets/armsr/armv8/openwrt-23.05.2-armsr-armv8-rootfs.tar.gz openwrt-23.05.2-armv8

可以看一下获取的镜像

docker images

创建、添加网卡并启动

docker create --restart always --name openwrt-23.05.2 --network owrt-lan --privileged -m 8G openwrt-23.05.2-armv8:latest /sbin/init
docker network connect owrt-wan openwrt-23.05.2
docker start openwrt-23.05.2

上述 --restart always 代表无论发生什么,容器都会重启,也可以设置为其它;--name openwrt-23.05.2 是给容器设置名字;--network owrt-lan 是连接之前创建的lan口,后续连接openwrt需要用到;-m 8G 是指该容器最多可使用8G的内存,我的nanopc t6是16G内存版本的;

4.5、openwrt基础设置

需要进入容器内部进行设置,用下列命令进入容器内部,按键盘的 Ctrl 和 d 就可退出,跟连接了一个ssh终端是一样的

docker exec -it openwrt-23.05.2 /bin/sh

进入内部后,进行如下设置

vi /etc/config/network

打开该文件后,可以看到下面的类似的配置文件,每个人可能有所不同,这个无所,只要改其中一行就可以了

例如下面的内容

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'
 
config globals 'globals'
        option ula_prefix 'fd2d:875e:614c::/48'
 
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.13.22'
        option netmask '255.255.255.0'
        option ip6assign '60'
 
config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'
 
config interface 'wan6'
        option ifname 'eth1'
        option proto 'dhcpv6'

只需要更改 option ipaddr '192.168.13.22' 这里就行,更改成跟其它设备不冲突的地址,以后这就是openwrt的连接地址啦,但是要跟步骤4.3中用eth1创建的 owrt-lan 相匹配,例如我这里是192.168.13.22,因为前面设置的第三段是13,最后的22可以自己更改。

更改完后,继续设置其它的,防止提示/dev/crypto无权限

chmod -R 777 /dev/crypto

防止提示配置文件无写入权限

vi /etc/rc.local

在exit 0前加入

mount -o remount rw /

确保命令配置可执行

chmod +x /etc/rc.local

退出容器(Ctrl和d一起按)

重启宿主机

sudo reboot

到此,openwrt基本的安装和配置就已经结束了,重启完后,nanopc t6 的第二个网口可以插入设备,例如一台电脑,这样可以用这台电脑的浏览器,连接配置好的地址192.168.13.22,连接openwrt的luci界面进行设置了。

4.6、openwrt换源

可以给openwrt的软件库换源,默认好像是国外的,挺慢的,可以换中科大的源

先进入容器

docker exec -it openwrt-23.05.2 /bin/sh

进入后先更新一下软件列表,此时应该很慢

opkg update

 先安装libustream-openssl和ca-bundle以及ca-certificates这三个,防止换源后报错

opkg install ca-bundle ca-certificates libustream-openssl

libustream-openssl如果安装时候报错,那就不装了,好像没啥影响

此时可以换源了

sed -i 's/downloads.openwrt.org/mirrors.ustc.edu.cn\/openwrt/g' /etc/opkg/distfeeds.conf

 再更新软件列表看看

opkg update

应该快了不少

5、宿主机与openwrt下挂设备互通

例如此时nanopc t6 的第二个网口插了一台电脑(暂且命名为Q),那宿主机怎么才能访问到该电脑呢?

这种情况下,只需要给宿主机的eth1网卡设置一个192.168.13.0/24网段的 ip 就可以,网关设为openwrt的地址。

这里采用netplan进行设置,以NetworkManager为后端

sudo systemctl enable NetworkManager
sudo systemctl restart NetworkManager
sudo vim /etc/netplan/net_config_01.yaml
network:                                                                                                                                                                                        
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp6: true
      dhcp4: ture
      nameservers:
        addresses: [8.8.8.8,114.114.114.114]
    eth1:
      dhcp6: true
      dhcp4: false
      addresses:
        - 192.168.13.55/24
      routes:
        - to: default
      nameservers:
        addresses: [8.8.8.8,114.114.114.114]

上述的需要更改的是 - 192.168.13.55/24 这里,例如我这里设置为55,第三段地址的13不能改,可以改第四段的55,只要地址不跟其它设备冲突就行。

sudo netplan apply

到此,最好再重启一下设备

sudo reboot

6、宿主机与openwrt互通 

提前申明,必须要给nanopc t6 的第二个网口eth1插了下挂设备才有效,可以是电脑或者其它,总之第二个网口要有下挂的设备。

只有第二个网口eth1插了设备,才能实现互通。配置虚拟接口,例如192.168.13.122,122可以自己更改。添加openwrt的地址(192.168.13.22)为网关,就可以互通了

sudo ip link add owrt-link link eth1 type macvlan mode bridge
sudo ip addr add 192.168.13.122 dev owrt-link
sudo ip link set owrt-link up
sudo ip route add 192.168.13.22 dev owrt-link

可以测试一下

ping 192.168.13.22 -c 3

但上述配置重启就失效了,需要开机启动时实现自动设置,还是设置下面的文件

sudo vim /etc/rc.local

在exit 0之前,上述步骤4.1配置之后,添加

ip link add owrt-link link eth1 type macvlan mode bridge
ip addr add 192.168.13.122 dev owrt-link
ip link set owrt-link up
ip route add 192.168.13.22 dev owrt-link

确保开机启动

sudo chmod a+x /etc/rc.local
sudo systemctl enable rc-local

这里重启一下试试

sudo reboot

你可能感兴趣的:(docker,ubuntu,容器)