概述
L大(Lean)OpenWRT固件编译项目地址:点击访问
openwrt的下载的官网,http://downloads.openwrt.org/
编译环境
Ubuntu18.04 (硬盘40GB或以上)
注意事项
- 不要用 root 用户 git 和编译!!!
- 大陆IP用户编译前最好准备好梯子
- 固件的默认登陆IP 192.168.1.1, 密码 password
Ubuntu SSH登录
sed -i 's/^#Port 22/Port 22/' /etc/ssh/sshd_config
sed -i 's/^#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
sed -i 's/^#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
reboot
1. 增加非root用户并设置密码及权限
useradd xxx #为你建立的用户名
passwd xxx #为用户设置密码
对新建立的用户赋予权限
打开
vim /etc/sudoers
找到 root ALL=(ALL:ALL) ALL
,并在后面加入一行,写入刚才你建立的用户名
# User privilege specification
root ALL=(ALL:ALL) ALL
xxx ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
2. 切换到新建的用户
su - xxx
3.升级系统,并安装必要组件
sudo apt-get update
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync
4.下载编译源代码
git clone https://github.com/coolsnowwolf/lede
cd lede/
5.设定并更新软件包
openwet常用软件包 github项目地址
若你是想在固件里面拥有其他XX上网插件
1. lede/package$下运行 或者openwrt/package$下运行
git clone https://github.com/kenzok8/openwrt-packages.git
2. 或者添加下面代码到 openwrt 或lede源码根目录feeds.conf.default文件
src-git kenzo https://github.com/kenzok8/openwrt-packages
3. passwall依赖
src-git small https://github.com/kenzok8/small
打开feeds.conf.default
添加
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
vim feeds.conf.default
src-git packages https://github.com/coolsnowwolf/packages
src-git luci https://github.com/coolsnowwolf/luci
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git freifunk https://github.com/freifunk/openwrt-packages.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git management https://github.com/openwrt-management/packages.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
src-git helloworld https://github.com/fw876/helloworld
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
6.CPU架构和插件选择
执行命令
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
执行完成出现选项
默认是X86-64
N1固件编译需要选择
选择目标系统-- Target System (QEMU ARM Virtual) --->
选择处理器型号--Subtarget (ARMv8 multiplatform) --->
插件选择
选择Luci回车
选择Applications回车
空格选择自己想要的插件save保存退出
*
号才是选择了
7.下载dl库
下载dl库(国内请尽量全局科学上网)
make -j8 download V=s
这一部分关键取决于你的节点或是VPS的速度,请耐心等待。
PS : 这一步下载的东西很多。不确定是否全部下载成功,可重复运行N次代码。直到没有出现下载的状态。
8.编译
避免误操作或一直开着SSH,我们需要转到VNC
控制台登录后操作
编译前可自定义默认ip
vim package/base-files/files/bin/config_generate
编译命令
make -j1 V=s
(-j1 后面是线程数。第一次编译推荐用单线程)即可开始编译你要的固件了。
首次编译j后面填1,再编译可填你cpu最大线程
大概几个小时以后(看机器性能)可以在SSH工具如下目录找到编译的固件 /lede/bin/targets
二次编译
因为第一次编译我们下载了很多必要的组件,所以,你若是以后再想编译,就很快了,也简单了
cd lede
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s
如果需要重新配置:
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s
首次编译j后面填1,再编译可填你cpu最大线程,例如我的是3600+,最大线程是12,那可以输入
make -j12 V=s
ps:如果报错,而实在找不到问题,可尝试输入以下代码
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
单独编译插件ipk
1.更新
git pull
2.更新feeds
./scripts/feeds update -a && ./scripts/feeds install -a
3.进入编译(找到想编译的插件的名字)
make menuconfig
4.开始编译
make package/(插件名)/compile V=99
N1路由器举例:
ssrplus+插件
make package/luci-app-ssr-plus/compile V=99
- ssr-plus依赖于luci的一些组件,故先编译
luci-base
:
make package/feeds/luci/luci-base/compile V=s
然后单独编译插件即可,时间很长。
make package/lean/luci-app-ssr-plus/compile -j1 V=s
首次编译请选单线程编译(-j1),因为多线程下若出错不容易debug。
- 编译顺利的话,可以在
bin/packages/你的路由器架构/base/
下找到编译完的ipk。
5.写入emmc
openwrt依赖项:(编译openwrt时需要添加的包,配合inst-to-emmc.sh update-to-emmc.sh update-beikeyun-openwrt.sh 等使用,以及cpu温度频率监测时用到)
language里的 perl、perlbase-utf8
util -> disc : fdisk blkid lsblk
util -> filesystem: 能选的都选上,编译不过的就不用选
util: losetup uuidgen tar gawk getopt bash
a.写入emmc
cd /root
./inst-to-emmc.sh
b.如果出现分区失败而无法写入的,可以先还原bootloader后重启,再次运行inst-to-emmc.sh
还原bootloader的方法:
dd if=/root/u-boot-2015-phicomm-n1.bin of=/dev/mmcblk1
reboot
c.升级新版本到emmc(不丢配置,必须是f老大系列的固件)
cd /root
./update-to-emmc.sh
编译完成后输出路径:/lede/bin/targets
Github Actions 云编译
p3terx 大神云编译项目地址:P3TERX/Actions-OpenWrt: Build OpenWrt using GitHub Actions | 使用 GitHub Actions 云编译 OpenWrt
p3terx的教程:使用 GitHub Actions 云编译 OpenWrt - P3TERX ZONE
esri大神云编译脚本:esirplayground/AutoBuild-OpenWrt: Build OpenWrt using GitHub Actions | 使用 GitHub Actions 编译 OpenWrt | 感谢P3TERX的项目源码|感谢KFERMercer的项目源码
./scripts/diffconfig.sh > diffconfig