This commit is contained in:
spiritLHLS
2026-06-08 16:33:48 +00:00
parent 32725005d1
commit 7b3af41624
582 changed files with 2016 additions and 1694 deletions

View File

@@ -0,0 +1,20 @@
---
name: developer-docs
description: Use when helping contributors work with this VitePress documentation site, especially bilingual documentation, localization notes, navigation, and content structure.
license: ISC
metadata:
project: oneclickvirt.github.io
---
# Developer Docs
This repository is a VitePress documentation site with Chinese content under `docs/` and English content under `docs/en/`.
Use the developer pages when the user asks about contributing documentation, localization, or site structure:
- Chinese developer entry: `/developer/`
- English developer entry: `/en/developer/`
- Localization guide: `/developer/l10n.html`
- English localization guide: `/en/developer/l10n.html`
When proposing documentation changes, keep Chinese and English pages paired, keep navigation and sidebar entries synchronized, and check local Markdown links and images before building.

View File

@@ -1,64 +1,26 @@
{
"$schema": "https://schema.agentskills.io/v0.2.0/agent-skills-index.json",
"name": "OneClick Virtualization Project",
"description": "Agent skills for discovering virtualization guides, documentation, and developer resources",
"version": "1.0.0",
"$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
"skills": [
{
"name": "virtualization-guides",
"type": "documentation",
"description": "Browse virtualization platform guides including OneClickVirt, Proxmox VE, Incus, Docker, LXD, Containerd, Podman, QEMU, and KubeVirt",
"url": "https://www.spiritlhl.net/guide/",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
"type": "skill-md",
"description": "Use when an agent needs to help with OneClickVirt, Proxmox VE, Incus, Docker, LXD, Containerd, Podman, QEMU, KubeVirt, or abuse-blocking documentation.",
"url": "https://www.spiritlhl.net/.well-known/agent-skills/virtualization-guides/SKILL.md",
"digest": "sha256:295a92bf567eabac74cdba7226507db6b5833aa72168d30298fcd25673207c35"
},
{
"name": "practical-cases",
"type": "documentation",
"description": "Practical use cases and tutorials including server testing, automation, and system optimization",
"url": "https://www.spiritlhl.net/case/",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
"type": "skill-md",
"description": "Use when an agent needs to find practical Linux server utilities, benchmark scripts, repair scripts, swap/zram guides, or related case-study documentation.",
"url": "https://www.spiritlhl.net/.well-known/agent-skills/practical-cases/SKILL.md",
"digest": "sha256:f1902b31562af296ff46e366aa6d6b32ef2e9817e0a1a2849ca75b7d14bd38ae"
},
{
"name": "developer-docs",
"type": "documentation",
"description": "Developer documentation including localization (l10n) guides and project structure",
"url": "https://www.spiritlhl.net/developer/",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "api-catalog",
"type": "catalog",
"description": "RFC 9727 API catalog with service descriptions and documentation links",
"url": "https://www.spiritlhl.net/.well-known/api-catalog",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "github-repository",
"type": "repository",
"description": "GitHub repository containing source code and issue tracking",
"url": "https://github.com/oneclickvirt/oneclickvirt.github.io",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "sitemap",
"type": "sitemap",
"description": "XML sitemap for crawling all available pages",
"url": "https://www.spiritlhl.net/sitemap.xml",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "robots-rules",
"type": "rules",
"description": "Robots.txt with AI crawler rules, content signals, and crawl policies (RFC 9309)",
"url": "https://www.spiritlhl.net/robots.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "mcp-server-card",
"type": "server-metadata",
"description": "MCP Server Card for tool discovery and integration",
"url": "https://www.spiritlhl.net/.well-known/mcp/server-card.json",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
"type": "skill-md",
"description": "Use when an agent needs to work with this documentation site's developer notes, localization guidance, bilingual structure, or contribution workflow.",
"url": "https://www.spiritlhl.net/.well-known/agent-skills/developer-docs/SKILL.md",
"digest": "sha256:2ccbf505787eddc0f9fa73025fe5dc3c39a8ee50cbb664ba43d669546ba7a217"
}
]
}

View File

@@ -0,0 +1,21 @@
---
name: practical-cases
description: Use when helping with practical Linux server utilities documented by OneClickVirt, including benchmark, repair, network test, swap, zram, and resource occupation scripts.
license: ISC
metadata:
project: oneclickvirt.github.io
---
# Practical Cases
This skill points agents to practical Linux server utilities under `https://www.spiritlhl.net/case/` and `https://www.spiritlhl.net/en/case/`.
Use these pages when the user asks about:
- VPS benchmark and server evaluation scripts
- One-click Linux repair and environment installation scripts
- Network benchmark and return-route tracing scripts
- Server resource occupation scripts
- Adding swap space or enabling zram
Prefer the numbered case pages because their order is stable. When summarizing commands from a case page, preserve warnings about production use, destructive actions, and environment assumptions.

View File

@@ -0,0 +1,26 @@
---
name: virtualization-guides
description: Use when helping with OneClickVirt virtualization platform documentation, including prechecks, installation, usage, customization, FAQs, and abuse-blocking guides.
license: ISC
metadata:
project: oneclickvirt.github.io
---
# Virtualization Guides
This site documents OneClickVirt and related virtualization platforms. Prefer the Chinese pages at `https://www.spiritlhl.net/guide/` when the user writes in Chinese, and the English pages at `https://www.spiritlhl.net/en/guide/` when the user writes in English.
Start from the platform precheck page before giving install steps. The main platform entry points are:
- OneClickVirt: `/guide/oneclickvirt/oneclickvirt_precheck.html`
- Proxmox VE: `/guide/pve/pve_precheck.html`
- Incus: `/guide/incus/incus_precheck.html`
- Docker: `/guide/docker/docker_precheck.html`
- LXD: `/guide/lxd/lxd_precheck.html`
- Containerd: `/guide/containerd/containerd_precheck.html`
- Podman: `/guide/podman/podman_precheck.html`
- QEMU: `/guide/qemu/qemu_precheck.html`
- KubeVirt: `/guide/kubevirt/kubevirt_precheck.html`
- Abuse blocking: `/guide/block/block_iptables.html`
When answering deployment questions, keep prerequisites, supported systems, resource requirements, network assumptions, install commands, uninstall commands, and FAQ caveats together. Do not mix instructions from different virtualization platforms unless the user explicitly asks for a comparison.

View File

