跳至主要内容

使用 OpenWrt 23.05.5 官网源码编译固件

前言

用过大佬编译好的固件,也自己基于大佬的固件手动编译,最终还是决定用官方的源码编译,只加入自己想要的软件

相关链接:

准备工作

环境

  • 系统:Debian 11 x64位系统 / Ubuntu 18.04 x64位系统
  • 网络:可以访问外网(国内请全局科学上网
  • 磁盘:大约有 30G 的空闲空间
  • 内存:至少 4G 物理内存
  • CPU:越快越好,影响编译速度

依赖

root 用户执行以下命令或者有 root 权限的用户

  1. sudo apt update -y
  2. sudo apt install -y ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison build-essential \
  3. bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
  4. git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
  5. libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
  6. mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \
  7. rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

源码

以下命令以普通用户执行,不要用 root

  1. # 下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 )
  2. git clone -b v23.05.5 --single-branch --depth=1 https://github.com/openwrt/openwrt.git
  3. # 进入到该目录
  4. cd openwrt

配置

vermagic

自行编译时,会出现内核的魔法值不一样,需要完成如下修改:

获取值

获取值时,要注意后续选择平台,本文以 x64 平台为例

方式一:

执行以下脚本即可写入到 vermagic 文件中。注意: 23.05.5 为版本号

curl -s https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.5-x86-64.manifest | grep kernel | awk '{print $3}' | awk -F- '{print $3}' > vermagic

 

方式二:

  1. 打开官方对应版本的下载链接:https://downloads.openwrt.org/releases
  2. 点击:23.05.5 -> targets -> x86 -> 64
  3. 下载 Supplementary Files 中的 openwrt-23.05.5-x86-64.manifest 文件
  4. 使用文本编辑器打开该文件,记录下 kernel 最后面的那串字符串
  5. 执行以下脚本写入到 vermagic 文件中
  1. # 注意:47964456485559d992fe6f536131fc64 就是上文中的字符串
  2. echo '47964456485559d992fe6f536131fc64' > vermagic

 

修改内核配置文件

  1. # 编辑配置文件
  2. vim include/kernel-defaults.mk +121
  3. # 找到这一行,然后注释掉!
  4. grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic
  5. # 再在下一行添加如下内容
  6. cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic

修改完成后效果如下:


时区

  1. # 编辑配置文件
  2. vim package/base-files/files/bin/config_generate +315
  3. # 修改时区为 CST-8
  4. set system.@system[-1].timezone='CST-8'
  5. # 再在下一行添加如下内容
  6. set system.@system[-1].zonename='Asia/Shanghai'

修改完成后效果如下:


默认IP

默认管理IP为 192.168.1.1 ,可以根据自己的需求进行修改

  1. # 编辑配置文件
  2. vim package/base-files/files/bin/config_generate +165
  3. # 修改如下内容
  4. lan) ipad=${ipaddr:-"192.168.188.1"} ;;

修改完成后效果如下:


软件包

添加第三方软件有两种方式:

  1. 将软件包仓库地址写入 feeds.conf.default 文件中,可以参考 kenzok8 的软件包的说明文档
  2. 使用 git clone 手动下载软件包放入到 package 文件夹中,下文中使用这种方式

不论是哪种方式加入第三方软件,都需要执行以下代码更新 feeds

  1. ./scripts/feeds update -a
  2. ./scripts/feeds install -a

菜单配置

执行以下命令打开菜单配置

  1. make menuconfig

终于来到了一个图形化界面,该界面有如下操作

  • ↑ ↓ 键:上下切换
  • PgUp PgDn 键:上下翻页
  • Enter 回车键:
    • 进入子菜单
    • 选择/确认
  • Y 键:选中,在 < > 上进行操作,操作后变为 <*>
  • N 键:取消选中,在 <*> 上进行操作,操作后变为 < >
  • Esc 键:连击两下,返回上层菜单,如果在主菜单则为退出配置

按照如下配置进行选择,其他未说明的不要动 

  • Target System -> x86   # 软路由选择 x86,硬路由根据型号厂家自行选择
  • Subtarget -> x86_64    # CPU 子选项
  • Target Images              # 设置镜像编译的格式(squashfs,ext4)
    • < > tar.gz
    • < > ext4              # 默认 squashfs
    • < > Build GRUB images
    • (1) Seconds to wait before booting the default entry 
      # 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
    •  (16) Kernel partition size (in MB) # 内核大小 默认是16,建议修改为256
    • (256) Root filesystem partition size     # 分区大小 默认是256,建议修改为512
  • Base system
    • < > dnsmasq
    • <*> dnsmasq-full
  • LuCI
    • Collections
      • <*> luci
    • Modules
      • Translations
        • <*> Chinese Simplified
    • Applications
      • 根据自己的需要选择软件包
      • 插件中文说明对照表:点击查看
  • Themes   
    •  选择喜欢的主题,可以选多个
 
#为 星空组网 开启必要的 依赖
  • Libraries
           <*> libcap. Linux capabilities library library
           <*>   libcap-bin. Linux capabilities library binaries
  • Kernel modules
                Network Support
                     <*>kmod-tun. Universal TUN/TAP driver
 

如果不小心配错了,可以执行以下命令重新配置

  1. rm -rf ./tmp && rm -rf .config
  2. make menuconfig

预下载

这里会先把编译时要下载的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通)

  1. make download -j8 V=s

编译

接下来就要进入漫长的编译时间了,使用 -j 参数可以指定编译时使用的线程数

亲测笔记本 i7-8750H 12线程全开需要接近2小时完成,单线程需要4-5小时

  1. # 根据CPU核心数开启指定线程数执行编译
  2. make V=s -j$(nproc)
  3. # 如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查(注:有时候单线程就不报错了)
  4. make V=s -j1

获取成果

编译完成后,镜像文件地址是:

./bin/targets/x86/64/openwrt-x86-64-generic-squashfs-combined-efi.img.gz

下载到本地后需要先解压

  1. # 如果是PVE中安装,上传 .img 文件后,可以使用以下命令导入镜像文件
  2. qm importdisk 100 /var/lib/vz/template/iso/openwrt-x86-64-generic-squashfs-combined-efi.img local

其它

在固件中集成 Docker的方法
  1. 在上面的配置中增加如下设置
  • Target Images 
        (2048) Root filesystem partition size
  • Kernel modules
    • Network Devices
             <*>kmod-macvlan. MAC-VLAN support
    • Network Support
                         <*>kmod-tun. Universal TUN/TAP driver 
                         <*> kmod-veth. Virtual ethernet pair device
     

    LuCI

    • Collections
    • <*>luci-lib-docker. LuCI library for docker
    • Applications 
      •  <*> luci-app-dockerman. LuCI Support for docker 

    Utilities

    <*>docker. Docker Community Edition CLI 
    -*- dockerd. Docker Community Edition Daemon  --->
    <*> cgroup-tools. CGroup config and exec tools
     <*> cgroupfs-mount. cgroup mount scripts  ----
     

    网上找的其他依赖仅供参考

    #luci-lib-docker dockerd luci-lib-jsonc docker
    #docker dockerd luci-app-dockerman luci-i18n-dockerman-zh-cn 
    #dockerd luci-app-dockerman luci-i18n-dockerman-zh-cn 
    kmod-macvlan docker-compose 
     
     
     

    二次编译:

    cd openwrt
    ./scripts/feeds update -a
    ./scripts/feeds install -a
    make menuconfig
    make download -j8
    make V=s -j$(nproc)

评论