Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
79f3aee
适配清风1031-25.9.27版本
llnut Sep 28, 2025
76dd27d
更新仓库说明
llnut Sep 29, 2025
405cccd
fix README.md
llnut Sep 29, 2025
9284066
docs: Improve the README.md instructions
llnut Sep 29, 2025
7be7345
支持动态添加清风所需的数据库用户
llnut Sep 30, 2025
0ca3f15
Sync the pvf update content of Qingfeng on Oct 7th
llnut Oct 9, 2025
5936d7a
Merge branch '1995chen:main' into main
llnut Oct 10, 2025
2033d88
chore: Update README.md
llnut Oct 10, 2025
1985f2c
Merge branch 'main' of github.com:llnut/dnf
llnut Oct 10, 2025
f158759
feat(readme): add CLIENT_POOL_SIZE configuration option to reduce ser…
llnut Oct 20, 2025
ef2cbe2
docs(README): Add the upgrade guide from the old version
llnut Oct 20, 2025
41be674
docs(README): Fix important notice description, remove redundant content
llnut Oct 20, 2025
6141f0b
fix(channel): Fix LD_PRELOAD path in start_channel.sh
llnut Oct 20, 2025
2ae2b36
docs(README): Revise README with updated instructions and links
llnut Oct 22, 2025
a19d98b
docs(README): Revise README for clarity and updates
llnut Nov 21, 2025
48f08a7
Sync Qingfeng’s PVF updates released on November 25
llnut Nov 26, 2025
26f362f
Merge remote-tracking branch 'upstream/main'
llnut Nov 30, 2025
f4413ec
Merge remote-tracking branch 'upstream/main'
llnut Dec 25, 2025
2bccead
Merge remote-tracking branch 'upstream/main'
llnut Jan 4, 2026
c6f1400
docs(README): restore the format of the QA section to upstream
llnut Jan 9, 2026
c310490
Merge remote-tracking branch 'upstream/main'
llnut Jan 9, 2026
e9f8272
Sync Qingfeng's client and server update from Jan 19, 2026
llnut Jan 21, 2026
f3dd2de
chore: add new chat group
1995chen Jan 19, 2026
0dea9b4
Merge branch '1995chen:main' into main
llnut Jan 27, 2026
2793de8
fix(sql): fix and track init_sql.tgz with git lfs
llnut Jan 30, 2026
6dcae62
Merge branch 'main' of github.com:llnut/dnf
llnut Jan 30, 2026
7458102
docs(README): Update README.md
llnut Feb 17, 2026
147a94a
Stop tracking init_sql.tgz with LFS
llnut Mar 3, 2026
700629e
Sync Qingfeng's client and server update from Feb 1, 2026
llnut Mar 3, 2026
6877f53
feat: replace DnfGateServer with dnf-gate-server (llnut/dnf-login)
llnut Mar 8, 2026
8ef195f
docs: update README
llnut Mar 8, 2026
a7f4772
feat: generate unique RSA key pair on first init and update README
llnut Mar 8, 2026
652aa34
docs: Revise README for clarity and additional information
llnut Mar 8, 2026
baaf85c
feat: update dnf-gate-server to 0.3.0 and add GAME_SERVER_IP env support
llnut Mar 26, 2026
1e35bac
Merge branch 'main' of github.com:llnut/dnf
llnut Mar 26, 2026
4a03459
chore(docs): update README
llnut Mar 26, 2026
aa3ca0d
docs: fix README
llnut Mar 26, 2026
81db968
feat: add Debian 13 image, remove deprecated files, update docs
llnut Mar 27, 2026
98c164d
docs: update README
llnut Mar 27, 2026
7cdd59e
chore: merge i386 libs and dnf-gate-server download into single RUN l…
llnut Mar 28, 2026
7a066c7
feat: add Almalinux 9 and Ubuntu 26 images, fix Debian 13 env and she…
llnut Mar 30, 2026
fbf5a1b
chore: remove CentOS 5/6 support, migrate dnf_util urls to llnut, upd…
llnut Mar 30, 2026
ea13cf6
fix: mysql data ownership for cross-image compatibility
llnut Mar 30, 2026
45384b8
chore: strip mysql binaries to reduce docker image size
llnut Mar 30, 2026
11b0fde
feat: add github ci, add MySQL readiness check before services start
llnut Mar 31, 2026
36f7d39
ci: add build cache, upgrade action version, suppress Dockerfile lint…
llnut Mar 31, 2026
5810710
fix: use mysqladmin ping instead of socket file MySQL readiness check…
llnut Mar 31, 2026
09aeae6
ci: add dev, dev-latest and release-latest tags to ci, update docs
llnut Mar 31, 2026
af59e9c
docs: move image tag docs from README to PrepareLinux.md
llnut Mar 31, 2026
7c03ec3
fix: service startup order
llnut Mar 31, 2026
745a4c8
fix: swap zergsvr/secagent startup order and wait for shared memory
llnut Mar 31, 2026
26197dd
docs: replace Docker Hub pulls badge with availability badge
llnut Mar 31, 2026
dbdd5ce
fix: correct shebang lines, replace nc with socat, and remove nc depe…
llnut Apr 1, 2026
ca61d7a
chore: strip mysql so debug symbols
llnut Apr 2, 2026
8cfd248
fix: fix shell syntax, extract shared shell functions
llnut Apr 3, 2026
5e312e1
feat: split images into base/db/server/full layers, fix DDNS support
llnut Apr 23, 2026
edaafa8
fix(ci): login Docker Hub before buildx setup to avoid rate-limited p…
llnut Apr 23, 2026
efa02ab
fix: mirror buildkit image to ghcr and scope ARG globally in Dockerfiles
llnut Apr 23, 2026
6864b21
fix: install binutils in all builder stages for strip command
llnut Apr 23, 2026
0472923
fix(monitor_ip): kill old daemons before bridge restart to prevent crash
llnut Apr 23, 2026
2b41f90
feat: upgrade DofSlim to 0.2.0 and fix standalone_mysql deploy
llnut Apr 24, 2026
07b4e54
update docs
llnut Apr 24, 2026
e7bc637
fix: standalone_mysql deploy, channel crash, and clean up Dockerfiles
llnut Apr 24, 2026
760c639
fix: wait for TSS antibot shm before exec df_game_r
llnut Apr 24, 2026
be4beaa
refactor(db): extract MySQL init scripts, fix D-Bus warning
llnut Apr 24, 2026
437a7af
chore: upgrade dnf-gate-server to 0.4.0
llnut Apr 30, 2026
8c26761
docs: add Docker 29 seccomp setup notes
llnut May 6, 2026
4a38af9
docs: update README
llnut May 6, 2026
98dc8f7
perf: reduce mysql memory usage and slim images
llnut May 8, 2026
d057a19
refactor(ci): merge image build stages into one bake job per os
llnut May 8, 2026
1931b98
feat: add jemalloc and auto tune performance profile for game server
llnut May 12, 2026
89e4a7c
feat: custom frida script
exuanbo May 12, 2026
a83f923
fix(alma9): use microdnf + epel-release to install jemalloc
llnut May 13, 2026
242c252
refactor: merge stale start_*.sh upgrade and use cpus instead of cpu_…
llnut May 13, 2026
ef216bd
Merge pull request #1 from exuanbo/custom-frida-script
llnut May 13, 2026
c698a6f
fix: tune profile log
llnut May 13, 2026
cf25656
fix(tune): cap thread_cache_size and max_connections per profile
llnut May 13, 2026
5126bb1
perf: reduce nano/micro jemalloc memory footprint
llnut May 14, 2026
4056efe
perf: increase jemalloc arenas for micro and higher profiles
llnut May 15, 2026
abb4988
feat: add startup barrier to control service start order
llnut May 17, 2026
a37cda8
fix(ci): install socat for shell test
llnut May 17, 2026
b16d4e0
fix(ci): buildkit and dev tag cleanup
llnut May 17, 2026
e67e21c
fix(ci): prune ghcr tags via the github packages api
llnut May 17, 2026
1367af6
fix(ci): exclude aliyun acr from the dev image pipeline
llnut May 18, 2026
8e6ae13
fix: bump dnf-compat-layer to 0.2.0 with secagent exit 135 fix
llnut May 19, 2026
bbecc22
feat: split jemalloc tuning into 32-bit and 64-bit profiles
llnut May 21, 2026
81acadf
docs: add MALLOC_CONF_32 and MALLOC_CONF_64 docs
llnut May 22, 2026
7436a56
perf(monitor_ip): cut startup sleep from 10s to 2s
llnut May 26, 2026
45bd7fb
feat(monitor_ip): merge ip probes into get_public_ip.sh with fallback…
llnut May 26, 2026
91faa1b
feat: replace supervisord with s6-overlay
llnut May 30, 2026
7629101
ci: pin shellcheck to 0.11.0 in the shell test job
llnut May 30, 2026
6ca2291
fix(centos7): stop removing xz
llnut May 30, 2026
ce04174
feat(scheduler): add db backup/restore, fix missing 201603 auction table
llnut May 31, 2026
f83ce1c
feat: add readiness probes for zergsvr and mysql proxies
llnut May 31, 2026
caff4e8
refactor: source service ports from env vars via config markers
llnut Jun 1, 2026
bcd2037
fix(s6): keep the container up when a service fails to start
llnut Jun 1, 2026
0b93587
refactor(dev-tag-cleanup): replace regctl with native registry APIs
llnut Jun 2, 2026
46092d9
fix(dev-tag-cleanup): wait before each delete verification check
llnut Jun 2, 2026
ed6f8da
fix: repair s6 startup and remove redundant 32-bit packages
llnut Jun 2, 2026
3a9ecc5
refactor: route s6 control logs to docker log
llnut Jun 3, 2026
03d6351
feat: improve s6 startup and database init
llnut Jun 4, 2026
3bdf23a
perf: build /home/neople with symlinks instead of copying the tree
llnut Jun 5, 2026
a2ab23e
feat: add graceful mysql shutdown and improve s6 startup
llnut Jun 7, 2026
5c20f1f
feat: add db-tool for backup and restore, fix MySQL 5.0 startup crash
llnut Jun 8, 2026
112fee1
fix(init-data): create df_game_r history directory
llnut Jun 8, 2026
5e62fc4
docs: add CentOS 7 to Debian 13 / Alma 9 / Ubuntu 26 db migration steps
llnut Jun 8, 2026
8dfd6e8
chore: reduce shm_size from 8g to 1g
llnut Jun 8, 2026
0d60250
perf: derive secagent channels from OPEN_CHANNEL, update k8s example
llnut Jun 8, 2026
b43cd05
perf(tune): reduce mysql 5.7 memory footprint
llnut Jun 9, 2026
bb33271
chore(init-db): slim init sql template
llnut Jun 10, 2026
0f414e8
perf: symlink libantisvrimport.so instead of copying
llnut Jun 10, 2026
b15eb04
fix(monitor_ip): avoid s6-rc lock error when restarting services
llnut Jun 11, 2026
b06b86b
fix(monitor_ip): match ipv4 with grep to avoid mawk regex hang
llnut Jun 16, 2026
a88024e
fix(s6): log service start/stop instead of guessing no restart
llnut Jun 17, 2026
81c0f37
feat: add readiness probe for game channels
llnut Jun 18, 2026
d231da7
feat: add GATE_REGISTRATION_OPEN toggle for dnf-gate-server
llnut Jun 18, 2026
31d7f39
docs: update README
llnut Jun 18, 2026
3ea785e
docs(README): simplify service startup readiness check
llnut Jun 18, 2026
5a2796f
feat: back up and rebuild broken symlinks in /data
llnut Jun 19, 2026
b5c7a4f
fix(test): ignore shellcheck SC2329 false positive in common test
llnut Jun 19, 2026
485b8b0
feat(tune): auto-tune readiness probe timeout by profile
llnut Jun 24, 2026
d72a2cc
fix(db): reset db_userid to game on startup
llnut Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
124 changes: 0 additions & 124 deletions .circleci/config.yml

