一、安装依赖环境
# 大多数时候已经安装了
pacman -S zlib libtool findutils gawk gengetopt grep gettext unzip zip rsync subversion which
# 下面的是编译需要安装的
pacman -S binutils bzip2 gcc diffutils patch quilt flex make cmake automake autoconf automake bison screen asciidoc python perl
二、下载 24.10.0 稳定版[最新]
git clone -b v24.10.0 git://git.openwrt.org/openwrt/openwrt.git
或:
wget https://github.com/openwrt/openwrt/archive/refs/tags/v24.10.0.tar.gz
解压缩
tar xzvf v24.10.0.tar.gz
cd openwrt-24.10.0
这里使用feeds增加部分功能
增加xray的管理界面
nano -w feeds.conf.default
src-git-full luci_app_xray https://github.com/yichya/luci-app-xray
更新索引
./scripts/feeds update -a
./scripts/feeds install -a
修改默认语言和备份的文件
nano -w feeds/luci/modules/luci-base/root/etc/config/luci
config core main
option lang auto
option mediaurlbase /luci-static/bootstrap
option resourcebase /luci-static/resources
config extern flash_keep #如果没有,增加下列保留的配置项
option uci "/etc/config/"
option dropbear "/etc/dropbear/"
option openvpn "/etc/openvpn/"
option passwd "/etc/passwd"
option opkg "/etc/opkg.conf"
option firewall "/etc/firewall.user"
option uploads "/lib/uci/upload/"
option dnsmasq "/etc/dnsmasq.conf"
option ocserv "/etc/ocserv/"
option openconnect "/etc/openconnect"
option samba "/etc/samba/"
option qemu "/etc/qemu"
这里做一个默认的配置包
default-settings
|– Makefile
|– files
| | `– 99-default-settings
Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=default-settings
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_LICENSE:=GPLv3
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
define Package/default-settings #设置包信息和依赖
SECTION:=luci
CATEGORY:=LuCI
TITLE:=LuCI support for Default Settings
PKGARCH:=all
DEPENDS:=+luci-base +luci
endef
define Package/default-settings/description
LuCI support for Default Settings.
endef
define Build/Compile
endef
# 把文件 99-default-settings 写入 /etc/uci-defaults/ 目录下,如果是其他文件的话也可以用这种方法把特定文件写入固件中,比如证书
define Package/default-settings/install
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) ./files/99-default-settings $(1)/etc/uci-defaults/99-default-settings
endef
$(eval $(call BuildPackage,default-settings))
99-default-settings
#!/bin/sh
#可以直接通过uci的接口修改配置
#比如配置系统时区
uci set system.@system[0].hostname='ovsea'
uci set system.@system[0].timezone=CST-8
uci set system.@system[0].zonename=Asia/Shanghai
uci commit system
# 比如配置无线相关
uci set wireless.radio0.cell_density='0'
uci set wireless.default_radio0.ssid='ovsea'
uci set wireless.default_radio0.encryption='psk2'
uci set wireless.default_radio0.key='1234567890'
uci set wireless.radio1.cell_density='0'
uci set wireless.default_radio1.ssid='ovsea'
uci set wireless.default_radio1.encryption='psk2'
uci set wireless.default_radio1.key='1234567890'
uci commit wireless
#比如配置lan口和wan口
uci set network.lan.ipaddr="172.16.1.1"
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='172.16.1.1'
uci set network.lan.dns='172.16.1.1 8.8.8.8 1.1.1.1'
uci set network.wan.proto="pppoe"
uci set network.wan.username="账号"
uci set network.wan.password="密码"
uci commit network
/etc/init.d/network restart
uci set dhcp.lan.start='100'
uci set dhcp.lan.limit='150'
uci set dhcp.lan.leasetime='24h'
uci commit dhcp
/etc/init.d/dnsmasq restart
#比如配置 uhttpd
#uci del uhttpd.main.listen_http
#uci del uhttpd.main.listen_https
#uci add_list uhttpd.main.listen_http=[::]:1089
#uci add_list uhttpd.main.listen_http=0.0.0.0:1089
#uci add_list uhttpd.main.listen_https=[::]:1443
#uci add_list uhttpd.main.listen_https=0.0.0.0:1443
#uci set uhttpd.main.rfc1918_filter=0
#uci set uhttpd.main.cert=/etc/ssl/certs/certificate.cer
#uci set uhttpd.main.key=/etc/ssl/certs/private.key
#uci set uhttpd.main.redirect_https=1
#uci commit uhttpd
#比如修改root默认密码和设置证书登陆的公钥
echo -e "admin\nadmin" | passwd root
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCoDav+iFQ4xcrz+NrK+C71+sWc8mm0gS8Z9Vmz5Qv4Ey0yOBBxieundKQXxg2o5SO+/Shja99OLsciFU9qUIW6OF0+PXloAIguoXC5SBCJZtkmDAhdQw9FT4d3pdrovbvnbr6tTK3XxPHZa5zVCUwaUlGx+o3GGLCImelDHwirRVmOVzl+eAMffSvtPVF2Qeo25or2DTxmEZWtwGPPTza5QmwwkWG1FMJMwt7yHcL8Td1kcHLWFd8oLmubuimzS1WKQ1sdAnjp9GhiqI8qaXCpl3jHk05goGwlF85CrsFMLCeSo03uXxIxK0XmkX8DeDCDu8pM553s/+xLg6P9AuVgO7VLEh76bpIUERsnAFN52hWmATfe3HaH8UgvXMoPFikSB140Z7IljKqEHCvAers4Ej6Qlu/u4wa4Mg5hlWy3ta/kUarJMNN7RePiCrC2Y4bQ7U9X2dPqrHcd/ss7obQsBjpYwbZHxzO8uj+oHtTceFoSixMjMz7cGMNiyKQ3dhM= root@vmSrv' > /etc/dropbear/authorized_keys
####################
#### 其他配置 ####
####################
#结束一定要返回 0 只有返回0后,该文件在首次执行后才会被删除
#详见: https://openwrt.org/docs/guide-developer/uci-defaults
exit 0
chmod 755 99-default-settings
添加第三方源码ipk
把第三方ipk源码的package包放进source/feeds/packages目录
把第三方ipk源码的luci包放进source/feeds/luci/applications目录
部分默认参数的修改
增加代理ARP
nano -w package/base-files/files/etc/sysctl.d/10-default.conf
# Enables Proxy ARP on all interfaces
net.ipv4.conf.all.proxy_arp=1
#net.ipv4.conf.eth0.proxy_arp=1
增加一些别名到shell
nano -w package/base-files/files/etc/profile
alias ls='ls --color=auto'
alias ll='ls -ls --color=auto'
增加diskman的界面
mkdir -p package/download/luci-app-diskman && \
wget https://raw.githubusercontent.com/lisaac/luci-app-diskman/master/applications/luci-app-diskman/Makefile -O package/download/luci-app-diskman/Makefile
mkdir -p package/download/parted && \
wget https://raw.githubusercontent.com/lisaac/luci-app-diskman/master/Parted.Makefile -O package/download/parted/Makefile
增加docker的界面(仅仅适用于x86)
mkdir -p package/download/luci-lib-docker && \
wget https://github.com/lisaac/luci-lib-docker/blob/master/collections/luci-lib-docker/Makefile -O package/download/luci-lib-docker/Makefile
mkdir -p package/download/luci-app-dockerman && \
wget https://github.com/lisaac/luci-app-dockerman/blob/master/applications/luci-app-dockerman/Makefile -O package/download/luci-app-dockerman/Makefile
最后执行make menuconfig
Global build settings
[*] Compile with full language support
进入配置菜单
Target System (x86)
Target System (Qualcomm Atheros IPQ40XX) ->ACRH17
Subtarget (x86_64)
Subtarget (Generic) ->ACRH17
Target Profile (Generic x86/64)
Target Profile (ASUS RT-AC42U) ->ACRH17
Target Images —>
======x86
(OvseaLink) Title for the menu entry in GRUB
[*] Build LiveCD image (ISO)
[*] Build VMware image files (VMDK)
(1024) Root filesystem partition size (in MiB) (NEW)
Image configuration —>
[*] Preinit configuration options —>
(172.16.1.1) IP address for preinit network messages
(255.255.255.0) Netmask for preinit network messages
(172.16.1.255) Broadcast address for preinit network messages
— Version configuration options
((OvseaLink) Release distribution
(1.0.0) Release version number
(Zebra) Release version code
(http://dl.magicwall.org:8/openwrt/18.06.4) Release repository
(http://gating.site) Release Homepage
(ZOTAC) Manufacturer name
(http://www.zotac.com) Manufacturer URL
(ZBOX) Product name
(CI325) Hardware revision
先选择LUCI,会自动选择依赖包
LuCI —> Collections —>
<*> luci
<*> luci-lib-docker
LuCI —> Modules —> Translations
<*> Chinese
LuCI —> Applications —>
<*> luci-app-adblock
<*> luci-app-ddns
<*> luci-app-diskman
<*> luci-app-dockerman
<*> luci-app-hd-idle
<*> luci-app-ksmbd
<*> luci-app-ocserv
<*> luci-app-p910nd
<*> luci-app-qos
<*> luci-app-statistics
<*> luci-app-transmission
<*> luci-app-upnp
<*> luci-app-wol
<*> luci-app-xfrpc
LuCI —> Protocols
<*> luci-proto-openconnect<*> luci-proto-vpnc. 千万不能有,否则依赖libgpg-error,无法编译
Base syatem
–> <*> blockd
–> <*> dnsmasq
–> <*> wireless-tools
Administration
–> <*> btop
Firmware —>
<*> intel-microcode
<*> iwlwifi-firmware-iwl7260
<*> iwlwifi-firmware-iwl7265
<*> iwlwifi-firmware-iwl7265d
<*> iwlwifi-firmware-iwl8260c
<*> iwlwifi-firmware-iwl8265
<*> iwlwifi-firmware-iwl9000
<*> iwlwifi-firmware-iwl9260
Kernel modules
–>Block Devices
<*> kmod-nvme
<*> kmod-scsi-generic
–>Filesystems
-*- kmod-fs-cifs
<*> kmod-fs-ext4
<*> kmod-fs-ntfs3
–>Native Language Support
—> kmod-nls-utf8
–>Input modules
–>Network Devices
<*> kmod-e1000e
<*> kmod-igb
<*> kmod-igbvf
<*> kmod-r8125
<*> kmod-r8126
<*> kmod-r8168
<*> kmod-vmxnet3
–>Network Support
<*> kmod-pptp
<*> kmod-veth
–>USB Support —>
<*> kmod-usb-hid
<*> kmod-usb-printer
<*> kmod-usb-storage
<*> kmod-usb-storage-extras
Virtualization —>
<*> kmod-kvm-amd
<*> kmod-kvm-intel
<*> kmod-vfio-pci
<*> kmod-vhost-net
–>Wireless Drivers 无线网卡驱动
Libraries —>
<*> libintl-full
<*> libpam
Network
–>File Transfer
<*> curl
<*> rsync
<*> wget-ssl
–>SSH
<*> openssh-sftp-client
<*> openssh-sftp-server
–>VPN
<*> ocserv
-[*] enable seccomp
<*> openconnect
-SSL library (OpenSSL)
(X) OpenSSL
————————————–
<*> 6rd
<*> cifsmount
<*> ethtool-full
<*> geoipupdate
<*> ipset
<*> ipset-dns
<*> tcpdump
<*> xray-core
Utilities —>
<*> dockerd
Compression->
<*> bsdtar
<*> gzip
<*> unrar
<*> unzip
<*> xz-utils
<*> zstd
Disc ->
<*> blkid
<*> cfdisk
<*> hdparm
<*> nvme-cli
Editors —>
<*> nano-plus
Encryption —>
<*> gnupg
<*> gnutls-utils
Virtualization —>
<*> qemu-bridge-helper
<*> qemu-firmware-efi
<*> qemu-firmware-seabios
<*> qemu-firmware-seavgabios
<*> qemu-ga
<*> qemu-img
<*> qemu-nbd
<*> qemu-x86_64-softmmu
[*] QEMU VNC support
[*] QEMU VNC jpeg tight encoding support
[*] QEMU SPICE ui support
[*] QEMU USB passthrough support
[*] Enable support for seccomp in QEMU (NEW)
[*] QEMU ZSTD compression support
<*> virtio-console-helper
Extra packages —>
<*> luci-app-xray
<*> luci-app-xray-status
最后回到界面选择 EXIT 点保存回到命令提示符界面,
修改一次BUG, 否则会导致:
configure: error: Package requirements (protobuf >= 2.6.0) were not met:
需要把feeds/packages/libs/protobuf-c/Makefile的PKG_BUILD_DEPENDS:=protobuf-c/host改为PKG_BUILD_DEPENDS:=protobuf/host
输入nohup make -j8 download V=s & 可以下载dl包
输入nohup make -j1 V=sc &就可以正常编译了(耗时70分钟)
查看详细日志:nohup nohup.out
编译完成后清除之前的编译作业。(使用这个命令前,记得把编译好的固件备份出来,不然会被删除掉,切记)
make clean
恢复默认编译环境
make defconfig
编译单个模块
make package/qos/clean (清除某个模块)
make package/qos/compile (#单独编译某模块 #V=99表示输出详细的debug信息)
make package/qos/install