收起左侧

闲来无事,弄个openwrt编译镜像,供大家参考

4
回复
1951
查看
[ 复制链接 ]

8

主题

10

回帖

0

牛值

江湖小虾

2025-2-12 21:21:02 显示全部楼层 阅读模式

[i=s] 本帖最后由 arkclover 于 2025-2-15 21:06 编辑 [/i]<br /> <br />

Docker版Ubuntu 部署openwrt编译服务器教程

前言:PVE系统盘有限,又不想装个额外的虚拟机或者物理机的ubuntu,于是乎就想了用docker版ubuntu来编译

具体教程步骤如下:

具体环境,PVE下虚拟化的飞牛OS

一、 拉取镜像 docker pull ubuntu

二、 建立镜像

不建议用webui来部署,因为一启动如果ubuntu没有在运行的进程就会自己停止,所以我用了命令行。

docker run --name 容器名字 -ti -v /宿主文件夹:/镜像文件夹 -d -p 8022(自己设端口号):22 ubuntu

映射端口看自己喜欢,文件弄个映射是万一没有合适的工具(类似winscp这种)还可以命令行黏贴后拷贝出来

三、 进入ubuntu系统,并更新系统

进系统有这么几种方法:

  1. 通过飞牛的终端进入/bin/bash,如果用portainer等webui也可以进入

  1. 通过命令行进入 SSH输入:docker exec -t -i 新建容器的名字 /bin/bash

第一步,因为是精简系统,大小才60M左右,所以基本上工具都没有的,需要先更新系统,输入 apt-get update。由于连ssh还有vim都没有所以一开始的更新只能从国外服务器更新,速度很慢。。。。。要有心理准备。

第二步,同样原因,所以我建议先安装vim 命令 apt-get install vim

第三步,先换源,换国内源就行,个人觉得阿里的比较快。

1.备份源配置文件,本身在root下所以不需要sudo了

cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

  1. 编辑源配置文件

vim /etc/apt/sources.list.d/ubuntu.sources

用#禁用相关源地址

然后黏贴入以下内容:

Types: deb

URIs: http://mirrors.aliyun.com/ubuntu/

Suites: noble noble-updates noble-security

Components: main restricted universe multiverse

Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

第四步、安装ssh服务

apt-get install openssh-client

apt-get install openssh-server

修改root的密码及ssh链接权限

  1.  改root密码,输入passwd root,再输两次密码(屏幕不显示)就好了
  2.  改链接权限 输入vi /etc/ssh/sshd\_config 找到 #PermitRootLogin prohibit-password 改为PermitRootLogin yes
  3.  启动 ssh服务 输入/etc/init.d/ssh start 如果在安装完ssh的时候就运行过了,那么需要重启ssh服务service ssh restart
  4.  安装net-tools的安装包 apt-get install net-tools 可以查看ip

第五步,新建用户

此时已经可以用SSH 链接docker映射的端口来控制ubuntu了,由于编译需要在非root账户运行,需要适用adduser命令新建一个账户

四、 安装编译环境并拉取项目

以LEDE项目为例子,此处感谢lean大佬的奉献项目地址:https://github.com/coolsnowwolf/lede

安装依赖如果在root账户下不需要sudo ,

  1.  安装依赖

apt update -y

apt full-upgrade -y

apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \

bzip2 ccache clang cmake cpio curl device-tree-compiler flex gawk gcc-multilib g++-multilib gettext \

genisoimage git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev \

libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev \

libreadline-dev libssl-dev libtool llvm lrzsz msmtp ninja-build p7zip p7zip-full patch pkgconf \

python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion \

swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

  1.  下载源代码,更新 feeds 并选择配置,需要在普通用户下

git clone https://github.com/coolsnowwolf/lede

cd lede

./scripts/feeds update -a

./scripts/feeds install -a

make menuconfig

  1.  首次编译,建议单线程

make download -j8 make V=s -j1

  1.  二次编译

cd lede

git pull

./scripts/feeds update -a

./scripts/feeds install -a

make defconfig

make download -j8

make V=s -j\$(nproc)

如果需要重新配置:

rm -rf .config

