Openwrt_编译(Ubuntu)
## 注意
1. **不要用 root 用户进行编译**
2. 国内用户编译前最好准备好梯子
3. 默认登陆IP 192.168.1.1 密码 password
## 编译命令
1. 首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS
2. 安装编译依赖
```
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 libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev python3-setuptools
```
3. 下载源代码,更新 feeds 并选择配置
```bash
推荐使用Lienol的源码或Lean的LEDE项目源码,它们通常包含更多针对国内用户和特定硬件的补丁。
git clone https://github.com/coolsnowwolf/lede.git openwrt # 克隆Lean的LEDE源码到openwrt目录
cd openwrt # 进入源码目录
./scripts/feeds update -a # 从Feeds服务器获取最新的软件包列表
./scripts/feeds install -a # 安装所有Feeds中的软件包,使其在配置菜单中可用
make menuconfig # 启动基于ncurses的文本配置菜单
### 或者使用OpenWrt官方源码:
git clone git://git.openwrt.org/openwrt.git # 官方源码
cd openwrt
```
4. 下载 dl 库,编译固件 (-j 后面是线程数,第一次编译推荐用单线程)
```sh
make -j$(nproc) download # 使用所有可用的CPU线程并行下载所需的源码包
```
- 下载后,**强烈建议检查文件完整性**,删除不完整的文件(小于1KB的文件通常下载失败)并重新下载,可以避免后续编译失败10:
bash
```bash
find dl -size -1024c -exec rm -f {} \; # 删除小于1KB的文件
make -j$(nproc) download # 再次下载
```
- **开始编译**:
首次编译或不确定稳定性时,推荐使用单线程编译以便于排查错误:
bash
```bash
make -j1 V=s # 单线程编译,并显示详细输出
# 确认无错误后可使用多线程加速后续编译
# make -j$(nproc) V=s
```
如果编译成功,后续再尝试使用多线程(例如 `-j$(nproc)`)来加快速度。编译过程**耗时较长**(取决于你的电脑性能和网络速度),请耐心等待。
本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码,包括 IPK 的。
你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作!
二次编译:
```sh
git pull # 更新源码
./scripts/feeds update -a && ./scripts/feeds install -a # 更新并安装feeds
```
- **清理工作**:
- `make clean`: 清理编译产生的目标文件,但保留工具链和下载的源码包。
- `make dirclean`: 更彻底的清理,包括工具链(更换架构时常用)。
- `make distclean`: 最彻底的清理,**慎用**,它会恢复源码到初始状态,删除所有下载包和配置文件。
如果需要重新配置:
```sh
rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)
```
编译完成后输出路径:bin/targets
# ### 附加
------------
```sh
su openwrt
cd ~
#拉取源码,这里用的是 Lean 大佬的 LEDE 分支源码
git clone https://github.com/coolsnowwolf/lede
cd lede
#添加软件源,L大源码里默认有四个软件源里面包含了大部分常用插件,如果要添加其他没有的插件则需要自行添加软件源至 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 haibo https://github.com/haiibo/openwrt-packages
src-git liuran001 https://github.com/liuran001/openwrt-packages
```
# 固件主题
```sh
rm -rf package/lean/luci-theme-argon
git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git package/lean/luci-theme-argon
```
# 插件
```sh
git clone https://github.com/esirplayground/luci-app-poweroff.git package/luci-app-poweroff
```
# 更新并安装插件
```sh
./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a
```
# 自定义配置
```sh
# 修改默认IP为 10.0.0.2
sed -i 's/192.168.1.1/10.0.0.2/g' package/base-files/files/bin/config_generate
# 修改默认主机名
sed -i '/uci commit system/iuci set system.@system[0].hostname='Soft_Router'' package/lean/default-settings/files/zzz-default-settings
# 加入编译者信息
sed -i "s/OpenWrt /Kinoko build $(TZ=UTC-8 date "+%Y.%m.%d") @ OpenWrt /g" package/lean/default-settings/files/zzz-default-settings
# 修改默认主题
sed -i "s/luci-theme-bootstrap/luci-theme-argon/g" feeds/luci/collections/luci/Makefile
```
## 执行 `make menuconfig` 命令进入编译菜单
# 菜单简要说明
```sh
# 选择 CPU 类型
Target System (x86) --> # 软路由选择 x86,硬路由根据型号厂家自行选择
Subtarget (x86_64) --> # CPU 子选项
Target Profile (Generic x86/64) --> # 厂家具体型号
# 设置镜像编译的格式(squashfs,ext4)
Target Images --> # 默认 squashfs
# 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
Target Images --> (16) Kernel partition size (in MB) # 默认是16,建议修改为256
Target Images --> (400) Root filesystem partition size (in MB) # 默认是400,建议修改为512
# 开启 IPv6 支持
Extra packages --> ipv6helper(选定这个后,下面几项会自动选择)
Network --> odhcp6c
Network --> odhcpd-ipv6only
LuCI --> Protocols --> luci-proto-ipv6
LuCI --> Protocols --> luci-proto-ppp
# 开启适用于 VMware 的 VMware Tools
Utilities --> open-vm-tools
Utilities --> open-vm-tools-fuse
# 选择插件
LuCI --> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译
# 选择主题
LuCI --> Themes # 选择喜欢的主题,可以选多个
# 其他选项一般不需要调整,如感兴趣可以自行了解
```
最后编译固件,编译完成后输出路径是 `bin/targets`,默认密码是 `password`编译固件(-j 后面是线程数,首次编译推荐用单线程)
```sh
make V=s -j1
```