Skip to content
Installation

Installer options

Installer variables, the choice of the core and installing when GitHub is blocked.

Options are passed as environment variables after |, before ash or sh:

wget -O - https://raw.githubusercontent.com/prettyleaf/openwrt-exodus/main/install.sh | VERSION=v1.26.1 CORE=alpha ash
VariablePlatformsMeaning
COREallmeta, alpha or prizrak — install this core without asking
GH_PROXYalladdress of gh-proxy with the token, e.g. https://example.com/ghproxy/TOKEN; GH_PROXY= goes back to direct downloads
LOW_SPACE=1allremove the current core before installing the new one when there is little free space
VERSIONOpenWrta release instead of the latest one, e.g. v1.26.1
PASSWORDKeenetic, Asuspassword of the web UI on the first install, otherwise it is asked or generated
REFKeenetic, Asusa branch or a tag instead of keenetic / asuswrt

The chosen core and gh-proxy are saved (/etc/config/nikki on OpenWrt, /opt/etc/exodus/config.json on Keenetic and Asus): the next runs of the installer and the update page use them.

In a terminal the installer asks for the core, Enter keeps the current one. CORE= chooses it without asking.

CoreCOREWhat is installed
Mihomo Metametathe latest stable release of MetaCubeX/mihomo, the default
Mihomo Alphaalphathe latest development build, Prerelease-Alpha
Prizrak-Coreprizrakthe latest release of legiz-ru/Prizrak-Core, a fork of mihomo

The core is downloaded from its GitHub releases for the architecture of the router, the next runs of the installer and the update page update it to the latest build. On OpenWrt Mihomo Meta is installed as the mihomo-meta package verified by sha256, Alpha and Prizrak-Core replace its binary while the package stays installed as a dependency. Choosing Mihomo Meta again brings back the stable core of that package version.

The installer first checks access to GitHub. When GitHub is unreachable, it checks jsDelivr: if jsDelivr is reachable, GitHub is blocked by the provider; if not, the router probably has no internet or DNS. jsDelivr serves files of the repository, but not release files, so the packages and the core come only from GitHub.

The solution is gh-proxy on a server that can reach GitHub. Its address with the token looks like https://example.com/ghproxy/TOKEN. In a terminal the installer asks for the address itself. It can also be given in advance, downloading the installer through the same gh-proxy or from jsDelivr:

# through gh-proxy
wget -O - https://example.com/ghproxy/TOKEN/https://raw.githubusercontent.com/prettyleaf/openwrt-exodus/main/install.sh | GH_PROXY=https://example.com/ghproxy/TOKEN ash
# the installer from jsDelivr, it may lag behind the repository by a few hours
wget -O - https://cdn.jsdelivr.net/gh/prettyleaf/openwrt-exodus@main/install.sh | GH_PROXY=https://example.com/ghproxy/TOKEN ash
  • The address is saved, the next runs and the update page download through it. When the saved gh-proxy does not work, the installer tries to download directly.
  • If GHP_ALLOW_LIST of the gh-proxy is set, allow prettyleaf/openwrt-exodus in it, and also MetaCubeX/mihomo and legiz-ru/Prizrak-Core for the Alpha and Prizrak-Core cores. gh-proxy answers 404 to a wrong token and to a repository outside the list.
  • On OpenWrt the packages can also be installed without gh-proxy, from the release archive: installing without access to GitHub.