make menuconfig

make V=s -j\$(nproc)

编译完成后输出路径:bin/targets

五、 可以保存修改的镜像

docker commit [容器ID/容器名] [REPOSITORY:TAG]

收藏
送赞 1
分享

0

主题

3

回帖

0

牛值

江湖小虾

2025-8-1 15:44:16 显示全部楼层

不知道贴主还上来不?
我同样希望使用docker来编译openwrt,相对物理机安装ubuntu和虚拟机安装ubuntu来说,这个占用资源少,方便。

我现在碰到的问题是,我在我的一个mini主机上安装的fnos,只有nvme硬盘,在通过build docker方式创建编译openwrt的ubuntu环境后,编译出的openwrt始终无法正常加载sata硬盘,nvme硬盘也不可以:
1、尝试了ubuntu各种版本、debian各种版本,把任何描述需要安装的编译环境所需软件全部安装上去;
2、通过make menuconfig里面,确认勾选了sata相关硬件驱动、filesystem里面文件格式驱动,无论选择是“M”还是“*”;

3、容器无论使用高权限运行还是普通模式运行;

4、无论是官方24.10还是immortalwrt 24.10;

5、每次编译都通过,没有看到导致编译退出的error信息。

通过docker里面的系统编译的openwrt镜像,启动都无法正常挂载硬盘,最后卡在procd - ubus - 处。

另外:我使用虚拟机,无论是vmware还是fnos里面的虚拟机,ubuntu相同版本系统、编译环境需要软件相同安装,和docker里面采用相同的编译方法和make menuconfig里面相同的勾选,编译的openwrt都能正常使用。

不知道您碰到这种问题没有,编译出的openwrt镜像是否可以正常使用,或者编译正常使用的openwrt镜像需要注意什么?

你这个问题我过两天休假的时候试试看,我大概率猜测docker版的ubuntu精简的太厉害了,应该是有sata相关依赖缺失或编译出错,我会测试docker版本及核心版本虚拟机情况下的编译,如果我这边没问题就要考虑你这里的问题  详情 回复
2025-8-3 09:39

8

主题

10

回帖

0

牛值

江湖小虾

2025-8-3 09:39:30 楼主 显示全部楼层
hahaheihahahei 发表于 2025-8-1 15:44
不知道贴主还上来不?
我同样希望使用docker来编译openwrt,相对物理机安装ubuntu和虚拟机安装ubuntu来说, ...

你这个问题我过两天休假的时候试试看,我大概率猜测docker版的ubuntu精简的太厉害了,应该是有sata相关依赖缺失或编译出错,我会测试docker版本及核心版本虚拟机情况下的编译,如果我这边没问题就要考虑你这里的问题了

0

主题

3

回帖

0

牛值

江湖小虾

2025-8-3 13:36:03 显示全部楼层

我网上各种搜索,使用docker版ubuntu或debian是可以正常编译openwrt的,因为还有几位在github上还有相关说明,我把几位在github上使用的dockerfile文件,创建docker都试过了,在我的全部是nvme的小主机上,fnos的docker运行那些镜像,编译没看到什么阻止无法编译的错误,但是编译出来就是无法识别sata硬盘。

在fnos的虚拟机里面,安装ubuntu server 22.04/24.04是可以正常编译并且可以正常使用。

由于怀疑是docker版的ubuntu使用fnos内核,可能是sata硬盘没有导致编译时候,没有相应驱动,于是在docker版ubuntu里面添加sata回环设备模拟sata硬盘,但是编译出来还是相同的问题。

期待你的新结果。

0

主题

3

回帖

0

牛值

江湖小虾

2025-8-19 15:08:35 显示全部楼层

通过详细的编译测试,问题应该出在打包过程或编译初始化执行的过程,有些驱动生成了,但是没有被正常打包进镜像里面,目前来看,主要是关于gpt分区识别的驱动没有被正确打包。
1、磁盘被正常驱动,可以找到/dev/sda1,/dev/sda2等

2、无法找到fstab和urandomseed文件

3、无法挂载分区

各种办法都试过了,还是无法解决,对我来说,感觉基本上是无解了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则