暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【投稿】从官方固件到Docker镜像:ImmortalWrt构建与运行之旅

皮皮克克 2024-09-03
2076

今天的这篇文章,是小编的学生:

Pseudowang

所著。

一位既有才华、又帅气的小伙子,

希望大家多多支持

1、使用官方固件

这里以x86-64
平台为例

首先获取固件的下载地址

  • (1)打开ImmortalWrt的官网, 选择当前最新的稳定版本23.05.3
    (笔记后面用的是23.05.2,因为写笔记的时候 23.05.3 刚刚更新,有些导航页还没完成)


  • (2)选择x86
    平台


  • (3)选择64


  • (4)选择固件rootfs.tar.gz


  • (5)鼠标右键点击"复制链接地址"获取到固件的下载地址,后面第6步需要用到


  • (6)开始构建镜像

git clone https://github.com/crazygit/openwrt-x86-64.git openwrt-x86-64
cd openwrt-x86-64
# 参数1: 第5步中获取的固件下载地址
# 参数2: docker镜像的名字,可以随便指定: 如pseudowang/openwrt-x86-64
./build.sh "https://downloads.immortalwrt.org/releases/23.05.2/targets/x86/64/immortalwrt-23.05.2-x86-64-rootfs.tar.gz" pseudowang/openwrt-x86-64



2、设置网络

  • (1)将网卡混杂模式打开

sudo ip link set enp3s0 promisc on

混杂模式(Promiscuous Mode)是一种网络接口卡 (NIC) 操作模式。在这种模式下,网络接口卡会接收它所在网络上的所有数据包,而不仅仅是发送给它的数据包。


  • (2)创建 Docker 网卡


docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=enp3s0 macnet


macvlan
是一种网络驱动程序,它允许Docker 容器直接连接到宿主机的物理网络。使用macvlan
时,每个容器将获得一个唯一的 MAC 地址, 并直接出现在物理网络上, 就像它是一个独立的设备


3、使用刚刚创建的镜像并启动容器

docker run --restart always --name openwrt -d --network macnet --privileged pseudowang/openwrt-x86-64


  • (1)设置容器ip

到目前为止, 容器已经启动了,可以通过docker ps -a
 查看运行的容器,然后查看OpenWRT 的 container ID

我的容器ID是: 48ec9c884f45
, 然后我们进入到容器内部并设置容器的ip。通过命令docker exec -it 48ec9c884f45 bin/sh
进入容器内部。

docker exec -it 48ec9c884f45 /bin/sh


下面开始设置容器的ip 以便我们能通过ip 地址访问容器,通过命令: vi etc/config/network
来设置ip。

config interface 'lan'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.10.110'
        option gateway '192.168.10.1'
        option dns '192.168.10.1'


其中的 option ipaddr
是你的 openwrt
的地址, 注意不要与局域网其他设备冲突。option gateway
option dns
设置你路由器的地址。

保存完成后通过命令 /etc/init.d/network restart
重启网络,重启完成后就可以通过IP 访问我们的 OpenWRT 服务了。


3、登录网页并下载软件包

一开始是不需要密码登录,直接回车登录就行,登录上去记得要更改密码。

  • 下载软件包

系统 --> 软件包, 然后点击 "更新列表"。

但是 这里会有一个报错,因为我们没有安装wget-ssl
这个包,所以会导致更新不了,再加上默认的地址似乎不能够使用,所以我换了一个新的地址,这个地址是在官方仓库有人提的Issues中拿到的。(wget returened 1
)

因为没有安装wget-ssl
这个包,update 不了,所以暂时把https
更换为 http
, 安装源的文件路径为(/etc/opkg/distfeeds.conf
)

src/gz immortalwrt_core http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/targets/x86/64/packages
src/gz immortalwrt_base http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/base
src/gz immortalwrt_luci http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/luci
src/gz immortalwrt_packages http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/packages
src/gz immortalwrt_routing http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/routing
src/gz immortalwrt_telephony http://mirrors.cernet.edu.cn/immortalwrt/releases/23.05.1/packages/x86_64/telephony


  • (1)更换安装源,并暂时把https
    --> http
    之后, update 成功

  • (2)安装wget-ssl
    软件包

安装成功后,重新将http
恢复为 https

update
成功!!!


  • (3)安装theme-argon
    软件包

自从上次因为不小心(手贱)将自己小服务器分区给整坏了,导致开不了机,重新搭建了OpenWrt,不到1个月的时间,这次觉得上次使用的镜像太久没有更新了,然后加上是别人编译的镜像,这次想着自己来做一次镜像,并且学习一下,也碰到了很多自己没有遇到过的报错,也在一次又一次的报错中学习到了很多东西,如果有写错的地方,欢迎评论提出或者邮件,谢谢!

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论