@@ -11,10 +11,28 @@
},
{
"rel": "service-desc",
"href": "https://www.spiritlhl.net/docs/developer/",
"href": "https://www.spiritlhl.net/developer/",
"type": "text/html",
"title": "Developer Guide"
},
{
"rel": "agent-skills",
"href": "https://www.spiritlhl.net/.well-known/agent-skills/index.json",
"type": "application/json",
"title": "Agent Skills Index"
},
{
"rel": "service-desc",
"href": "https://www.spiritlhl.net/.well-known/mcp/server-card.json",
"type": "application/json",
"title": "MCP Server Card"
},
{
"rel": "keyset",
"href": "https://www.spiritlhl.net/.well-known/http-message-signatures-directory",
"type": "application/json",
"title": "HTTP Message Signatures Directory"
},
{
"rel": "status",
"href": "https://www.spiritlhl.net/",

View File

@@ -2,7 +2,7 @@
"serverInfo": {
"name": "OneClick Virtualization Documentation",
"version": "1.0.0",
"description": "MCP server providing access to comprehensive virtualization guides, documentation, and developer resources for cloud infrastructure automation",
"description": "Static discovery card for OneClickVirt virtualization guides, documentation, and developer resources",
"homepage": "https://www.spiritlhl.net/",
"logo": "https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png"
},
@@ -35,53 +35,12 @@
"type": "service-catalog",
"uri": "https://www.spiritlhl.net/.well-known/api-catalog",
"description": "RFC 9727 API catalog with comprehensive link relations"
}
],
"tools": [
{
"name": "search-guides",
"description": "Search through virtualization platform guides",
"inputSchema": {
"type": "object",
"properties": {
"platform": {
"type": "string",
"description": "Virtualization platform (OneClickVirt, Proxmox VE, Incus, Docker, LXD, Containerd, Podman, QEMU, KubeVirt)"
},
"topic": {
"type": "string",
"description": "Topic to search (precheck, install, config, qa, thanks)"
}
}
}
},
{
"name": "get-documentation",
"description": "Retrieve documentation page content",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to documentation page (e.g., /guide/oneclickvirt/)"
}
},
"required": ["path"]
}
},
{
"name": "list-platforms",
"description": "List all supported virtualization platforms with their documentation status",
"inputSchema": {
"type": "object",
"properties": {
"filter": {
"type": "string",
"enum": ["all", "complete", "incomplete"],
"description": "Filter by documentation completeness"
}
}
}
"name": "agent-skills-index",
"type": "agent-skill-discovery",
"uri": "https://www.spiritlhl.net/.well-known/agent-skills/index.json",
"description": "Agent Skills discovery index for documentation-oriented agent behavior"
}
]
},
@@ -90,6 +49,8 @@
"license": "ISC",
"repository": "https://github.com/oneclickvirt/oneclickvirt.github.io",
"documentation": "https://www.spiritlhl.net/developer/",
"supportedLanguages": ["zh-CN", "en-US"]
"supportedLanguages": ["zh-CN", "en-US"],
"serviceType": "static-documentation-discovery",
"note": "This static documentation site exposes public resources and discovery metadata, but no executable MCP tools."
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,29 +1,43 @@
# Homepage and root responses with agent discovery headers
/
link: </.well-known/api-catalog>; rel="api-catalog"
link: </.well-known/agent-skills/index.json>; rel="service-doc"
link: </.well-known/mcp/server-card.json>; rel="service-doc"
link: </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json"
link: </.well-known/agent-skills/index.json>; rel="agent-skills"; type="application/json"
link: </.well-known/mcp/server-card.json>; rel="service-doc"; type="application/json"
content-type: text/html; charset=utf-8
# API Catalog endpoint
/.well-known/api-catalog
content-type: application/linkset+json
cache-control: public, max-age=86400
access-control-allow-origin: *
# Agent Skills index
/.well-known/agent-skills/index.json
content-type: application/json
cache-control: public, max-age=86400
access-control-allow-origin: *
/.well-known/agent-skills/*/SKILL.md
content-type: text/markdown; charset=utf-8
cache-control: public, max-age=86400
access-control-allow-origin: *
# MCP Server Card
/.well-known/mcp/server-card.json
content-type: application/json
cache-control: public, max-age=86400
access-control-allow-origin: *
# Web Bot Auth JWKS
/.well-known/http-message-signatures-directory
content-type: application/json
cache-control: public, max-age=86400
access-control-allow-origin: *
# Robots rules for search engines and agents
/robots.txt
content-type: text/plain; charset=utf-8
cache-control: public, max-age=86400
# Static assets caching
/assets/*
@@ -33,4 +47,4 @@
# Support Markdown for Agents (RFC)
/*
content-type: text/html; charset=utf-8
vary: Accept
vary: Accept

View File

@@ -1 +1 @@
import{R as p}from"./chunks/theme.BcDiyge9.js";import{R as s,a3 as i,a4 as u,a5 as c,a6 as l,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,d as v,u as R,v as w,s as y,ad as C,ae as P,af as b,a2 as E}from"./chunks/framework.QPV3Ar9-.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
import{R as p}from"./chunks/theme.CMMkdVKM.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as R,v as w,s as y,ac as C,ad as P,ae as b,af as E}from"./chunks/framework.CSeR4K32.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as i,c as a,o as n,ag as t}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"ECS","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case1.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"ECS"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case1.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"ECS"}]]},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1780885577000}'),e={name:"case/case1.md"};function h(l,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[t("",74)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default};
import{_ as i,c as a,o as n,ag as t}from"./chunks/framework.CSeR4K32.js";const g=JSON.parse('{"title":"ECS","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case1.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"ECS"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case1.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"ECS"}]]},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1780936388000}'),e={name:"case/case1.md"};function h(l,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[t("",74)]))}const o=i(e,[["render",h]]);export{g as __pageData,o as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case2.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case2.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1780885577000}'),l={name:"case/case2.md"};function t(p,s,h,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e("",109)]))}const F=i(l,[["render",t]]);export{c as __pageData,F as default};
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case2.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case2.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1780936388000}'),l={name:"case/case2.md"};function t(p,s,h,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e("",109)]))}const F=i(l,[["render",t]]);export{c as __pageData,F as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s,c as t,o as a,ag as p}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case3.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case3.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1780885577000}'),n={name:"case/case3.md"};function i(r,e,l,c,d,h){return a(),t("div",null,e[0]||(e[0]=[p("",44)]))}const u=s(n,[["render",i]]);export{b as __pageData,u as default};
import{_ as s,c as t,o as a,ag as p}from"./chunks/framework.CSeR4K32.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case3.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case3.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1780936388000}'),n={name:"case/case3.md"};function i(r,e,l,c,d,h){return a(),t("div",null,e[0]||(e[0]=[p("",44)]))}const u=s(n,[["render",i]]);export{b as __pageData,u as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as e,c as t,o as r,ag as c}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1780885577000}'),i={name:"case/case4.md"};function n(l,a,s,h,o,p){return r(),t("div",null,a[0]||(a[0]=[c("",16)]))}const d=e(i,[["render",n]]);export{k as __pageData,d as default};
import{_ as e,c as t,o as r,ag as c}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1780936388000}'),i={name:"case/case4.md"};function n(l,a,s,h,o,p){return r(),t("div",null,a[0]||(a[0]=[c("",16)]))}const d=e(i,[["render",n]]);export{k as __pageData,d as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as a,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1780885577000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,h){return s(),t("div",null,e[0]||(e[0]=[i("",26)]))}const u=a(r,[["render",l]]);export{m as __pageData,u as default};
import{_ as a,c as t,o as s,ag as i}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1780936388000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,h){return s(),t("div",null,e[0]||(e[0]=[i("",26)]))}const u=a(r,[["render",l]]);export{m as __pageData,u as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1780885577000}'),p={name:"case/case6.md"};function n(h,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[t("",18)]))}const m=a(p,[["render",n]]);export{c as __pageData,m as default};
import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1780936388000}'),p={name:"case/case6.md"};function n(h,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[t("",18)]))}const m=a(p,[["render",n]]);export{c as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as s,c as i,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1780885577000}'),n={name:"case/case7.md"};function r(p,a,h,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e('<h1 id="仓库" tabindex="-1">仓库 <a class="header-anchor" href="#仓库" aria-label="Permalink to &quot;仓库&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addzram" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addzram</a></p><h1 id="addzram" tabindex="-1">addzram <a class="header-anchor" href="#addzram" aria-label="Permalink to &quot;addzram&quot;"></a></h1><p>为linux服务器启用zram(压缩内存)</p><p>国际</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>国内</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>类同前面的addswap项目</p><p>同样是给机器优化内存占用的东西只不过zram是压缩内存占用swap是附加虚拟内存增加内存空间二者都会占用CPU资源zram在CPU性能冗余的机器上使用更优</p><p>(理论上zram会比swap的性能占用低但未实际测试过)</p><p><strong>单位换算:输入 1024 产生 1G 的 zram 设备压缩内存zram 设备大小不能大于实际内存大小</strong></p><h1 id="致谢" tabindex="-1">致谢 <a class="header-anchor" href="#致谢" aria-label="Permalink to &quot;致谢&quot;"></a></h1><p>感谢 <a href="https://github.com/Ella-Alinda" target="_blank" rel="noreferrer">@Ella-Alinda</a> 提供优化建议</p>',14)]))}const c=s(n,[["render",r]]);export{m as __pageData,c as default};
import{_ as s,c as i,o as t,ag as e}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1780936388000}'),n={name:"case/case7.md"};function r(p,a,h,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e('<h1 id="仓库" tabindex="-1">仓库 <a class="header-anchor" href="#仓库" aria-label="Permalink to &quot;仓库&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addzram" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addzram</a></p><h1 id="addzram" tabindex="-1">addzram <a class="header-anchor" href="#addzram" aria-label="Permalink to &quot;addzram&quot;"></a></h1><p>为linux服务器启用zram(压缩内存)</p><p>国际</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>国内</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>类同前面的addswap项目</p><p>同样是给机器优化内存占用的东西只不过zram是压缩内存占用swap是附加虚拟内存增加内存空间二者都会占用CPU资源zram在CPU性能冗余的机器上使用更优</p><p>(理论上zram会比swap的性能占用低但未实际测试过)</p><p><strong>单位换算:输入 1024 产生 1G 的 zram 设备压缩内存zram 设备大小不能大于实际内存大小</strong></p><h1 id="致谢" tabindex="-1">致谢 <a class="header-anchor" href="#致谢" aria-label="Permalink to &quot;致谢&quot;"></a></h1><p>感谢 <a href="https://github.com/Ella-Alinda" target="_blank" rel="noreferrer">@Ella-Alinda</a> 提供优化建议</p>',14)]))}const c=s(n,[["render",r]]);export{m as __pageData,c as default};

View File

@@ -1 +1 @@
import{_ as s,c as i,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1780885577000}'),n={name:"case/case7.md"};function r(p,a,h,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e("",14)]))}const c=s(n,[["render",r]]);export{m as __pageData,c as default};
import{_ as s,c as i,o as t,ag as e}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"仓库"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"仓库"}]]},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1780936388000}'),n={name:"case/case7.md"};function r(p,a,h,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e("",14)]))}const c=s(n,[["render",r]]);export{m as __pageData,c as default};

View File

@@ -1 +1 @@
import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","description":"","frontmatter":{"layout":"home","title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","hero":{"name":"其他实用项目","text":"与Linux相关的其他实用项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/case/case1"}]},"features":[{"title":"实用性","details":"仁者见仁智者见智。"}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"其他实用项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"其他实用项目"}]]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1780885577000}'),n={name:"case/index.md"};function r(i,o,s,c,l,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};
import{_ as t,c as e,o as a}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","description":"","frontmatter":{"layout":"home","title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","hero":{"name":"其他实用项目","text":"与Linux相关的其他实用项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/case/case1"}]},"features":[{"title":"实用性","details":"仁者见仁智者见智。"}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"其他实用项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"其他实用项目"}]]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1780936388000}'),n={name:"case/index.md"};function r(i,o,s,c,l,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","description":"","frontmatter":{"layout":"home","title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","hero":{"name":"其他实用项目","text":"与Linux相关的其他实用项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/case/case1"}]},"features":[{"title":"实用性","details":"仁者见仁智者见智。"}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"其他实用项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"其他实用项目"}]]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1780885577000}'),n={name:"case/index.md"};function r(i,o,s,c,l,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};
import{_ as t,c as e,o as a}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","description":"","frontmatter":{"layout":"home","title":"其他实用项目","titleTemplate":"与Linux相关的其他实用项目","hero":{"name":"其他实用项目","text":"与Linux相关的其他实用项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/case/case1"}]},"features":[{"title":"实用性","details":"仁者见仁智者见智。"}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"其他实用项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"其他实用项目"}]]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1780936388000}'),n={name:"case/index.md"};function r(i,o,s,c,l,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as e,c as t,o as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","description":"","frontmatter":{"layout":"home","title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","hero":{"name":"开发手册","text":"开发手册","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"开发手册"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"开发手册"}]]},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1780885577000}'),a={name:"developer/index.md"};function r(o,l,p,i,s,c){return n(),t("div")}const h=e(a,[["render",r]]);export{d as __pageData,h as default};
import{_ as e,c as t,o as n}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","description":"","frontmatter":{"layout":"home","title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","hero":{"name":"开发手册","text":"开发手册","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"开发手册"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"开发手册"}]]},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1780936388000}'),a={name:"developer/index.md"};function r(o,l,p,i,s,c){return n(),t("div")}const h=e(a,[["render",r]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as e,c as t,o as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","description":"","frontmatter":{"layout":"home","title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","hero":{"name":"开发手册","text":"开发手册","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"开发手册"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"开发手册"}]]},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1780885577000}'),a={name:"developer/index.md"};function r(o,l,p,i,s,c){return n(),t("div")}const h=e(a,[["render",r]]);export{d as __pageData,h as default};
import{_ as e,c as t,o as n}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","description":"","frontmatter":{"layout":"home","title":"开发手册","titleTemplate":"欢迎使用一键虚拟化项目开发手册欢迎你提出高质量的Pull Request帮助一键虚拟化项目变得更好","hero":{"name":"开发手册","text":"开发手册","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"开发手册"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"开发手册"}]]},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1780936388000}'),a={name:"developer/index.md"};function r(o,l,p,i,s,c){return n(),t("div")}const h=e(a,[["render",r]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as t,c as o,o as l,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"一键虚拟化项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"一键虚拟化项目"}]]},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1780885577000}'),r={name:"developer/l10n.md"};function n(i,e,c,d,p,s){return l(),o("div",null,e[0]||(e[0]=[a('<p><strong>你可以在开发新功能时遵循以下步骤来支持本地化</strong></p><h2 id="介绍" tabindex="-1">介绍 <a class="header-anchor" href="#介绍" aria-label="Permalink to &quot;介绍&quot;"></a></h2><ol><li>你可以直接使用 <code>/resource/l10n/zh-CN.toml</code> 中已有的文本配置来替换新功能中的文本</li><li>如果新功能中有新增文本,请参考 <code>zh-CN.toml</code> 的配置文本,将新文本拉取到 <code>zh-CN.toml</code> 等其他语言的配置文件中,并添加翻译</li></ol><h2 id="新本地化文本的添加" tabindex="-1">新本地化文本的添加 <a class="header-anchor" href="#新本地化文本的添加" aria-label="Permalink to &quot;新本地化文本的添加&quot;"></a></h2><ol><li>在 <code>/resource/l10n/</code> 中添加新的语言文本配置</li><li>在新的语言文本配置中拉取其他语言已有的文本配置</li><li>为新的语言文本配置添加翻译</li></ol>',5)]))}const h=t(r,[["render",n]]);export{_ as __pageData,h as default};
import{_ as t,c as o,o as l,ag as a}from"./chunks/framework.CSeR4K32.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"一键虚拟化项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"一键虚拟化项目"}]]},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1780936388000}'),r={name:"developer/l10n.md"};function n(i,e,c,d,p,s){return l(),o("div",null,e[0]||(e[0]=[a('<p><strong>你可以在开发新功能时遵循以下步骤来支持本地化</strong></p><h2 id="介绍" tabindex="-1">介绍 <a class="header-anchor" href="#介绍" aria-label="Permalink to &quot;介绍&quot;"></a></h2><ol><li>你可以直接使用 <code>/resource/l10n/zh-CN.toml</code> 中已有的文本配置来替换新功能中的文本</li><li>如果新功能中有新增文本,请参考 <code>zh-CN.toml</code> 的配置文本,将新文本拉取到 <code>zh-CN.toml</code> 等其他语言的配置文件中,并添加翻译</li></ol><h2 id="新本地化文本的添加" tabindex="-1">新本地化文本的添加 <a class="header-anchor" href="#新本地化文本的添加" aria-label="Permalink to &quot;新本地化文本的添加&quot;"></a></h2><ol><li>在 <code>/resource/l10n/</code> 中添加新的语言文本配置</li><li>在新的语言文本配置中拉取其他语言已有的文本配置</li><li>为新的语言文本配置添加翻译</li></ol>',5)]))}const h=t(r,[["render",n]]);export{_ as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as t,c as o,o as l,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"一键虚拟化项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"一键虚拟化项目"}]]},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1780885577000}'),r={name:"developer/l10n.md"};function n(i,e,c,d,p,s){return l(),o("div",null,e[0]||(e[0]=[a("",5)]))}const h=t(r,[["render",n]]);export{_ as __pageData,h as default};
import{_ as t,c as o,o as l,ag as a}from"./chunks/framework.CSeR4K32.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"一键虚拟化项目"}],["meta",{"property":"og:locale","content":"zh_CN"}],["meta",{"property":"og:title","content":"一键虚拟化项目"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"一键虚拟化项目"}]]},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1780936388000}'),r={name:"developer/l10n.md"};function n(i,e,c,d,p,s){return l(),o("div",null,e[0]||(e[0]=[a("",5)]))}const h=t(r,[["render",n]]);export{_ as __pageData,h as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"ECS","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case1.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"ECS"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case1.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"ECS"}]]},"headers":[],"relativePath":"en/case/case1.md","filePath":"en/case/case1.md","lastUpdated":1780885577000}'),n={name:"en/case/case1.md"};function l(r,e,h,o,d,p){return a(),i("div",null,e[0]||(e[0]=[t("",80)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default};
import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"ECS","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case1.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"ECS"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case1.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"ECS"}]]},"headers":[],"relativePath":"en/case/case1.md","filePath":"en/case/case1.md","lastUpdated":1780936388000}'),n={name:"en/case/case1.md"};function l(r,e,h,o,d,p){return a(),i("div",null,e[0]||(e[0]=[t("",80)]))}const u=s(n,[["render",l]]);export{k as __pageData,u as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case2.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case2.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case2.md","filePath":"en/case/case2.md","lastUpdated":1780885577000}'),n={name:"en/case/case2.md"};function r(p,i,l,h,o,c){return t(),a("div",null,i[0]||(i[0]=[e("",15)]))}const d=s(n,[["render",r]]);export{m as __pageData,d as default};
import{_ as s,c as a,o as t,ag as e}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case2.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case2.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case2.md","filePath":"en/case/case2.md","lastUpdated":1780936388000}'),n={name:"en/case/case2.md"};function r(p,i,l,h,o,c){return t(),a("div",null,i[0]||(i[0]=[e("",15)]))}const d=s(n,[["render",r]]);export{m as __pageData,d as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s,c as t,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case3.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case3.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case3.md","filePath":"en/case/case3.md","lastUpdated":1780885577000}'),n={name:"en/case/case3.md"};function r(p,e,l,h,c,d){return a(),t("div",null,e[0]||(e[0]=[i("",15)]))}const u=s(n,[["render",r]]);export{k as __pageData,u as default};
import{_ as s,c as t,o as a,ag as i}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case3.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case3.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case3.md","filePath":"en/case/case3.md","lastUpdated":1780936388000}'),n={name:"en/case/case3.md"};function r(p,e,l,h,c,d){return a(),t("div",null,e[0]||(e[0]=[i("",15)]))}const u=s(n,[["render",r]]);export{k as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as t,c as a,o as r,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case4.md","filePath":"en/case/case4.md","lastUpdated":1780885577000}'),i={name:"en/case/case4.md"};function n(l,e,o,c,h,p){return r(),a("div",null,e[0]||(e[0]=[s('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/oneclickvirt/backtrace" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/backtrace</a></p><p><a href="https://hits.spiritlhl.net" target="_blank" rel="noreferrer"><img src="https://hits.spiritlhl.net/backtrace.svg?action=hit&amp;title=Hits&amp;title_bg=%23555555&amp;count_bg=%230eecf8&amp;edge_flat=false" alt="Hits" loading="lazy"></a></p><h1 id="backtrace" tabindex="-1">backtrace <a class="header-anchor" href="#backtrace" aria-label="Permalink to &quot;backtrace&quot;"></a></h1><p>CN return-route tracing and route-line analysis tool.</p><p>This project is a refactor and optimization based on: <a href="https://github.com/zhanghanyun/backtrace" target="_blank" rel="noreferrer">https://github.com/zhanghanyun/backtrace</a></p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/oneclickvirt/backtrace/main/backtrace_install.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sSf</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Route analysis still requires manual verification for best accuracy.</li><li>For more builds and release assets: <a href="https://github.com/oneclickvirt/backtrace/releases/tag/output" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/backtrace/releases/tag/output</a></li></ul>',10)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default};
import{_ as t,c as a,o as r,ag as s}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case4.md","filePath":"en/case/case4.md","lastUpdated":1780936388000}'),i={name:"en/case/case4.md"};function n(l,e,o,c,h,p){return r(),a("div",null,e[0]||(e[0]=[s('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/oneclickvirt/backtrace" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/backtrace</a></p><p><a href="https://hits.spiritlhl.net" target="_blank" rel="noreferrer"><img src="https://hits.spiritlhl.net/backtrace.svg?action=hit&amp;title=Hits&amp;title_bg=%23555555&amp;count_bg=%230eecf8&amp;edge_flat=false" alt="Hits" loading="lazy"></a></p><h1 id="backtrace" tabindex="-1">backtrace <a class="header-anchor" href="#backtrace" aria-label="Permalink to &quot;backtrace&quot;"></a></h1><p>CN return-route tracing and route-line analysis tool.</p><p>This project is a refactor and optimization based on: <a href="https://github.com/zhanghanyun/backtrace" target="_blank" rel="noreferrer">https://github.com/zhanghanyun/backtrace</a></p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/oneclickvirt/backtrace/main/backtrace_install.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sSf</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Route analysis still requires manual verification for best accuracy.</li><li>For more builds and release assets: <a href="https://github.com/oneclickvirt/backtrace/releases/tag/output" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/backtrace/releases/tag/output</a></li></ul>',10)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as t,c as a,o as r,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case4.md","filePath":"en/case/case4.md","lastUpdated":1780885577000}'),i={name:"en/case/case4.md"};function n(l,e,o,c,h,p){return r(),a("div",null,e[0]||(e[0]=[s("",10)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default};
import{_ as t,c as a,o as r,ag as s}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case4.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case4.md","filePath":"en/case/case4.md","lastUpdated":1780936388000}'),i={name:"en/case/case4.md"};function n(l,e,o,c,h,p){return r(),a("div",null,e[0]||(e[0]=[s("",10)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case5.md","filePath":"en/case/case5.md","lastUpdated":1780885577000}'),r={name:"en/case/case5.md"};function l(n,e,p,o,h,c){return t(),s("div",null,e[0]||(e[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/Oracle-server-keep-alive-script" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/Oracle-server-keep-alive-script</a></p><p><a href="https://hits.spiritlhl.net" target="_blank" rel="noreferrer"><img src="https://hits.spiritlhl.net/Oracle-server-keep-alive-script.svg?action=hit&amp;title=Hits&amp;title_bg=%23555555&amp;count_bg=%230eecf8&amp;edge_flat=false" alt="Hits" loading="lazy"></a></p><h1 id="oracle-server-keep-alive-script" tabindex="-1">Oracle-server-keep-alive-script <a class="header-anchor" href="#oracle-server-keep-alive-script" aria-label="Permalink to &quot;Oracle-server-keep-alive-script&quot;"></a></h1><p>A resource occupancy/keep-alive script. It is not limited to Oracle Cloud servers and can also run on common ARM or x86_64 Linux systems.</p><h2 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-label="Permalink to &quot;Features&quot;"></a></h2><ul><li>Optional occupancy targets: CPU, memory, and bandwidth</li><li>Dynamic resource control for safer operation</li><li>Install, uninstall, and update helper flows</li></ul><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Alternative:</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sSLk</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Please test on non-production servers first.</li><li>For complete options and caveats, check the upstream README: <a href="https://github.com/spiritLHLS/Oracle-server-keep-alive-script" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/Oracle-server-keep-alive-script</a></li></ul>',13)]))}const m=a(r,[["render",l]]);export{k as __pageData,m as default};
import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case5.md","filePath":"en/case/case5.md","lastUpdated":1780936388000}'),r={name:"en/case/case5.md"};function l(n,e,p,o,h,c){return t(),s("div",null,e[0]||(e[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/Oracle-server-keep-alive-script" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/Oracle-server-keep-alive-script</a></p><p><a href="https://hits.spiritlhl.net" target="_blank" rel="noreferrer"><img src="https://hits.spiritlhl.net/Oracle-server-keep-alive-script.svg?action=hit&amp;title=Hits&amp;title_bg=%23555555&amp;count_bg=%230eecf8&amp;edge_flat=false" alt="Hits" loading="lazy"></a></p><h1 id="oracle-server-keep-alive-script" tabindex="-1">Oracle-server-keep-alive-script <a class="header-anchor" href="#oracle-server-keep-alive-script" aria-label="Permalink to &quot;Oracle-server-keep-alive-script&quot;"></a></h1><p>A resource occupancy/keep-alive script. It is not limited to Oracle Cloud servers and can also run on common ARM or x86_64 Linux systems.</p><h2 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-label="Permalink to &quot;Features&quot;"></a></h2><ul><li>Optional occupancy targets: CPU, memory, and bandwidth</li><li>Dynamic resource control for safer operation</li><li>Install, uninstall, and update helper flows</li></ul><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> oalive.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>Alternative:</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sSLk</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Please test on non-production servers first.</li><li>For complete options and caveats, check the upstream README: <a href="https://github.com/spiritLHLS/Oracle-server-keep-alive-script" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/Oracle-server-keep-alive-script</a></li></ul>',13)]))}const m=a(r,[["render",l]]);export{k as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case5.md","filePath":"en/case/case5.md","lastUpdated":1780885577000}'),r={name:"en/case/case5.md"};function l(n,e,p,o,h,c){return t(),s("div",null,e[0]||(e[0]=[i("",13)]))}const m=a(r,[["render",l]]);export{k as __pageData,m as default};
import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case5.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case5.md","filePath":"en/case/case5.md","lastUpdated":1780936388000}'),r={name:"en/case/case5.md"};function l(n,e,p,o,h,c){return t(),s("div",null,e[0]||(e[0]=[i("",13)]))}const m=a(r,[["render",l]]);export{k as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case6.md","filePath":"en/case/case6.md","lastUpdated":1780885577000}'),n={name:"en/case/case6.md"};function r(l,a,p,o,h,d){return t(),s("div",null,a[0]||(a[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addswap" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addswap</a></p><h1 id="addswap" tabindex="-1">addswap <a class="header-anchor" href="#addswap" aria-label="Permalink to &quot;addswap&quot;"></a></h1><p>Add swap space (virtual memory) to Linux servers on OpenVZ/KVM environments.</p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Input <code>1024</code> to create about <code>1G</code> swap.</li><li>OpenVZ/LXC environments are usually restricted by host-side virtualization controls.</li></ul>',8)]))}const m=e(n,[["render",r]]);export{k as __pageData,m as default};
import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case6.md","filePath":"en/case/case6.md","lastUpdated":1780936388000}'),n={name:"en/case/case6.md"};function r(l,a,p,o,h,d){return t(),s("div",null,a[0]||(a[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addswap" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addswap</a></p><h1 id="addswap" tabindex="-1">addswap <a class="header-anchor" href="#addswap" aria-label="Permalink to &quot;addswap&quot;"></a></h1><p>Add swap space (virtual memory) to Linux servers on OpenVZ/KVM environments.</p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addswap.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>Input <code>1024</code> to create about <code>1G</code> swap.</li><li>OpenVZ/LXC environments are usually restricted by host-side virtualization controls.</li></ul>',8)]))}const m=e(n,[["render",r]]);export{k as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case6.md","filePath":"en/case/case6.md","lastUpdated":1780885577000}'),n={name:"en/case/case6.md"};function r(l,a,p,o,h,d){return t(),s("div",null,a[0]||(a[0]=[i("",8)]))}const m=e(n,[["render",r]]);export{k as __pageData,m as default};
import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case6.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case6.md","filePath":"en/case/case6.md","lastUpdated":1780936388000}'),n={name:"en/case/case6.md"};function r(l,a,p,o,h,d){return t(),s("div",null,a[0]||(a[0]=[i("",8)]))}const m=e(n,[["render",r]]);export{k as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case7.md","filePath":"en/case/case7.md","lastUpdated":1780885577000}'),r={name:"en/case/case7.md"};function n(l,a,o,h,p,d){return s(),t("div",null,a[0]||(a[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addzram" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addzram</a></p><h1 id="addzram" tabindex="-1">addzram <a class="header-anchor" href="#addzram" aria-label="Permalink to &quot;addzram&quot;"></a></h1><p>Enable zram (compressed memory) on Linux servers.</p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>zram and swap both consume CPU resources in different ways.</li><li>Input <code>1024</code> to create about <code>1G</code> zram device memory.</li><li>zram size should not exceed physical memory size.</li></ul>',8)]))}const k=e(r,[["render",n]]);export{m as __pageData,k as default};
import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case7.md","filePath":"en/case/case7.md","lastUpdated":1780936388000}'),r={name:"en/case/case7.md"};function n(l,a,o,h,p,d){return s(),t("div",null,a[0]||(a[0]=[i('<h1 id="repository" tabindex="-1">Repository <a class="header-anchor" href="#repository" aria-label="Permalink to &quot;Repository&quot;"></a></h1><p><a href="https://github.com/spiritLHLS/addzram" target="_blank" rel="noreferrer">https://github.com/spiritLHLS/addzram</a></p><h1 id="addzram" tabindex="-1">addzram <a class="header-anchor" href="#addzram" aria-label="Permalink to &quot;addzram&quot;"></a></h1><p>Enable zram (compressed memory) on Linux servers.</p><h2 id="install" tabindex="-1">Install <a class="header-anchor" href="#install" aria-label="Permalink to &quot;Install&quot;"></a></h2><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp;&amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addzram.sh</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to &quot;Notes&quot;"></a></h2><ul><li>zram and swap both consume CPU resources in different ways.</li><li>Input <code>1024</code> to create about <code>1G</code> zram device memory.</li><li>zram size should not exceed physical memory size.</li></ul>',8)]))}const k=e(r,[["render",n]]);export{m as __pageData,k as default};

View File

@@ -1 +1 @@
import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case7.md","filePath":"en/case/case7.md","lastUpdated":1780885577000}'),r={name:"en/case/case7.md"};function n(l,a,o,h,p,d){return s(),t("div",null,a[0]||(a[0]=[i("",8)]))}const k=e(r,[["render",n]]);export{m as __pageData,k as default};
import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"Repository","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Repository"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/case7.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Repository"}]]},"headers":[],"relativePath":"en/case/case7.md","filePath":"en/case/case7.md","lastUpdated":1780936388000}'),r={name:"en/case/case7.md"};function n(l,a,o,h,p,d){return s(),t("div",null,a[0]||(a[0]=[i("",8)]))}const k=e(r,[["render",n]]);export{m as __pageData,k as default};

View File

@@ -1 +1 @@
import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"Utility Projects","titleTemplate":"Practical Linux-related tools","description":"","frontmatter":{"layout":"home","title":"Utility Projects","titleTemplate":"Practical Linux-related tools","hero":{"name":"Utility Projects","text":"Practical Linux-related tools","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Explore Projects →","link":"/en/case/case1"}]},"features":[{"title":"Practical","details":"Built for day-to-day server operations, diagnostics, and maintenance."}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Utility Projects"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Utility Projects"}]]},"headers":[],"relativePath":"en/case/index.md","filePath":"en/case/index.md","lastUpdated":1780885577000}'),n={name:"en/case/index.md"};function r(i,o,c,l,s,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};
import{_ as t,c as e,o as a}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"Utility Projects","titleTemplate":"Practical Linux-related tools","description":"","frontmatter":{"layout":"home","title":"Utility Projects","titleTemplate":"Practical Linux-related tools","hero":{"name":"Utility Projects","text":"Practical Linux-related tools","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Explore Projects →","link":"/en/case/case1"}]},"features":[{"title":"Practical","details":"Built for day-to-day server operations, diagnostics, and maintenance."}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Utility Projects"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Utility Projects"}]]},"headers":[],"relativePath":"en/case/index.md","filePath":"en/case/index.md","lastUpdated":1780936388000}'),n={name:"en/case/index.md"};function r(i,o,c,l,s,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"Utility Projects","titleTemplate":"Practical Linux-related tools","description":"","frontmatter":{"layout":"home","title":"Utility Projects","titleTemplate":"Practical Linux-related tools","hero":{"name":"Utility Projects","text":"Practical Linux-related tools","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Explore Projects →","link":"/en/case/case1"}]},"features":[{"title":"Practical","details":"Built for day-to-day server operations, diagnostics, and maintenance."}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Utility Projects"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Utility Projects"}]]},"headers":[],"relativePath":"en/case/index.md","filePath":"en/case/index.md","lastUpdated":1780885577000}'),n={name:"en/case/index.md"};function r(i,o,c,l,s,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};
import{_ as t,c as e,o as a}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"Utility Projects","titleTemplate":"Practical Linux-related tools","description":"","frontmatter":{"layout":"home","title":"Utility Projects","titleTemplate":"Practical Linux-related tools","hero":{"name":"Utility Projects","text":"Practical Linux-related tools","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Explore Projects →","link":"/en/case/case1"}]},"features":[{"title":"Practical","details":"Built for day-to-day server operations, diagnostics, and maintenance."}],"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/case/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Utility Projects"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/case/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Utility Projects"}]]},"headers":[],"relativePath":"en/case/index.md","filePath":"en/case/index.md","lastUpdated":1780936388000}'),n={name:"en/case/index.md"};function r(i,o,c,l,s,p){return a(),e("div")}const h=t(n,[["render",r]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as e,c as t,o as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","description":"","frontmatter":{"layout":"home","title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","hero":{"name":"Development Manual","text":"Welcome to the oneclickvirt Development Manual.","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Start Now →","link":"/en/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Development Manual"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Development Manual"}]]},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1780885577000}'),a={name:"en/developer/index.md"};function o(l,r,p,i,m,c){return n(),t("div")}const h=e(a,[["render",o]]);export{d as __pageData,h as default};
import{_ as e,c as t,o as n}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","description":"","frontmatter":{"layout":"home","title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","hero":{"name":"Development Manual","text":"Welcome to the oneclickvirt Development Manual.","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Start Now →","link":"/en/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Development Manual"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Development Manual"}]]},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1780936388000}'),a={name:"en/developer/index.md"};function o(l,r,p,i,m,c){return n(),t("div")}const h=e(a,[["render",o]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as e,c as t,o as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","description":"","frontmatter":{"layout":"home","title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","hero":{"name":"Development Manual","text":"Welcome to the oneclickvirt Development Manual.","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Start Now →","link":"/en/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Development Manual"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Development Manual"}]]},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1780885577000}'),a={name:"en/developer/index.md"};function o(l,r,p,i,m,c){return n(),t("div")}const h=e(a,[["render",o]]);export{d as __pageData,h as default};
import{_ as e,c as t,o as n}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","description":"","frontmatter":{"layout":"home","title":"Development Manual","titleTemplate":"Welcome to the oneclickvirt Development Manual.","hero":{"name":"Development Manual","text":"Welcome to the oneclickvirt Development Manual.","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Start Now →","link":"/en/developer/l10n"}]},"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Development Manual"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Development Manual"}]]},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1780936388000}'),a={name:"en/developer/index.md"};function o(l,r,p,i,m,c){return n(),t("div")}const h=e(a,[["render",o]]);export{d as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as t,c as n,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1780885577000}'),l={name:"en/developer/l10n.md"};function i(r,e,d,c,s,p){return o(),n("div",null,e[0]||(e[0]=[a('<p><strong>You can follow these steps to support localization when developing new features</strong></p><h2 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h2><ol><li>Reuse the existing text entries in <code>/resource/l10n/zh-CN.toml</code> when replacing hard-coded strings in a new feature.</li><li>If a new feature introduces new text, add the source entry to <code>zh-CN.toml</code> first, then add the same key to other language files and provide the corresponding translations.</li></ol><h2 id="adding-a-new-localized-text-file" tabindex="-1">Adding a New Localized Text File <a class="header-anchor" href="#adding-a-new-localized-text-file" aria-label="Permalink to &quot;Adding a New Localized Text File&quot;"></a></h2><ol><li>Add the new language text file under <code>/resource/l10n/</code>.</li><li>Copy the existing keys from the other language files into the new language file.</li><li>Fill in the translations for the new language file.</li></ol>',5)]))}const g=t(l,[["render",i]]);export{u as __pageData,g as default};
import{_ as t,c as n,o,ag as a}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1780936388000}'),l={name:"en/developer/l10n.md"};function i(r,e,d,c,s,p){return o(),n("div",null,e[0]||(e[0]=[a('<p><strong>You can follow these steps to support localization when developing new features</strong></p><h2 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h2><ol><li>Reuse the existing text entries in <code>/resource/l10n/zh-CN.toml</code> when replacing hard-coded strings in a new feature.</li><li>If a new feature introduces new text, add the source entry to <code>zh-CN.toml</code> first, then add the same key to other language files and provide the corresponding translations.</li></ol><h2 id="adding-a-new-localized-text-file" tabindex="-1">Adding a New Localized Text File <a class="header-anchor" href="#adding-a-new-localized-text-file" aria-label="Permalink to &quot;Adding a New Localized Text File&quot;"></a></h2><ol><li>Add the new language text file under <code>/resource/l10n/</code>.</li><li>Copy the existing keys from the other language files into the new language file.</li><li>Fill in the translations for the new language file.</li></ol>',5)]))}const g=t(l,[["render",i]]);export{u as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as t,c as n,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1780885577000}'),l={name:"en/developer/l10n.md"};function i(r,e,d,c,s,p){return o(),n("div",null,e[0]||(e[0]=[a("",5)]))}const g=t(l,[["render",i]]);export{u as __pageData,g as default};
import{_ as t,c as n,o,ag as a}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/developer/l10n.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1780936388000}'),l={name:"en/developer/l10n.md"};function i(r,e,d,c,s,p){return o(),n("div",null,e[0]||(e[0]=[a("",5)]))}const g=t(l,[["render",i]]);export{u as __pageData,g as default};

View File

@@ -0,0 +1,55 @@
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CSeR4K32.js";const o=JSON.parse('{"title":"Blocking Abuse on Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abuse on Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abuse on Docker"}]]},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1780936388000}'),l={name:"en/guide/block/block_docker.md"};function t(p,s,h,k,r,F){return n(),a("div",null,s[0]||(s[0]=[e(`<h1 id="blocking-abuse-on-docker" tabindex="-1">Blocking Abuse on Docker <a class="header-anchor" href="#blocking-abuse-on-docker" aria-label="Permalink to &quot;Blocking Abuse on Docker&quot;"></a></h1><p>Docker creates its own NAT and forwarding rules. Do not edit the <code>DOCKER</code> chain directly. Put host-side container egress restrictions in the <code>DOCKER-USER</code> chain instead; Docker evaluates this chain before its automatically generated rules, so it is easier to keep the policy stable across Docker restarts.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>The rules below are intended for normal Docker bridge/NAT deployments. Keep an existing SSH session open and make sure provider console access is available before changing firewall rules in production.</p></div><h2 id="create-a-shared-blocking-chain" tabindex="-1">Create a Shared Blocking Chain <a class="header-anchor" href="#create-a-shared-blocking-chain" aria-label="Permalink to &quot;Create a Shared Blocking Chain&quot;"></a></h2><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -N</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER-USER</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -I</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER-USER</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> RETURN</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> RETURN</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><code>DOCKER_ABUSE_BLOCK</code> keeps the custom policy in one place. The final <code>RETURN</code> sends normal unmatched traffic back to Docker&#39;s later rules.</p><h2 id="block-high-risk-ports" tabindex="-1">Block High-Risk Ports <a class="header-anchor" href="#block-high-risk-ports" aria-label="Permalink to &quot;Block High-Risk Ports&quot;"></a></h2><p>If you do not provide mail service from containers, block common SMTP ports first to reduce spam abuse risk.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 25,465,587</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -I</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 25,465,587</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>You can also add IRC, proxy, or other high-risk ports when needed:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 6660:6669,1080,3128,8080</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -I</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 6660:6669,1080,3128,8080</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h2 id="block-mining-bt-and-speed-test-signatures" tabindex="-1">Block Mining, BT, and Speed-Test Signatures <a class="header-anchor" href="#block-mining-bt-and-speed-test-signatures" aria-label="Permalink to &quot;Block Mining, BT, and Speed-Test Signatures&quot;"></a></h2><p>The following rules reuse host <code>iptables</code> string matching. Matching container egress traffic is dropped when common abuse signatures are found.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">strings</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;ethermine.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;antpool.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;c3pool&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;xmrig.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;minexmr.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;supportxmr.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;hashvault.pro&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;stratum+tcp&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;stratum+ssl&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;xmrig&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;xmr-stak&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;cpuminer&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;BitTorrent&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;magnet:&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;.torrent&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;ut_metadata&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;qBittorrent&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;Transmission&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;speedtest&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;fast.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;speedtest.net&quot;</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;ookla.com&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> str </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;\${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">strings</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">[</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">@</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">]}&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> string</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --string</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$str</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --algo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DROP</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -I</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> string</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --string</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$str</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --algo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DROP</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">done</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br></div></div><p>String matching is not a complete security strategy, but it is useful for low-cost blocking of common abuse traffic.</p><p>If Docker IPv6 is enabled, add matching <code>ip6tables</code> or equivalent <code>nftables</code> rules for container IPv6 egress traffic.</p><h2 id="restrict-a-single-container" tabindex="-1">Restrict a Single Container <a class="header-anchor" href="#restrict-a-single-container" aria-label="Permalink to &quot;Restrict a Single Container&quot;"></a></h2><p>If only one container needs restrictions, query its container IP first and then add a source-specific rule.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">container_name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;example&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">container_ip</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> inspect</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&#39;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$container_name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$container_ip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">then</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -C</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$container_ip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 25,465,587</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -I</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$container_ip</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tcp</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -m</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> multiport</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --dports</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 25,465,587</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> REJECT</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">else</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;container IP not found: </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$container_name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &gt;&amp;2</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">fi</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>The container IP can change after recreation, so query and write the rule again after rebuilding the container. For stable isolation, create a dedicated bridge network and update rules in the same orchestration flow.</p><h2 id="create-a-more-isolated-network" tabindex="-1">Create a More Isolated Network <a class="header-anchor" href="#create-a-more-isolated-network" aria-label="Permalink to &quot;Create a More Isolated Network&quot;"></a></h2><p>For containers that do not need to talk to each other, create a bridge network with inter-container communication disabled.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> create</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --driver</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bridge</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --opt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> com.docker.network.bridge.enable_icc=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> isolated_bridge</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>Run the container on that network explicitly:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> example</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> isolated_bridge</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> image:tag</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>If the container does not need network access at all, use:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> example</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> none</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> image:tag</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="reduce-the-abuse-surface-at-runtime" tabindex="-1">Reduce the Abuse Surface at Runtime <a class="header-anchor" href="#reduce-the-abuse-surface-at-runtime" aria-label="Permalink to &quot;Reduce the Abuse Surface at Runtime&quot;"></a></h2><p>For untrusted images, reduce privileges and resources as much as possible.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> example</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --cpus</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --memory</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 512m</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --pids-limit</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 128</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --read-only</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --cap-drop</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ALL</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --security-opt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> no-new-privileges</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> image:tag</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><p>Do not mount <code>/var/run/docker.sock</code> or use <code>--privileged</code> for normal containers unless you fully understand the impact.</p><h2 id="persist-rules" tabindex="-1">Persist Rules <a class="header-anchor" href="#persist-rules" aria-label="Permalink to &quot;Persist Rules&quot;"></a></h2><p>On Debian/Ubuntu, use <code>iptables-persistent</code> to persist the rules.</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> update</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> iptables-persistent</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables-save</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /etc/iptables/rules.v4</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h2 id="remove-the-blocking-rules" tabindex="-1">Remove the Blocking Rules <a class="header-anchor" href="#remove-the-blocking-rules" aria-label="Permalink to &quot;Remove the Blocking Rules&quot;"></a></h2><p>Remove the shared entry and clean up the custom chain:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER-USER</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -F</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> DOCKER_ABUSE_BLOCK</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div>`,37)]))}const c=i(l,[["render",t]]);export{o as __pageData,c as default};

View File

@@ -0,0 +1 @@
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CSeR4K32.js";const o=JSON.parse('{"title":"Blocking Abuse on Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abuse on Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abuse on Docker"}]]},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1780936388000}'),l={name:"en/guide/block/block_docker.md"};function t(p,s,h,k,r,F){return n(),a("div",null,s[0]||(s[0]=[e("",37)]))}const c=i(l,[["render",t]]);export{o as __pageData,c as default};

View File

@@ -1 +0,0 @@
import{_ as n,c as o,o as r,j as e,a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Under Development","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Under Development"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Under Development"}]]},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1780885577000}'),l={name:"en/guide/block/block_docker.md"};function c(i,t,d,p,s,m){return r(),o("div",null,t[0]||(t[0]=[e("h1",{id:"under-development",tabindex:"-1"},[a("Under Development "),e("a",{class:"header-anchor",href:"#under-development","aria-label":'Permalink to "Under Development"'},"")],-1),e("p",null,"This page has not been published yet.",-1),e("p",null,"The Chinese documentation currently marks the Docker-specific anti-abuse workflow as pending, so the English page follows the same status for now.",-1)]))}const u=n(l,[["render",c]]);export{h as __pageData,u as default};

View File

@@ -1 +0,0 @@
import{_ as n,c as o,o as r,j as e,a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Under Development","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Under Development"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_docker.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Under Development"}]]},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1780885577000}'),l={name:"en/guide/block/block_docker.md"};function c(i,t,d,p,s,m){return r(),o("div",null,t[0]||(t[0]=[e("h1",{id:"under-development",tabindex:"-1"},[a("Under Development "),e("a",{class:"header-anchor",href:"#under-development","aria-label":'Permalink to "Under Development"'},"")],-1),e("p",null,"This page has not been published yet.",-1),e("p",null,"The Chinese documentation currently marks the Docker-specific anti-abuse workflow as pending, so the English page follows the same status for now.",-1)]))}const u=n(l,[["render",c]]);export{h as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_incus.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abusive Behavior via Shell Scripts"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_incus.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abusive Behavior via Shell Scripts"}]]},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1780885577000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,c,p,h){return a(),e("div",null,i[0]||(i[0]=[n("",9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default};
import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_incus.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abusive Behavior via Shell Scripts"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_incus.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abusive Behavior via Shell Scripts"}]]},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1780936388000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,c,p,h){return a(),e("div",null,i[0]||(i[0]=[n("",9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_iptables.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking abuse through iptables"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_iptables.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking abuse through iptables"}]]},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1780885577000}'),e={name:"en/guide/block/block_iptables.md"};function p(t,s,h,k,r,F){return n(),a("div",null,s[0]||(s[0]=[l("",38)]))}const c=i(e,[["render",p]]);export{d as __pageData,c as default};
import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_iptables.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking abuse through iptables"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_iptables.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking abuse through iptables"}]]},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1780936388000}'),e={name:"en/guide/block/block_iptables.md"};function p(t,s,h,k,r,F){return n(),a("div",null,s[0]||(s[0]=[l("",38)]))}const c=i(e,[["render",p]]);export{d as __pageData,c as default};

View File

@@ -1 +1 @@
import{_ as s,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_lxd.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abusive Behavior via Shell Scripts"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_lxd.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abusive Behavior via Shell Scripts"}]]},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1780885577000}'),n={name:"en/guide/block/block_lxd.md"};function l(o,i,r,p,c,h){return a(),e("div",null,i[0]||(i[0]=[t("",9)]))}const m=s(n,[["render",l]]);export{k as __pageData,m as default};
import{_ as s,c as e,o as a,ag as t}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_lxd.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Blocking Abusive Behavior via Shell Scripts"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_lxd.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Blocking Abusive Behavior via Shell Scripts"}]]},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1780936388000}'),n={name:"en/guide/block/block_lxd.md"};function l(o,i,r,p,c,h){return a(),e("div",null,i[0]||(i[0]=[t("",9)]))}const m=s(n,[["render",l]]);export{k as __pageData,m as default};

View File

@@ -1,3 +1,3 @@
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Avoid theft by setting up a firewall to limit the IPs used by the VMs","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}]]},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1780885577000}'),n={name:"en/guide/block/block_pve.md"};function l(o,e,r,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a(`<h1 id="avoid-theft-by-setting-up-a-firewall-to-limit-the-ips-used-by-the-vms" tabindex="-1">Avoid theft by setting up a firewall to limit the IPs used by the VMs <a class="header-anchor" href="#avoid-theft-by-setting-up-a-firewall-to-limit-the-ips-used-by-the-vms" aria-label="Permalink to &quot;Avoid theft by setting up a firewall to limit the IPs used by the VMs&quot;"></a></h1><p>Create the following file under the PVE&#39;s host machine</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/etc/pve/firewall/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;VMID&gt;.fw</span></span>
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Avoid theft by setting up a firewall to limit the IPs used by the VMs","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}]]},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1780936388000}'),n={name:"en/guide/block/block_pve.md"};function l(o,e,r,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a(`<h1 id="avoid-theft-by-setting-up-a-firewall-to-limit-the-ips-used-by-the-vms" tabindex="-1">Avoid theft by setting up a firewall to limit the IPs used by the VMs <a class="header-anchor" href="#avoid-theft-by-setting-up-a-firewall-to-limit-the-ips-used-by-the-vms" aria-label="Permalink to &quot;Avoid theft by setting up a firewall to limit the IPs used by the VMs&quot;"></a></h1><p>Create the following file under the PVE&#39;s host machine</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/etc/pve/firewall/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;VMID&gt;.fw</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[IPSET ipfilter-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">net0</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">xxx.xxx.xxx.xxx</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p><code>&lt;VMID&gt;</code> is replaced with the VMID number of the virtual machine, <code>&lt;net0&gt;</code> is replaced with the corresponding alias in the network device (which generally doesn&#39;t need to be changed unless you&#39;re restricted to IPv6), and <code>xxx.xxx.xxx.xxx</code> is replaced with the public IP address, noting that this IP corresponds to the network device in front of it.</p><p>The idea here is that net0 can only use the IP xxx.xxx.xxx.xxx, if you use any other IP the data will be dropped, thus restricting the VM to only use this IP.</p><p>There can be more than one IP, once this rule is enabled the VM can&#39;t use any other IP, if you don&#39;t write an IPv6 address it means the VM can&#39;t use an IPv6 address.</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>This setting is only recommended when opening <strong>VMs</strong> with separate IPs that are not NAT full port mapped, otherwise it may cause strange issues resulting in the server being without a network.</p></div><p>This method <strong>is not suitable</strong> for use on PVEs that open any NAT VMs/containers.</p>`,8)]))}const g=t(n,[["render",l]]);export{u as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Avoid theft by setting up a firewall to limit the IPs used by the VMs","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}]]},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1780885577000}'),n={name:"en/guide/block/block_pve.md"};function l(o,e,r,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a("",8)]))}const g=t(n,[["render",l]]);export{u as __pageData,g as default};
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Avoid theft by setting up a firewall to limit the IPs used by the VMs","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/block/block_pve.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Avoid theft by setting up a firewall to limit the IPs used by the VMs"}]]},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1780936388000}'),n={name:"en/guide/block/block_pve.md"};function l(o,e,r,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a("",8)]))}const g=t(n,[["render",l]]);export{u as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_build.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_build.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1780885577000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",41)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};
import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_build.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_build.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1780936388000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",41)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as e,c as s,o as t,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_install.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_install.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1780885577000}'),n={name:"en/guide/containerd/containerd_install.md"};function l(r,i,o,p,c,h){return t(),s("div",null,i[0]||(i[0]=[a("",17)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default};
import{_ as e,c as s,o as t,ag as a}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_install.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_install.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1780936388000}'),n={name:"en/guide/containerd/containerd_install.md"};function l(r,i,o,p,c,h){return t(),s("div",null,i[0]||(i[0]=[a("",17)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default};

View File

@@ -1 +1 @@
import{_ as e,c as r,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1780885577000}'),o={name:"en/guide/containerd/containerd_precheck.md"};function a(s,t,d,l,c,u){return n(),r("div",null,t[0]||(t[0]=[i('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h1><p>The following is an introduction to the non-customized sections. Please ensure that you don&#39;t confuse them with the customized parts.</p><p>If your host does not have an IPv6 subnet and you want to assign IPv6 addresses to containers, the host itself needs a public IPv6 address. The installation script will automatically detect and configure this.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>The containerd solution <strong>does not support KVM/QEMU virtual machines</strong>. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.</p></div><p>Feel free to give the project a <code>Star</code> for free support! --&gt; <a href="https://github.com/oneclickvirt/containerd" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/containerd</a></p><h2 id="project-features" tabindex="-1">Project Features <a class="header-anchor" href="#project-features" aria-label="Permalink to &quot;Project Features&quot;"></a></h2><p>Bulk or individual NAT server provisioning based on containerd + nerdctl runtime</p><ul><li>Installs containerd + runc + nerdctl + CNI + buildkitd via the <a href="https://github.com/containerd/nerdctl" target="_blank" rel="noreferrer">nerdctl-full</a> bundle</li><li>Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to official images</li><li>Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding</li><li>Default unprivileged containers, supports lxcfs mounting (if lxcfs is installed on the host)</li><li>Supports disk limit parameters (requires xfs/btrfs snapshotter with storage-opt support)</li><li>Supports China CDN acceleration</li></ul><h2 id="supported-systems" tabindex="-1">Supported Systems <a class="header-anchor" href="#supported-systems" aria-label="Permalink to &quot;Supported Systems&quot;"></a></h2><table tabindex="0"><thead><tr><th>System</th><th>amd64</th><th>arm64</th></tr></thead><tbody><tr><td>Ubuntu 22.04</td><td>✓</td><td>✓</td></tr><tr><td>Debian 12</td><td>✓</td><td>✓</td></tr><tr><td>Alpine latest</td><td>✓</td><td>✓</td></tr><tr><td>AlmaLinux 9</td><td>✓</td><td>✓</td></tr><tr><td>RockyLinux 9</td><td>✓</td><td>✓</td></tr><tr><td>OpenEuler 22.03</td><td>✓</td><td>✓</td></tr></tbody></table><h2 id="configuration-requirements" tabindex="-1">Configuration Requirements <a class="header-anchor" href="#configuration-requirements" aria-label="Permalink to &quot;Configuration Requirements&quot;"></a></h2><ul><li>Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch</li><li>Architecture: x86_64 (amd64) or ARM64</li><li>Kernel must support overlay filesystem</li><li>Network must be able to connect to GitHub raw interface</li><li>At least 3GB free disk space</li><li><strong>No KVM hardware support required</strong></li></ul>',12)]))}const m=e(o,[["render",a]]);export{h as __pageData,m as default};
import{_ as e,c as r,o as n,ag as i}from"./chunks/framework.CSeR4K32.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1780936388000}'),o={name:"en/guide/containerd/containerd_precheck.md"};function a(s,t,d,l,c,u){return n(),r("div",null,t[0]||(t[0]=[i('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h1><p>The following is an introduction to the non-customized sections. Please ensure that you don&#39;t confuse them with the customized parts.</p><p>If your host does not have an IPv6 subnet and you want to assign IPv6 addresses to containers, the host itself needs a public IPv6 address. The installation script will automatically detect and configure this.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>The containerd solution <strong>does not support KVM/QEMU virtual machines</strong>. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.</p></div><p>Feel free to give the project a <code>Star</code> for free support! --&gt; <a href="https://github.com/oneclickvirt/containerd" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/containerd</a></p><h2 id="project-features" tabindex="-1">Project Features <a class="header-anchor" href="#project-features" aria-label="Permalink to &quot;Project Features&quot;"></a></h2><p>Bulk or individual NAT server provisioning based on containerd + nerdctl runtime</p><ul><li>Installs containerd + runc + nerdctl + CNI + buildkitd via the <a href="https://github.com/containerd/nerdctl" target="_blank" rel="noreferrer">nerdctl-full</a> bundle</li><li>Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to official images</li><li>Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding</li><li>Default unprivileged containers, supports lxcfs mounting (if lxcfs is installed on the host)</li><li>Supports disk limit parameters (requires xfs/btrfs snapshotter with storage-opt support)</li><li>Supports China CDN acceleration</li></ul><h2 id="supported-systems" tabindex="-1">Supported Systems <a class="header-anchor" href="#supported-systems" aria-label="Permalink to &quot;Supported Systems&quot;"></a></h2><table tabindex="0"><thead><tr><th>System</th><th>amd64</th><th>arm64</th></tr></thead><tbody><tr><td>Ubuntu 22.04</td><td>✓</td><td>✓</td></tr><tr><td>Debian 12</td><td>✓</td><td>✓</td></tr><tr><td>Alpine latest</td><td>✓</td><td>✓</td></tr><tr><td>AlmaLinux 9</td><td>✓</td><td>✓</td></tr><tr><td>RockyLinux 9</td><td>✓</td><td>✓</td></tr><tr><td>OpenEuler 22.03</td><td>✓</td><td>✓</td></tr></tbody></table><h2 id="configuration-requirements" tabindex="-1">Configuration Requirements <a class="header-anchor" href="#configuration-requirements" aria-label="Permalink to &quot;Configuration Requirements&quot;"></a></h2><ul><li>Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch</li><li>Architecture: x86_64 (amd64) or ARM64</li><li>Kernel must support overlay filesystem</li><li>Network must be able to connect to GitHub raw interface</li><li>At least 3GB free disk space</li><li><strong>No KVM hardware support required</strong></li></ul>',12)]))}const m=e(o,[["render",a]]);export{h as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as e,c as r,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1780885577000}'),o={name:"en/guide/containerd/containerd_precheck.md"};function a(s,t,d,l,c,u){return n(),r("div",null,t[0]||(t[0]=[i("",12)]))}const m=e(o,[["render",a]]);export{h as __pageData,m as default};
import{_ as e,c as r,o as n,ag as i}from"./chunks/framework.CSeR4K32.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1780936388000}'),o={name:"en/guide/containerd/containerd_precheck.md"};function a(s,t,d,l,c,u){return n(),r("div",null,t[0]||(t[0]=[i("",12)]))}const m=e(o,[["render",a]]);export{h as __pageData,m as default};

View File

@@ -1,4 +1,4 @@
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"FAQ"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"FAQ"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1780885577000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,r,p,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`<h1 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to &quot;FAQ&quot;"></a></h1><h2 id="nerdctl-command-not-found" tabindex="-1">nerdctl: command not found <a class="header-anchor" href="#nerdctl-command-not-found" aria-label="Permalink to &quot;nerdctl: command not found&quot;"></a></h2><p>The containerd environment is not correctly installed or <code>/usr/local/bin</code> is not in PATH.</p><p>Fix:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> PATH</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/usr/local/bin:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$PATH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span>
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"FAQ"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"FAQ"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1780936388000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,r,p,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`<h1 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to &quot;FAQ&quot;"></a></h1><h2 id="nerdctl-command-not-found" tabindex="-1">nerdctl: command not found <a class="header-anchor" href="#nerdctl-command-not-found" aria-label="Permalink to &quot;nerdctl: command not found&quot;"></a></h2><p>The containerd environment is not correctly installed or <code>/usr/local/bin</code> is not in PATH.</p><p>Fix:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> PATH</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/usr/local/bin:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$PATH</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">echo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;export PATH=&quot;/usr/local/bin:$PATH&quot;&#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &gt;&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /etc/profile</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">source</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /etc/profile</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>If still not found, re-run the installation script:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -sSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="containerd-service-not-running" tabindex="-1">containerd service not running <a class="header-anchor" href="#containerd-service-not-running" aria-label="Permalink to &quot;containerd service not running&quot;"></a></h2><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> status</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> containerd</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">systemctl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> containerd</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>View logs:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">journalctl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -u</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> containerd</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -f</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><h2 id="container-cannot-access-external-network-ipv4" tabindex="-1">Container cannot access external network (IPv4) <a class="header-anchor" href="#container-cannot-access-external-network-ipv4" aria-label="Permalink to &quot;Container cannot access external network (IPv4)&quot;"></a></h2><p>Check if iptables NAT rules exist:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nat</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -L</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POSTROUTING</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -v</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> grep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 172.20</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>If not present, add manually:</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">iptables</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nat</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -A</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POSTROUTING</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 172.20.0.0/16</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> !</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 172.20.0.0/16</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -j</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> MASQUERADE</span></span>

View File

@@ -1 +1 @@
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"FAQ"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"FAQ"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1780885577000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,r,p,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",32)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"FAQ"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"FAQ"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1780936388000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,r,p,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",32)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};

View File

@@ -1 +1 @@
import{_ as e,c as n,o as r,ag as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1780885577000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,p,s,h,l){return r(),n("div",null,t[0]||(t[0]=[a('<h2 id="acknowledgements" tabindex="-1">Acknowledgements <a class="header-anchor" href="#acknowledgements" aria-label="Permalink to &quot;Acknowledgements&quot;"></a></h2><p><a href="https://github.com/containerd/nerdctl" target="_blank" rel="noreferrer">https://github.com/containerd/nerdctl</a></p><p><a href="https://github.com/containerd/containerd" target="_blank" rel="noreferrer">https://github.com/containerd/containerd</a></p><p><a href="https://github.com/opencontainers/runc" target="_blank" rel="noreferrer">https://github.com/opencontainers/runc</a></p><p><a href="https://github.com/containernetworking/cni" target="_blank" rel="noreferrer">https://github.com/containernetworking/cni</a></p><p><a href="https://github.com/moby/buildkit" target="_blank" rel="noreferrer">https://github.com/moby/buildkit</a></p><p><a href="https://github.com/yoursunny/ndpresponder" target="_blank" rel="noreferrer">https://github.com/yoursunny/ndpresponder</a></p><p><a href="https://github.com/lxc/lxcfs" target="_blank" rel="noreferrer">https://github.com/lxc/lxcfs</a></p><p><a href="https://github.com/SuperManito/LinuxMirrors" target="_blank" rel="noreferrer">https://github.com/SuperManito/LinuxMirrors</a></p>',9)]))}const g=e(o,[["render",i]]);export{m as __pageData,g as default};
import{_ as e,c as n,o as r,ag as a}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1780936388000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,p,s,h,l){return r(),n("div",null,t[0]||(t[0]=[a('<h2 id="acknowledgements" tabindex="-1">Acknowledgements <a class="header-anchor" href="#acknowledgements" aria-label="Permalink to &quot;Acknowledgements&quot;"></a></h2><p><a href="https://github.com/containerd/nerdctl" target="_blank" rel="noreferrer">https://github.com/containerd/nerdctl</a></p><p><a href="https://github.com/containerd/containerd" target="_blank" rel="noreferrer">https://github.com/containerd/containerd</a></p><p><a href="https://github.com/opencontainers/runc" target="_blank" rel="noreferrer">https://github.com/opencontainers/runc</a></p><p><a href="https://github.com/containernetworking/cni" target="_blank" rel="noreferrer">https://github.com/containernetworking/cni</a></p><p><a href="https://github.com/moby/buildkit" target="_blank" rel="noreferrer">https://github.com/moby/buildkit</a></p><p><a href="https://github.com/yoursunny/ndpresponder" target="_blank" rel="noreferrer">https://github.com/yoursunny/ndpresponder</a></p><p><a href="https://github.com/lxc/lxcfs" target="_blank" rel="noreferrer">https://github.com/lxc/lxcfs</a></p><p><a href="https://github.com/SuperManito/LinuxMirrors" target="_blank" rel="noreferrer">https://github.com/SuperManito/LinuxMirrors</a></p>',9)]))}const g=e(o,[["render",i]]);export{m as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as e,c as n,o as r,ag as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1780885577000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,p,s,h,l){return r(),n("div",null,t[0]||(t[0]=[a("",9)]))}const g=e(o,[["render",i]]);export{m as __pageData,g as default};
import{_ as e,c as n,o as r,ag as a}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1780936388000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,p,s,h,l){return r(),n("div",null,t[0]||(t[0]=[a("",9)]))}const g=e(o,[["render",i]]);export{m as __pageData,g as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as t,c as a,o as r,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboard.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboard.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1780885577000}'),n={name:"en/guide/dashboard.md"};function o(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i("",35)]))}const u=t(n,[["render",o]]);export{m as __pageData,u as default};
import{_ as t,c as a,o as r,ag as i}from"./chunks/framework.CSeR4K32.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboard.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboard.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1780936388000}'),n={name:"en/guide/dashboard.md"};function o(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i("",35)]))}const u=t(n,[["render",o]]);export{m as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as t,c as a,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/wechat.BhfskdFa.jpg",b=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1780885577000}'),r={name:"en/guide/dashboardq.md"};function p(l,e,o,d,c,h){return s(),a("div",null,e[0]||(e[0]=[i('<p>Give me a cup of coffee.</p><p><a href="https://ko-fi.com/spiritlhl" target="_blank" rel="noreferrer">https://ko-fi.com/spiritlhl</a></p><p>WeChat</p><p><img src="'+n+'" alt="WeChat" loading="lazy"></p><p>USDT-TRC20</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>USDT-Polygon/Matic</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div>',8)]))}const g=t(r,[["render",p]]);export{b as __pageData,g as default};
import{_ as t,c as a,o as s,ag as i}from"./chunks/framework.CSeR4K32.js";const n="/assets/wechat.BhfskdFa.jpg",b=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1780936388000}'),r={name:"en/guide/dashboardq.md"};function p(l,e,o,d,c,h){return s(),a("div",null,e[0]||(e[0]=[i('<p>Give me a cup of coffee.</p><p><a href="https://ko-fi.com/spiritlhl" target="_blank" rel="noreferrer">https://ko-fi.com/spiritlhl</a></p><p>WeChat</p><p><img src="'+n+'" alt="WeChat" loading="lazy"></p><p>USDT-TRC20</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>USDT-Polygon/Matic</p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div>',8)]))}const g=t(r,[["render",p]]);export{b as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as t,c as a,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/wechat.BhfskdFa.jpg",b=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1780885577000}'),r={name:"en/guide/dashboardq.md"};function p(l,e,o,d,c,h){return s(),a("div",null,e[0]||(e[0]=[i("",8)]))}const g=t(r,[["render",p]]);export{b as __pageData,g as default};
import{_ as t,c as a,o as s,ag as i}from"./chunks/framework.CSeR4K32.js";const n="/assets/wechat.BhfskdFa.jpg",b=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/dashboardq.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1780936388000}'),r={name:"en/guide/dashboardq.md"};function p(l,e,o,d,c,h){return s(),a("div",null,e[0]||(e[0]=[i("",8)]))}const g=t(r,[["render",p]]);export{b as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as i,c as n,o as s,ag as a}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_android.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running Android Virtual Machine in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_android.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running Android Virtual Machine in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1780885577000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,e,l,d,h,p){return s(),n("div",null,e[0]||(e[0]=[a("",22)]))}const g=i(t,[["render",r]]);export{k as __pageData,g as default};
import{_ as i,c as n,o as s,ag as a}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_android.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running Android Virtual Machine in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_android.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running Android Virtual Machine in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1780936388000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,e,l,d,h,p){return s(),n("div",null,e[0]||(e[0]=[a("",22)]))}const g=i(t,[["render",r]]);export{k as __pageData,g as default};

View File

@@ -1 +1 @@
import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_build.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_build.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1780885577000}'),t={name:"en/guide/docker/docker_build.md"};function l(r,s,h,p,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",51)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_build.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_build.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1780936388000}'),t={name:"en/guide/docker/docker_build.md"};function l(r,s,h,p,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",51)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};

View File

@@ -1 +1 @@
import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Script for One-Click Installation of Certain Containers using Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_custom.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Script for One-Click Installation of Certain Containers using Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_custom.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Script for One-Click Installation of Certain Containers using Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1780885577000}'),t={name:"en/guide/docker/docker_custom.md"};function o(l,s,r,p,h,c){return a(),e("div",null,s[0]||(s[0]=[n("",52)]))}const u=i(t,[["render",o]]);export{k as __pageData,u as default};
import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Script for One-Click Installation of Certain Containers using Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_custom.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Script for One-Click Installation of Certain Containers using Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_custom.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Script for One-Click Installation of Certain Containers using Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1780936388000}'),t={name:"en/guide/docker/docker_custom.md"};function o(l,s,r,p,h,c){return a(),e("div",null,s[0]||(s[0]=[n("",52)]))}const u=i(t,[["render",o]]);export{k as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_install.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_install.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1780885577000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,p,h,o,d){return a(),e("div",null,s[0]||(s[0]=[t("",26)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default};
import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_install.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Preface"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_install.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Preface"}]]},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1780936388000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,p,h,o,d){return a(),e("div",null,s[0]||(s[0]=[t("",26)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running macOS Virtual Machines in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running macOS Virtual Machines in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1780885577000}'),o={name:"en/guide/docker/docker_macos.md"};function c(i,e,s,l,d,m){return a(),r("div",null,e[0]||(e[0]=[n('<h1 id="running-macos-virtual-machines-in-docker" tabindex="-1">Running macOS Virtual Machines in Docker <a class="header-anchor" href="#running-macos-virtual-machines-in-docker" aria-label="Permalink to &quot;Running macOS Virtual Machines in Docker&quot;"></a></h1><h2 id="using-dockur" tabindex="-1">Using Dockur <a class="header-anchor" href="#using-dockur" aria-label="Permalink to &quot;Using Dockur&quot;"></a></h2><p>Original Project:</p><p><a href="https://github.com/dockur/macos" target="_blank" rel="noreferrer">https://github.com/dockur/macos</a></p><h2 id="using-docker-osx" tabindex="-1">Using Docker-OSX <a class="header-anchor" href="#using-docker-osx" aria-label="Permalink to &quot;Using Docker-OSX&quot;"></a></h2><p>Original Project:</p><p><a href="https://github.com/sickcodes/Docker-OSX" target="_blank" rel="noreferrer">https://github.com/sickcodes/Docker-OSX</a></p>',7)]))}const k=t(o,[["render",c]]);export{h as __pageData,k as default};
import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.CSeR4K32.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running macOS Virtual Machines in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running macOS Virtual Machines in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1780936388000}'),o={name:"en/guide/docker/docker_macos.md"};function c(i,e,s,l,d,m){return a(),r("div",null,e[0]||(e[0]=[n('<h1 id="running-macos-virtual-machines-in-docker" tabindex="-1">Running macOS Virtual Machines in Docker <a class="header-anchor" href="#running-macos-virtual-machines-in-docker" aria-label="Permalink to &quot;Running macOS Virtual Machines in Docker&quot;"></a></h1><h2 id="using-dockur" tabindex="-1">Using Dockur <a class="header-anchor" href="#using-dockur" aria-label="Permalink to &quot;Using Dockur&quot;"></a></h2><p>Original Project:</p><p><a href="https://github.com/dockur/macos" target="_blank" rel="noreferrer">https://github.com/dockur/macos</a></p><h2 id="using-docker-osx" tabindex="-1">Using Docker-OSX <a class="header-anchor" href="#using-docker-osx" aria-label="Permalink to &quot;Using Docker-OSX&quot;"></a></h2><p>Original Project:</p><p><a href="https://github.com/sickcodes/Docker-OSX" target="_blank" rel="noreferrer">https://github.com/sickcodes/Docker-OSX</a></p>',7)]))}const k=t(o,[["render",c]]);export{h as __pageData,k as default};

View File

@@ -1 +1 @@
import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running macOS Virtual Machines in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running macOS Virtual Machines in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1780885577000}'),o={name:"en/guide/docker/docker_macos.md"};function c(i,e,s,l,d,m){return a(),r("div",null,e[0]||(e[0]=[n("",7)]))}const k=t(o,[["render",c]]);export{h as __pageData,k as default};
import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.CSeR4K32.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running macOS Virtual Machines in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_macos.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running macOS Virtual Machines in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1780936388000}'),o={name:"en/guide/docker/docker_macos.md"};function c(i,e,s,l,d,m){return a(),r("div",null,e[0]||(e[0]=[n("",7)]))}const k=t(o,[["render",c]]);export{h as __pageData,k as default};

View File

@@ -1 +1 @@
import{_ as t,c as o,o as r,ag as a}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1780885577000}'),n={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,d,l,h){return r(),o("div",null,e[0]||(e[0]=[a('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h1><p>This page introduces the standard (non-customized) workflow.</p><p>If your host has no IPv6 subnet but you want to assign IPv6 addresses to containers, check the <code>Customize</code> section in the <code>Docker</code> module for <code>Attach a free IPv6 address segment to the host</code>, then attach an IPv6 subnet before installation.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>If the host has IPv6 networking, installation may change host network structure. Ensure the host can be recovered/reinstalled at any time, and do not run on machines with critical data.</p></div><p>Feel free to give the project a <code>Star</code> for free support!--&gt;<a href="https://github.com/oneclickvirt/docker" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/docker</a></p><h2 id="project-features" tabindex="-1">Project Features <a class="header-anchor" href="#project-features" aria-label="Permalink to &quot;Project Features&quot;"></a></h2><p>Bulk or individual NAT server provisioning via Docker.</p><p>Uses Debian by default (Alpine optional). Each container includes 1 external SSH port plus 25 matched internal/external ports, with optional IPv6 binding.</p><p>Containers are created as unprivileged by default, and Docker daemon sockets are not mounted from the host. Therefore, <strong>Docker-in-Docker nested virtualization is not supported inside these NAT containers</strong>.</p><p>By default, lxcfs is installed and enabled, so that when querying resources within a container, CPU and memory use the configured view instead of the host&#39;s view.</p><p>By default, the installer lets you choose whether to share host disk space and whether to enable container disk-size limits.</p><h2 id="configuration-requirements" tabindex="-1">Configuration requirements <a class="header-anchor" href="#configuration-requirements" aria-label="Permalink to &quot;Configuration requirements&quot;"></a></h2><p>Any system that can install Docker can use this solution. The host should be able to access GitHub raw content, and at least 3 GB of free disk space is recommended.</p><p>(If you need IPv6 binding, install Docker through this project&#39;s installer so the required network presets are applied automatically.)</p><p>If your hardware is moderate and you need stricter resource controls (especially disk limits), use the Incus module to create LXC containers in batch.</p><p>If your hardware has strong capacity and you need larger-scale VM workloads, use the PVE module to create KVM VMs in batch.</p>',16)]))}const m=t(n,[["render",i]]);export{p as __pageData,m as default};
import{_ as t,c as o,o as r,ag as a}from"./chunks/framework.CSeR4K32.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1780936388000}'),n={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,d,l,h){return r(),o("div",null,e[0]||(e[0]=[a('<h1 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Introduction&quot;"></a></h1><p>This page introduces the standard (non-customized) workflow.</p><p>If your host has no IPv6 subnet but you want to assign IPv6 addresses to containers, check the <code>Customize</code> section in the <code>Docker</code> module for <code>Attach a free IPv6 address segment to the host</code>, then attach an IPv6 subnet before installation.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>If the host has IPv6 networking, installation may change host network structure. Ensure the host can be recovered/reinstalled at any time, and do not run on machines with critical data.</p></div><p>Feel free to give the project a <code>Star</code> for free support!--&gt;<a href="https://github.com/oneclickvirt/docker" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/docker</a></p><h2 id="project-features" tabindex="-1">Project Features <a class="header-anchor" href="#project-features" aria-label="Permalink to &quot;Project Features&quot;"></a></h2><p>Bulk or individual NAT server provisioning via Docker.</p><p>Uses Debian by default (Alpine optional). Each container includes 1 external SSH port plus 25 matched internal/external ports, with optional IPv6 binding.</p><p>Containers are created as unprivileged by default, and Docker daemon sockets are not mounted from the host. Therefore, <strong>Docker-in-Docker nested virtualization is not supported inside these NAT containers</strong>.</p><p>By default, lxcfs is installed and enabled, so that when querying resources within a container, CPU and memory use the configured view instead of the host&#39;s view.</p><p>By default, the installer lets you choose whether to share host disk space and whether to enable container disk-size limits.</p><h2 id="configuration-requirements" tabindex="-1">Configuration requirements <a class="header-anchor" href="#configuration-requirements" aria-label="Permalink to &quot;Configuration requirements&quot;"></a></h2><p>Any system that can install Docker can use this solution. The host should be able to access GitHub raw content, and at least 3 GB of free disk space is recommended.</p><p>(If you need IPv6 binding, install Docker through this project&#39;s installer so the required network presets are applied automatically.)</p><p>If your hardware is moderate and you need stricter resource controls (especially disk limits), use the Incus module to create LXC containers in batch.</p><p>If your hardware has strong capacity and you need larger-scale VM workloads, use the PVE module to create KVM VMs in batch.</p>',16)]))}const m=t(n,[["render",i]]);export{p as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as t,c as o,o as r,ag as a}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1780885577000}'),n={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,d,l,h){return r(),o("div",null,e[0]||(e[0]=[a("",16)]))}const m=t(n,[["render",i]]);export{p as __pageData,m as default};
import{_ as t,c as o,o as r,ag as a}from"./chunks/framework.CSeR4K32.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Introduction"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_precheck.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Introduction"}]]},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1780936388000}'),n={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,d,l,h){return r(),o("div",null,e[0]||(e[0]=[a("",16)]))}const m=t(n,[["render",i]]);export{p as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as a,c as s,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Solve the puzzle"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Solve the puzzle"}]]},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1780885577000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,r,o,c,d){return n(),s("div",null,e[0]||(e[0]=[i("",22)]))}const h=a(t,[["render",p]]);export{u as __pageData,h as default};
import{_ as a,c as s,o as n,ag as i}from"./chunks/framework.CSeR4K32.js";const u=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_qa.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Solve the puzzle"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_qa.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Solve the puzzle"}]]},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1780936388000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,r,o,c,d){return n(),s("div",null,e[0]||(e[0]=[i("",22)]))}const h=a(t,[["render",p]]);export{u as __pageData,h as default};

View File

@@ -1 +1 @@
import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1780885577000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(i,e,p,h,l,s){return a(),t("div",null,e[0]||(e[0]=[o('<h2 id="acknowledgements" tabindex="-1">Acknowledgements <a class="header-anchor" href="#acknowledgements" aria-label="Permalink to &quot;Acknowledgements&quot;"></a></h2><p><a href="https://hub.docker.com/_/debian" target="_blank" rel="noreferrer">https://hub.docker.com/_/debian</a></p><p><a href="https://hub.docker.com/r/redroid/redroid" target="_blank" rel="noreferrer">https://hub.docker.com/r/redroid/redroid</a></p><p><a href="https://github.com/NetrisTV/ws-scrcpy" target="_blank" rel="noreferrer">https://github.com/NetrisTV/ws-scrcpy</a></p><p><a href="https://guacamole.apache.org/doc/gug/introduction.html" target="_blank" rel="noreferrer">https://guacamole.apache.org/doc/gug/introduction.html</a></p><p><a href="https://blog.imoeq.com/oracle-arm-run-android-by-docker" target="_blank" rel="noreferrer">https://blog.imoeq.com/oracle-arm-run-android-by-docker</a></p><p><a href="https://blog.imoeq.com/scrcpy-run-a-android-web-page" target="_blank" rel="noreferrer">https://blog.imoeq.com/scrcpy-run-a-android-web-page</a></p><p><a href="https://github.com/NetrisTV/ws-scrcpy" target="_blank" rel="noreferrer">https://github.com/NetrisTV/ws-scrcpy</a></p><p><a href="https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/" target="_blank" rel="noreferrer">https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/</a></p><p><a href="https://releases.hashicorp.com/vagrant/" target="_blank" rel="noreferrer">https://releases.hashicorp.com/vagrant/</a></p><p><a href="https://github.com/hashicorp/vagrant/" target="_blank" rel="noreferrer">https://github.com/hashicorp/vagrant/</a></p><p><a href="https://app.vagrantup.com/peru" target="_blank" rel="noreferrer">https://app.vagrantup.com/peru</a></p><p><a href="https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1" target="_blank" rel="noreferrer">https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1</a></p><p><a href="https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4" target="_blank" rel="noreferrer">https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4</a></p><p><a href="https://github.com/jlesage/docker-firefox" target="_blank" rel="noreferrer">https://github.com/jlesage/docker-firefox</a></p><p><a href="https://github.com/linuxserver/docker-webtop" target="_blank" rel="noreferrer">https://github.com/linuxserver/docker-webtop</a></p><p><a href="https://github.com/yoursunny/ndpresponder" target="_blank" rel="noreferrer">https://github.com/yoursunny/ndpresponder</a></p><p><a href="https://github.com/linuxserver/docker-chromium" target="_blank" rel="noreferrer">https://github.com/linuxserver/docker-chromium</a></p><p><a href="https://github.com/SuperManito/LinuxMirrors" target="_blank" rel="noreferrer">https://github.com/SuperManito/LinuxMirrors</a></p><p>Thank <a href="https://github.com/Ella-Alinda" target="_blank" rel="noreferrer">@Ella-Alinda</a> and @CoiaPrant for providing docker guidance.</p>',20)]))}const m=r(n,[["render",c]]);export{d as __pageData,m as default};
import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1780936388000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(i,e,p,h,l,s){return a(),t("div",null,e[0]||(e[0]=[o('<h2 id="acknowledgements" tabindex="-1">Acknowledgements <a class="header-anchor" href="#acknowledgements" aria-label="Permalink to &quot;Acknowledgements&quot;"></a></h2><p><a href="https://hub.docker.com/_/debian" target="_blank" rel="noreferrer">https://hub.docker.com/_/debian</a></p><p><a href="https://hub.docker.com/r/redroid/redroid" target="_blank" rel="noreferrer">https://hub.docker.com/r/redroid/redroid</a></p><p><a href="https://github.com/NetrisTV/ws-scrcpy" target="_blank" rel="noreferrer">https://github.com/NetrisTV/ws-scrcpy</a></p><p><a href="https://guacamole.apache.org/doc/gug/introduction.html" target="_blank" rel="noreferrer">https://guacamole.apache.org/doc/gug/introduction.html</a></p><p><a href="https://blog.imoeq.com/oracle-arm-run-android-by-docker" target="_blank" rel="noreferrer">https://blog.imoeq.com/oracle-arm-run-android-by-docker</a></p><p><a href="https://blog.imoeq.com/scrcpy-run-a-android-web-page" target="_blank" rel="noreferrer">https://blog.imoeq.com/scrcpy-run-a-android-web-page</a></p><p><a href="https://github.com/NetrisTV/ws-scrcpy" target="_blank" rel="noreferrer">https://github.com/NetrisTV/ws-scrcpy</a></p><p><a href="https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/" target="_blank" rel="noreferrer">https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/</a></p><p><a href="https://releases.hashicorp.com/vagrant/" target="_blank" rel="noreferrer">https://releases.hashicorp.com/vagrant/</a></p><p><a href="https://github.com/hashicorp/vagrant/" target="_blank" rel="noreferrer">https://github.com/hashicorp/vagrant/</a></p><p><a href="https://app.vagrantup.com/peru" target="_blank" rel="noreferrer">https://app.vagrantup.com/peru</a></p><p><a href="https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1" target="_blank" rel="noreferrer">https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1</a></p><p><a href="https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4" target="_blank" rel="noreferrer">https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4</a></p><p><a href="https://github.com/jlesage/docker-firefox" target="_blank" rel="noreferrer">https://github.com/jlesage/docker-firefox</a></p><p><a href="https://github.com/linuxserver/docker-webtop" target="_blank" rel="noreferrer">https://github.com/linuxserver/docker-webtop</a></p><p><a href="https://github.com/yoursunny/ndpresponder" target="_blank" rel="noreferrer">https://github.com/yoursunny/ndpresponder</a></p><p><a href="https://github.com/linuxserver/docker-chromium" target="_blank" rel="noreferrer">https://github.com/linuxserver/docker-chromium</a></p><p><a href="https://github.com/SuperManito/LinuxMirrors" target="_blank" rel="noreferrer">https://github.com/SuperManito/LinuxMirrors</a></p><p>Thank <a href="https://github.com/Ella-Alinda" target="_blank" rel="noreferrer">@Ella-Alinda</a> and @CoiaPrant for providing docker guidance.</p>',20)]))}const m=r(n,[["render",c]]);export{d as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1780885577000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(i,e,p,h,l,s){return a(),t("div",null,e[0]||(e[0]=[o("",20)]))}const m=r(n,[["render",c]]);export{d as __pageData,m as default};
import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CSeR4K32.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"OneClickVirt"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_thanks.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"OneClickVirt"}]]},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1780936388000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(i,e,p,h,l,s){return a(),t("div",null,e[0]||(e[0]=[o("",20)]))}const m=r(n,[["render",c]]);export{d as __pageData,m as default};

View File

@@ -1 +1 @@
import{_ as e,c as i,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Windows Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_windows.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running Windows Virtual Machine in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_windows.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running Windows Virtual Machine in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1780885577000}'),t={name:"en/guide/docker/docker_windows.md"};function r(l,s,o,p,h,d){return a(),i("div",null,s[0]||(s[0]=[n("",61)]))}const u=e(t,[["render",r]]);export{k as __pageData,u as default};
import{_ as e,c as i,o as a,ag as n}from"./chunks/framework.CSeR4K32.js";const k=JSON.parse('{"title":"Running Windows Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/docker/docker_windows.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Running Windows Virtual Machine in Docker"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/docker/docker_windows.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Running Windows Virtual Machine in Docker"}]]},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1780936388000}'),t={name:"en/guide/docker/docker_windows.md"};function r(l,s,o,p,h,d){return a(),i("div",null,s[0]||(s[0]=[n("",61)]))}const u=e(t,[["render",r]]);export{k as __pageData,u as default};

View File

@@ -1 +1 @@
import{_ as s,c as a,o as n,ag as t}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",p="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",o="/assets/lxd5.WUJi0qzd.png",d="/assets/lxd6.Cnds779U.png",c="/assets/lxd7.EJ0s1ls2.png",h="/assets/lxd8.DAOueoww.png",u="/assets/lxd9.Dgmw4lpJ.png",b="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",k="/assets/lxd13.Dwv7xBpz.png",v="/assets/lxd14.Whdz6cP-.png",f="/assets/lxd15.BjW7LbDr.png",y="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",F="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",_="/assets/lxd21.w-R0l00Y.png",P="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",S=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/incus/incus_custom.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Custom Configuration"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/incus/incus_custom.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Custom Configuration"}]]},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1780885577000}'),I={name:"en/guide/incus/incus_custom.md"};function B(q,e,T,A,O,z){return n(),a("div",null,e[0]||(e[0]=[t("",194)]))}const W=s(I,[["render",B]]);export{S as __pageData,W as default};
import{_ as s,c as a,o as n,ag as t}from"./chunks/framework.CSeR4K32.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",p="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",o="/assets/lxd5.WUJi0qzd.png",d="/assets/lxd6.Cnds779U.png",c="/assets/lxd7.EJ0s1ls2.png",h="/assets/lxd8.DAOueoww.png",u="/assets/lxd9.Dgmw4lpJ.png",b="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",k="/assets/lxd13.Dwv7xBpz.png",v="/assets/lxd14.Whdz6cP-.png",f="/assets/lxd15.BjW7LbDr.png",y="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",F="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",_="/assets/lxd21.w-R0l00Y.png",P="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",S=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep","head":[["link",{"rel":"canonical","href":"https://www.spiritlhl.net/en/guide/incus/incus_custom.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"OneClickVirt"}],["meta",{"property":"og:locale","content":"en_US"}],["meta",{"property":"og:title","content":"Custom Configuration"}],["meta",{"property":"og:url","content":"https://www.spiritlhl.net/en/guide/incus/incus_custom.html"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Custom Configuration"}]]},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1780936388000}'),I={name:"en/guide/incus/incus_custom.md"};function B(q,e,T,A,O,z){return n(),a("div",null,e[0]||(e[0]=[t("",194)]))}const W=s(I,[["render",B]]);export{S as __pageData,W as default};

Some files were not shown because too many files have changed in this diff Show More