This file was deleted.

12 changes: 12 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.git
.github
.gitignore
.gitattributes
.dockerignore
*.md
LICENSE
deploy
doc
other
plugin
**/*.test.sh
File renamed without changes.
66 changes: 66 additions & 0 deletions .github/actions/registry-login/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Registry login
description: Log in to the configured container registries. Skip any registry whose credentials are not provided.

inputs:
dockerhub-username:
description: Docker Hub username
required: false
dockerhub-token:
description: Docker Hub access token
required: false
ghcr-token:
description: GitHub Container Registry token, typically GITHUB_TOKEN
required: false
ghcr-actor:
description: GitHub actor used as ghcr.io username
required: false
default: ${{ github.actor }}
quay-username:
description: quay.io username
required: false
quay-token:
description: quay.io token
required: false
acr-registry:
description: ACR registry hostname; skip ACR login when empty
required: false
acr-username:
description: ACR username
required: false
acr-password:
description: ACR password
required: false

runs:
using: composite
steps:
- name: Login to Docker Hub
if: inputs.dockerhub-username != '' && inputs.dockerhub-token != ''
uses: docker/login-action@v4.1.0
with:
username: ${{ inputs.dockerhub-username }}
password: ${{ inputs.dockerhub-token }}

- name: Login to ghcr.io
if: inputs.ghcr-token != ''
uses: docker/login-action@v4.1.0
with:
registry: ghcr.io
username: ${{ inputs.ghcr-actor }}
password: ${{ inputs.ghcr-token }}

- name: Login to quay.io
if: inputs.quay-username != '' && inputs.quay-token != ''
uses: docker/login-action@v4.1.0
with:
registry: quay.io
username: ${{ inputs.quay-username }}
password: ${{ inputs.quay-token }}

- name: Login to ACR
if: inputs.acr-registry != ''
uses: docker/login-action@v4.1.0
with:
registry: ${{ inputs.acr-registry }}
username: ${{ inputs.acr-username }}
password: ${{ inputs.acr-password }}
143 changes: 143 additions & 0 deletions .github/bake/docker-bake.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# Bake configuration for the multi-OS image set: base, db, server, full.
# CI env vars populate the variables. Defaults allow local invocation.

variable "OS" {
default = "debian13"
}

variable "BASE_TAG" {
default = ""
}

variable "DB_TAG" {
default = ""
}

variable "BASE_TAGS_CSV" {
default = ""
}

variable "DB_TAGS_CSV" {
default = ""
}

variable "SERVER_TAGS_CSV" {
default = ""
}

variable "FULL_TAGS_CSV" {
default = ""
}

variable "CACHE_REPO" {
default = "ghcr.io/llnut/dnf-cache"
}

variable "CACHE_SLUG" {
default = "main"
}

variable "CACHE_FALLBACK_SLUG" {
default = "main"
}

function "tag_list" {
params = [csv]
result = compact(split(",", csv))
}

# Targets must be invoked explicitly: db / server depend on a published base image,
# and full depends on a published db image, so a "build all" group would fail.

target "base" {
context = "."
dockerfile = "build/${OS}/Dockerfile.base"
tags = tag_list(BASE_TAGS_CSV)
cache-from = [
"type=registry,ref=${CACHE_REPO}:${OS}-base-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-base-${CACHE_FALLBACK_SLUG}",
"type=gha,scope=${OS}-base",
]
cache-to = [
"type=registry,ref=${CACHE_REPO}:${OS}-base-${CACHE_SLUG},mode=max,ignore-error=true",
"type=gha,mode=max,scope=${OS}-base,ignore-error=true",
]
}

target "db" {
context = "."
dockerfile = "build/${OS}/Dockerfile.db"
tags = tag_list(DB_TAGS_CSV)
args = {
BASE_TAG = BASE_TAG
}
cache-from = [
"type=registry,ref=${CACHE_REPO}:${OS}-db-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-db-${CACHE_FALLBACK_SLUG}",
"type=gha,scope=${OS}-db",
]
cache-to = [
"type=registry,ref=${CACHE_REPO}:${OS}-db-${CACHE_SLUG},mode=max,ignore-error=true",
"type=gha,mode=max,scope=${OS}-db,ignore-error=true",
]
}

# On debian13, ubuntu26, and alma9, server and full share the dnf-compat-layer
# rust builder stage. They reuse each other's cached builder layers across runs.
# centos7 has neither builder stage; its Dockerfiles are single-FROM. The cross-
# reference would never match, so the conditional removes it to avoid noise.
target "server" {
context = "."
dockerfile = "build/${OS}/Dockerfile.server"
tags = tag_list(SERVER_TAGS_CSV)
args = {
BASE_TAG = BASE_TAG
}
cache-from = concat(
[
"type=registry,ref=${CACHE_REPO}:${OS}-server-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-server-${CACHE_FALLBACK_SLUG}",
"type=gha,scope=${OS}-server",
],
OS == "centos7" ? [] : [
"type=registry,ref=${CACHE_REPO}:${OS}-full-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-full-${CACHE_FALLBACK_SLUG}",
]
)
cache-to = [
"type=registry,ref=${CACHE_REPO}:${OS}-server-${CACHE_SLUG},mode=max,ignore-error=true",
"type=gha,mode=max,scope=${OS}-server,ignore-error=true",
]
}

target "full" {
context = "."
dockerfile = "build/${OS}/Dockerfile.full"
tags = tag_list(FULL_TAGS_CSV)
args = {
DB_TAG = DB_TAG
}
cache-from = concat(
[
"type=registry,ref=${CACHE_REPO}:${OS}-full-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-full-${CACHE_FALLBACK_SLUG}",
"type=gha,scope=${OS}-full",
],
OS == "centos7" ? [] : [
"type=registry,ref=${CACHE_REPO}:${OS}-server-${CACHE_SLUG}",
"type=registry,ref=${CACHE_REPO}:${OS}-server-${CACHE_FALLBACK_SLUG}",
]
)
cache-to = [
"type=registry,ref=${CACHE_REPO}:${OS}-full-${CACHE_SLUG},mode=max,ignore-error=true",
"type=gha,mode=max,scope=${OS}-full,ignore-error=true",
]
}

# Build db and server concurrently inside one buildkit invocation.
# Both targets share the same FROM base image, so buildkit pulls and holds its
# layers only once. The resource profiles do not overlap: db is IO and network
# bound for the mysql binary download; server is CPU bound for the rust compile.
group "middle" {
targets = ["db", "server"]
}
13 changes: 13 additions & 0 deletions .github/scripts/cache-slug.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env bash

# Sanitize a single git ref name into an OCI-tag-safe cache slug.
sanitize_slug() {
local raw="$1"
local sanitized slug
sanitized=$(printf '%s' "$raw" |
sed -e 's/[^a-zA-Z0-9._-]/-/g' \
-e 's/^[^a-zA-Z0-9_][^a-zA-Z0-9_]*//')
slug="${sanitized:0:50}"
[ -n "$slug" ] || slug="main"
printf '%s' "$slug"
}
Loading