Your next MirrorS is not MirrorS, nor MirrorSes, it's MirrorZ.
A final site for Mirror sites.
https://mirrorz.org and https://mirrors.cernet.edu.cn/list
Also legacy webpages (for w3m and noscript users) are provided in https://mirrorz.org/_/ and https://mirrors.cernet.edu.cn/_/
A speed test script oh-my-mirrorz.py is also provided. See README for more info.
Mirror sites are heterogeneous. It is hard for a single mirror to provide all mirrors, so differences occur.
For end users, this is not a good experience as they need to search for available mirrors.
To make things easy, MirrorZ is intended to include all mirrorS, so a unified interface is needed.
A mirrorz.json in the following format describes all the data of one mirror site in MirrorZ.
{
"version": 1.7,
"site": {
"url": "https://example.org",
"logo": "https://example.org/img/logo.svg",
"logo_darkmode": "https://example.org/img/logo-white.svg",
"abbr": "EXAMPLE",
"name": "样例镜像站",
"homepage": "https://blog.example.org",
"issue": "https://github.com/example/issues",
"request": "https://github.com/example/mirror-request",
"email": "admin@example.com",
"group": "QQ: 10086 and/or Telegram @something",
"disk": "may be any string showing usage of disk, e.g. usage",
"note": "may be any string; like speed limit or connection limit",
"big": "/speedtest/1000mb.bin",
"disable": false
},
"info": [
{
"distro": "Debian",
"category": "os",
"urls": [
{
"name": "10.7.0 (amd64, CD installer with xfce)",
"url": "/debian-cd/current/amd64/iso-cd/debian-10.7.0-amd64-xfce-CD-1.iso"
}
]
}
],
"mirrors": [
{
"cname": "AOSP",
"desc": "Android 操作系统源代码",
"url": "/AOSP",
"status": "S",
"help": "/help/AOSP/",
"upstream": "https://android.googlesource.com/mirror/manifest",
"size": "596G",
"disable": false
},
{
"cname": "AUR",
"desc": "Arch Linux 用户软件库",
"url": "https://aur.tuna.tsinghua.edu.cn",
"status": "S1612195849X1612196849N",
"help": "/help/AUR/",
"upstream": "https://aur.archlinux.org/"
}
]
}versionis optional for version 1.x- previous versions of this protocol could be found in git history; protocols in v1.x are back-ward compatible
siteprovides the global info about one mirror site- only
site.urlandsite.abbrare mandatory site.logoshould not be of formatico. Also, at least 64x64 resolution is requiredsite.logo_darkmodeis used when browser uses dark mode. Note that it should be set only aftersite.logois setsite.urlshould not end with slash/site.bigshould be a valid url to a big file, used byoh-my-mirrorz.pyfor speed testingsite.disableis a boolean value, indicating whether the site is available for service. Its default value is false. If true, this site will be marked as disabled in mirrorz webpage, and mirrorz-302 will not redirect to the site
- only
infois used for category view- all field of
infois mandatory infomay be left empty as[]- the name of
info.distroshould be agreed and have a mapping, maintained incname.json
- all field of
mirrorsis used for list view- the name of
mirrors.cnameshould be agreed and have a mapping, maintained incname.json mirrors.descmay differ for each mirror site since there areexcludesfor some mirror sitemirrors.descmay be empty- if
mirrors.urlbegins with a slash/, it should be appended tosite.urlto form a full url mirrors.urlshould not end with slash/mirrors.statusis a concat of strings of pattern[A-Z](\d+)?. Only one main status is allowed; the number of auxiliary status is not limited.S1600000000: successful. (optional) last successful ended unix timestampD1600000000: pending. (optional) pending to sync unix timestampY1600000000: syncing. (optional) start to sync unix timestampF1600000000: failed. (optional) last attempt to sync unix timestampP1600000000: paused. (optional) the unix timestamp sync stoppedC: reverse proxy with cacheR: reverse proxy without cacheU: unknownX1600000000: (auxiliary) next scheduled sync unix timestampN1600000000: (auxiliary) new mirror. (optional) unix timestamp the repo addedO1600000000: (auxiliary) old successful timestamp, used only when it is syncing or failed
mirrors.helpmay be empty, or the same rule asmirrors.urlmirrors.upstream,mirrors.size,mirrors.disablemay be empty
- the name of
This repo depends on other repos in this organization to provide full functionality; However, they are not submodules as we need to bump submodules whenever there is an update, which is painful. We just use the latest version of each repo when building.
For full preparation of all the repos, you should refer to the Prepare steps in Github Actions.
Note that yarn mirrorz_env prepares for https://mirrorz.org. When you are debugging, it is recommended to use yarn dev_env and yarn debug_build, which builds the site for http://localhost:1234. Other env like cngi_env and cernet_env prepares for other sites that mirrorz maintain.
One may use
yarn --frozen-lockfile
yarn start
to start a local server. It is often convenient for debugging frontend features like html/css since auto-reload is provided by parcel.
To debug one src/parser with new site json in static/json/site, use
yarn --frozen-lockfile
yarn half_start
to start a local server. Python3 is required in this case. Note there is no auto-reload feature.
To use static files, 404 redirection (emulate Github pages) and legacy pages, one may use
yarn --frozen-lockfile
yarn full_start
to start a local server. Python3 is required in this case. Note there is no auto-reload feature.
For dynamic web page part, only
yarn build
is required.
However if one also wants to deploy the static web page, one may use
yarn build
yarn legacy_build
Note that legacy_build has dependencies on files yarn build has made.
Meanwhile, to generate the complete oh-my-mirrorz.py, one should use the following command
yarn ohmymirrorz_build
If one want all parts, one can use the following command to accomplish all the steps above
yarn full_build
Currently *.json is ignored in .gitignore (not ignored in /static). If one wants to commit a json file, they should use git add -f.
Other contributing guidelines are maintained in https://github.com/mirrorz-org/org/