Automated GitHub Actions build workflow for NanoPi R1S-H5 (64-bit Cortex-A53), pinned to ImmortalWrt 23.05.7 stable release (Linux kernel 5.15) to achieve 100% stable LAN/WAN throughput and avoid Realtek SDIO Wi-Fi driver crashes in early boot.
- β‘ Lightweight Image Builder Integration: Transitioned to the official ImmortalWrt Image Builder. Condenses compilation time from 2.5 hours down to 4 minutes while retaining extreme stability.
- πΎ Smart Partition Resize: Small initial firmware size for fast downloading and flashing, with an automated smart expansion system on the first boot (supports up to 2GB safe partition limit on TF cards > 2.2GB).
- πΆ Onboard Wi-Fi Safe Mode: Onboard SDIO wireless driver
kmod-rtl8189esis pre-integrated but safely disabled by default on boot to prevent kernel panics. The WPA/AP authentication suitewpad-basic-opensslis installed, allowing plug-and-play support for stable external USB Wi-Fi dongles. - ποΈ iStoreOS Interface & App Store: Integrates the clean iStoreOS QuickStart dashboard, NetworkGuide setup wizard, and the official iStore App Store for easy GUI-based plugin installation.
- π§Ή VUM Advanced Uninstall: Pre-integrates the VUM "ι«ηΊ§εΈθ½½" (luci-app-uninstall) plugin to cleanly purge files and residual configs when deleting packages.
- π¨π³ USTC High-Speed Mirror: Automatically switches default package feeds to the fast and reliable University of Science and Technology of China (USTC) mirror on first boot.
- π Multi-Language Support: Supports English, Simplified Chinese, Traditional Chinese, Japanese, Korean, German, Spanish, French, Italian, and Russian.
- π οΈ Static Verification Checks: Incorporates a CI/CD assertion job that loop-mounts the compiled rootfs in the cloud to verify kernel modules, network port mapping, and partition expansion scripts before releasing.
- π¦ Automated Release Publishing: Publishes compiled system images directly to GitHub Releases.
To optimize download sizes and protect the lifespan of your TF card, this project utilizes a custom first-boot resize script (/etc/uci-defaults/99-smart-resize):
- Initial Flashed Size: The compiled firmware has a compact rootfs partition (256MB or 512MB).
- First Boot Assessment: The script queries the physical sector count of the storage card:
- TF Card Capacity β€ 2.2 GB: The second partition (rootfs) is automatically expanded to consume 100% of the storage card.
- TF Card Capacity > 2.2 GB: The rootfs partition is expanded to exactly 2 GB. The remaining space is left unallocated.
- Using Unallocated Space: Users can use the pre-installed Diskman (
luci-app-diskman) utility in the Web UI to format the remaining unallocated space (e.g., asext4orf2fs) and mount it for Docker directories, Samba shares, or download tasks. This prevents the rootfs partition from filling up and freezing the system. - Cleanup & Reboot: Once partitions are expanded and the ext4 file system is resized via
resize2fs, the script deletes itself and reboots the device.
kmod-rtl8189es- RTL8189ES SDIO Wi-Fi driver (supports both RTL8189ES and compatible RTL8189FTV/FS onboard chips).- Custom double-port mapping (VLAN configured WAN on
eth0/ LAN oneth1dynamically on boot).
| Package Name | Function | Description |
|---|---|---|
luci-app-store |
iStore App Store | Graphical interface to search, install, and manage plugins with one click |
luci-app-quickstart |
QuickStart Dashboard | Elegant flat web dashboard and step-by-step Network Guide wizard |
luci-app-uninstall |
VUM Advanced Uninstall | Cleanly purges third-party plugin residuals and config files |
luci-app-passwall |
Proxy Client | Supports multiple protocols, running Xray/sing-box cores (H5 only) |
luci-theme-argon |
Modern Theme | Elegant responsive interface for desktop & mobile devices |
luci-app-argon-config |
Theme Configuration | Customize argon theme backgrounds, colors, and login logo |
luci-app-diskman |
Disk Management | Manage partitions, format, and mount unallocated TF card space |
luci-app-ddns |
Dynamic DNS | Automated IP sync with Cloudflare, Aliyun, DNSPod, etc. |
luci-app-upnp |
UPnP Mapping | Automated port mapping for gaming and P2P downloads |
luci-app-wol |
Wake-on-LAN | Wake up remote computers directly from the router interface |
Note
Upstream H3 Platform Support Status: The NanoPi R1S-H3 (32-bit Cortex-A7) platform is currently excluded from the default Image Builder matrix due to a lack of official stable target profiles in upstream ImmortalWrt 23.05 release branches. R1S-H5 configuration compiles and delivers the full set of applications out-of-the-box.
- Monthly Automated Build (Cron): The workflow runs automatically at 02:00 AM on the 1st of every month (
0 2 1 * *). This keeps proxy cores (Xray, sing-box) and ImmortalWrt system packages up to date. - Manual Trigger:
- Navigate to the Actions tab on your repository.
- Select the ImmortalWrt Builder workflow.
- Click Run workflow, choose your branch (defaults to
openwrt-24.10), and trigger.
For the workflow to successfully write environment variables, release tags, and upload firmware artifacts, write permissions must be enabled:
- In your GitHub repository, click on Settings in the top navigation bar.
- In the left-hand sidebar under Actions, click General.
- Scroll down to the Workflow permissions section.
- Select Read and write permissions.
- (Recommended) Check Allow GitHub Actions to create and approve pull requests.
- Click Save.
- Default IP Address:
192.168.2.1 - Default Username:
root - Default Password:
password - Ethernet Ports Mapping:
- WAN:
eth0(connected to external modem/internet) - LAN:
eth1(connected to local switch/devices)
- WAN:
- UPnP Service: Enabled by default to facilitate automated port mapping for gaming and P2P clients.
| Version | Base System & Kernel | Wi-Fi Support Status | Pros | Cons |
|---|---|---|---|---|
| ImmortalWrt 23.05 | Base: 23.05.7 Kernel: 5.15 |
Client/Scan Mode Only (Default AP disabled on boot) Supports scanning SSIDs and connecting to upstream Wi-Fi. |
β’ Modern kernel and active package feeds. β’ Native iStore App Store and flat dashboard. β’ Full Passwall / Xray / sing-box support. β’ High-speed USTC mirror pre-configured for packages. |
β’ Onboard AP mode (RTL8189ES) triggers kernel panic and boot loop, so AP interface is kept disabled. |
| ImmortalWrt 21.02 (Legacy) | Base: 21.02.7 Kernel: 5.4 |
Full AP & Client Support Stable onboard Access Point out of the box. |
β’ 100% stable onboard Wi-Fi AP support without kernel crash. β’ Very low memory and CPU overhead. |
β’ Legacy kernel and older package feeds. β’ Lacks modern App Store & some modern plugins. β’ USTC mirror has purged EOL 21.02 packages; builds default to international feeds (slower updates in China). |
Important
About 21.02 Package Feeds:
Because the 21.02 release branch is EOL (End of Life), domestic Chinese mirrors like USTC have cleared 21.02 package repositories. The 21.02 build dynamically detects its system version and retains the official international source (downloads.immortalwrt.org) to guarantee package availability. Mainland China users may experience slower speeds when running opkg update.
Click the Fork button in the upper right corner to create a copy of this repository under your GitHub account.
- Place custom configurations under
/configs/24.10/(e.g.,nanopi-r1s-h5.configornanopi-r1s-h3.config). - Modify
diy-part1.sh(executed before feeds update) anddiy-part2.sh(executed before compilation) to inject scripts or packages.
For users downloading pre-compiled system images directly from the Releases page:
Since migrating to ImmortalWrt 23.05 involves kernel change and partition table structure variance, do not attempt Web upgrade from legacy iStoreOS. A clean flashing is required:
- Download
*-squashfs-sdcard.img.gz(recommended for recovery reset) or*-ext4-sdcard.img.gzfrom the latest Release. - Uncompress the
.gzfile locally to retrieve the raw.imgfirmware file. - Insert your TF (SD) card into your computer.
- Use Rufus (Windows) or BalenaEtcher (Cross-platform) to burn the
.imgdirectly to the card. - Plug the card back into your NanoPi R1S-H5 and power it on.
Once you are already running this project's ImmortalWrt 23.05 system:
- Download the latest
*-sdcard.img.gzfile from the Release (Do not uncompress it). - Navigate to your router Web GUI under System β Backup/Flash Firmware.
- In the Flash new firmware image section, upload the
*-sdcard.img.gzfile directly. - Keep Keep settings checked if you want to retain your configurations, and click Flash image to execute a painless Web hot upgrade without unplugging the SD card!
If you wish to compile your own custom images using this repository:
- Click the Fork button in the upper right corner to create a copy under your account.
- Place custom configs under
/configs/24.10/(e.g.,nanopi-r1s-h5.config). - Modify
diy-part1.sh(executed before feeds update) anddiy-part2.sh(executed before packaging) to inject packages. - Once the workflow finishes successfully, your custom firmware will be available in Artifacts and Releases on your repository.
This project is licensed under the MIT License. See LICENSE for details.
- P3TERX - Original Action workflow baseline
- ImmortalWrt - Operating system base
- sbwml - OpenWrt wireless drivers repository
- Openwrt-Passwall - PassWall upstream source
- jerrykuku - Argon theme