v2rayN

使用Lean OpenWRT源码编译x86_x64旁路由固件记录

上一篇,昨晚尝试在 Debian 11 上编译 x86_x64 OpenWRT 软路由 (旁路由) 固件,需求很简单,在 VMware 虚拟运行,当旁路由使用,最基本的功能加上 SSR-Plus 插件即可。

「使用Lean OpenWRT源码编译x86_x64旁路由固件记录:https://v2rayn.uuk.app/142」

前言

DigitalOcean 上开了个 2 GB Memory / 1 AMD vCPU / 50 GB 硬盘配置的 VPS,Debian 11 x64 系统,用来编译,按照网友教程折腾、配置、编译……

晚上八点多开始编译,直到睡觉都没完成,中午进去看看,居然报 Error 错误了,原因是 Out of Memory……于是加了 swap 再编译,三个多小时后终于编译成功:

「使用Lean OpenWRT源码编译x86_x64旁路由固件记录:https://v2rayn.uuk.app/142」

vps cpu 占用状态:

「使用Lean OpenWRT源码编译x86_x64旁路由固件记录:https://v2rayn.uuk.app/142」

下面整理、记录一下编译步骤。

Lean OpenWRT 源码编译 x86_x64 软路由固件教程

编译环境:在 DigitalOcean 2 GB 内存 / 1 AMD vCPU / 50 GB 硬盘配置的 VPS,Debian 11 x64 系统,San Francisco 03 机房。(有条件的话内存、cpu 配置越高越好)

注意事项

不要使用 root 用户进行编译
国内用户编译前最好准备好梯子
固件默认登陆 IP 192.168.1.1 密码 password

安装依赖

执行代码更新系统,安装必要依赖组件:

「使用Lean OpenWRT源码编译x86_x64旁路由固件记录:https://v2rayn.uuk.app/142」
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
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 lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

添加 swap

4G 以下内存建议先添加 swap,要不然大概率编译失败。root 用户下执行如下命令添加 4G swap 虚拟内存:

fallocate -l 4G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo "/swapfile swap swap defaults 0 0" >> /etc/fstab && echo "vm.swappiness=10" >> /etc/sysctl.conf && sysctl -p

创建用户

创建一个用户名为 lede 的用户并指定 bash 为终端:

sudo useradd -r -m -s /bin/bash lede

给用户 lede 设置密码:

sudo passwd lede

root 用户下编辑用户权限:

sudo vi /etc/sudoers

在 User privilege specification 加入与 root 用户相同权限,按 Esc,然后 :wq 保存并退出编辑。

切换到 lede 用户:

su lede
cd ~

克隆 lean openwrt 源代码到 vps

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

修改 feeds.conf.default 配置文件

如果需要 ssr plus 等科学插件,可参考上一篇文章修改配置:编译 Lean 版 OpenWRT 找不到 SSR-Plus 插件可选怎么办?

没有需求可跳过。

更新 feed 订阅

cd lede/
./scripts/feeds update -a
./scripts/feeds install -a

进入 menuconfig 配置

输入命令、回车:

make menuconfig

稍等一会,出现如下菜单:

进入 Target System(x86)选择需要编译的平台,默认是 x86:

温馨提示:如果此处按回去不能进去下级菜单,把 shell 窗口拉大一点,太小会一闪而过。

按键盘上下方向键移动,高亮位置按「空格」,前面 x 表示选中需要编译的平台。

接着到 Subtarget(x86_x64)选择 cpu 子选项,默认是 x86 64 位:

如果需要支持旧 cpu 选择 Generic,或者 Legacy 启动。

Target Profile 默认 Generic x86/64。

进入 Target Images 勾选你需要的固件格式、分区大小等(默认就有 img、vmdk 等格式)

# 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
Target Images --> (16) Kernel partition size (in MB) # 默认是 16MB,可修改为 256
Target Images --> (400) Root filesystem partition size (in MB) # 默认是 400MB,可改为 512 或者更大

接下来是编译固件最核心部份,选择需要编译内置的插件,进入 LuCI –> Applications 内选中、取消插件。

操作提示:按 Y 勾选,N 取消勾选,M 编译而不安装,连按两次 Esc 键返回上一界面,<*> 代表编译内置固件, 表示编译成模块或者 ipk 包, < > 则不编译 )。

如果跟博主一样没啥特殊需求,默认配置即可,检查一下 luci-app-ssr-plus (NEW) 是否选中编译,下面是参考配置:

勾选完成,按键盘 → 方向键,高亮 Save,按回车保存配置,默认的文件名称 (.config)保存即可,编译会根据.config 内容编译(若配置错误想要恢复到初始配置,删掉.config 文件重新配置即可)。

保存配置后一路按 Esc 返回退出配置界面,直至 shell 界面提示 End of the configuration. 字样:

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

开始编译

可能需要安装一下 screen,开启 screen 编译,以防 ssh 断线,可让编译在后台持续运行;screen -r 可返回之前对话窗口。

apt-get -y install screen
screen -S op
make -j1 V=s 

-j1 代表用单线程编译,V=s 代表输出全部过程,第一次编译建议使用单线程,国内请尽量全局科学上网。

首次编译可能比较慢(博主编译至少花了三个多小时),后面再次编译速度会快很多,可能是省去了依赖环境编译时间。 后记实测再次编译时间仍然需要很长时间,与第一次编译相差无几。尝试第三、第四次编译,却又快了很多很多,十分钟左右就完成了。

编译完成:

进去 /home/lede/lede/bin/targets/x86/64 目录下载固件:

Lean OpenWRT 再次编译

如 Lean 源码更新,需再次编译,可按照下面方法操作:

cd lede  #进入 LEDE 源码目录
git pull  #同步更新 Lean 源码
./scripts/feeds update -a && ./scripts/feeds install -a  #更新 FEEDS
rm -rf ./tmp && rm -rf .config  #清除编译配置和缓存
make menuconfig  #进入编译配置菜单
make -j1 V=s  #n=线程数+1,如 10 核 16 线程 i5 cpu 可填 -j17

另外,需要注意,磁盘空间不能太小,亲测 50G 硬盘 vps 套餐,第二次编译,因为磁盘满了,失败了……


后记:使用 4 GB Memory / 2 AMD vCPUs / 80 GB Disk 外加 4GB swap,make -j2 V=s 第一次编译,用时 4 小时!为啥减半配置也是这个速度?

退出移动版