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