尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
The source for bigredh.com and its Hotline tracker at
tracker.bigredh.com. GitHub does the work and keeps the data;
DreamHost only serves the pages.
Both sites work in any browser, including classic Mac OS browsers over plain HTTP: HTML 4
tables, colors set in the HTML, and no JavaScript.檢視完整 README ↗The source for bigredh.com and its Hotline tracker at tracker.bigredh.com. GitHub does the work and keeps the data; DreamHost only serves the pages.
Both sites work in any browser, including classic Mac OS browsers over plain HTTP: HTML 4 tables, colors set in the HTML, and no JavaScript.
| When | Workflow | What it does |
|---|---|---|
| Every hour | servers.yml | Asks the trackers in config/trackers.txt for their lists, merges them, checks each server answers, saves the list to GitHub and uploads it. |
| The 1st of each month | files.yml | Logs into each server that's due as a guest (as TrackerCheck), records its files and folders, saves them to GitHub and uploads a new search index. Due means never indexed, an unfinished pass, or last indexed over 45 days ago: about every 60 days per server. |
| Every 6 hours | population.yml | Logs into each listed server the trackers say has users on it (empty servers are left alone), reads who's online, and uploads the Population page's list. Never saved to git (see below). |
Every push to main | deploy.yml | Uploads both sites. |
GitHub's schedules are best effort and often run late or not at all, so a cron job on DreamHost
starts each workflow on time (~/bin/run-workflow.sh, with its token in
~/editor-config/dispatch.env; crontab -l shows the times). The token is a fine-grained one
for the Big-Red-H repos with only Actions: Read and write. GitHub's own schedules stay as a
backup. Population's backup stands down when a run already happened in the last 4 hours, since
GitHub's runs come hours late and each run is another login on every server it visits.
Any of them can be started by hand from the Actions tab (Run workflow). The monthly one
can be given a few host:port addresses to index (or re-index) just those servers, or told to
re-index everything.
Everything is JSON, saved to this repo by the workflows:
data/servers.json: every server seen in the last 30 days (name, description, which trackers
list it, first and last day seen). Saved whenever it changes.data/live.json: the latest hour's check (user counts, which servers answered, which trackers
answered). Saved once a day, at midnight UTC.data/files/<host>_<port>/: one server's files, one entry per line.
A folder is ["/Path/Folder/", items], a file is ["/Path/File", bytes, "TYPE", "CREA"].
info.json says when it was indexed and how it went.data/population.json (who was online, and the names seen in the last 30 days) is the one thing
that is not saved here: it's uploaded to the site only, and each run starts from the site's
copy, so there's no permanent public record of who was online when. Names in
config/population-hidden.txt are left off.
The site's search runs on an SQLite file built from data/files/ on every upload. It's never
saved to git; it can always be rebuilt.
Indexing is deliberately gentle: at most one folder request a second, slower still if a server
is slow to answer, a long wait before reconnecting after an error, and the servers on one machine
one after another, never at once. A big server can take longer than one run allows (higher
intellect has about 37,000 folders); the run then saves where it stopped in next/ and the next
run carries on, while the previous listing stays up until the new one is complete.
A server's listing is kept even after it drops off the trackers. When a server comes back at a new address under exactly the
same name (and nothing else is listed under that name), the hourly check moves its listing to
the new address instead of indexing it again; the old address is kept in previous_addresses. A new server that can't be
reached is tried again the next month.
| To | Edit |
|---|---|
| Add or remove a tracker | config/trackers.txt |
| Hide a server from the list | config/hidden.txt |
| List a server that isn't on any tracker | config/extra-servers.txt |
| Leave a name off the Population page | config/population-hidden.txt |
| Leave a server off the Population page (its "users" aren't people) | config/population-skip.txt; its files are still indexed |
| Handle a removal request | Issues labeled removal come from the form linked on the tracker's pages. Add the server to config/hidden.txt (off the list) and/or config/noindex.txt (out of the file index and Population), or the name to config/population-hidden.txt, then close the issue. |
| Index a server once and leave it alone (an archive that never changes) | config/archives.txt. Servers whose index comes out exactly the same twice are added automatically, with a note. To re-index one anyway, start Monthly file index by hand with its address, or remove its line. |
| Handle an indexing request | Issues labeled indexing come from the form linked at the top of the server list. "Never index" goes in config/noindex.txt; "archive" in config/archives.txt; "index again" means starting Monthly file index by hand with its address. |
| Keep a server out of the file index, permanently | config/noindex.txt: it drops out of search on the next upload and out of data/files/ on the next monthly save. (A server owner can also make a folder named noindex before it's first indexed.) |
| Change the landing page | site/www/index.html |
| Change the tracker pages | site/tracker/ |
The workflows need these on the repo or the Big-Red-H organization (Settings > Secrets and variables > Actions):
| Name | Kind | Example |
|---|---|---|
DEPLOY_SSH_KEY | secret | the private key whose public half is in the DreamHost user's ~/.ssh/authorized_keys |
DEPLOY_HOST | secret | iad1-shared-b7-01.dreamhost.com |
DEPLOY_USER | secret | the DreamHost SSH user |
DEPLOY_PATH_WWW | variable | /home/USER/bigredh.com |
DEPLOY_PATH_TRACKER | variable | /home/USER/tracker.bigredh.com |
Until they're set, the workflows still run and save to GitHub; they just skip the upload.
In the DreamHost panel, host both bigredh.com and tracker.bigredh.com with PHP 8, and leave
HTTPS redirect off so old browsers can still connect. A deploy only deletes files in a
folder it set up itself (it leaves a .bigredh-deploy file there); in a folder that already had
something in it, it uploads without deleting and says so.
Python 3 and PHP, nothing to install:
python3 tracker/update_servers.py
python3 tracker/index_files.py 24.6.82.54:5500
python3 tracker/build_search.py build/tracker/db/files.sqlite
To preview the tracker, copy site/tracker/ to build/tracker/, put data/servers.json and
data/live.json in build/tracker/data/, then:
php -S 127.0.0.1:8000 -t build/tracker