Last active 1725525230

Revision 0ce640e0a24f8c1b5f2a75463c2a8b33458fcf30

build.sh Raw
1#!/bin/sh
2routerUser="root"
3version="23.05.3"
4#baseUrl="https://downloads.immortalwrt.org/releases/${version}/targets/x86/64"
5baseUrl="https://immortalwrt.aiursoft.cn/releases/${version}/targets/x86/64" # Use mirror to speed up download
6builderFileName="immortalwrt-imagebuilder-${version}-x86-64.Linux-x86_64.tar.xz"
7pkgConfig="-dnsmasq dnsmasq-full ip-full vim vim-runtime -ethtool ethtool-full \
8kmod-nf-nat kmod-nf-nat6 kmod-tls kmod-nft-arp kmod-nft-compat kmod-nft-connlimit kmod-nft-dup-inet kmod-nft-queue kmod-nft-socket kmod-nft-tproxy kmod-nft-xfrm kmod-nft-offload \
9iptables-nft ip6tables-nft kmod-ipt-nat6 kmod-ipt-nat-extra kmod-ipt-nathelper-rtsp kmod-sched-mqprio kmod-ipt-offload \
10kmod-e1000 kmod-e1000e kmod-igb kmod-ixgbe kmod-ixgbevf kmod-igc \
11pciutils usbutils \
12kmod-usb2 kmod-usb3 usbutils exfat-fsck exfat-mkfs kmod-fs-exfat kmod-usb-storage kmod-usb-storage-extras kmod-usb-storage-uas kmod-usb-serial kmod-usb-hid \
13luci-i18n-opkg-zh-cn luci-i18n-firewall-zh-cn \
14xray-core v2ray-geoip v2ray-geosite resolveip \
15luci-i18n-ttyd-zh-cn luci-app-ttyd \
16luci-i18n-nut-zh-cn luci-app-nut \
17nut nut-common nut-driver-apcupsd-ups nut-driver-usbhid-ups nut-server nut-upsc nut-upscmd nut-web-cgi \
18luci-app-upnp luci-i18n-upnp-zh-cn \
19luci-app-wol luci-i18n-wol-zh-cn \
20luci-app-banip luci-i18n-banip-zh-cn \
21luci-app-watchcat luci-i18n-watchcat-zh-cn \
22luci-app-uhttpd uhttpd \
23luci-theme-bootstrap luci-theme-argon \
24luci-app-statistics luci-i18n-statistics-zh-cn collectd-mod-disk collectd-mod-cpu collectd-mod-cpufreq collectd-mod-df collectd-mod-interface collectd-mod-processes collectd-mod-uptime collectd-mod-vmem collectd-mod-email collectd-mod-ethstat collectd-mod-conntrack collectd-mod-dhcpleases collectd-mod-syslog collectd-mod-write-http collectd-mod-ping collectd-mod-dns collectd-mod-memory collectd-mod-thermal collectd-mod-sensors collectd-mod-smart smartmontools smartmontools-drivedb \
25umdns ca-bundle haveged wget wget-ssl iperf3 telnet-bsd speedtest-cli qrencode lm-sensors-detect lscpu lsblk uhubctl losetup bind-dig httping tcping \
26"
27
28bareMentalPackages="intel-microcode iucode-tool kmod-i2c-i801 kmod-w83627hf-wdt kmod-itco-wdt"
29esxiPackages="kmod-vmxnet3 open-vm-tools open-vm-tools-fuse"
30proxmoxPackages="virtio-console-helper qemu-ga"
31
32echo "# STEP 0. Install prerequisites ..."
33# Needs to run 'make'
34DEBIAN_FRONTEND=noninteractive sudo apt update -y
35DEBIAN_FRONTEND=noninteractive sudo apt install qemu-utils upx-ucl librsync-dev rsync unzip libncurses-dev subversion curl gawk -y
36
37echo "# STEP 1. Gathering information ..."
38echo "What platform are you building for? [Enter 'bare' for bare-metal, 'esxi' for VMware ESXi, 'proxmox' for Proxmox VE]:"
39read platform
40case $platform in
41 bare)
42 pkgConfig="$pkgConfig $bareMentalPackages"
43 ;;
44 esxi)
45 pkgConfig="$pkgConfig $esxiPackages"
46 ;;
47 proxmox)
48 pkgConfig="$pkgConfig $proxmoxPackages"
49 ;;
50 *)
51 echo "Invalid platform. Exiting."
52 exit 1
53 ;;
54esac
55
56echo "# STEP 2. Downloading OpenWrt ${version} Image Builder ..."
57if ! [ -f "./${builderFileName}" ]
58then
59 wget "$baseUrl/$builderFileName" -P .
60fi
61rm -rf ./builder
62mkdir ./builder
63tar xf ./$builderFileName -C ./builder/ --strip-components=1
64cd ./builder
65
66echo "# STEP 3. Preparing to build image ..."
67
68# Change source from https://downloads.immortalwrt.org/ to https://immortalwrt.aiursoft.cn/
69sed -i "s/https:\/\/downloads.immortalwrt.org/https:\/\/immortalwrt.aiursoft.cn/g" ./repositories.conf
70
71# Set grub timeout to 0
72sed -i 's/CONFIG_GRUB_TIMEOUT="[0-9]"/CONFIG_GRUB_TIMEOUT="0"/g' ./.config
73# Image generation config
74sed -i "s/CONFIG_TARGET_ROOTFS_EXT4FS=y/CONFIG_TARGET_ROOTFS_EXT4FS=n/g" ./.config
75sed -i "s/CONFIG_VHDX_IMAGES=y/CONFIG_VHDX_IMAGES=n/g" ./.config # Disable VHDX because we only need to support bare-metal, ESXi and Proxmox. VHDX is for Hyper-V.
76sed -i "s/CONFIG_QCOW2_IMAGES=y/CONFIG_QCOW2_IMAGES=n/g" ./.config # Disable QCOW2 because we only need to support bare-metal, ESXi and Proxmox. QCOW2 is for KVM.
77sed -i "s/CONFIG_ISO_IMAGES=y/CONFIG_ISO_IMAGES=n/g" ./.config # Disable ISO because we only need to support bare-metal, ESXi and Proxmox. ISO is for CD-ROM.
78sed -i "s/CONFIG_VMDK_IMAGES=y/CONFIG_VMDK_IMAGES=n/g" ./.config # Enable VMDK because we need to support ESXi and Proxmox. VMDK is for VMware.
79sed -i "s/CONFIG_VDI_IMAGES=y/CONFIG_VDI_IMAGES=n/g" ./.config # Enable VDI because we need to support VirtualBox. VDI is for VirtualBox.
80
81# Language config
82sed -i "s/# CONFIG_LUCI_LANG_en is not set/CONFIG_LUCI_LANG_en=y/g" ./.config
83
84echo "# STEP 4. Building image ..."
85make image PACKAGES="$pkgConfig" ROOTFS_PARTSIZE=1024 j=32 V=sc
86echo "# DONE. See built images under: ./builder/bin/targets/x86/64/"
87
88if [ "$platform" = "esxi" ]
89then
90 echo "The file you need is with name like 'immortalwrt-${version}-x86-64-generic-ext4-combined-efi.vmdk.gz'."
91 echo "Please unzip it and upload to your ESXi server."
92 echo "You need to create a new virtual machine with the following settings:"
93 echo " - Guest OS: Linux, Version: Other 5.x or later Linux (64-bit)"
94 echo " - Memory: 512MB or more, reserve all guest memory"
95 echo " - Disk: Use existing disk, select the VMDK file you just uploaded, use IDE controller"
96 echo " - Network: Add two new network adapters, pass through to the physical network adapter"
97 echo " - Other settings: Set the boot order to boot from hard disk first"
98 echo " - Other settings: Set the boot mode from BIOS to EFI"
99 echo " - Other settings: Enable IO MMU"
100 echo " - Other settings: Enable Performance counters"
101 echo " - Other settings: Add Precision Clock. (ESXi must synchronize the time with a trusted time source)"
102 echo " - Other settings: Remove the floppy drive & USB controller"
103 echo "And the IP address of the virtual machine will be 192.168.1.1"
104 echo "All interfaces will be bridged as br-lan"
105 echo "You need to edit the following settings for your ImmortalWRT:"
106 echo " - Password: Change the password for root and the web interface"
107 echo " - Network: Remove the default br-lan and create new interfaces with one-one mapping to the physical network adapter"
108 echo " - Hardware Acceleration: Disable hardware acceleration for your router"
109 echo " - Name: Change the name for the local network"
110 echo " - IPv6: Turn off IPv6 ULA because we don't need it"
111fi