如何自己本地编译 OpenWrt ?

目录

感觉不如直接下载,然后用转换工具把 img 搞成 vmfs,见linux - VMware安装OpenWrt,工具下载链接https://www.starwindsoftware.com/tmplink/starwindconverter.exe。 关于系统 LEAN 的不行,还是 ImmortalWrt 更好!还可直接下载 vmfs,注意系统日志等级它默认的 debug 可不行。 关于上网控制插件,注意会和广告过滤 ACC 加速等冲突,有舍有得啊,openwrt上网时间控制为什么设置后无效-OPENWRT专版-恩山无线论坛 (right.com.cn)。 老老实实用 clash for windows 了,OpenWrt 很不稳定啊,github 时好时坏。

🤔为老古董编译 Openwrt-Old【失败】

为家里的老古董 Mercury MW316R 编译 Openwrt。

这么弱的路由,别折腾了,不如花钱买时间!

Untitled

lib/fseterr.c:77:3: error: #error “Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib.”

Untitled

cd /root/openwrt-old/build_dir/host/bison-3.0.4
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

编译

make menuconfig
make -j1 V=s

Untitled

老版本,实在编译不动了,时间别浪费了……

🤗为 VMware 虚拟机编译 Openwrt

哭泣,编译完,发现想要的软件包没选上,后期直接换用 LEAN 的配置来编译 注意,OpenClash 好像就是要自己手动安装!!!

参考:[OpenWrt Wiki] Toolchain

系统:Debian 11 (bullseye)

换用 非 root 用户,先安装 sudo 软件,再/etc/sudoers 添加。

sudo apt update
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev

# Download and update the sources
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git pull
 
# Select a specific code revision
git branch -a
git tag
git checkout v22.03.3
 
# Update the feeds
./scripts/feeds update -a
./scripts/feeds install -a
 
# Configure the firmware image and the kernel
make menuconfig
make -j $(nproc) kernel_menuconfig
 
# Build the firmware image
make -j $(nproc) V=s defconfig download clean world

关于编译的配置,请看 https://github.com/haiibo/OpenWrt【后期直接换 Lean 的仓库,不用官方】:

git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig

# 下载 dl 库、编译固件
make download -j8
make V=s -j1

Untitled

别改太大,否则:

Untitled

编译产物

基于 LEAN 的编译(自己编译的linux6.1,真的不好用):

openwrt-x86-64-generic-squashfs-combined-efi.vmdk

使用方法,见我写的另一篇关于 Openwrt 旁路由的文章。

  • combined-ext4.img.gz(rootfs工作区存储格式为ext4。)
  • combined-squashfs.img.gz(squashfs相当于可以恢复出厂设置的固件,如果使用中配置错误,可直接恢复默认设置。)
  • generic-rootfs.tar.gz(rootfs的镜像,不带引导,可自行定义用grub或者syslinux来引导。)
  • rootfs-ext4.img.gz(rootfs的镜像,不带引导,可自行定义用grub或者syslinux来引导,需要存储区是ext4。)
  • rootfs-squashfs.img.gz(rootfs的镜像,不带引导,可自行定义用grub或者syslinux来引导,如果使用中配置错误,可直接恢复默认设置。)

fatal error: closing dependency file .deps/parseopt.Tpo: No space left on device

Untitled

解决:

https://github.com/coolsnowwolf/lede/issues/1454

有说,kernel分区空间不够了,编译配置里进入Target Images菜单,把kernel默认16M改成32M,成功编译,老树莓派可用

但我这里,确实空间不够了

Untitled

linux 扩容,除了 Vmware 调整之外,还要进系统扩容,想想 Windows 磁盘管理和 Ubuntu 的磁盘管理?

Untitled

实际上才用了 20GB。

fdisk /dev/sda 命令进行分区,依次输入 m、n、p、默认回车、默认回车、w 命令。

Untitled

输入 lsblk 命令查看新加的硬盘分区状况。

Untitled

之后要安装 LVM 工具,(Linux Logical Volume Manager):apt install lvm2

然后 vgdisplay vgextend 等命令,发现都没用!!!

最后 centos7根目录扩容(根目录在sda3 vgdisplay为空) - 知乎 (zhihu.com) 成功:

把所有的删了重建,从头到尾只用到 fdisk /dev/sda,不停 d,最后 n

Untitled

之后,参考 如何无损扩展 Debian 硬盘分区 - azhuge233’s

注意分区是好了,但是还没在 df 中显现,需要 apt install cloud-utils

然后:resize2fs /dev/sda1(这一步很关键

Untitled

Untitled

修改 /etc/default/grub 文件之后: update-grub

But that file is already provided by package * dnsmasq

Untitled

参考:openwrt 编译 出现dnsmasq 错误_dnsmasq-full_liu1250836704的博客-CSDN博客

进入到 Base system  —>  菜单找到dnsmasq 选项将其去掉

Untitled

成功

Untitled

参考文章

标签 :
comments powered by Disqus

相关文章

JWT 的应用场景思考

JWT 的应用场景思考 简述 JWT JWT,全称 JSON Web Token。是一种开放标准,用于在各方之间安全传递信息,它是以 Base64 编码 json 对象的 token 。基于 token 的权限验证,与传统的 Session 认证完全不同,它不需要服务端保持 Session 记录,连用户状态都不

阅读更多

单调栈

陈述 顾名思义,就是单调的栈,可严格可不严格。能够找到下一个更大/小的元素,同时能找到上一个大于等于/小于等于的元素。 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时

阅读更多

Neo4j: 图数据基本概念、语法与增删改查

Neo4j 简介 Neo4j 使用属性图(Property Graph)模型1。 一个图包含节点(Objects)和边(Relationships)。 Neo4j 的属性图模型包含了: 节点 节点标签:用于区分节点的类型,0个或多个 边:源节点

阅读更多