1.更新软件源,更新软件,安装必要依赖库
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
2.克隆代码到本地,更新feeds
git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
3.加入第三方订阅源更新,进入配置页面
sed -i '$a src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '$a src-git small https://github.com/kenzok8/small' feeds.conf.default
或者:
vim feeds.conf.default
然后添加:
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
保留一个:
src-git amlogic https://github.com/ophub/luci-app-amlogic #电视盒子必须添加
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
4.下载DL库,编译
make download -j8
或者:
make -j8 download V=s
编译:
make V=s -j1
注意:(j后面的是cup线程数量,第一次用1个后续重新编译可以自己修改)
如果报错,而实在找不到问题,可尝试输入以下代码
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
5.更新
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
然后继续下载DL库,编译
6.编译完成后,会在下面路径下看到一个openwrt-armvirt-64-generic-rootfs.tar.gz文件:
lede/bin/targets/armvirt/64
注:如需重新配置
rm -rf .config
make menuconfig
make V=s -j$(nproc)
下面是云编译(不想用自己电脑编辑的可选这个方法)
在完成f.make menuconfig后,保存生成.config后来执行
1.打开网页
https://github.com/P3TERX/Actions-OpenWrt
点use this template,起个名字
2.Add file-Upload files,上传feeds.conf.default
3.新建 ./config 把刚从虚拟机下载的.config 里的内容复制进去--commit--自动开始编译(Notepad++)
4.等待,大概2-3个小时完成编译
5.下载文件 OpenWrt_firmware (在Actions里)
二次编译
cd openwrt # 进入openwrt目录
git pull # 同步更新大雕源码
./scripts/feeds update -a && ./scripts/feeds install -a # 更新Feeds
rm -rf ./tmp && rm -rf .config # 清除编译配置和缓存
make menuconfig # 进入编译配置菜单
make -jn V=99 # 开始编译 n=线程数+1,例如4线程的I5填-j5
下面的是N1配置的基础选项:
Target System -> QEMU ARM Virtual Machine
Subtarget -> QEMU ARMv8 Virtual Machine (cortex-a53)
Target Profile -> Default
Target Images -> tar.gz
*** 必选软件包(基础依赖包,仅保证打出的包可以写入EMMC,可以在EMMC上在线升级,不包含具体的应用):
Languages -> Perl
-> perl-http-date
-> perlbase-file
-> perlbase-getopt
-> perlbase-time
-> perlbase-unicode
-> perlbase-utf8
Utilities -> Disc -> blkid、fdisk、lsblk、parted
-> Filesystem -> attr、btrfs-progs(Build with zstd support)、chattr、dosfstools、
e2fsprogs、f2fs-tools、f2fsck、lsattr、mkf2fs、xfs-fsck、xfs-mkfs
-> Compression -> bsdtar 或 p7zip(非官方源)、pigz
-> Shells -> bash
-> gawk、getopt、losetup、tar、uuidgen
-> acpid (可选, 用于 kvm 虚拟机固件)
* (可选)Wifi基础包:
* 打出的包可支持博通SDIO无线模块,Firmware不用选,
* 因为打包源码中已经包含了来自Armbian的firmware,
* 会自动覆盖openwrt rootfs中已有的firmware
Kernel modules -> Wireless Drivers -> kmod-brcmfmac(SDIO)
-> kmod-brcmutil
-> kmod-cfg80211
-> kmod-mac80211
Network -> WirelessAPD -> hostapd-common
-> wpa-cli
-> wpad-basic
-> iw
支持 iPv6:
1、Extra packages ---> ipv6helper (选定这个后下面几项自动选择了)
Network ---> odhcp6c
Network ---> odhcpd-ipv6only
LuCI ---> Protocols ---> luci-proto-ipv6
LuCI ---> Protocols ---> luci-proto-ppp
Applications ---> luci-app-amlogic #晶晨插件,电视盒子必选!
注意如果你喜欢安装各种插件或者喜欢折腾的话,估计你会遇到这个overlay空间不足的情况。需要修改大小:
Target Images ---> Root filesystem partition size
修改默认ip,大概在99行很明显这就是我们的默认路由器的IP地址,如有必要修改成自己需要的ip
vim package/base-files/files/bin/config_generate
下面教程是打包docker镜像:
1.下载flippy提供的n1内核
https://www.right.com.cn/forum/thread-4076037-1-1.html
上面地址,会提供网盘地址,可以去网盘下载:
下载地址:
链接:https://pan.baidu.com/s/15b1OWLXcmpJjqdaYFKvIlg?pwd=6nc4
提取码:6nc4
链接:https://pan.baidu.com/s/14WCQid4GHB76RLFZKb3VQA?pwd=3jwb
提取码:3jwb
链接:https://pan.baidu.com/s/1j7OTusExLii53ganNHHO0Q?pwd=zq3y
提取码:zq3y
内核地址在OpWrt->纯内核压缩包(Flippy Arm64 Kernel),挑最新的版本即可。
下载最新的boot dtb-amlogic modules 开头的三个压缩包。
2.切换到root用户,需要把 Flippy预编译好的 Arm64 内核(上面下载的三个压缩包)上传至 /opt/kernel目录(目录需要自己创建)
cd /opt
git clone https://github.com/unifreq/openwrt_packit
3.把编译好的 openwrt-armvirt-64-generic-rootfs.tar.gz 上传至 /opt/openwrt_packit目录中
cd /opt/openwrt_packit
#修改配置内容改成自己导入的内核名称(上面下载的三个压缩包)
vi make.env
KERNEL_VERSION=6.1.69-flippy-87+
#保存,开始打包
./mk_s905d_n1.sh
#s905d表示生成 Phicomm N1所用的固件
生成好的固件是 .img 格式, 存放在 /opt/openwrt_packit/output/openwrt_s905d_n1_R23.10.24_k6.1.69-flippy-87+.img 目录中,下载刷机即可
默认登陆IP 192.168.1.1 密码 password
注意:最新的不用这么麻烦,直接命令生成即可:
bash mk_openwrt_dockerimg.sh
导入镜像:
将生成好的镜像文件传输到硬盘,运行以下命令导入
docker load --input 镜像文件
一些其他选择:
修改路由连接数
vim package/base-files/files/etc/sysctl.conf
net.netfilter.nf_conntrack_max=65535
Base system
取消选中dnsmasq
选中dnsmasq-full
因为dnsmasq-full支持ipset功能,对于基于域名的xx很有用。
Network->File Transfer中选中
curl
wget
【两个下载工具】
Network->IP Addresses and Names中选中
bind-dig
ddns-scripts_No-IP_com。(用来支持no-ip.com的ddns服务)
一个是测试工具;另一个是某个ddns支持,还有其他ddns支持,也可以酌情选中。
Network->Routing and Rediction中选中
ip-full
这个很关键。
Network中选中
iperf3
ipset
一个是测试工具;
另一个是ipset,用于支持基于域名的xx。
Network->Web Servers/Proxies选中那些SS,如果您需要使用SS的话。
Utilities->Editors中选
nano (也可以选vim)
Utilities->Shells中选中
bash
文件清理:
1.清除旧的编译产物(可选)
make clean
2.清除旧的编译产物、交叉编译工具及工具链等目录(可选)
make dirclean
3.清除 OpenWrt 源码以外的文件(可选)
make distclean
4.还原 OpenWrt 源码到初始状态(可选)
git clean -xdf
5.清除临时文件
rm -rf tmp
6.删除编译配置文件
rm -f .config
7.检查文件完整性
find dl -size -1024c -exec ls -l {} \;
编译错误解决方案:
1.openWrt(LEDE)编译错误WARNING: Makefile 'package/lean/autosamba/Makefile' has a dependency on 'luci-app-samba', which does not exist
是因为软引用的问题:
解决方法:
环境说明:~/lede/目录,是克隆openwrt的主目录,里面是默认就有的toolchain、tool等文件夹
1.查看是否有~/lede/feeds/luci/applications/文件夹下是否有luci-app-samba文件夹,
如果没有,更新feeds源,命令:
./scripts/feeds update -a && ./scripts/feeds install -a
2.进入feeds/luci/applications/luci-app-samba目录,创建luci-app-samba的软链接(快捷方式)
cd package/feeds/luci/
ln -s ../../../feeds/luci/applications/luci-app-samba luci-app-samba
ll luci-app-samba
2.OpenWrt Snapshots 编译 xray-core & xray-plugin 1.8.8 提示需要 golang 1.22.0 版本的解决方法
提供两个方案:
方案一、在 ./scripts/feeds install -a 操作之后替换 golang 为 1.22.x 版本
rm -rf feeds/packages/lang/golang
git clone https://github.com/sbwml/packages_lang_golang -b 22.x feeds/packages/lang/golang
方案二、Patch xray-core & xray-plugin 使其兼容 golang 1.21
具体参考: https://github.com/sbwml/openwrt_helloworld/commits/go1.21
ps:如果报错,而实在找不到问题,可尝试输入以下代码
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
文章评论