diff --git a/404.html b/404.html index dc51714087..ef22d41f65 100644 --- a/404.html +++ b/404.html @@ -20,7 +20,7 @@
- + \ No newline at end of file diff --git a/assets/case_case1.md.CSxNJhxe.js b/assets/case_case1.md.DbxkDXWP.js similarity index 99% rename from assets/case_case1.md.CSxNJhxe.js rename to assets/case_case1.md.DbxkDXWP.js index a6f1b97b00..c575b5a3a3 100644 --- a/assets/case_case1.md.CSxNJhxe.js +++ b/assets/case_case1.md.DbxkDXWP.js @@ -1,4 +1,4 @@ -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"},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1773143516000}'),e={name:"case/case1.md"};function h(l,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

ECS

Build and Release

FOSSA Status

Hits Downloads

融合怪测评项目 - GO版本

(仅环境安装[非必须]使用shell外无额外shell文件依赖,环境安装只是为了测的更准,极端情况下无环境依赖安装也可全测项目)

如有问题请 issues 反馈。

Go 版本:https://github.com/oneclickvirt/ecs

Shell 版本:https://github.com/spiritLHLS/ecs


适配系统和架构

编译与测试支持情况

编译支持的架构测试支持的架构编译支持的系统测试支持的系统
amd64amd64LinuxLinux
arm64arm64WindowsWindows
armMacOS(Darwin)MacOS
386FreeBSD
mips,mipsleAndroid
mips64,mips64le
ppc64,ppc64le
s390xs390x
riscv64

更多架构与系统请自行测试或编译,如有问题请开 issues。

待支持的系统

系统说明
OpenBSD/NetBSD部分Goalng的官方库未支持本系统(尤其是net相关项目)

功能

本项目初次使用建议查看说明:跳转


使用说明

Linux/FreeBSD/MacOS

一键命令

一键命令将默认不安装依赖,默认不更新包管理器,默认非互动模式

如果需要测试更准确,请按照下面的详细说明进行安装,添加非必需的依赖

详细说明

以下命令可控制是否安装依赖是否更新包管理器互动模式和非交互模式

展开查看详细说明
  1. 下载脚本

    国际用户无加速:

    bash
    curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

    国际/国内使用 CDN 加速:

    bash
    curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

    国内用户使用 CNB 加速:

    bash
    curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh
  2. 更新包管理器(可选择)并安装环境

    bash
    ./goecs.sh env

    非互动模式:

    bash
    export noninteractive=true && ./goecs.sh env
  3. 安装 goecs 本体(仅下载二进制文件无依赖安装)

    bash
    ./goecs.sh install
  4. 升级 goecs 本体

    bash
    ./goecs.sh upgrade
  5. 卸载 goecs 本体

    bash
    ./goecs.sh uninstall
  6. 帮助命令

    bash
    ./goecs.sh -h
  7. 唤起菜单

    bash
    goecs

命令参数化

展开查看各参数说明
bash
Usage: goecs [options]
+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"},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1773196139000}'),e={name:"case/case1.md"};function h(l,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[t(`

ECS

Build and Release

FOSSA Status

Hits Downloads

融合怪测评项目 - GO版本

(仅环境安装[非必须]使用shell外无额外shell文件依赖,环境安装只是为了测的更准,极端情况下无环境依赖安装也可全测项目)

如有问题请 issues 反馈。

Go 版本:https://github.com/oneclickvirt/ecs

Shell 版本:https://github.com/spiritLHLS/ecs


适配系统和架构

编译与测试支持情况

编译支持的架构测试支持的架构编译支持的系统测试支持的系统
amd64amd64LinuxLinux
arm64arm64WindowsWindows
armMacOS(Darwin)MacOS
386FreeBSD
mips,mipsleAndroid
mips64,mips64le
ppc64,ppc64le
s390xs390x
riscv64

更多架构与系统请自行测试或编译,如有问题请开 issues。

待支持的系统

系统说明
OpenBSD/NetBSD部分Goalng的官方库未支持本系统(尤其是net相关项目)

功能

本项目初次使用建议查看说明:跳转


使用说明

Linux/FreeBSD/MacOS

一键命令

一键命令将默认不安装依赖,默认不更新包管理器,默认非互动模式

  • 国际用户无加速:

    bash
    export noninteractive=true && curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
  • 国际/国内使用 CDN 加速:

    bash
    export noninteractive=true && curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
  • 国内用户使用 CNB 加速:

    bash
    export noninteractive=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs
  • 短链接:

    bash
    export noninteractive=true && curl -L https://bash.spiritlhl.net/goecs -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs

    bash
    export noninteractive=true && curl -L https://ba.sh/JrVa -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs

如果需要测试更准确,请按照下面的详细说明进行安装,添加非必需的依赖

详细说明

以下命令可控制是否安装依赖是否更新包管理器互动模式和非交互模式

展开查看详细说明
  1. 下载脚本

    国际用户无加速:

    bash
    curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

    国际/国内使用 CDN 加速:

    bash
    curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh

    国内用户使用 CNB 加速:

    bash
    curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh
  2. 更新包管理器(可选择)并安装环境

    bash
    ./goecs.sh env

    非互动模式:

    bash
    export noninteractive=true && ./goecs.sh env
  3. 安装 goecs 本体(仅下载二进制文件无依赖安装)

    bash
    ./goecs.sh install
  4. 升级 goecs 本体

    bash
    ./goecs.sh upgrade
  5. 卸载 goecs 本体

    bash
    ./goecs.sh uninstall
  6. 帮助命令

    bash
    ./goecs.sh -h
  7. 唤起菜单

    bash
    goecs

命令参数化

展开查看各参数说明
bash
Usage: goecs [options]
   -backtrace
         Enable/Disable backtrace test (in 'en' language or on windows it always false) (default true)
   -basic
diff --git a/assets/case_case1.md.CSxNJhxe.lean.js b/assets/case_case1.md.DbxkDXWP.lean.js
similarity index 84%
rename from assets/case_case1.md.CSxNJhxe.lean.js
rename to assets/case_case1.md.DbxkDXWP.lean.js
index ffc752e15d..e7020c938e 100644
--- a/assets/case_case1.md.CSxNJhxe.lean.js
+++ b/assets/case_case1.md.DbxkDXWP.lean.js
@@ -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"},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1773143516000}'),e={name:"case/case1.md"};function h(l,s,p,k,r,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.QPV3Ar9-.js";const g=JSON.parse('{"title":"ECS","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1773196139000}'),e={name:"case/case1.md"};function h(l,s,p,k,r,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};
diff --git a/assets/case_case2.md.DRBe_7dn.js b/assets/case_case2.md.DcwQCQim.js
similarity index 99%
rename from assets/case_case2.md.DRBe_7dn.js
rename to assets/case_case2.md.DcwQCQim.js
index fce1c5aaad..0eda0bd3bf 100644
--- a/assets/case_case2.md.DRBe_7dn.js
+++ b/assets/case_case2.md.DcwQCQim.js
@@ -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":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1773143516000}'),l={name:"case/case2.md"};function t(p,s,h,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e(`

仓库

https://github.com/spiritLHLS/one-click-installation-script

Hits

所有脚本如需在国内服务器使用,请在链接前加上https://ghproxy.com/确保命令可以下载本仓库的shell脚本执行

一键修复脚本

运行所有一键修复脚本前注意看说明,以及保证服务器无重要数据,运行后造成的一切后果作者不负任何责任,自行评判风险!

一键尝试修复apt源

  • 支持系统:Ubuntu 12+,Debian 6+
  • 修复apt下载包进程意外退出导致的源锁死
  • 修复apt源broken损坏
  • 修复apt源多进程占用锁死
  • 修复apt源公钥缺失
  • 修复替换系统可用的apt源列表,国内用阿里源,国外用官方源
  • 修复本机的Ubuntu系统是EOL非长期维护的版本(奇数或陈旧的偶数版本),将替换为Ubuntu官方的old-releases仓库以支持apt的使用
  • 修复只保证apt update不会报错,其他命令报错未修复
  • 如若修复后install还有问题,重启服务器解决问题
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/package.sh -o package.sh && chmod +x package.sh && bash package.sh

一键尝试修复系统时间

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 由于系统时间不准确都是未进行时区时间同步造成的,使用chronyd进行时区时间同步后应当解决了问题
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/modify_time.sh -o modify_time.sh && chmod +x modify_time.sh && bash modify_time.sh

一键尝试修复sudo警告

  • 一键尝试修复sudo: unable to resolve host xxx: Name or service not known警告(爆错)

不要在生产环境上使用该脚本,否则容易造成网络hosts配置错误,配置的host名字不在外网IP上反而在内网IP(127.0.0.1)上

bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/check_sudo.sh -o check_sudo.sh && chmod +x check_sudo.sh && bash check_sudo.sh

一键修改系统自带的journal日志记录大小释放系统盘空间

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 1.自定义修改大小,单位为MB,一般500或者1000即可,有的系统日志默认给了5000甚至更多,不是做站啥的没必要
    • 请注意,修改journal目录大小会影响系统日志的记录,因此,在修改journal目录大小之前如果需要之前的日志,建议先备份系统日志到本地
  • 2.自定义修改设置系统日志保留日期时长,超过日期时长的日志将被清除
  • 3.默认修改日志只记录warning等级(无法自定义)
  • 4.以后日志的产生将受到日志文件大小,日志保留时间,日志保留等级的限制
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/resize_journal.sh -o resize_journal.sh && chmod +x resize_journal.sh && bash resize_journal.sh

一键尝试修复网络

该脚本轻易勿要使用,请确保运行时服务器无重要文件或程序,出现运行bug后续可能需要重装系统

一定要在screen中执行该脚本,否则可能导致修改过程中ssh断链接而修改失败卡住最终SSH无法连接!不在screen中执行后果自负!

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 尝试修复nameserver为google源或cloudflare源
  • 尝试修复为IP类型对应的网络优先级(默认IPV4类型,纯V6类型再替换为IPV6类型)
bash
curl -L https://cdn.spiritlhl.workers.dev/https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/network.sh -o network.sh && chmod +x network.sh && bash network.sh

如果是纯V6的也可以不使用上面脚本的nat64,使用warp添加V4网络

比如:https://github.com/fscarmen/warp

bash
curl -sSLO https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh [option] [lisence]

非纯V6的,带V4切换优先级到IPV4可用以下命令

bash
sudo sed -i 's/.*precedence ::ffff:0:0\\/96.*/precedence ::ffff:0:0\\/96  100/g' /etc/gai.conf && sudo systemctl restart networking

一键环境安装脚本

只推荐在新服务器上安装,环境不纯净不保证不出bug

运行所有一键环境安装脚本前注意看说明,以及保证服务器无重要数据,运行后造成的一切后果作者不负任何责任,自行评判风险!

一键安装jupyter环境

  • 本脚本尝试使用Miniconda3安装虚拟环境jupyter-env再进行jupyter和jupyterlab的安装,如若安装机器不纯净勿要轻易使用本脚本!
  • 本脚本为实验性脚本可能会有各种bug,勿要轻易尝试!
  • 验证已支持的系统:
    • Ubuntu 系 - 推荐,脚本自动挂起到后台
    • Debian 系 - 部分可能需要手动挂起到后台,详看脚本运行安装完毕的后续提示
  • 可能支持的系统(未验证):centos 7+,Fedora,Almalinux 8.5+
  • 执行脚本,之前有用本脚本安装过则直接打印设置的登陆信息,没安装过则进行安装再打印信息,如果已安装但未启动则自动启动后再打印信息
  • 如果是初次安装无脑输入y回车即可,按照提示进行操作即可,安装完毕将在后台常驻运行,自动添加常用的安装包通道源
  • 安装完毕后,如果需要在lab中安装第三方库需要在lab中使用terminal并使用conda进行下载而不是pip3下载,这是需要注意的一点
  • 安装过程中有判断是否为中国IP,可选择是否使用中国镜像

原始用途是方便快捷的在按小时计费的超大型服务器上部署python环境进行科学计算,充分利用时间别浪费在构建环境上。

bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/jupyter.sh -o jupyter.sh && chmod +x jupyter.sh && bash jupyter.sh

一键安装R语言环境

  • 安装前需使用Miniconda3安装虚拟环境jupyter-env,然后进行jupyter和jupyterlab的安装,再然后才能安装本内核
  • 简单的说,需要执行本仓库对应的jupyter安装脚本再运行本脚本安装R语言环境,会自动安装R环境内核和图形设备支持库
  • x11可能需要手动启动一下,执行sudo /usr/bin/Xorg
  • 可能支持的系统(未验证):centos 7+,Fedora,Almalinux 8.5+
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/R.sh -o R.sh && chmod +x R.sh && bash R.sh

一键安装rust环境

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 加载官方脚本安装,前置条件适配系统以及后置条件判断安装的版本
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/rust.sh -o rust.sh && chmod +x rust.sh && bash rust.sh

一键安装C环境

  • 一键安装C++环境
  • 支持系统:使用apt或者yum作为包管理器的系统
  • 如果未安装则安装,如果有安装则提示升级
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/cplusplus.sh -o cplusplus.sh && chmod +x cplusplus.sh && bash cplusplus.sh

一键安装vnstat环境

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 加载官方文件编译安装,前置条件适配系统以及后置条件判断安装的版本
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/vnstat.sh -o vnstat.sh && chmod +x vnstat.sh && bash vnstat.sh

一键升级低版本debian为debian11

  • 支持系统:debian 6+
  • 升级后需要重启系统加载内核,升级过程中需要选择的都无脑按回车即可
  • 升级是一个版本迭代一个版本,所以如果版本低,每执行一次升级一个版本,直至升级到debian11
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/todebian11.sh -o todebian11.sh && chmod +x todebian11.sh && bash todebian11.sh

一键升级低版本ubuntu为ubuntu22

  • 支持系统:Ubuntu 16+
  • 升级后需要重启系统加载内核,升级过程中需要选择的都无脑按回车即可
  • 升级是一个版本迭代一个版本,所以如果版本低,每执行一次升级一个版本,直至升级到ubuntu22
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/toubuntu22.sh -o toubuntu22.sh && chmod +x toubuntu22.sh && bash toubuntu22.sh

一键安装zipline平台

  • 应该支持的系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 暂时只在Ubuntu上验证无问题
  • 如若要设置反向代理绑定域名,安装前请保证原服务器未安装过nginx,如若已安装过nginx,请自行配置反向代理本机的3000端口
  • 默认一路回车是不启用反代不安装nginx的,自行选择,如需通过本脚本配置反代系统一定要未安装过nginx并在填写y或Y开启安装
  • zipline 平台功能: ShareX,自定义短链接,文件上传分享,多用户校验,高亮显示,阅后即焚,设置简单 (含pastebin)
  • 自动安装docker,docker-compose,如若已安装zipline在/root目录下,则自动更新
  • 反向代理如若已设置成功,还需要在面板设置中填写域名,绑定启用
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/zipline.sh -o zipline.sh && chmod +x zipline.sh && bash zipline.sh

如果需要删除0字节文件,打开/root/zipline文件夹,执行

docker-compose exec zipline yarn scripts:clear-zero-byte

按照提示操作

一键安装filebrowser平台

  • 端口设置为3030了,其他登陆信息详见提示
  • filebrowser平台支持下载上传文件到服务器,批量下载多个文件(自定义压缩格式),构建文件分享链接,设置分享时长
  • 如果本地有启用IPV6优先级可能绑定到V6去了,使用lsof -i:3030查看绑定情况,切换优先级后再安装就正常了
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/filebrowser.sh -o filebrowser.sh && chmod +x filebrowser.sh && bash filebrowser.sh

一键删除平台监控

  • 一键移除大多数云服务器监控
  • 涵盖阿里云、腾讯云、华为云、UCLOUD、甲骨文云、京东云
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/dlm.sh -o dlm.sh && chmod +x dlm.shh && bash dlm.sh

部分手动命令

一键开启root登陆并替换密码

bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

一键屏蔽邮件端口避免被恶意程序使用

bash
iptables -A INPUT -p tcp --dport 25 -j DROP
+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"},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1773196139000}'),l={name:"case/case2.md"};function t(p,s,h,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e(`

仓库

https://github.com/spiritLHLS/one-click-installation-script

Hits

所有脚本如需在国内服务器使用,请在链接前加上https://ghproxy.com/确保命令可以下载本仓库的shell脚本执行

一键修复脚本

运行所有一键修复脚本前注意看说明,以及保证服务器无重要数据,运行后造成的一切后果作者不负任何责任,自行评判风险!

一键尝试修复apt源

  • 支持系统:Ubuntu 12+,Debian 6+
  • 修复apt下载包进程意外退出导致的源锁死
  • 修复apt源broken损坏
  • 修复apt源多进程占用锁死
  • 修复apt源公钥缺失
  • 修复替换系统可用的apt源列表,国内用阿里源,国外用官方源
  • 修复本机的Ubuntu系统是EOL非长期维护的版本(奇数或陈旧的偶数版本),将替换为Ubuntu官方的old-releases仓库以支持apt的使用
  • 修复只保证apt update不会报错,其他命令报错未修复
  • 如若修复后install还有问题,重启服务器解决问题
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/package.sh -o package.sh && chmod +x package.sh && bash package.sh

一键尝试修复系统时间

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 由于系统时间不准确都是未进行时区时间同步造成的,使用chronyd进行时区时间同步后应当解决了问题
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/modify_time.sh -o modify_time.sh && chmod +x modify_time.sh && bash modify_time.sh

一键尝试修复sudo警告

  • 一键尝试修复sudo: unable to resolve host xxx: Name or service not known警告(爆错)

不要在生产环境上使用该脚本,否则容易造成网络hosts配置错误,配置的host名字不在外网IP上反而在内网IP(127.0.0.1)上

bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/check_sudo.sh -o check_sudo.sh && chmod +x check_sudo.sh && bash check_sudo.sh

一键修改系统自带的journal日志记录大小释放系统盘空间

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 1.自定义修改大小,单位为MB,一般500或者1000即可,有的系统日志默认给了5000甚至更多,不是做站啥的没必要
    • 请注意,修改journal目录大小会影响系统日志的记录,因此,在修改journal目录大小之前如果需要之前的日志,建议先备份系统日志到本地
  • 2.自定义修改设置系统日志保留日期时长,超过日期时长的日志将被清除
  • 3.默认修改日志只记录warning等级(无法自定义)
  • 4.以后日志的产生将受到日志文件大小,日志保留时间,日志保留等级的限制
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/resize_journal.sh -o resize_journal.sh && chmod +x resize_journal.sh && bash resize_journal.sh

一键尝试修复网络

该脚本轻易勿要使用,请确保运行时服务器无重要文件或程序,出现运行bug后续可能需要重装系统

一定要在screen中执行该脚本,否则可能导致修改过程中ssh断链接而修改失败卡住最终SSH无法连接!不在screen中执行后果自负!

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 尝试修复nameserver为google源或cloudflare源
  • 尝试修复为IP类型对应的网络优先级(默认IPV4类型,纯V6类型再替换为IPV6类型)
bash
curl -L https://cdn.spiritlhl.workers.dev/https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/repair_scripts/network.sh -o network.sh && chmod +x network.sh && bash network.sh

如果是纯V6的也可以不使用上面脚本的nat64,使用warp添加V4网络

比如:https://github.com/fscarmen/warp

bash
curl -sSLO https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh [option] [lisence]

非纯V6的,带V4切换优先级到IPV4可用以下命令

bash
sudo sed -i 's/.*precedence ::ffff:0:0\\/96.*/precedence ::ffff:0:0\\/96  100/g' /etc/gai.conf && sudo systemctl restart networking

一键环境安装脚本

只推荐在新服务器上安装,环境不纯净不保证不出bug

运行所有一键环境安装脚本前注意看说明,以及保证服务器无重要数据,运行后造成的一切后果作者不负任何责任,自行评判风险!

一键安装jupyter环境

  • 本脚本尝试使用Miniconda3安装虚拟环境jupyter-env再进行jupyter和jupyterlab的安装,如若安装机器不纯净勿要轻易使用本脚本!
  • 本脚本为实验性脚本可能会有各种bug,勿要轻易尝试!
  • 验证已支持的系统:
    • Ubuntu 系 - 推荐,脚本自动挂起到后台
    • Debian 系 - 部分可能需要手动挂起到后台,详看脚本运行安装完毕的后续提示
  • 可能支持的系统(未验证):centos 7+,Fedora,Almalinux 8.5+
  • 执行脚本,之前有用本脚本安装过则直接打印设置的登陆信息,没安装过则进行安装再打印信息,如果已安装但未启动则自动启动后再打印信息
  • 如果是初次安装无脑输入y回车即可,按照提示进行操作即可,安装完毕将在后台常驻运行,自动添加常用的安装包通道源
  • 安装完毕后,如果需要在lab中安装第三方库需要在lab中使用terminal并使用conda进行下载而不是pip3下载,这是需要注意的一点
  • 安装过程中有判断是否为中国IP,可选择是否使用中国镜像

原始用途是方便快捷的在按小时计费的超大型服务器上部署python环境进行科学计算,充分利用时间别浪费在构建环境上。

bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/jupyter.sh -o jupyter.sh && chmod +x jupyter.sh && bash jupyter.sh

一键安装R语言环境

  • 安装前需使用Miniconda3安装虚拟环境jupyter-env,然后进行jupyter和jupyterlab的安装,再然后才能安装本内核
  • 简单的说,需要执行本仓库对应的jupyter安装脚本再运行本脚本安装R语言环境,会自动安装R环境内核和图形设备支持库
  • x11可能需要手动启动一下,执行sudo /usr/bin/Xorg
  • 可能支持的系统(未验证):centos 7+,Fedora,Almalinux 8.5+
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/R.sh -o R.sh && chmod +x R.sh && bash R.sh

一键安装rust环境

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 加载官方脚本安装,前置条件适配系统以及后置条件判断安装的版本
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/rust.sh -o rust.sh && chmod +x rust.sh && bash rust.sh

一键安装C环境

  • 一键安装C++环境
  • 支持系统:使用apt或者yum作为包管理器的系统
  • 如果未安装则安装,如果有安装则提示升级
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/cplusplus.sh -o cplusplus.sh && chmod +x cplusplus.sh && bash cplusplus.sh

一键安装vnstat环境

  • 支持系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 加载官方文件编译安装,前置条件适配系统以及后置条件判断安装的版本
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/vnstat.sh -o vnstat.sh && chmod +x vnstat.sh && bash vnstat.sh

一键升级低版本debian为debian11

  • 支持系统:debian 6+
  • 升级后需要重启系统加载内核,升级过程中需要选择的都无脑按回车即可
  • 升级是一个版本迭代一个版本,所以如果版本低,每执行一次升级一个版本,直至升级到debian11
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/todebian11.sh -o todebian11.sh && chmod +x todebian11.sh && bash todebian11.sh

一键升级低版本ubuntu为ubuntu22

  • 支持系统:Ubuntu 16+
  • 升级后需要重启系统加载内核,升级过程中需要选择的都无脑按回车即可
  • 升级是一个版本迭代一个版本,所以如果版本低,每执行一次升级一个版本,直至升级到ubuntu22
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/toubuntu22.sh -o toubuntu22.sh && chmod +x toubuntu22.sh && bash toubuntu22.sh

一键安装zipline平台

  • 应该支持的系统:Ubuntu 18+,Debian 8+,centos 7+,Fedora,Almalinux 8.5+
  • 暂时只在Ubuntu上验证无问题
  • 如若要设置反向代理绑定域名,安装前请保证原服务器未安装过nginx,如若已安装过nginx,请自行配置反向代理本机的3000端口
  • 默认一路回车是不启用反代不安装nginx的,自行选择,如需通过本脚本配置反代系统一定要未安装过nginx并在填写y或Y开启安装
  • zipline 平台功能: ShareX,自定义短链接,文件上传分享,多用户校验,高亮显示,阅后即焚,设置简单 (含pastebin)
  • 自动安装docker,docker-compose,如若已安装zipline在/root目录下,则自动更新
  • 反向代理如若已设置成功,还需要在面板设置中填写域名,绑定启用
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/zipline.sh -o zipline.sh && chmod +x zipline.sh && bash zipline.sh

如果需要删除0字节文件,打开/root/zipline文件夹,执行

docker-compose exec zipline yarn scripts:clear-zero-byte

按照提示操作

一键安装filebrowser平台

  • 端口设置为3030了,其他登陆信息详见提示
  • filebrowser平台支持下载上传文件到服务器,批量下载多个文件(自定义压缩格式),构建文件分享链接,设置分享时长
  • 如果本地有启用IPV6优先级可能绑定到V6去了,使用lsof -i:3030查看绑定情况,切换优先级后再安装就正常了
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/filebrowser.sh -o filebrowser.sh && chmod +x filebrowser.sh && bash filebrowser.sh

一键删除平台监控

  • 一键移除大多数云服务器监控
  • 涵盖阿里云、腾讯云、华为云、UCLOUD、甲骨文云、京东云
bash
curl -L https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/dlm.sh -o dlm.sh && chmod +x dlm.shh && bash dlm.sh

部分手动命令

一键开启root登陆并替换密码

bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

一键屏蔽邮件端口避免被恶意程序使用

bash
iptables -A INPUT -p tcp --dport 25 -j DROP
 iptables -A OUTPUT -p tcp --dport 25 -j DROP
 /sbin/iptables-save

设置语言包

bash
sudo apt-get update
 sudo apt-get install language-pack-en-base
diff --git a/assets/case_case2.md.DRBe_7dn.lean.js b/assets/case_case2.md.DcwQCQim.lean.js
similarity index 85%
rename from assets/case_case2.md.DRBe_7dn.lean.js
rename to assets/case_case2.md.DcwQCQim.lean.js
index 61295d4b1e..c5e0a6518f 100644
--- a/assets/case_case2.md.DRBe_7dn.lean.js
+++ b/assets/case_case2.md.DcwQCQim.lean.js
@@ -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"},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1773143516000}'),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.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1773196139000}'),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};
diff --git a/assets/case_case3.md.DRWmio28.js b/assets/case_case3.md.CMS3OP6x.js
similarity index 99%
rename from assets/case_case3.md.DRWmio28.js
rename to assets/case_case3.md.CMS3OP6x.js
index 4b23f34e4c..58b18552f5 100644
--- a/assets/case_case3.md.DRWmio28.js
+++ b/assets/case_case3.md.CMS3OP6x.js
@@ -1 +1 @@
-import{_ as s,c as a,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1773143516000}'),i={name:"case/case3.md"};function n(r,e,l,c,d,h){return t(),a("div",null,e[0]||(e[0]=[p('

仓库

https://github.com/spiritLHLS/ecsspeed

Hits

ecsspeed

自动更新测速服务器节点列表的网络基准测试脚本

Network benchmarking script that automatically updates the list of speed measurement server nodes

说明

所有组件以及数据均来源于平台或已有的开源项目,无非开源部分,放心食用

对应 speedtest.net 的自动更新测速服务器ID的测速脚本

日常推荐使用

bash <(curl -sSL http://bash.spiritlhl.net/ecs-net)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-net.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-net.sh)

支持测速的架构:i386, x86_64, amd64, arm64, s390x, riscv64, ppc64le, ppc64

涵盖中国三大运营商、香港、台湾的测速节点,默认的三网测速每个运营商选择本机ping值最低的两个节点测速,详情三网测速才是全测,节点列表大概每7天自动更新一次。

支持国内服务器测试(有判断是否为国内机器),但由于国内服务器带宽过小,会很慢,详见初次运行的显示

当官方CLI安装失败(如罕见的架构或者官方网站访问失败时)自动使用 speedtest-go 作为替代品测速

对应 speedtest.cn 的自动更新测速服务器ID的测速脚本

单线程测速

bash <(curl -sSL http://bash.spiritlhl.net/ecs-cn)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-cn.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-cn.sh)

支持测速的架构:i386, x86_64, amd64, arm64, s390x, riscv64, ppc64le, ppc64

涵盖中国三大运营商、香港、台湾的测速节点,默认的三网测速每个运营商选择本机ping值最低的两个节点测速,详情三网测速才是全测,节点列表每天自动更新一次。

支持国内服务器测试(有判断是否为国内机器),但由于国内服务器带宽过小,会很慢,详见初次运行的显示

自动更新测试服务器列表的三网延迟测试脚本

平均耗时10~15秒

bash <(curl -sSL http://bash.spiritlhl.net/ecs-ping)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-ping.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-ping.sh)

效果图

图片

功能

  • [x] 自动抓取 speedtest.cn 节点信息结合已有信息去重并更新列表数据
  • [x] 自动抓取 speedtest.net 节点信息结合已有信息去重并更新列表数据
  • [x] 对应 speedtest.net 的自动更新测速服务器列表的测速脚本
  • [x] 对应 speedtest.cn 的自动更新测速服务器列表的测速脚本
  • [x] 自动更新测试服务器列表的三网Ping值测试脚本

.cn数据

仓库:https://github.com/spiritLHLS/speedtest.cn-CN-ID

.net数据

仓库:https://github.com/spiritLHLS/speedtest.net-CN-ID

',44)]))}const u=s(i,[["render",n]]);export{b as __pageData,u as default}; +import{_ as s,c as a,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1773196139000}'),i={name:"case/case3.md"};function n(r,e,l,c,d,h){return t(),a("div",null,e[0]||(e[0]=[p('

仓库

https://github.com/spiritLHLS/ecsspeed

Hits

ecsspeed

自动更新测速服务器节点列表的网络基准测试脚本

Network benchmarking script that automatically updates the list of speed measurement server nodes

说明

所有组件以及数据均来源于平台或已有的开源项目,无非开源部分,放心食用

对应 speedtest.net 的自动更新测速服务器ID的测速脚本

日常推荐使用

bash <(curl -sSL http://bash.spiritlhl.net/ecs-net)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-net.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-net.sh)

支持测速的架构:i386, x86_64, amd64, arm64, s390x, riscv64, ppc64le, ppc64

涵盖中国三大运营商、香港、台湾的测速节点,默认的三网测速每个运营商选择本机ping值最低的两个节点测速,详情三网测速才是全测,节点列表大概每7天自动更新一次。

支持国内服务器测试(有判断是否为国内机器),但由于国内服务器带宽过小,会很慢,详见初次运行的显示

当官方CLI安装失败(如罕见的架构或者官方网站访问失败时)自动使用 speedtest-go 作为替代品测速

对应 speedtest.cn 的自动更新测速服务器ID的测速脚本

单线程测速

bash <(curl -sSL http://bash.spiritlhl.net/ecs-cn)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-cn.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-cn.sh)

支持测速的架构:i386, x86_64, amd64, arm64, s390x, riscv64, ppc64le, ppc64

涵盖中国三大运营商、香港、台湾的测速节点,默认的三网测速每个运营商选择本机ping值最低的两个节点测速,详情三网测速才是全测,节点列表每天自动更新一次。

支持国内服务器测试(有判断是否为国内机器),但由于国内服务器带宽过小,会很慢,详见初次运行的显示

自动更新测试服务器列表的三网延迟测试脚本

平均耗时10~15秒

bash <(curl -sSL http://bash.spiritlhl.net/ecs-ping)

bash <(curl -sSLk https://github.com/spiritLHLS/ecsspeed/raw/main/script/ecsspeed-ping.sh)

或国内用

bash <(curl -sSLk https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/ecsspeed/main/script/ecsspeed-ping.sh)

效果图

图片

功能

  • [x] 自动抓取 speedtest.cn 节点信息结合已有信息去重并更新列表数据
  • [x] 自动抓取 speedtest.net 节点信息结合已有信息去重并更新列表数据
  • [x] 对应 speedtest.net 的自动更新测速服务器列表的测速脚本
  • [x] 对应 speedtest.cn 的自动更新测速服务器列表的测速脚本
  • [x] 自动更新测试服务器列表的三网Ping值测试脚本

.cn数据

仓库:https://github.com/spiritLHLS/speedtest.cn-CN-ID

.net数据

仓库:https://github.com/spiritLHLS/speedtest.net-CN-ID

',44)]))}const u=s(i,[["render",n]]);export{b as __pageData,u as default}; diff --git a/assets/case_case3.md.DRWmio28.lean.js b/assets/case_case3.md.CMS3OP6x.lean.js similarity index 85% rename from assets/case_case3.md.DRWmio28.lean.js rename to assets/case_case3.md.CMS3OP6x.lean.js index d03c42f9cb..96d4ccc4da 100644 --- a/assets/case_case3.md.DRWmio28.lean.js +++ b/assets/case_case3.md.CMS3OP6x.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1773143516000}'),i={name:"case/case3.md"};function n(r,e,l,c,d,h){return t(),a("div",null,e[0]||(e[0]=[p("",44)]))}const u=s(i,[["render",n]]);export{b as __pageData,u as default}; +import{_ as s,c as a,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1773196139000}'),i={name:"case/case3.md"};function n(r,e,l,c,d,h){return t(),a("div",null,e[0]||(e[0]=[p("",44)]))}const u=s(i,[["render",n]]);export{b as __pageData,u as default}; diff --git a/assets/case_case4.md.BEil2tH0.js b/assets/case_case4.md.7ZC29s40.js similarity index 98% rename from assets/case_case4.md.BEil2tH0.js rename to assets/case_case4.md.7ZC29s40.js index 25980d0530..557bca1856 100644 --- a/assets/case_case4.md.BEil2tH0.js +++ b/assets/case_case4.md.7ZC29s40.js @@ -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"},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1773143516000}'),i={name:"case/case4.md"};function s(l,a,n,h,o,b){return r(),t("div",null,a[0]||(a[0]=[c('

仓库

https://github.com/oneclickvirt/backtrace

Hits

backtrace

三网回程路由线路测试

基于 https://github.com/zhanghanyun/backtrace 的重构和优化,与原版存在很大不同

路由的线路判断最终还是得人工判断的才准确,本项目测试结果仅供参考

功能

  • [x] 检测回程显示IPV4地址时的线路,不显示IP地址时显示ASN检测不到,原版backtrace也支持
  • [x] 支持对48379929163线路的判断,原版backtrace也支持
  • [x] 支持对CN2GTCN2GIA线路的判断,原版backtrace不支持
  • [x] 支持对CMIN2CMI线路的判断,原版backtrace不支持
  • [x] 支持对整个回程路由进行线路分析,与原版backtrace仅进行一次判断不同
  • [x] 修复原版backtrace对IPV4地址信息获取时json解析失败依然打印信息的问题
  • [x] 增加对全平台的编译支持,原版backtrace仅支持linux平台的amd64和arm64架构

使用

shell
curl https://raw.githubusercontent.com/oneclickvirt/backtrace/main/backtrace_install.sh -sSf | sh

更多架构请查看 https://github.com/oneclickvirt/backtrace/releases/tag/output

概览图

图片

图片

图片

',16)]))}const d=e(i,[["render",s]]);export{k as __pageData,d as default}; +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"},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1773196139000}'),i={name:"case/case4.md"};function s(l,a,n,h,o,b){return r(),t("div",null,a[0]||(a[0]=[c('

仓库

https://github.com/oneclickvirt/backtrace

Hits

backtrace

三网回程路由线路测试

基于 https://github.com/zhanghanyun/backtrace 的重构和优化,与原版存在很大不同

路由的线路判断最终还是得人工判断的才准确,本项目测试结果仅供参考

功能

  • [x] 检测回程显示IPV4地址时的线路,不显示IP地址时显示ASN检测不到,原版backtrace也支持
  • [x] 支持对48379929163线路的判断,原版backtrace也支持
  • [x] 支持对CN2GTCN2GIA线路的判断,原版backtrace不支持
  • [x] 支持对CMIN2CMI线路的判断,原版backtrace不支持
  • [x] 支持对整个回程路由进行线路分析,与原版backtrace仅进行一次判断不同
  • [x] 修复原版backtrace对IPV4地址信息获取时json解析失败依然打印信息的问题
  • [x] 增加对全平台的编译支持,原版backtrace仅支持linux平台的amd64和arm64架构

使用

shell
curl https://raw.githubusercontent.com/oneclickvirt/backtrace/main/backtrace_install.sh -sSf | sh

更多架构请查看 https://github.com/oneclickvirt/backtrace/releases/tag/output

概览图

图片

图片

图片

',16)]))}const d=e(i,[["render",s]]);export{k as __pageData,d as default}; diff --git a/assets/case_case4.md.BEil2tH0.lean.js b/assets/case_case4.md.7ZC29s40.lean.js similarity index 85% rename from assets/case_case4.md.BEil2tH0.lean.js rename to assets/case_case4.md.7ZC29s40.lean.js index a42415af4f..9a8b28f0e5 100644 --- a/assets/case_case4.md.BEil2tH0.lean.js +++ b/assets/case_case4.md.7ZC29s40.lean.js @@ -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"},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1773143516000}'),i={name:"case/case4.md"};function s(l,a,n,h,o,b){return r(),t("div",null,a[0]||(a[0]=[c("",16)]))}const d=e(i,[["render",s]]);export{k as __pageData,d as default}; +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"},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1773196139000}'),i={name:"case/case4.md"};function s(l,a,n,h,o,b){return r(),t("div",null,a[0]||(a[0]=[c("",16)]))}const d=e(i,[["render",s]]);export{k as __pageData,d as default}; diff --git a/assets/case_case5.md.DPCgUS6O.js b/assets/case_case5.md.2mubFzz8.js similarity index 99% rename from assets/case_case5.md.DPCgUS6O.js rename to assets/case_case5.md.2mubFzz8.js index 882aca645b..90f75e4bbe 100644 --- a/assets/case_case5.md.DPCgUS6O.js +++ b/assets/case_case5.md.2mubFzz8.js @@ -1 +1 @@ -import{_ as a,c as s,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1773143516000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,d){return i(),s("div",null,e[0]||(e[0]=[t('

仓库

https://github.com/spiritLHLS/Oracle-server-keep-alive-script

Hits

Oracle-server-keep-alive-script

实际不止可以在甲骨文服务器上使用,也可以使用在任意ARM或X86_64架构的系统,用作资源占用

甲骨文服务器保活脚本

适配系统:已在Ubuntu 20+,Debian 10+, Centos 7+, Oracle linux 8+,AlmaLinux 8.5+

上述系统验证无问题,别的主流系统应该也没有问题

可选占用:CPU,内存,带宽

安装完毕后如果有问题请卸载脚本反馈问题(重复卸载也没问题)

所有资源(除了CPU)可选默认配置则动态占用,实时调整,避免服务器有别的任何资源已经超过限额了仍然再占用资源

为避免GitHub的CDN抽风加载不了新内容,所有新更新已使用Gitlab仓库

由于speedtest-go的release依赖于GitHub,所以请检查 www.githubstatus.com ,有问题时无法安装带宽占用

基础开发完毕,测试中,有问题请在issues中反馈

选项1安装,选项2卸载,选项3更新安装引导脚本,选项4退出脚本

安装过程中无脑回车则全部可选的占用都占用,不需要什么占用输入n再回车

如果选择带宽占用,会询问使用speedtest-go占用还是使用wget占用,按照提示进行选择即可

有询问是否需要带宽占用的参数自定义,这时候默认选项就是n,回车就使用默认配置,输入y再回车则需要按照提示自定义参数

curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh -o oalive.sh && chmod +x oalive.sh && bash oalive.sh

bash oalive.sh

bash <(curl -sSLk https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh)

说明

  • 提供两种CPU占用模式:DD模拟占用和科学计算模式,用户可以自由选择,占用范围设置在15%至25%之间,更推荐DD模拟占用
  • DD模拟占用在守护进程中设置了CPU占用的最高限制
  • 默认情况下,CPU占用设置为25%最高值,计算方法是核数乘以12%,如果计算结果低于25%,则设置为该值;如果计算结果高于25%,则按照计算结果的比例进行设置。
  • 内存占用设置为占用总内存的20%,占用时间为300秒,休息时间为300秒。
  • 每300秒检测一次内存占用情况,并根据需要动态调整占用大小。如果内存占用已经大于20%,则不增加占用。
  • 在占用过程中,使用守护进程和开机自启服务,以确保占用任务持续且有效。
  • 默认选项的带宽占用每45分钟下载一次大小在1G至10G之间的文件,只进行下载而不保存。在下载过程中会占用硬盘空间,但在下载完成后会自动释放。
  • 默认选项的带宽占用动态调整实际下载的带宽/速率,限制每次下载的最长时长为6分钟。在每次下载之前,会测试最大可用带宽,并根据实时结果将下载速率设置为30%的带宽。
  • 带宽占用测试使用了speedtest-cli和speedtest-go两种工具,以防其中之一不可用时使用第二种工具,用户可以自定义设置带宽占用,此时详见设置提示。
  • 提供一键卸载所有占用服务的选项,卸载将删除所有脚本、服务、任务、守护进程和开机自启设置。
  • 提供一键检查更新的功能,更新范围仅限于脚本更新。请在更新后重新设置占用服务
  • 对所有进程执行增加唯一性检测,避免重复运行,使用PID文件进行判断。

如若不希望一键的,希望自定义设置时间的,请查看README_CRON.md自行设置定时任务

',26)]))}const b=a(r,[["render",l]]);export{u as __pageData,b as default}; +import{_ as a,c as s,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1773196139000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,d){return i(),s("div",null,e[0]||(e[0]=[t('

仓库

https://github.com/spiritLHLS/Oracle-server-keep-alive-script

Hits

Oracle-server-keep-alive-script

实际不止可以在甲骨文服务器上使用,也可以使用在任意ARM或X86_64架构的系统,用作资源占用

甲骨文服务器保活脚本

适配系统:已在Ubuntu 20+,Debian 10+, Centos 7+, Oracle linux 8+,AlmaLinux 8.5+

上述系统验证无问题,别的主流系统应该也没有问题

可选占用:CPU,内存,带宽

安装完毕后如果有问题请卸载脚本反馈问题(重复卸载也没问题)

所有资源(除了CPU)可选默认配置则动态占用,实时调整,避免服务器有别的任何资源已经超过限额了仍然再占用资源

为避免GitHub的CDN抽风加载不了新内容,所有新更新已使用Gitlab仓库

由于speedtest-go的release依赖于GitHub,所以请检查 www.githubstatus.com ,有问题时无法安装带宽占用

基础开发完毕,测试中,有问题请在issues中反馈

选项1安装,选项2卸载,选项3更新安装引导脚本,选项4退出脚本

安装过程中无脑回车则全部可选的占用都占用,不需要什么占用输入n再回车

如果选择带宽占用,会询问使用speedtest-go占用还是使用wget占用,按照提示进行选择即可

有询问是否需要带宽占用的参数自定义,这时候默认选项就是n,回车就使用默认配置,输入y再回车则需要按照提示自定义参数

curl -L https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh -o oalive.sh && chmod +x oalive.sh && bash oalive.sh

bash oalive.sh

bash <(curl -sSLk https://gitlab.com/spiritysdx/Oracle-server-keep-alive-script/-/raw/main/oalive.sh)

说明

  • 提供两种CPU占用模式:DD模拟占用和科学计算模式,用户可以自由选择,占用范围设置在15%至25%之间,更推荐DD模拟占用
  • DD模拟占用在守护进程中设置了CPU占用的最高限制
  • 默认情况下,CPU占用设置为25%最高值,计算方法是核数乘以12%,如果计算结果低于25%,则设置为该值;如果计算结果高于25%,则按照计算结果的比例进行设置。
  • 内存占用设置为占用总内存的20%,占用时间为300秒,休息时间为300秒。
  • 每300秒检测一次内存占用情况,并根据需要动态调整占用大小。如果内存占用已经大于20%,则不增加占用。
  • 在占用过程中,使用守护进程和开机自启服务,以确保占用任务持续且有效。
  • 默认选项的带宽占用每45分钟下载一次大小在1G至10G之间的文件,只进行下载而不保存。在下载过程中会占用硬盘空间,但在下载完成后会自动释放。
  • 默认选项的带宽占用动态调整实际下载的带宽/速率,限制每次下载的最长时长为6分钟。在每次下载之前,会测试最大可用带宽,并根据实时结果将下载速率设置为30%的带宽。
  • 带宽占用测试使用了speedtest-cli和speedtest-go两种工具,以防其中之一不可用时使用第二种工具,用户可以自定义设置带宽占用,此时详见设置提示。
  • 提供一键卸载所有占用服务的选项,卸载将删除所有脚本、服务、任务、守护进程和开机自启设置。
  • 提供一键检查更新的功能,更新范围仅限于脚本更新。请在更新后重新设置占用服务
  • 对所有进程执行增加唯一性检测,避免重复运行,使用PID文件进行判断。

如若不希望一键的,希望自定义设置时间的,请查看README_CRON.md自行设置定时任务

',26)]))}const b=a(r,[["render",l]]);export{u as __pageData,b as default}; diff --git a/assets/case_case5.md.DPCgUS6O.lean.js b/assets/case_case5.md.2mubFzz8.lean.js similarity index 85% rename from assets/case_case5.md.DPCgUS6O.lean.js rename to assets/case_case5.md.2mubFzz8.lean.js index 4fcccf6d2c..ee4a9272e7 100644 --- a/assets/case_case5.md.DPCgUS6O.lean.js +++ b/assets/case_case5.md.2mubFzz8.lean.js @@ -1 +1 @@ -import{_ as a,c as s,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1773143516000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,d){return i(),s("div",null,e[0]||(e[0]=[t("",26)]))}const b=a(r,[["render",l]]);export{u as __pageData,b as default}; +import{_ as a,c as s,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1773196139000}'),r={name:"case/case5.md"};function l(p,e,n,c,o,d){return i(),s("div",null,e[0]||(e[0]=[t("",26)]))}const b=a(r,[["render",l]]);export{u as __pageData,b as default}; diff --git a/assets/case_case6.md.CGjNllmZ.js b/assets/case_case6.md.BGu_yJ2b.js similarity index 98% rename from assets/case_case6.md.CGjNllmZ.js rename to assets/case_case6.md.BGu_yJ2b.js index 5743bfcf7f..e32750d1e2 100644 --- a/assets/case_case6.md.CGjNllmZ.js +++ b/assets/case_case6.md.BGu_yJ2b.js @@ -1 +1 @@ -import{_ as a,c as i,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1773143516000}'),t={name:"case/case6.md"};function h(n,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[p('

仓库

https://github.com/spiritLHLS/addswap

addswap

为openvz、kvm虚拟化的linux服务器增加swap分区(虚拟内存)

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

已增加openvz架构重启swap自动添加的

openvz这个添加=掩耳盗铃,实际受到虚拟化限制应该是无法添加的,只能由虚拟化的宿主机控制,同理LXC虚拟化的也只能由宿主机控制,都无法自主添加虚拟内存SWAP

因此,该项目不再更新,除非另有需求

单位换算:输入 1024 产生 1G SWAP内存

致谢

kvm分区原版脚本源自 https://www.moerats.com/

bash
curl -L https://www.moerats.com/usr/shell/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

openVZ分区原版脚本源自

http://linux-problem-solver.blogspot.com/2013/08/create-fake-swap-in-openvz-vps-if-you-get-swapon-failed-operation-not-permitted-error.html

感谢 @fscarmen 提供优化建议

',18)]))}const F=a(t,[["render",h]]);export{c as __pageData,F as default}; +import{_ as a,c as i,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1773196139000}'),t={name:"case/case6.md"};function h(n,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[p('

仓库

https://github.com/spiritLHLS/addswap

addswap

为openvz、kvm虚拟化的linux服务器增加swap分区(虚拟内存)

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

已增加openvz架构重启swap自动添加的

openvz这个添加=掩耳盗铃,实际受到虚拟化限制应该是无法添加的,只能由虚拟化的宿主机控制,同理LXC虚拟化的也只能由宿主机控制,都无法自主添加虚拟内存SWAP

因此,该项目不再更新,除非另有需求

单位换算:输入 1024 产生 1G SWAP内存

致谢

kvm分区原版脚本源自 https://www.moerats.com/

bash
curl -L https://www.moerats.com/usr/shell/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

openVZ分区原版脚本源自

http://linux-problem-solver.blogspot.com/2013/08/create-fake-swap-in-openvz-vps-if-you-get-swapon-failed-operation-not-permitted-error.html

感谢 @fscarmen 提供优化建议

',18)]))}const F=a(t,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/case_case6.md.CGjNllmZ.lean.js b/assets/case_case6.md.BGu_yJ2b.lean.js similarity index 85% rename from assets/case_case6.md.CGjNllmZ.lean.js rename to assets/case_case6.md.BGu_yJ2b.lean.js index b8b7c3dd87..b20a852e80 100644 --- a/assets/case_case6.md.CGjNllmZ.lean.js +++ b/assets/case_case6.md.BGu_yJ2b.lean.js @@ -1 +1 @@ -import{_ as a,c as i,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1773143516000}'),t={name:"case/case6.md"};function h(n,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[p("",18)]))}const F=a(t,[["render",h]]);export{c as __pageData,F as default}; +import{_ as a,c as i,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"case/case6.md","filePath":"case/case6.md","lastUpdated":1773196139000}'),t={name:"case/case6.md"};function h(n,s,l,r,d,k){return e(),i("div",null,s[0]||(s[0]=[p("",18)]))}const F=a(t,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/case_case7.md.gi9gp8pd.js b/assets/case_case7.md.CPl9nMbi.js similarity index 98% rename from assets/case_case7.md.gi9gp8pd.js rename to assets/case_case7.md.CPl9nMbi.js index 351d1391a9..dbdabb32af 100644 --- a/assets/case_case7.md.gi9gp8pd.js +++ b/assets/case_case7.md.CPl9nMbi.js @@ -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"},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1773143516000}'),h={name:"case/case7.md"};function p(n,a,r,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e('

仓库

https://github.com/spiritLHLS/addzram

addzram

为linux服务器启用zram(压缩内存)

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh -o addzram.sh && chmod +x addzram.sh && bash addzram.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh -o addzram.sh && chmod +x addzram.sh && bash addzram.sh

类同前面的addswap项目

同样是给机器优化内存占用的东西,只不过zram是压缩内存占用,swap是附加虚拟内存增加内存空间,二者都会占用CPU资源,zram在CPU性能冗余的机器上使用更优

(理论上zram会比swap的性能占用低,但未实际测试过)

单位换算:输入 1024 产生 1G 的 zram 设备压缩内存,zram 设备大小不能大于实际内存大小

致谢

感谢 @Ella-Alinda 提供优化建议

',14)]))}const c=s(h,[["render",p]]);export{m as __pageData,c as default}; +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"},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1773196139000}'),h={name:"case/case7.md"};function p(n,a,r,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e('

仓库

https://github.com/spiritLHLS/addzram

addzram

为linux服务器启用zram(压缩内存)

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh -o addzram.sh && chmod +x addzram.sh && bash addzram.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addzram/main/addzram.sh -o addzram.sh && chmod +x addzram.sh && bash addzram.sh

类同前面的addswap项目

同样是给机器优化内存占用的东西,只不过zram是压缩内存占用,swap是附加虚拟内存增加内存空间,二者都会占用CPU资源,zram在CPU性能冗余的机器上使用更优

(理论上zram会比swap的性能占用低,但未实际测试过)

单位换算:输入 1024 产生 1G 的 zram 设备压缩内存,zram 设备大小不能大于实际内存大小

致谢

感谢 @Ella-Alinda 提供优化建议

',14)]))}const c=s(h,[["render",p]]);export{m as __pageData,c as default}; diff --git a/assets/case_case7.md.gi9gp8pd.lean.js b/assets/case_case7.md.CPl9nMbi.lean.js similarity index 85% rename from assets/case_case7.md.gi9gp8pd.lean.js rename to assets/case_case7.md.CPl9nMbi.lean.js index 94b775215b..3f8fcc84aa 100644 --- a/assets/case_case7.md.gi9gp8pd.lean.js +++ b/assets/case_case7.md.CPl9nMbi.lean.js @@ -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"},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1773143516000}'),h={name:"case/case7.md"};function p(n,a,r,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e("",14)]))}const c=s(h,[["render",p]]);export{m as __pageData,c as default}; +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"},"headers":[],"relativePath":"case/case7.md","filePath":"case/case7.md","lastUpdated":1773196139000}'),h={name:"case/case7.md"};function p(n,a,r,l,d,k){return t(),i("div",null,a[0]||(a[0]=[e("",14)]))}const c=s(h,[["render",p]]);export{m as __pageData,c as default}; diff --git a/assets/case_index.md.C0DUV4RF.js b/assets/case_index.md.DScteKxA.js similarity index 92% rename from assets/case_index.md.C0DUV4RF.js rename to assets/case_index.md.DScteKxA.js index aaabdbbc7d..cbfa7806ff 100644 --- a/assets/case_index.md.C0DUV4RF.js +++ b/assets/case_index.md.DScteKxA.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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":"仁者见仁智者见智。"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1773143516000}'),n={name:"case/index.md"};function s(i,o,r,c,l,p){return a(),t("div")}const h=e(n,[["render",s]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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":"仁者见仁智者见智。"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1773196139000}'),n={name:"case/index.md"};function s(i,o,r,c,l,p){return a(),t("div")}const h=e(n,[["render",s]]);export{m as __pageData,h as default}; diff --git a/assets/case_index.md.C0DUV4RF.lean.js b/assets/case_index.md.DScteKxA.lean.js similarity index 92% rename from assets/case_index.md.C0DUV4RF.lean.js rename to assets/case_index.md.DScteKxA.lean.js index aaabdbbc7d..cbfa7806ff 100644 --- a/assets/case_index.md.C0DUV4RF.lean.js +++ b/assets/case_index.md.DScteKxA.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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":"仁者见仁智者见智。"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1773143516000}'),n={name:"case/index.md"};function s(i,o,r,c,l,p){return a(),t("div")}const h=e(n,[["render",s]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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":"仁者见仁智者见智。"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1773196139000}'),n={name:"case/index.md"};function s(i,o,r,c,l,p){return a(),t("div")}const h=e(n,[["render",s]]);export{m as __pageData,h as default}; diff --git a/assets/developer_index.md.B8znk3d2.js b/assets/developer_index.md.n2uq9NWX.js similarity index 93% rename from assets/developer_index.md.B8znk3d2.js rename to assets/developer_index.md.n2uq9NWX.js index d274da7a06..156dd162be 100644 --- a/assets/developer_index.md.B8znk3d2.js +++ b/assets/developer_index.md.n2uq9NWX.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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"}]}},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1773143516000}'),n={name:"developer/index.md"};function l(o,r,s,i,p,d){return a(),t("div")}const h=e(n,[["render",l]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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"}]}},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1773196139000}'),n={name:"developer/index.md"};function l(o,r,s,i,p,d){return a(),t("div")}const h=e(n,[["render",l]]);export{m as __pageData,h as default}; diff --git a/assets/developer_index.md.B8znk3d2.lean.js b/assets/developer_index.md.n2uq9NWX.lean.js similarity index 93% rename from assets/developer_index.md.B8znk3d2.lean.js rename to assets/developer_index.md.n2uq9NWX.lean.js index d274da7a06..156dd162be 100644 --- a/assets/developer_index.md.B8znk3d2.lean.js +++ b/assets/developer_index.md.n2uq9NWX.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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"}]}},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1773143516000}'),n={name:"developer/index.md"};function l(o,r,s,i,p,d){return a(),t("div")}const h=e(n,[["render",l]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=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"}]}},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1773196139000}'),n={name:"developer/index.md"};function l(o,r,s,i,p,d){return a(),t("div")}const h=e(n,[["render",l]]);export{m as __pageData,h as default}; diff --git a/assets/developer_l10n.md.iD3aNsOG.js b/assets/developer_l10n.md.uPQLp5qr.js similarity index 90% rename from assets/developer_l10n.md.iD3aNsOG.js rename to assets/developer_l10n.md.uPQLp5qr.js index 7bc834ceb0..a0f8a013bf 100644 --- a/assets/developer_l10n.md.iD3aNsOG.js +++ b/assets/developer_l10n.md.uPQLp5qr.js @@ -1 +1 @@ -import{_ as o,c as l,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1773143516000}'),r={name:"developer/l10n.md"};function d(n,e,i,c,s,_){return a(),l("div",null,e[0]||(e[0]=[t('

你可以在开发新功能时遵循以下步骤来支持本地化

介绍

  1. 你可以直接使用 /resource/l10n/zh-CN.toml 中已有的文本配置来替换新功能中的文本
  2. 如果新功能中有新增文本,请参考 zh-CN.toml 的配置文本,将新文本拉取到 zh-CN.toml 等其他语言的配置文件中,并添加翻译

新本地化文本的添加

  1. /resource/l10n/ 中添加新的语言文本配置
  2. 在新的语言文本配置中拉取其他语言已有的文本配置
  3. 为新的语言文本配置添加翻译
',5)]))}const m=o(r,[["render",d]]);export{h as __pageData,m as default}; +import{_ as o,c as l,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1773196139000}'),r={name:"developer/l10n.md"};function d(n,e,i,c,s,_){return a(),l("div",null,e[0]||(e[0]=[t('

你可以在开发新功能时遵循以下步骤来支持本地化

介绍

  1. 你可以直接使用 /resource/l10n/zh-CN.toml 中已有的文本配置来替换新功能中的文本
  2. 如果新功能中有新增文本,请参考 zh-CN.toml 的配置文本,将新文本拉取到 zh-CN.toml 等其他语言的配置文件中,并添加翻译

新本地化文本的添加

  1. /resource/l10n/ 中添加新的语言文本配置
  2. 在新的语言文本配置中拉取其他语言已有的文本配置
  3. 为新的语言文本配置添加翻译
',5)]))}const m=o(r,[["render",d]]);export{h as __pageData,m as default}; diff --git a/assets/developer_l10n.md.iD3aNsOG.lean.js b/assets/developer_l10n.md.uPQLp5qr.lean.js similarity index 70% rename from assets/developer_l10n.md.iD3aNsOG.lean.js rename to assets/developer_l10n.md.uPQLp5qr.lean.js index d7a810b498..0908aad0c6 100644 --- a/assets/developer_l10n.md.iD3aNsOG.lean.js +++ b/assets/developer_l10n.md.uPQLp5qr.lean.js @@ -1 +1 @@ -import{_ as o,c as l,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1773143516000}'),r={name:"developer/l10n.md"};function d(n,e,i,c,s,_){return a(),l("div",null,e[0]||(e[0]=[t("",5)]))}const m=o(r,[["render",d]]);export{h as __pageData,m as default}; +import{_ as o,c as l,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1773196139000}'),r={name:"developer/l10n.md"};function d(n,e,i,c,s,_){return a(),l("div",null,e[0]||(e[0]=[t("",5)]))}const m=o(r,[["render",d]]);export{h as __pageData,m as default}; diff --git a/assets/en_developer_index.md.Cm5zcfA9.js b/assets/en_developer_index.md.Dl3fxvU3.js similarity index 92% rename from assets/en_developer_index.md.Cm5zcfA9.js rename to assets/en_developer_index.md.Dl3fxvU3.js index 3c228e43bb..744f7f3f22 100644 --- a/assets/en_developer_index.md.Cm5zcfA9.js +++ b/assets/en_developer_index.md.Dl3fxvU3.js @@ -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_US/developer/l10n"}]}},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1773143516000}'),a={name:"en/developer/index.md"};function o(l,r,i,p,c,m){return n(),t("div")}const v=e(a,[["render",o]]);export{d as __pageData,v as default}; +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_US/developer/l10n"}]}},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1773196139000}'),a={name:"en/developer/index.md"};function o(l,r,i,p,c,m){return n(),t("div")}const v=e(a,[["render",o]]);export{d as __pageData,v as default}; diff --git a/assets/en_developer_index.md.Cm5zcfA9.lean.js b/assets/en_developer_index.md.Dl3fxvU3.lean.js similarity index 92% rename from assets/en_developer_index.md.Cm5zcfA9.lean.js rename to assets/en_developer_index.md.Dl3fxvU3.lean.js index 3c228e43bb..744f7f3f22 100644 --- a/assets/en_developer_index.md.Cm5zcfA9.lean.js +++ b/assets/en_developer_index.md.Dl3fxvU3.lean.js @@ -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_US/developer/l10n"}]}},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1773143516000}'),a={name:"en/developer/index.md"};function o(l,r,i,p,c,m){return n(),t("div")}const v=e(a,[["render",o]]);export{d as __pageData,v as default}; +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_US/developer/l10n"}]}},"headers":[],"relativePath":"en/developer/index.md","filePath":"en/developer/index.md","lastUpdated":1773196139000}'),a={name:"en/developer/index.md"};function o(l,r,i,p,c,m){return n(),t("div")}const v=e(a,[["render",o]]);export{d as __pageData,v as default}; diff --git a/assets/en_developer_l10n.md.iiFjzuQg.js b/assets/en_developer_l10n.md.C9bDViS2.js similarity index 95% rename from assets/en_developer_l10n.md.iiFjzuQg.js rename to assets/en_developer_l10n.md.C9bDViS2.js index 90fdd89d23..2ec50e9912 100644 --- a/assets/en_developer_l10n.md.iiFjzuQg.js +++ b/assets/en_developer_l10n.md.C9bDViS2.js @@ -1 +1 @@ -import{_ as t,c as n,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1773143516000}'),i={name:"en/developer/l10n.md"};function l(r,e,d,c,s,u){return a(),n("div",null,e[0]||(e[0]=[o('

You can follow these steps to support localization when developing new features

Introduction

  1. You can directly use the text configuration already available in /resource/l10n/en-US.toml to replace the text in the new feature.
  2. If there is new text in the new feature, please refer to the configuration text in en-US.toml, pull the new text into the configuration files of other languages such as en-US.toml, and add translations.

Adding a new localized text file

  1. Add a new language text configuration in /resource/l10n/.
  2. Pull existing text configurations from other languages in the new language text configuration.
  3. Add translations for the new language text configuration.
',5)]))}const h=t(i,[["render",l]]);export{g as __pageData,h as default}; +import{_ as t,c as n,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1773196139000}'),i={name:"en/developer/l10n.md"};function l(r,e,d,c,s,u){return a(),n("div",null,e[0]||(e[0]=[o('

You can follow these steps to support localization when developing new features

Introduction

  1. You can directly use the text configuration already available in /resource/l10n/en-US.toml to replace the text in the new feature.
  2. If there is new text in the new feature, please refer to the configuration text in en-US.toml, pull the new text into the configuration files of other languages such as en-US.toml, and add translations.

Adding a new localized text file

  1. Add a new language text configuration in /resource/l10n/.
  2. Pull existing text configurations from other languages in the new language text configuration.
  3. Add translations for the new language text configuration.
',5)]))}const h=t(i,[["render",l]]);export{g as __pageData,h as default}; diff --git a/assets/en_developer_l10n.md.iiFjzuQg.lean.js b/assets/en_developer_l10n.md.C9bDViS2.lean.js similarity index 84% rename from assets/en_developer_l10n.md.iiFjzuQg.lean.js rename to assets/en_developer_l10n.md.C9bDViS2.lean.js index 630165f736..cf9c6622fd 100644 --- a/assets/en_developer_l10n.md.iiFjzuQg.lean.js +++ b/assets/en_developer_l10n.md.C9bDViS2.lean.js @@ -1 +1 @@ -import{_ as t,c as n,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1773143516000}'),i={name:"en/developer/l10n.md"};function l(r,e,d,c,s,u){return a(),n("div",null,e[0]||(e[0]=[o("",5)]))}const h=t(i,[["render",l]]);export{g as __pageData,h as default}; +import{_ as t,c as n,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/developer/l10n.md","filePath":"en/developer/l10n.md","lastUpdated":1773196139000}'),i={name:"en/developer/l10n.md"};function l(r,e,d,c,s,u){return a(),n("div",null,e[0]||(e[0]=[o("",5)]))}const h=t(i,[["render",l]]);export{g as __pageData,h as default}; diff --git a/assets/en_guide_block_block_docker.md.Doy9s9Vh.js b/assets/en_guide_block_block_docker.md.BNY--B3S.js similarity index 91% rename from assets/en_guide_block_block_docker.md.Doy9s9Vh.js rename to assets/en_guide_block_block_docker.md.BNY--B3S.js index fb29fd5980..0afd215226 100644 --- a/assets/en_guide_block_block_docker.md.Doy9s9Vh.js +++ b/assets/en_guide_block_block_docker.md.BNY--B3S.js @@ -1 +1 @@ -import{_ as o,c as a,o as d,j as t,a as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"To be developed, stay tuned","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1773143516000}'),n={name:"en/guide/block/block_docker.md"};function l(s,e,c,i,p,b){return d(),a("div",null,e[0]||(e[0]=[t("h1",{id:"to-be-developed-stay-tuned",tabindex:"-1"},[r("To be developed, stay tuned "),t("a",{class:"header-anchor",href:"#to-be-developed-stay-tuned","aria-label":'Permalink to "To be developed, stay tuned"'},"​")],-1)]))}const _=o(n,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as o,c as a,o as d,j as t,a as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"To be developed, stay tuned","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1773196139000}'),n={name:"en/guide/block/block_docker.md"};function l(s,e,c,i,p,b){return d(),a("div",null,e[0]||(e[0]=[t("h1",{id:"to-be-developed-stay-tuned",tabindex:"-1"},[r("To be developed, stay tuned "),t("a",{class:"header-anchor",href:"#to-be-developed-stay-tuned","aria-label":'Permalink to "To be developed, stay tuned"'},"​")],-1)]))}const _=o(n,[["render",l]]);export{u as __pageData,_ as default}; diff --git a/assets/en_guide_block_block_docker.md.Doy9s9Vh.lean.js b/assets/en_guide_block_block_docker.md.BNY--B3S.lean.js similarity index 91% rename from assets/en_guide_block_block_docker.md.Doy9s9Vh.lean.js rename to assets/en_guide_block_block_docker.md.BNY--B3S.lean.js index fb29fd5980..0afd215226 100644 --- a/assets/en_guide_block_block_docker.md.Doy9s9Vh.lean.js +++ b/assets/en_guide_block_block_docker.md.BNY--B3S.lean.js @@ -1 +1 @@ -import{_ as o,c as a,o as d,j as t,a as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"To be developed, stay tuned","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1773143516000}'),n={name:"en/guide/block/block_docker.md"};function l(s,e,c,i,p,b){return d(),a("div",null,e[0]||(e[0]=[t("h1",{id:"to-be-developed-stay-tuned",tabindex:"-1"},[r("To be developed, stay tuned "),t("a",{class:"header-anchor",href:"#to-be-developed-stay-tuned","aria-label":'Permalink to "To be developed, stay tuned"'},"​")],-1)]))}const _=o(n,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as o,c as a,o as d,j as t,a as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"To be developed, stay tuned","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_docker.md","filePath":"en/guide/block/block_docker.md","lastUpdated":1773196139000}'),n={name:"en/guide/block/block_docker.md"};function l(s,e,c,i,p,b){return d(),a("div",null,e[0]||(e[0]=[t("h1",{id:"to-be-developed-stay-tuned",tabindex:"-1"},[r("To be developed, stay tuned "),t("a",{class:"header-anchor",href:"#to-be-developed-stay-tuned","aria-label":'Permalink to "To be developed, stay tuned"'},"​")],-1)]))}const _=o(n,[["render",l]]);export{u as __pageData,_ as default}; diff --git a/assets/en_guide_block_block_incus.md._B3e7Pan.js b/assets/en_guide_block_block_incus.md.C2PW2uJM.js similarity index 98% rename from assets/en_guide_block_block_incus.md._B3e7Pan.js rename to assets/en_guide_block_block_incus.md.C2PW2uJM.js index 0fe9aaf4ae..4453790cd6 100644 --- a/assets/en_guide_block_block_incus.md._B3e7Pan.js +++ b/assets/en_guide_block_block_incus.md.C2PW2uJM.js @@ -1 +1 @@ -import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1773143516000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n('

Blocking Abusive Behavior via Shell Scripts

Blocking Ingress/Egress Traffic on Easily Abused Ports and Filtering Out Port Scanning and Exploitation Toolkits

  • (Optional, this script is solely for preventing container abuse and is not mandatory to install.)
  • Precautionary Measures

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

Use the 'screen' command to configure monitoring and blocking of certain processes' commands: terminate containers immediately upon the appearance of specific processes.

  • To stop monitoring, you can use the 'screen' command to stop the window named 'lxc_monitor' and delete it.
  • (Optional, this script is only for preventing misuse of containers; it's fine not to install it.)
  • Shutdown afterwards.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; +import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1773196139000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n('

Blocking Abusive Behavior via Shell Scripts

Blocking Ingress/Egress Traffic on Easily Abused Ports and Filtering Out Port Scanning and Exploitation Toolkits

  • (Optional, this script is solely for preventing container abuse and is not mandatory to install.)
  • Precautionary Measures

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

Use the 'screen' command to configure monitoring and blocking of certain processes' commands: terminate containers immediately upon the appearance of specific processes.

  • To stop monitoring, you can use the 'screen' command to stop the window named 'lxc_monitor' and delete it.
  • (Optional, this script is only for preventing misuse of containers; it's fine not to install it.)
  • Shutdown afterwards.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_block_block_incus.md._B3e7Pan.lean.js b/assets/en_guide_block_block_incus.md.C2PW2uJM.lean.js similarity index 87% rename from assets/en_guide_block_block_incus.md._B3e7Pan.lean.js rename to assets/en_guide_block_block_incus.md.C2PW2uJM.lean.js index e04b0c6b41..a707bf2f23 100644 --- a/assets/en_guide_block_block_incus.md._B3e7Pan.lean.js +++ b/assets/en_guide_block_block_incus.md.C2PW2uJM.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1773143516000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,p,h,c){return e(),a("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 a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_incus.md","filePath":"en/guide/block/block_incus.md","lastUpdated":1773196139000}'),t={name:"en/guide/block/block_incus.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n("",9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_block_block_iptables.md.BuVIpjNA.js b/assets/en_guide_block_block_iptables.md.DBqQm89a.js similarity index 99% rename from assets/en_guide_block_block_iptables.md.BuVIpjNA.js rename to assets/en_guide_block_block_iptables.md.DBqQm89a.js index 91d673a1c9..162eb9600a 100644 --- a/assets/en_guide_block_block_iptables.md.BuVIpjNA.js +++ b/assets/en_guide_block_block_iptables.md.DBqQm89a.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1773143516000}'),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(`

Blocking abuse through iptables

Basic Usage of iptables

1. Start iptables

In most Linux distributions, the iptables service can be started using the following command:

bash
sudo systemctl start iptables

2. Set Rules

After starting iptables, you can set rules to block abusive traffic. For example, the following command will block traffic from a specific IPv4 address:

bash
sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

3. Query Rules

After setting the rules, you can use the following command to view the current iptables rules:

bash
sudo iptables -L

This will list all input, output, and forwarding rules.

4. Stop iptables

If you need to stop the iptables service, you can use the following command:

bash
sudo systemctl stop iptables

5. Save Rules

To ensure that the rules persist after a reboot, you can save the current rules:

bash
sudo iptables-save | sudo tee /etc/iptables/rules.v4

6. Restore Rules

When you need to restore the rules, you can use the following command:

bash
sudo iptables-restore < /etc/iptables/rules.v4

7. Other Common Commands

  • List Rules (Detailed Information):

    bash
    sudo iptables -L -v
  • Delete Specific Rule:

    bash
    sudo iptables -D INPUT -s 192.168.1.100 -j DROP
  • Flush All Rules:

    bash
    sudo iptables -F

Block abusive traffic on the host

  • prevention in advance

Blocking Mining Behavior

shell
strings=(
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1773196139000}'),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(`

Blocking abuse through iptables

Basic Usage of iptables

1. Start iptables

In most Linux distributions, the iptables service can be started using the following command:

bash
sudo systemctl start iptables

2. Set Rules

After starting iptables, you can set rules to block abusive traffic. For example, the following command will block traffic from a specific IPv4 address:

bash
sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

3. Query Rules

After setting the rules, you can use the following command to view the current iptables rules:

bash
sudo iptables -L

This will list all input, output, and forwarding rules.

4. Stop iptables

If you need to stop the iptables service, you can use the following command:

bash
sudo systemctl stop iptables

5. Save Rules

To ensure that the rules persist after a reboot, you can save the current rules:

bash
sudo iptables-save | sudo tee /etc/iptables/rules.v4

6. Restore Rules

When you need to restore the rules, you can use the following command:

bash
sudo iptables-restore < /etc/iptables/rules.v4

7. Other Common Commands

  • List Rules (Detailed Information):

    bash
    sudo iptables -L -v
  • Delete Specific Rule:

    bash
    sudo iptables -D INPUT -s 192.168.1.100 -j DROP
  • Flush All Rules:

    bash
    sudo iptables -F

Block abusive traffic on the host

  • prevention in advance

Blocking Mining Behavior

shell
strings=(
     "ethermine.com"
     "ethermine.org"
     "antpool.one"
diff --git a/assets/en_guide_block_block_iptables.md.BuVIpjNA.lean.js b/assets/en_guide_block_block_iptables.md.DBqQm89a.lean.js
similarity index 87%
rename from assets/en_guide_block_block_iptables.md.BuVIpjNA.lean.js
rename to assets/en_guide_block_block_iptables.md.DBqQm89a.lean.js
index 94b1185616..27fccf0323 100644
--- a/assets/en_guide_block_block_iptables.md.BuVIpjNA.lean.js
+++ b/assets/en_guide_block_block_iptables.md.DBqQm89a.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1773143516000}'),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 u=i(e,[["render",p]]);export{o as __pageData,u as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Blocking abuse through iptables","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_iptables.md","filePath":"en/guide/block/block_iptables.md","lastUpdated":1773196139000}'),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 u=i(e,[["render",p]]);export{o as __pageData,u as default};
diff --git a/assets/en_guide_block_block_lxd.md.1188Sozz.js b/assets/en_guide_block_block_lxd.md.D3o50Z_N.js
similarity index 97%
rename from assets/en_guide_block_block_lxd.md.1188Sozz.js
rename to assets/en_guide_block_block_lxd.md.D3o50Z_N.js
index 8ad6ff7eed..886e4d8567 100644
--- a/assets/en_guide_block_block_lxd.md.1188Sozz.js
+++ b/assets/en_guide_block_block_lxd.md.D3o50Z_N.js
@@ -1 +1 @@
-import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1773143516000}'),t={name:"en/guide/block/block_lxd.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n('

Blocking Abusive Behavior via Shell Scripts

Blocking Ingress/Egress Traffic on Easily Abused Ports and Filtering Out Port Scanning and Exploitation Toolkits

  • (Optional, this script is solely for preventing container abuse and is not mandatory to install.)
  • Precautionary Measures

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

Use the 'screen' command to configure monitoring and blocking of certain processes' commands: terminate containers immediately upon the appearance of specific processes.

  • To stop monitoring, you can use the 'screen' command to stop the window named 'lxc_monitor' and delete it.
  • (Optional, this script is only for preventing misuse of containers; it's fine not to install it.)
  • Shutdown afterwards.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; +import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1773196139000}'),t={name:"en/guide/block/block_lxd.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n('

Blocking Abusive Behavior via Shell Scripts

Blocking Ingress/Egress Traffic on Easily Abused Ports and Filtering Out Port Scanning and Exploitation Toolkits

  • (Optional, this script is solely for preventing container abuse and is not mandatory to install.)
  • Precautionary Measures

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

Use the 'screen' command to configure monitoring and blocking of certain processes' commands: terminate containers immediately upon the appearance of specific processes.

  • To stop monitoring, you can use the 'screen' command to stop the window named 'lxc_monitor' and delete it.
  • (Optional, this script is only for preventing misuse of containers; it's fine not to install it.)
  • Shutdown afterwards.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_block_block_lxd.md.1188Sozz.lean.js b/assets/en_guide_block_block_lxd.md.D3o50Z_N.lean.js similarity index 74% rename from assets/en_guide_block_block_lxd.md.1188Sozz.lean.js rename to assets/en_guide_block_block_lxd.md.D3o50Z_N.lean.js index 778afecc46..aaff5a39ca 100644 --- a/assets/en_guide_block_block_lxd.md.1188Sozz.lean.js +++ b/assets/en_guide_block_block_lxd.md.D3o50Z_N.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1773143516000}'),t={name:"en/guide/block/block_lxd.md"};function o(l,i,r,p,h,c){return e(),a("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 a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Blocking Abusive Behavior via Shell Scripts","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/block/block_lxd.md","filePath":"en/guide/block/block_lxd.md","lastUpdated":1773196139000}'),t={name:"en/guide/block/block_lxd.md"};function o(l,i,r,p,h,c){return e(),a("div",null,i[0]||(i[0]=[n("",9)]))}const m=s(t,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_block_block_pve.md.RGc1tKBz.js b/assets/en_guide_block_block_pve.md.BoIG_v6y.js similarity index 98% rename from assets/en_guide_block_block_pve.md.RGc1tKBz.js rename to assets/en_guide_block_block_pve.md.BoIG_v6y.js index 28105419bb..054dac02a7 100644 --- a/assets/en_guide_block_block_pve.md.RGc1tKBz.js +++ b/assets/en_guide_block_block_pve.md.BoIG_v6y.js @@ -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"},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1773143516000}'),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(`

Avoid theft by setting up a firewall to limit the IPs used by the VMs

Create the following file under the PVE's host machine

shell
/etc/pve/firewall/<VMID>.fw
+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"},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1773196139000}'),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(`

Avoid theft by setting up a firewall to limit the IPs used by the VMs

Create the following file under the PVE's host machine

shell
/etc/pve/firewall/<VMID>.fw
 [IPSET ipfilter-<net0>]
 xxx.xxx.xxx.xxx

<VMID> is replaced with the VMID number of the virtual machine, <net0> is replaced with the corresponding alias in the network device (which generally doesn't need to be changed unless you're restricted to IPV6), and xxx.xxx.xxx.xxx is replaced with the public IP address, noting that this IP corresponds to the network device in front of it.

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.

There can be more than one IP, once this rule is enabled the VM can't use any other IP, if you don't write an IPv6 address it means the VM can't use an IPv6 address.

TIP

This setting is only recommended when opening VMs with separate IPs that are not NAT full port mapped, otherwise it may cause strange issues resulting in the server being without a network.

This method is not suitable for use on PVEs that open any NAT VMs/containers.

`,8)]))}const g=t(n,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/en_guide_block_block_pve.md.RGc1tKBz.lean.js b/assets/en_guide_block_block_pve.md.BoIG_v6y.lean.js similarity index 87% rename from assets/en_guide_block_block_pve.md.RGc1tKBz.lean.js rename to assets/en_guide_block_block_pve.md.BoIG_v6y.lean.js index 9a48e9a5f9..e0bf00e8e4 100644 --- a/assets/en_guide_block_block_pve.md.RGc1tKBz.lean.js +++ b/assets/en_guide_block_block_pve.md.BoIG_v6y.lean.js @@ -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"},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1773143516000}'),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.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"},"headers":[],"relativePath":"en/guide/block/block_pve.md","filePath":"en/guide/block/block_pve.md","lastUpdated":1773196139000}'),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}; diff --git a/assets/en_guide_containerd_containerd_build.md.BGED5Cu_.js b/assets/en_guide_containerd_containerd_build.md.w6TKNP9H.js similarity index 99% rename from assets/en_guide_containerd_containerd_build.md.BGED5Cu_.js rename to assets/en_guide_containerd_containerd_build.md.w6TKNP9H.js index 0fbde4545d..e31b566595 100644 --- a/assets/en_guide_containerd_containerd_build.md.BGED5Cu_.js +++ b/assets/en_guide_containerd_containerd_build.md.w6TKNP9H.js @@ -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":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

Preface

Two methods for provisioning containers.

Single Container Provisioning

  • Creates a single containerd container, automatically detects international or China mainland server
  • Can configure binding of an independent IPv6 address (requires host with public IPv6 and containerd-ipv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

Preface

Two methods for provisioning containers.

Single Container Provisioning

  • Creates a single containerd container, automatically detects international or China mainland server
  • Can configure binding of an independent IPv6 address (requires host with public IPv6 and containerd-ipv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
 chmod +x onecontainerd.sh

China Mainland

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
 chmod +x onecontainerd.sh

Example

Supported variables for running:

bash
./onecontainerd.sh <name> <cpu> <memory_mb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system] [disk_gb]

Currently supported system values:

  • debian
  • ubuntu
  • alpine
  • almalinux
  • rockylinux
  • openeuler

Default is debian if not specified.

shell
./onecontainerd.sh ct1 1 512 MyPassword 25000 34975 35000 n debian 0

Example container information:

AttributeValue
Container namect1
SSH usernameroot
SSH passwordMyPassword
CPU cores1
Memory512MB
SSH port25000
External/internal port range34975 to 35000
Systemdebian
Independent IPv6N
Disk sizeUnlimited

List all containers

shell
nerdctl ps -a

Enter container

shell
nerdctl exec -it ct1 bash

Enter Alpine container

shell
nerdctl exec -it ct1 sh

Type exit to leave the container.

Delete container

shell
nerdctl rm -f ct1

View container logs

shell
nerdctl logs ct1

Batch Container Provisioning

  • Multiple runs inherit configuration and generate sequentially
  • Auto-increments container name (ct1, ct2, ...), SSH port, and public ports
  • Container information recorded to ctlog file
  • Recommended to run in screen to avoid SSH disconnection

Run

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/create_containerd.sh
 chmod +x create_containerd.sh
diff --git a/assets/en_guide_containerd_containerd_build.md.BGED5Cu_.lean.js b/assets/en_guide_containerd_containerd_build.md.w6TKNP9H.lean.js
similarity index 87%
rename from assets/en_guide_containerd_containerd_build.md.BGED5Cu_.lean.js
rename to assets/en_guide_containerd_containerd_build.md.w6TKNP9H.lean.js
index d3cfc4b818..f6fa17477c 100644
--- a/assets/en_guide_containerd_containerd_build.md.BGED5Cu_.lean.js
+++ b/assets/en_guide_containerd_containerd_build.md.w6TKNP9H.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",47)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_build.md","filePath":"en/guide/containerd/containerd_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_build.md"};function l(r,s,p,h,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",47)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/en_guide_containerd_containerd_install.md.Bbxca2PR.js b/assets/en_guide_containerd_containerd_install.md.C887cD_h.js
similarity index 99%
rename from assets/en_guide_containerd_containerd_install.md.Bbxca2PR.js
rename to assets/en_guide_containerd_containerd_install.md.C887cD_h.js
index c8e0d82fa3..eb333f70e4 100644
--- a/assets/en_guide_containerd_containerd_install.md.Bbxca2PR.js
+++ b/assets/en_guide_containerd_containerd_install.md.C887cD_h.js
@@ -1 +1 @@
-import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_install.md"};function l(r,i,p,h,d,c){return a(),e("div",null,i[0]||(i[0]=[n('

Preface

Install the containerd environment, including containerd + runc + nerdctl + CNI + buildkitd full suite.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Installs containerd + runc + nerdctl + CNI + buildkitd (via nerdctl-full bundle)
  • Automatically configures CNI network (containerd-net: 172.20.0.0/16) with iptables NAT rules
  • Detects public IPv6 address; if present, automatically creates containerd-ipv6 CNI network and starts NDP Responder
  • Installs DNS liveness check service (check-dns.service)
  • Supports x86_64 and ARM64 architecture servers

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

TIP

After installation, run nerdctl ps -a to verify the containerd environment is working correctly.

Uninstall containerd Environment

One-click uninstall of the entire containerd environment, including all containers, images, CNI networks, systemd services, and nerdctl/containerd binaries:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and CNI network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

',21)]))}const k=s(t,[["render",l]]);export{u as __pageData,k as default}; +import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_install.md"};function l(r,i,p,h,d,c){return a(),e("div",null,i[0]||(i[0]=[n('

Preface

Install the containerd environment, including containerd + runc + nerdctl + CNI + buildkitd full suite.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Installs containerd + runc + nerdctl + CNI + buildkitd (via nerdctl-full bundle)
  • Automatically configures CNI network (containerd-net: 172.20.0.0/16) with iptables NAT rules
  • Detects public IPv6 address; if present, automatically creates containerd-ipv6 CNI network and starts NDP Responder
  • Installs DNS liveness check service (check-dns.service)
  • Supports x86_64 and ARM64 architecture servers

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

TIP

After installation, run nerdctl ps -a to verify the containerd environment is working correctly.

Uninstall containerd Environment

One-click uninstall of the entire containerd environment, including all containers, images, CNI networks, systemd services, and nerdctl/containerd binaries:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and CNI network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

',21)]))}const k=s(t,[["render",l]]);export{u as __pageData,k as default}; diff --git a/assets/en_guide_containerd_containerd_install.md.Bbxca2PR.lean.js b/assets/en_guide_containerd_containerd_install.md.C887cD_h.lean.js similarity index 87% rename from assets/en_guide_containerd_containerd_install.md.Bbxca2PR.lean.js rename to assets/en_guide_containerd_containerd_install.md.C887cD_h.lean.js index 0b9b932cb4..4e576307ac 100644 --- a/assets/en_guide_containerd_containerd_install.md.Bbxca2PR.lean.js +++ b/assets/en_guide_containerd_containerd_install.md.C887cD_h.lean.js @@ -1 +1 @@ -import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_install.md"};function l(r,i,p,h,d,c){return a(),e("div",null,i[0]||(i[0]=[n("",21)]))}const k=s(t,[["render",l]]);export{u as __pageData,k as default}; +import{_ as s,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_install.md","filePath":"en/guide/containerd/containerd_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_install.md"};function l(r,i,p,h,d,c){return a(),e("div",null,i[0]||(i[0]=[n("",21)]))}const k=s(t,[["render",l]]);export{u as __pageData,k as default}; diff --git a/assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.js b/assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.js similarity index 98% rename from assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.js rename to assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.js index bbe14e0dbb..14f4e9f284 100644 --- a/assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.js +++ b/assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.js @@ -1 +1 @@ -import{_ as e,c as r,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/containerd/containerd_precheck.md"};function o(s,t,d,l,c,u){return i(),r("div",null,t[0]||(t[0]=[n('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

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.

WARNING

The containerd solution does not support KVM/QEMU virtual machines. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.

Feel free to give the project a Star for free support! --> https://github.com/oneclickvirt/containerd

Project Features

Bulk or individual NAT server provisioning based on containerd + nerdctl runtime

  • Installs containerd + runc + nerdctl + CNI + buildkitd via the nerdctl-full bundle
  • Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to official images
  • Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding
  • Default unprivileged containers, supports lxcfs mounting (if lxcfs is installed on the host)
  • Supports disk limit parameters (requires xfs/btrfs snapshotter with storage-opt support)
  • Supports China CDN acceleration

Supported Systems

Systemamd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

Configuration Requirements

  • Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Architecture: x86_64 (amd64) or ARM64
  • Kernel must support overlay filesystem
  • Network must be able to connect to GitHub raw interface
  • At least 3GB free disk space
  • No KVM hardware support required
',12)]))}const m=e(a,[["render",o]]);export{h as __pageData,m as default}; +import{_ as e,c as r,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/containerd/containerd_precheck.md"};function o(s,t,d,l,c,u){return i(),r("div",null,t[0]||(t[0]=[n('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

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.

WARNING

The containerd solution does not support KVM/QEMU virtual machines. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.

Feel free to give the project a Star for free support! --> https://github.com/oneclickvirt/containerd

Project Features

Bulk or individual NAT server provisioning based on containerd + nerdctl runtime

  • Installs containerd + runc + nerdctl + CNI + buildkitd via the nerdctl-full bundle
  • Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to official images
  • Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding
  • Default unprivileged containers, supports lxcfs mounting (if lxcfs is installed on the host)
  • Supports disk limit parameters (requires xfs/btrfs snapshotter with storage-opt support)
  • Supports China CDN acceleration

Supported Systems

Systemamd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

Configuration Requirements

  • Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Architecture: x86_64 (amd64) or ARM64
  • Kernel must support overlay filesystem
  • Network must be able to connect to GitHub raw interface
  • At least 3GB free disk space
  • No KVM hardware support required
',12)]))}const m=e(a,[["render",o]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.lean.js b/assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.lean.js similarity index 87% rename from assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.lean.js rename to assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.lean.js index 85ea6c2204..f7efe65fe3 100644 --- a/assets/en_guide_containerd_containerd_precheck.md.CyrTUZiu.lean.js +++ b/assets/en_guide_containerd_containerd_precheck.md.e_e4j9jH.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/containerd/containerd_precheck.md"};function o(s,t,d,l,c,u){return i(),r("div",null,t[0]||(t[0]=[n("",12)]))}const m=e(a,[["render",o]]);export{h as __pageData,m as default}; +import{_ as e,c as r,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_precheck.md","filePath":"en/guide/containerd/containerd_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/containerd/containerd_precheck.md"};function o(s,t,d,l,c,u){return i(),r("div",null,t[0]||(t[0]=[n("",12)]))}const m=e(a,[["render",o]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.js b/assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.js similarity index 99% rename from assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.js rename to assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.js index 1dbd032bdd..4bd29cee8d 100644 --- a/assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.js +++ b/assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.js @@ -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"},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

FAQ

nerdctl: command not found

The containerd environment is not correctly installed or /usr/local/bin is not in PATH.

Fix:

shell
export PATH="/usr/local/bin:$PATH"
+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"},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

FAQ

nerdctl: command not found

The containerd environment is not correctly installed or /usr/local/bin is not in PATH.

Fix:

shell
export PATH="/usr/local/bin:$PATH"
 echo 'export PATH="/usr/local/bin:$PATH"' >> /etc/profile
 source /etc/profile

If still not found, re-run the installation script:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

containerd service not running

shell
systemctl status containerd
 systemctl restart containerd

View logs:

shell
journalctl -u containerd -f

Container cannot access external network (IPv4)

Check if iptables NAT rules exist:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.20

If not present, add manually:

shell
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 ! -d 172.20.0.0/16 -j MASQUERADE
diff --git a/assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.lean.js b/assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.lean.js
similarity index 87%
rename from assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.lean.js
rename to assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.lean.js
index 34abe8f141..c9ed04c8af 100644
--- a/assets/en_guide_containerd_containerd_qa.md.HyiZqgIb.lean.js
+++ b/assets/en_guide_containerd_containerd_qa.md.Nlk_rkjy.lean.js
@@ -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"},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",39)]))}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.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/containerd/containerd_qa.md","filePath":"en/guide/containerd/containerd_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/containerd/containerd_qa.md"};function l(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",39)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.js b/assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.js
similarity index 96%
rename from assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.js
rename to assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.js
index f4268ed0c9..345d3ea909 100644
--- a/assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.js
+++ b/assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.js
@@ -1 +1 @@
-import{_ as e,c as r,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1773143516000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,s,p,h,d){return n(),r("div",null,t[0]||(t[0]=[a('

Acknowledgements

https://github.com/containerd/nerdctl

https://github.com/containerd/containerd

https://github.com/opencontainers/runc

https://github.com/containernetworking/cni

https://github.com/moby/buildkit

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

',9)]))}const g=e(o,[["render",i]]);export{u as __pageData,g as default}; +import{_ as e,c as r,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1773196139000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,s,p,h,d){return n(),r("div",null,t[0]||(t[0]=[a('

Acknowledgements

https://github.com/containerd/nerdctl

https://github.com/containerd/containerd

https://github.com/opencontainers/runc

https://github.com/containernetworking/cni

https://github.com/moby/buildkit

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

',9)]))}const g=e(o,[["render",i]]);export{u as __pageData,g as default}; diff --git a/assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.lean.js b/assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.lean.js similarity index 86% rename from assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.lean.js rename to assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.lean.js index 70b62375fc..2fc83c95aa 100644 --- a/assets/en_guide_containerd_containerd_thanks.md.DtuDOZ-p.lean.js +++ b/assets/en_guide_containerd_containerd_thanks.md.Bx-B4d73.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1773143516000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,s,p,h,d){return n(),r("div",null,t[0]||(t[0]=[a("",9)]))}const g=e(o,[["render",i]]);export{u as __pageData,g as default}; +import{_ as e,c as r,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/containerd/containerd_thanks.md","filePath":"en/guide/containerd/containerd_thanks.md","lastUpdated":1773196139000}'),o={name:"en/guide/containerd/containerd_thanks.md"};function i(c,t,s,p,h,d){return n(),r("div",null,t[0]||(t[0]=[a("",9)]))}const g=e(o,[["render",i]]);export{u as __pageData,g as default}; diff --git a/assets/en_guide_dashboard.md.CpwMvZTp.js b/assets/en_guide_dashboard.md.-ZFBnAqk.js similarity index 99% rename from assets/en_guide_dashboard.md.CpwMvZTp.js rename to assets/en_guide_dashboard.md.-ZFBnAqk.js index 5a7c98120a..4c4498b4f1 100644 --- a/assets/en_guide_dashboard.md.CpwMvZTp.js +++ b/assets/en_guide_dashboard.md.-ZFBnAqk.js @@ -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"},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1773143516000}'),o={name:"en/guide/dashboard.md"};function n(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i('

Preparation Work

To virtualize a server, you will need:

  1. A server (VPS or Dedicated Server) that can connect to the public internet. It's preferable if this server can access GitHub's RAW pages perfectly, as some projects and components might not use CDN acceleration.

  2. A stable SSH connection from your local machine. If the connection isn't stable, you can use the screen command to create a window and execute commands within that window.

TIP

If you're unfamiliar with the screen command, please search for relevant tutorials to learn it, or you can use tmux as an alternative.

  1. Ensure that the server's system and hardware meet the requirements specified by the corresponding project. Refer to the project's documentation for detailed information.

This document will use a VPS as an example, and the VPS should be clean without any native environment issues. If necessary, reinstall the system to ensure the initial environment's cleanliness.

WARNING

The PVE project might cause problems on the host machine. If you're not familiar with debugging bugs and fixing system issues, it's not recommended to use PVE in a production environment. When using PVE-related scripts, make sure the host machine can be reinstalled at any time.

Project Repository

Welcome Star and Fork, all resources are open source, no non-open source parts, reproduced as well as the use of please write on the source of this site, thank you!

OneClickVirt

https://github.com/oneclickvirt/oneclickvirt

PVE

https://github.com/oneclickvirt/pve

Hits

Incus

https://github.com/oneclickvirt/incus

Hits

Docker

https://github.com/oneclickvirt/docker

Hits

LXD

https://github.com/oneclickvirt/lxd

Hits

Containerd

https://github.com/oneclickvirt/containerd

Hits

Podman

https://github.com/oneclickvirt/podman

Hits

QEMU

https://github.com/oneclickvirt/qemu

Hits

KubeVirt

https://github.com/oneclickvirt/kubevirt

Hits

',35)]))}const u=t(o,[["render",n]]);export{m as __pageData,u as default}; +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"},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1773196139000}'),o={name:"en/guide/dashboard.md"};function n(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i('

Preparation Work

To virtualize a server, you will need:

  1. A server (VPS or Dedicated Server) that can connect to the public internet. It's preferable if this server can access GitHub's RAW pages perfectly, as some projects and components might not use CDN acceleration.

  2. A stable SSH connection from your local machine. If the connection isn't stable, you can use the screen command to create a window and execute commands within that window.

TIP

If you're unfamiliar with the screen command, please search for relevant tutorials to learn it, or you can use tmux as an alternative.

  1. Ensure that the server's system and hardware meet the requirements specified by the corresponding project. Refer to the project's documentation for detailed information.

This document will use a VPS as an example, and the VPS should be clean without any native environment issues. If necessary, reinstall the system to ensure the initial environment's cleanliness.

WARNING

The PVE project might cause problems on the host machine. If you're not familiar with debugging bugs and fixing system issues, it's not recommended to use PVE in a production environment. When using PVE-related scripts, make sure the host machine can be reinstalled at any time.

Project Repository

Welcome Star and Fork, all resources are open source, no non-open source parts, reproduced as well as the use of please write on the source of this site, thank you!

OneClickVirt

https://github.com/oneclickvirt/oneclickvirt

PVE

https://github.com/oneclickvirt/pve

Hits

Incus

https://github.com/oneclickvirt/incus

Hits

Docker

https://github.com/oneclickvirt/docker

Hits

LXD

https://github.com/oneclickvirt/lxd

Hits

Containerd

https://github.com/oneclickvirt/containerd

Hits

Podman

https://github.com/oneclickvirt/podman

Hits

QEMU

https://github.com/oneclickvirt/qemu

Hits

KubeVirt

https://github.com/oneclickvirt/kubevirt

Hits

',35)]))}const u=t(o,[["render",n]]);export{m as __pageData,u as default}; diff --git a/assets/en_guide_dashboard.md.CpwMvZTp.lean.js b/assets/en_guide_dashboard.md.-ZFBnAqk.lean.js similarity index 85% rename from assets/en_guide_dashboard.md.CpwMvZTp.lean.js rename to assets/en_guide_dashboard.md.-ZFBnAqk.lean.js index 37a14b517c..344deea12a 100644 --- a/assets/en_guide_dashboard.md.CpwMvZTp.lean.js +++ b/assets/en_guide_dashboard.md.-ZFBnAqk.lean.js @@ -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"},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1773143516000}'),o={name:"en/guide/dashboard.md"};function n(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i("",35)]))}const u=t(o,[["render",n]]);export{m as __pageData,u as default}; +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"},"headers":[],"relativePath":"en/guide/dashboard.md","filePath":"en/guide/dashboard.md","lastUpdated":1773196139000}'),o={name:"en/guide/dashboard.md"};function n(l,e,s,c,h,p){return r(),a("div",null,e[0]||(e[0]=[i("",35)]))}const u=t(o,[["render",n]]);export{m as __pageData,u as default}; diff --git a/assets/en_guide_dashboardq.md._bVyRwtO.js b/assets/en_guide_dashboardq.md.BqZmHJfx.js similarity index 96% rename from assets/en_guide_dashboardq.md._bVyRwtO.js rename to assets/en_guide_dashboardq.md.BqZmHJfx.js index a556ec1743..2adb8acdf8 100644 --- a/assets/en_guide_dashboardq.md._bVyRwtO.js +++ b/assets/en_guide_dashboardq.md.BqZmHJfx.js @@ -1 +1 @@ -import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1773143516000}'),n={name:"en/guide/dashboardq.md"};function r(d,e,l,o,c,h){return t(),s("div",null,e[0]||(e[0]=[i('

Give me a cup of coffee.

https://ko-fi.com/spiritlhl

WeChat

WeChat

USDT-TRC20

bash
TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B

USDT-Polygon/Matic

bash
0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6
',8)]))}const u=a(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1773196139000}'),n={name:"en/guide/dashboardq.md"};function r(d,e,l,o,c,h){return t(),s("div",null,e[0]||(e[0]=[i('

Give me a cup of coffee.

https://ko-fi.com/spiritlhl

WeChat

WeChat

USDT-TRC20

bash
TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B

USDT-Polygon/Matic

bash
0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6
',8)]))}const u=a(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/en_guide_dashboardq.md._bVyRwtO.lean.js b/assets/en_guide_dashboardq.md.BqZmHJfx.lean.js similarity index 86% rename from assets/en_guide_dashboardq.md._bVyRwtO.lean.js rename to assets/en_guide_dashboardq.md.BqZmHJfx.lean.js index 370a8fad35..71f60ab325 100644 --- a/assets/en_guide_dashboardq.md._bVyRwtO.lean.js +++ b/assets/en_guide_dashboardq.md.BqZmHJfx.lean.js @@ -1 +1 @@ -import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1773143516000}'),n={name:"en/guide/dashboardq.md"};function r(d,e,l,o,c,h){return t(),s("div",null,e[0]||(e[0]=[i("",8)]))}const u=a(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/dashboardq.md","filePath":"en/guide/dashboardq.md","lastUpdated":1773196139000}'),n={name:"en/guide/dashboardq.md"};function r(d,e,l,o,c,h){return t(),s("div",null,e[0]||(e[0]=[i("",8)]))}const u=a(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/en_guide_docker_docker_android.md.B8dMMnUe.js b/assets/en_guide_docker_docker_android.md.DUJysAV4.js similarity index 99% rename from assets/en_guide_docker_docker_android.md.B8dMMnUe.js rename to assets/en_guide_docker_docker_android.md.DUJysAV4.js index d04d78c5c0..e667fba52e 100644 --- a/assets/en_guide_docker_docker_android.md.B8dMMnUe.js +++ b/assets/en_guide_docker_docker_android.md.DUJysAV4.js @@ -1,4 +1,4 @@ -import{_ as e,c as s,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,i,l,h,d,p){return n(),s("div",null,i[0]||(i[0]=[a(`

Running Android Virtual Machine in Docker

One-Click Deployment

  • Customizable Android version
  • Automatically creates a validated web website
  • Automatically installs Nginx and configures reverse proxy. Option to bind a domain is available. Default is port 80 if no domain binding is chosen.
  • No need to worry about host machine supporting nested virtualization
  • Supports x86_64 and ARM architectures

Host machine should have a minimum configuration of 1 core, 2GB RAM, and 15GB storage, else starting the setup might lead to host machine freezing.

Ubuntu is recommended for hosting, Debian may cause white screen on Android.

Newer Android versions occupy more resources. The above configuration requirements are for the minimum version of Android. (Personally tested with the tag "12.0.0-latest", higher versions resulted in a blank screen. Test which version works for you.)

If, after 5 minutes after opening, the login verification of the browser page still keeps failing, then please check the logs of the Android container, it is probable that the Android container has crashed, and it is recommended to replace the container with a lower version of the Android system for installation.

Setup:

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

After executing the command, follow the prompts to input the required information. Make sure to choose the version by entering the corresponding number index. Once the installation is complete, open YourMachineIPv4+80Port to log in.

If you need to check the generated Android information and web login details, execute cat /root/android_info to retrieve the information.

Default username: onea Default password: oneclick

For remote desktop, click on H264 Converter to initiate the redirection.

Please note that currently only one Android container can be generated. Do not generate duplicates. If you need to replace the version, please execute the subsequent commands after deletion.

Temporarily only support the opening has been used, can not restart the server, reboot may not be able to restart after the mapping success, self-test

Deletion:

  • Delete the container
  • Delete the corresponding container image
  • Delete the configuration file
shell
docker rm -f android
+import{_ as e,c as s,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,i,l,h,d,p){return n(),s("div",null,i[0]||(i[0]=[a(`

Running Android Virtual Machine in Docker

One-Click Deployment

  • Customizable Android version
  • Automatically creates a validated web website
  • Automatically installs Nginx and configures reverse proxy. Option to bind a domain is available. Default is port 80 if no domain binding is chosen.
  • No need to worry about host machine supporting nested virtualization
  • Supports x86_64 and ARM architectures

Host machine should have a minimum configuration of 1 core, 2GB RAM, and 15GB storage, else starting the setup might lead to host machine freezing.

Ubuntu is recommended for hosting, Debian may cause white screen on Android.

Newer Android versions occupy more resources. The above configuration requirements are for the minimum version of Android. (Personally tested with the tag "12.0.0-latest", higher versions resulted in a blank screen. Test which version works for you.)

If, after 5 minutes after opening, the login verification of the browser page still keeps failing, then please check the logs of the Android container, it is probable that the Android container has crashed, and it is recommended to replace the container with a lower version of the Android system for installation.

Setup:

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

After executing the command, follow the prompts to input the required information. Make sure to choose the version by entering the corresponding number index. Once the installation is complete, open YourMachineIPv4+80Port to log in.

If you need to check the generated Android information and web login details, execute cat /root/android_info to retrieve the information.

Default username: onea Default password: oneclick

For remote desktop, click on H264 Converter to initiate the redirection.

Please note that currently only one Android container can be generated. Do not generate duplicates. If you need to replace the version, please execute the subsequent commands after deletion.

Temporarily only support the opening has been used, can not restart the server, reboot may not be able to restart after the mapping success, self-test

Deletion:

  • Delete the container
  • Delete the corresponding container image
  • Delete the configuration file
shell
docker rm -f android
 docker rmi $(docker images | grep "redroid" | awk '{print $3}')
 rm -rf /etc/nginx/sites-enabled/reverse-proxy
 rm -rf /etc/nginx/sites-available/reverse-proxy
diff --git a/assets/en_guide_docker_docker_android.md.B8dMMnUe.lean.js b/assets/en_guide_docker_docker_android.md.DUJysAV4.lean.js
similarity index 87%
rename from assets/en_guide_docker_docker_android.md.B8dMMnUe.lean.js
rename to assets/en_guide_docker_docker_android.md.DUJysAV4.lean.js
index 235d388e62..9d6c76f593 100644
--- a/assets/en_guide_docker_docker_android.md.B8dMMnUe.lean.js
+++ b/assets/en_guide_docker_docker_android.md.DUJysAV4.lean.js
@@ -1 +1 @@
-import{_ as e,c as s,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,i,l,h,d,p){return n(),s("div",null,i[0]||(i[0]=[a("",22)]))}const g=e(t,[["render",r]]);export{k as __pageData,g as default};
+import{_ as e,c as s,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Android Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_android.md","filePath":"en/guide/docker/docker_android.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_android.md"};function r(o,i,l,h,d,p){return n(),s("div",null,i[0]||(i[0]=[a("",22)]))}const g=e(t,[["render",r]]);export{k as __pageData,g as default};
diff --git a/assets/en_guide_docker_docker_build.md.CTIvFfWb.js b/assets/en_guide_docker_docker_build.md.C48yhqXn.js
similarity index 99%
rename from assets/en_guide_docker_docker_build.md.CTIvFfWb.js
rename to assets/en_guide_docker_docker_build.md.C48yhqXn.js
index b2e8a91635..ec7c3dafec 100644
--- a/assets/en_guide_docker_docker_build.md.CTIvFfWb.js
+++ b/assets/en_guide_docker_docker_build.md.C48yhqXn.js
@@ -1,4 +1,4 @@
-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"},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_build.md"};function l(h,s,r,p,d,o){return e(),a("div",null,s[0]||(s[0]=[n(`

Introduction

There are two methods of building

Setting Up Standalone

  • Generate only one docker
  • Can be configured to bind a separate IPV6 address, but requires a docker previously installed using the environment installation command of this set of scripts, and requires the host to be bound to at least the /112 IPV6 subnet
  • Support for x86_64 and ARM architecture servers

Download the Script

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

Example

Running the supported variables are as follows

./onedocker.sh name cpu memory password sshport startport endport <independent_ipv6> <system> <disk>

Currently, the system only supports selecting:

  • alpine
  • debian
  • ubuntu
  • almalinux
  • rockylinux
  • openeuler

with Debian being the default choice.

The hard disk size can only be set by filling in the value if you have selected the option to support limiting the hard disk size during the previous Docker installation, it is not limited when not filled in by default.

shell
./onedocker.sh test 1 512 123456 25000 34975 35000 N debian 5

The following is the information for the created example container:

AttributeValue
Container Nametest
Username for SSH Loginroot
Password for SSH Login123456
Number of CPU Cores1
Memory Size512MB
SSH Port25000
Port Range for Internal and External Mapping34975 to 35000
Operating Systemdebian
Whether to bind a separate IPV6 addressN
Disk Size5G

Deleting the test container

shell
docker rm -f test
+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"},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_build.md"};function l(h,s,r,p,d,o){return e(),a("div",null,s[0]||(s[0]=[n(`

Introduction

There are two methods of building

Setting Up Standalone

  • Generate only one docker
  • Can be configured to bind a separate IPV6 address, but requires a docker previously installed using the environment installation command of this set of scripts, and requires the host to be bound to at least the /112 IPV6 subnet
  • Support for x86_64 and ARM architecture servers

Download the Script

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

Example

Running the supported variables are as follows

./onedocker.sh name cpu memory password sshport startport endport <independent_ipv6> <system> <disk>

Currently, the system only supports selecting:

  • alpine
  • debian
  • ubuntu
  • almalinux
  • rockylinux
  • openeuler

with Debian being the default choice.

The hard disk size can only be set by filling in the value if you have selected the option to support limiting the hard disk size during the previous Docker installation, it is not limited when not filled in by default.

shell
./onedocker.sh test 1 512 123456 25000 34975 35000 N debian 5

The following is the information for the created example container:

AttributeValue
Container Nametest
Username for SSH Loginroot
Password for SSH Login123456
Number of CPU Cores1
Memory Size512MB
SSH Port25000
Port Range for Internal and External Mapping34975 to 35000
Operating Systemdebian
Whether to bind a separate IPV6 addressN
Disk Size5G

Deleting the test container

shell
docker rm -f test
 rm -rf test
 ls

Accessing the test container

shell
docker exec -it test /bin/bash

To exit the container, simply execute exit.

Inquiry Information

shell
cat Container_Name(change me)

The output format is

Container_Name SSH_Port Root_Password Number_of_Cores Memory Start_of_Public_Port End_of_Public_Port

The docker's ipv6 address can only be looked up within the container itself, it doesn't exist in the docker's configuration

Batch Deployment

  • Run inheritance configuration generation multiple times in bulk.
  • When generating multiple instances, it is recommended to execute within a screen session to avoid SSH connection interruptions.
  • Support for x86_64 and ARM architecture servers

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_docker.sh -o create_docker.sh && chmod +x create_docker.sh && bash create_docker.sh

Querying information on batch openings

shell
cat dclog

The output format is

Container_Name SSH_Port Root_Password Number_of_Cores Memory Start_of_Public_Port End_of_Public_Port Disk_Size

One line corresponds to information about a container, the docker's ipv6 address can only be looked up within the container itself, it doesn't exist in the docker's configuration.

Uninstall all Docker containers and images

The following command offload ignores ndpresponder to prevent IPV6 configuration failure

shell
docker ps -a --format '{{.Names}}' | grep -vE '^ndpresponder' | xargs -r docker rm -f
 docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' | grep -v 'ndpresponder' | awk '{print $2}' | xargs -r docker rmi
diff --git a/assets/en_guide_docker_docker_build.md.CTIvFfWb.lean.js b/assets/en_guide_docker_docker_build.md.C48yhqXn.lean.js
similarity index 86%
rename from assets/en_guide_docker_docker_build.md.CTIvFfWb.lean.js
rename to assets/en_guide_docker_docker_build.md.C48yhqXn.lean.js
index 6797b6d789..751595f445 100644
--- a/assets/en_guide_docker_docker_build.md.CTIvFfWb.lean.js
+++ b/assets/en_guide_docker_docker_build.md.C48yhqXn.lean.js
@@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_build.md"};function l(h,s,r,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.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_build.md","filePath":"en/guide/docker/docker_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_build.md"};function l(h,s,r,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};
diff --git a/assets/en_guide_docker_docker_custom.md.OY4gKWwk.js b/assets/en_guide_docker_docker_custom.md.jZKnFNGX.js
similarity index 99%
rename from assets/en_guide_docker_docker_custom.md.OY4gKWwk.js
rename to assets/en_guide_docker_docker_custom.md.jZKnFNGX.js
index 98eb63b9b2..39bf918cb2 100644
--- a/assets/en_guide_docker_docker_custom.md.OY4gKWwk.js
+++ b/assets/en_guide_docker_docker_custom.md.jZKnFNGX.js
@@ -1,4 +1,4 @@
-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"},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_custom.md"};function l(o,s,r,p,h,d){return a(),e("div",null,s[0]||(s[0]=[n(`

Script for One-Click Installation of Certain Containers using Docker

Each container has specific configuration requirements; please refer to them individually.

If the configured memory is not enough, then it's okay to make up for it with the virtual memory here.

Note that the following scripts must be pre-installed using the environment installation scripts in this set of tutorials before using them

One-Click Setup of Firefox Browser Container

  • Crash recovery on startup has been configured.
  • Chinese fonts have been integrated into the container.
  • Built-in web validation with the option to set a custom password.
  • Maximum memory usage for the container is customizable.
  • Choice to enable VNC port, disabled by default.
  • No need to consider support for nested virtualization or server architecture.
  • Audio mapping is not supported; sound transmission is unavailable on both the web and VNC.

The host machine should have at least 1 core, 1GB RAM, and 5GB disk space. The created container will occupy a minimum of 1GB disk space.

Setup:

After setup, the default password is oneclick.

The default web port is 3003. Once the setup is complete, simply open HOST_IPV4:PORT in your browser.

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onefirefox.sh -o onefirefox.sh && chmod +x onefirefox.sh && bash onefirefox.sh

Deletion

Modify the following port number 3003 to your actual port number, and then execute the command to delete the container, configuration file, and corresponding image

shell
PORT="3003"
+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"},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_custom.md"};function l(o,s,r,p,h,d){return a(),e("div",null,s[0]||(s[0]=[n(`

Script for One-Click Installation of Certain Containers using Docker

Each container has specific configuration requirements; please refer to them individually.

If the configured memory is not enough, then it's okay to make up for it with the virtual memory here.

Note that the following scripts must be pre-installed using the environment installation scripts in this set of tutorials before using them

One-Click Setup of Firefox Browser Container

  • Crash recovery on startup has been configured.
  • Chinese fonts have been integrated into the container.
  • Built-in web validation with the option to set a custom password.
  • Maximum memory usage for the container is customizable.
  • Choice to enable VNC port, disabled by default.
  • No need to consider support for nested virtualization or server architecture.
  • Audio mapping is not supported; sound transmission is unavailable on both the web and VNC.

The host machine should have at least 1 core, 1GB RAM, and 5GB disk space. The created container will occupy a minimum of 1GB disk space.

Setup:

After setup, the default password is oneclick.

The default web port is 3003. Once the setup is complete, simply open HOST_IPV4:PORT in your browser.

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onefirefox.sh -o onefirefox.sh && chmod +x onefirefox.sh && bash onefirefox.sh

Deletion

Modify the following port number 3003 to your actual port number, and then execute the command to delete the container, configuration file, and corresponding image

shell
PORT="3003"
 docker stop firefox_\${PORT}
 docker rm -f firefox_\${PORT}
 rm -rf /usr/local/bin/firefox_\${PORT}
diff --git a/assets/en_guide_docker_docker_custom.md.OY4gKWwk.lean.js b/assets/en_guide_docker_docker_custom.md.jZKnFNGX.lean.js
similarity index 88%
rename from assets/en_guide_docker_docker_custom.md.OY4gKWwk.lean.js
rename to assets/en_guide_docker_docker_custom.md.jZKnFNGX.lean.js
index 0817a2398f..6fdb72a2e3 100644
--- a/assets/en_guide_docker_docker_custom.md.OY4gKWwk.lean.js
+++ b/assets/en_guide_docker_docker_custom.md.jZKnFNGX.lean.js
@@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_custom.md"};function l(o,s,r,p,h,d){return a(),e("div",null,s[0]||(s[0]=[n("",52)]))}const u=i(t,[["render",l]]);export{k as __pageData,u as default};
+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"},"headers":[],"relativePath":"en/guide/docker/docker_custom.md","filePath":"en/guide/docker/docker_custom.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_custom.md"};function l(o,s,r,p,h,d){return a(),e("div",null,s[0]||(s[0]=[n("",52)]))}const u=i(t,[["render",l]]);export{k as __pageData,u as default};
diff --git a/assets/en_guide_docker_docker_install.md.CDALzLC_.js b/assets/en_guide_docker_docker_install.md.NcTGEKFG.js
similarity index 99%
rename from assets/en_guide_docker_docker_install.md.CDALzLC_.js
rename to assets/en_guide_docker_docker_install.md.NcTGEKFG.js
index 610a7bc9fa..bd69ac7452 100644
--- a/assets/en_guide_docker_docker_install.md.CDALzLC_.js
+++ b/assets/en_guide_docker_docker_install.md.NcTGEKFG.js
@@ -1,2 +1,2 @@
-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"},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,h,p,o,d){return a(),e("div",null,s[0]||(s[0]=[t(`

Preface

Support for running Docker virtualization on various systems, including Linux, Android, and Windows.

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

Command:

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • Detect the system environment and install the corresponding components
  • Install docker and docker-compose.
  • Download some configuration scripts required by default
  • Detect if there is an IPV6 address, check if it is greater than or equal to /112, and if so, configure the docker's ipv6 network.
  • If all the above conditions are met, create ndpresponder docker and radvd so that IPV6 allocation supports ndp broadcasting and auto-allocation.
  • Support for x86_64 and ARM architecture servers
  • The installation process will ask you to enter some options, select the Docker installation path, select whether the Docker installation can limit the hard disk

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

OR

bash dockerinstall.sh

TIP

The environment installation process may require you to reboot the server and then execute the script again, see the instructions after the script is run for more details

Detect whether Docker supports limiting container hard disk size

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

Or specify a different storage limit size (in MB), the default test of the 500MB limit of the container whether the limit is successful

shell
# 1GB Limit
+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"},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,h,p,o,d){return a(),e("div",null,s[0]||(s[0]=[t(`

Preface

Support for running Docker virtualization on various systems, including Linux, Android, and Windows.

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

Command:

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • Detect the system environment and install the corresponding components
  • Install docker and docker-compose.
  • Download some configuration scripts required by default
  • Detect if there is an IPV6 address, check if it is greater than or equal to /112, and if so, configure the docker's ipv6 network.
  • If all the above conditions are met, create ndpresponder docker and radvd so that IPV6 allocation supports ndp broadcasting and auto-allocation.
  • Support for x86_64 and ARM architecture servers
  • The installation process will ask you to enter some options, select the Docker installation path, select whether the Docker installation can limit the hard disk

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

OR

bash dockerinstall.sh

TIP

The environment installation process may require you to reboot the server and then execute the script again, see the instructions after the script is run for more details

Detect whether Docker supports limiting container hard disk size

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

Or specify a different storage limit size (in MB), the default test of the 500MB limit of the container whether the limit is successful

shell
# 1GB Limit
 bash disk_test.sh 1000

Uninstall Docker Environment

One-click uninstall of the entire Docker environment, including all containers, images, networks, systemd services, and binaries:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

`,27)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/en_guide_docker_docker_install.md.CDALzLC_.lean.js b/assets/en_guide_docker_docker_install.md.NcTGEKFG.lean.js similarity index 86% rename from assets/en_guide_docker_docker_install.md.CDALzLC_.lean.js rename to assets/en_guide_docker_docker_install.md.NcTGEKFG.lean.js index d3da7a2886..2a9fb435af 100644 --- a/assets/en_guide_docker_docker_install.md.CDALzLC_.lean.js +++ b/assets/en_guide_docker_docker_install.md.NcTGEKFG.lean.js @@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,h,p,o,d){return a(),e("div",null,s[0]||(s[0]=[t("",27)]))}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.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_install.md","filePath":"en/guide/docker/docker_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_install.md"};function l(r,s,h,p,o,d){return a(),e("div",null,s[0]||(s[0]=[t("",27)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/en_guide_docker_docker_macos.md.BaiPRHaf.js b/assets/en_guide_docker_docker_macos.md.kVfbg90t.js similarity index 90% rename from assets/en_guide_docker_docker_macos.md.BaiPRHaf.js rename to assets/en_guide_docker_docker_macos.md.kVfbg90t.js index b0736b2afd..aee58d9cd9 100644 --- a/assets/en_guide_docker_docker_macos.md.BaiPRHaf.js +++ b/assets/en_guide_docker_docker_macos.md.kVfbg90t.js @@ -1 +1 @@ -import{_ as a,c as r,o,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_macos.md"};function t(i,e,s,d,u,l){return o(),r("div",null,e[0]||(e[0]=[c('

Running macOS Virtual Machines in Docker

Using Dockur

Original Project:

https://github.com/dockur/macos

Using Docker-OSX

Original Project:

https://github.com/sickcodes/Docker-OSX

',7)]))}const m=a(n,[["render",t]]);export{h as __pageData,m as default}; +import{_ as a,c as r,o,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_macos.md"};function t(i,e,s,d,u,l){return o(),r("div",null,e[0]||(e[0]=[c('

Running macOS Virtual Machines in Docker

Using Dockur

Original Project:

https://github.com/dockur/macos

Using Docker-OSX

Original Project:

https://github.com/sickcodes/Docker-OSX

',7)]))}const m=a(n,[["render",t]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_docker_docker_macos.md.BaiPRHaf.lean.js b/assets/en_guide_docker_docker_macos.md.kVfbg90t.lean.js similarity index 74% rename from assets/en_guide_docker_docker_macos.md.BaiPRHaf.lean.js rename to assets/en_guide_docker_docker_macos.md.kVfbg90t.lean.js index 219e81c110..0da8eed66c 100644 --- a/assets/en_guide_docker_docker_macos.md.BaiPRHaf.lean.js +++ b/assets/en_guide_docker_docker_macos.md.kVfbg90t.lean.js @@ -1 +1 @@ -import{_ as a,c as r,o,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_macos.md"};function t(i,e,s,d,u,l){return o(),r("div",null,e[0]||(e[0]=[c("",7)]))}const m=a(n,[["render",t]]);export{h as __pageData,m as default}; +import{_ as a,c as r,o,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Running macOS Virtual Machines in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_macos.md","filePath":"en/guide/docker/docker_macos.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_macos.md"};function t(i,e,s,d,u,l){return o(),r("div",null,e[0]||(e[0]=[c("",7)]))}const m=a(n,[["render",t]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_docker_docker_precheck.md.BSHP7pkf.js b/assets/en_guide_docker_docker_precheck.md.DG9SexCY.js similarity index 98% rename from assets/en_guide_docker_docker_precheck.md.BSHP7pkf.js rename to assets/en_guide_docker_docker_precheck.md.DG9SexCY.js index 2c86efda57..b7a2a9f30b 100644 --- a/assets/en_guide_docker_docker_precheck.md.BSHP7pkf.js +++ b/assets/en_guide_docker_docker_precheck.md.DG9SexCY.js @@ -1 +1 @@ -import{_ as t,c as o,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,h,d,u){return a(),o("div",null,e[0]||(e[0]=[n('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

WARNING

If the host has an IPV6 network, the installation will change the network structure of the host, please make sure that the host can reset the system at any time and that there is no important data on the host before running.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/docker

Project Features

Bulk or individual NAT server provisioning via docker

Default use of debian system optional alpine system, each container comes with 1 external ssh port, 25 internal and external network ports, you can choose whether to bind IPV6 address

The default creation of unprivileged containers, and does not mount and host docker daemon communication, so ** host created docker virtualization NAT servers can not be nested within the virtualization docker **

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's view.

By default, you can choose whether or not to share the hard disk of the host machine, and you can choose whether or not to install it as an environment that can limit the size of the hard disk during Docker installation.

Configuration requirements

The system can be installed docker can be used, the network can connect to the Github raw interface can be used, hardware configuration as long as not pull across the line, free hard disk has 3G on it!

(If you need to bind an IPV6 address, then please make sure to use the installation script of this set of scripts for docker installation, you need it to automatically preset some of the settings)

If the hardware resources are just a little bit better, need to limit more things and need to limit the size of the hard disk, you can use the incus partition of the script batch open LXC virtualization containers

If the hardware is very good and you have a lot of resources, you can use the PVE partition script to batch open KVM virtualized VMs.

',16)]))}const f=t(r,[["render",i]]);export{p as __pageData,f as default}; +import{_ as t,c as o,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,h,d,u){return a(),o("div",null,e[0]||(e[0]=[n('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

WARNING

If the host has an IPV6 network, the installation will change the network structure of the host, please make sure that the host can reset the system at any time and that there is no important data on the host before running.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/docker

Project Features

Bulk or individual NAT server provisioning via docker

Default use of debian system optional alpine system, each container comes with 1 external ssh port, 25 internal and external network ports, you can choose whether to bind IPV6 address

The default creation of unprivileged containers, and does not mount and host docker daemon communication, so ** host created docker virtualization NAT servers can not be nested within the virtualization docker **

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's view.

By default, you can choose whether or not to share the hard disk of the host machine, and you can choose whether or not to install it as an environment that can limit the size of the hard disk during Docker installation.

Configuration requirements

The system can be installed docker can be used, the network can connect to the Github raw interface can be used, hardware configuration as long as not pull across the line, free hard disk has 3G on it!

(If you need to bind an IPV6 address, then please make sure to use the installation script of this set of scripts for docker installation, you need it to automatically preset some of the settings)

If the hardware resources are just a little bit better, need to limit more things and need to limit the size of the hard disk, you can use the incus partition of the script batch open LXC virtualization containers

If the hardware is very good and you have a lot of resources, you can use the PVE partition script to batch open KVM virtualized VMs.

',16)]))}const f=t(r,[["render",i]]);export{p as __pageData,f as default}; diff --git a/assets/en_guide_docker_docker_precheck.md.BSHP7pkf.lean.js b/assets/en_guide_docker_docker_precheck.md.DG9SexCY.lean.js similarity index 86% rename from assets/en_guide_docker_docker_precheck.md.BSHP7pkf.lean.js rename to assets/en_guide_docker_docker_precheck.md.DG9SexCY.lean.js index c220af533c..243f354773 100644 --- a/assets/en_guide_docker_docker_precheck.md.BSHP7pkf.lean.js +++ b/assets/en_guide_docker_docker_precheck.md.DG9SexCY.lean.js @@ -1 +1 @@ -import{_ as t,c as o,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,h,d,u){return a(),o("div",null,e[0]||(e[0]=[n("",16)]))}const f=t(r,[["render",i]]);export{p as __pageData,f as default}; +import{_ as t,c as o,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_precheck.md","filePath":"en/guide/docker/docker_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/docker/docker_precheck.md"};function i(s,e,c,h,d,u){return a(),o("div",null,e[0]||(e[0]=[n("",16)]))}const f=t(r,[["render",i]]);export{p as __pageData,f as default}; diff --git a/assets/en_guide_docker_docker_qa.md.CgGdy1j3.js b/assets/en_guide_docker_docker_qa.md.D2jZfNFS.js similarity index 99% rename from assets/en_guide_docker_docker_qa.md.CgGdy1j3.js rename to assets/en_guide_docker_docker_qa.md.D2jZfNFS.js index 3e0e47c10a..ebf927434c 100644 --- a/assets/en_guide_docker_docker_qa.md.CgGdy1j3.js +++ b/assets/en_guide_docker_docker_qa.md.D2jZfNFS.js @@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,d,r,o,c){return n(),s("div",null,e[0]||(e[0]=[i('

Solve the puzzle

Common Docker Commands

Check real-time resource usage of a specific container

docker stats <container_name>

Enter a specific container

docker exec -it <container_name> /bin/bash

Clean Docker cache, remove unused resources including images, containers, networks, etc.

docker system prune -a

Uninstall all Docker images and containers

docker rm -f $(docker ps -aq); docker rmi $(docker images -aq)

View logs of a specific container

docker logs <container_name_or_ID>

View overall disk usage of Docker

docker system df

List all containers

docker ps -a

List all images

docker images

Remove a specific container

docker rm -f <container_name_or_ID>

Remove a specific image

docker rmi <image_name_or_ID>

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',28)]))}const m=a(t,[["render",p]]);export{u as __pageData,m as default}; +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"},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,d,r,o,c){return n(),s("div",null,e[0]||(e[0]=[i('

Solve the puzzle

Common Docker Commands

Check real-time resource usage of a specific container

docker stats <container_name>

Enter a specific container

docker exec -it <container_name> /bin/bash

Clean Docker cache, remove unused resources including images, containers, networks, etc.

docker system prune -a

Uninstall all Docker images and containers

docker rm -f $(docker ps -aq); docker rmi $(docker images -aq)

View logs of a specific container

docker logs <container_name_or_ID>

View overall disk usage of Docker

docker system df

List all containers

docker ps -a

List all images

docker images

Remove a specific container

docker rm -f <container_name_or_ID>

Remove a specific image

docker rmi <image_name_or_ID>

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',28)]))}const m=a(t,[["render",p]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_docker_docker_qa.md.CgGdy1j3.lean.js b/assets/en_guide_docker_docker_qa.md.D2jZfNFS.lean.js similarity index 86% rename from assets/en_guide_docker_docker_qa.md.CgGdy1j3.lean.js rename to assets/en_guide_docker_docker_qa.md.D2jZfNFS.lean.js index 3809d910ef..b6bea073a8 100644 --- a/assets/en_guide_docker_docker_qa.md.CgGdy1j3.lean.js +++ b/assets/en_guide_docker_docker_qa.md.D2jZfNFS.lean.js @@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,d,r,o,c){return n(),s("div",null,e[0]||(e[0]=[i("",28)]))}const m=a(t,[["render",p]]);export{u as __pageData,m as default}; +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"},"headers":[],"relativePath":"en/guide/docker/docker_qa.md","filePath":"en/guide/docker/docker_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/docker/docker_qa.md"};function p(l,e,d,r,o,c){return n(),s("div",null,e[0]||(e[0]=[i("",28)]))}const m=a(t,[["render",p]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_docker_docker_thanks.md.DxW1R0HO.js b/assets/en_guide_docker_docker_thanks.md.CnmhrpAs.js similarity index 98% rename from assets/en_guide_docker_docker_thanks.md.DxW1R0HO.js rename to assets/en_guide_docker_docker_thanks.md.CnmhrpAs.js index f89bef6bcb..694bf44d24 100644 --- a/assets/en_guide_docker_docker_thanks.md.DxW1R0HO.js +++ b/assets/en_guide_docker_docker_thanks.md.CnmhrpAs.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(p,r,h,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o('

Acknowledgements

https://hub.docker.com/_/debian

https://hub.docker.com/r/redroid/redroid

https://github.com/NetrisTV/ws-scrcpy

https://guacamole.apache.org/doc/gug/introduction.html

https://blog.imoeq.com/oracle-arm-run-android-by-docker

https://blog.imoeq.com/scrcpy-run-a-android-web-page

https://github.com/NetrisTV/ws-scrcpy

https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/

https://releases.hashicorp.com/vagrant/

https://github.com/hashicorp/vagrant/

https://app.vagrantup.com/peru

https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1

https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4

https://github.com/jlesage/docker-firefox

https://github.com/linuxserver/docker-webtop

https://github.com/yoursunny/ndpresponder

https://github.com/linuxserver/docker-chromium

https://github.com/SuperManito/LinuxMirrors

Thank @Ella-Alinda and @CoiaPrant for providing docker guidance.

',20)]))}const u=e(n,[["render",c]]);export{d as __pageData,u as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(p,r,h,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o('

Acknowledgements

https://hub.docker.com/_/debian

https://hub.docker.com/r/redroid/redroid

https://github.com/NetrisTV/ws-scrcpy

https://guacamole.apache.org/doc/gug/introduction.html

https://blog.imoeq.com/oracle-arm-run-android-by-docker

https://blog.imoeq.com/scrcpy-run-a-android-web-page

https://github.com/NetrisTV/ws-scrcpy

https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/

https://releases.hashicorp.com/vagrant/

https://github.com/hashicorp/vagrant/

https://app.vagrantup.com/peru

https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1

https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4

https://github.com/jlesage/docker-firefox

https://github.com/linuxserver/docker-webtop

https://github.com/yoursunny/ndpresponder

https://github.com/linuxserver/docker-chromium

https://github.com/SuperManito/LinuxMirrors

Thank @Ella-Alinda and @CoiaPrant for providing docker guidance.

',20)]))}const u=e(n,[["render",c]]);export{d as __pageData,u as default}; diff --git a/assets/en_guide_docker_docker_thanks.md.DxW1R0HO.lean.js b/assets/en_guide_docker_docker_thanks.md.CnmhrpAs.lean.js similarity index 86% rename from assets/en_guide_docker_docker_thanks.md.DxW1R0HO.lean.js rename to assets/en_guide_docker_docker_thanks.md.CnmhrpAs.lean.js index add9524992..f5c239102c 100644 --- a/assets/en_guide_docker_docker_thanks.md.DxW1R0HO.lean.js +++ b/assets/en_guide_docker_docker_thanks.md.CnmhrpAs.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(p,r,h,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o("",20)]))}const u=e(n,[["render",c]]);export{d as __pageData,u as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/docker/docker_thanks.md","filePath":"en/guide/docker/docker_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/docker/docker_thanks.md"};function c(p,r,h,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o("",20)]))}const u=e(n,[["render",c]]);export{d as __pageData,u as default}; diff --git a/assets/en_guide_docker_docker_windows.md.C1jmpKHD.js b/assets/en_guide_docker_docker_windows.md.ckjy7CPt.js similarity index 99% rename from assets/en_guide_docker_docker_windows.md.C1jmpKHD.js rename to assets/en_guide_docker_docker_windows.md.ckjy7CPt.js index 9d05cf3a9e..4817c40f58 100644 --- a/assets/en_guide_docker_docker_windows.md.C1jmpKHD.js +++ b/assets/en_guide_docker_docker_windows.md.ckjy7CPt.js @@ -1,4 +1,4 @@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1773143516000}'),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(`

Running Windows Virtual Machine in Docker

One-Click Deployment (Using Vagrant)

  • Shares all resources of the host machine; based on Docker, so it only occupies the size of the system, suitable for multiple instances.
  • Shares IP; Docker's NAT mapping is employed. You can choose whether to map to the external network or just the internal network.
  • The configured Windows system is set to use a maximum of 1 core, 2GB RAM, and 50GB hard disk by default. Actual usage may vary based on usage patterns.
  • No need for iptables for NAT mapping; port mappings are automatically deleted when containers are removed, making maintenance easier.
  • Ensure that the host machine supports nested virtualization, and currently, only X86_64 architecture systems are supported. I haven't compiled corresponding images for ARM devices at the moment.

The host machine needs to support nested virtualization and currently only supports systems based on the X86_64 architecture; I don't have an ARM machine on hand to compile the corresponding image at the moment.

Command:

shell
egrep -c '(vmx|svm)' /proc/cpuinfo

The result should be greater than or equal to 1 and cannot be 0.

Next, you need to configure Docker to start using the v1 version of cgroup.

shell
sed -i 's/GRUB_CMDLINE_LINUX="\\(.*\\)"/GRUB_CMDLINE_LINUX="\\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
+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"},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1773196139000}'),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(`

Running Windows Virtual Machine in Docker

One-Click Deployment (Using Vagrant)

  • Shares all resources of the host machine; based on Docker, so it only occupies the size of the system, suitable for multiple instances.
  • Shares IP; Docker's NAT mapping is employed. You can choose whether to map to the external network or just the internal network.
  • The configured Windows system is set to use a maximum of 1 core, 2GB RAM, and 50GB hard disk by default. Actual usage may vary based on usage patterns.
  • No need for iptables for NAT mapping; port mappings are automatically deleted when containers are removed, making maintenance easier.
  • Ensure that the host machine supports nested virtualization, and currently, only X86_64 architecture systems are supported. I haven't compiled corresponding images for ARM devices at the moment.

The host machine needs to support nested virtualization and currently only supports systems based on the X86_64 architecture; I don't have an ARM machine on hand to compile the corresponding image at the moment.

Command:

shell
egrep -c '(vmx|svm)' /proc/cpuinfo

The result should be greater than or equal to 1 and cannot be 0.

Next, you need to configure Docker to start using the v1 version of cgroup.

shell
sed -i 's/GRUB_CMDLINE_LINUX="\\(.*\\)"/GRUB_CMDLINE_LINUX="\\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
 update-grub
 ls

If there are no errors during execution, run the reboot command to restart the system and apply the settings.

Supported Images

We are using custom-built images: https://hub.docker.com/r/spiritlhl/wds

Image NameImage Size
1020GB
202217.5GB
201917GB

The size of the created container will be slightly larger than the image size, but not by much.

Download Script

curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewindows.sh -o onewindows.sh && chmod +x onewindows.sh

Usage Instructions

Make sure to execute the following commands in a 'screen' session before proceeding, to avoid potential disconnection or freezing of the SSH connection.

./onewindows.sh <container_name> <system_version> <RDP_port> <external_mapping>
  • Replace <container_name> with the name.
  • Replace <system_version> with the desired Windows system version.
  • Replace <RDP_port> with the port number for RDP access.
  • If you want to enable external mapping, replace <external_mapping> with 'Y'. If not, leave it blank or use 'N'.

Before initiating the setup, ensure that the host machine has a disk size at least twice the size of the image, plus an additional 10GB, as Docker needs to pull the image locally before creating the container.

During the creation process, the peak disk usage will be host_system_size + image_size + container_size.

For example, to set up a container with the name test, the container with the lowest occupancy Windows 2019 system, map the extranet RDP port 13389 and set it to extranet mapping (mapping to your server's extranet IPV4 address)

shell
./onewindows.sh test 2019 13389 Y

After it, the default usernames are Administrator and vagrant, with the default password being vagrant.

If you choose to open a mapped extranet port, be sure to log in and change the password of the corresponding account (both accounts may have, try it yourself), otherwise it may be abused by someone blasting

Deletion

To delete the corresponding image and container, first use the command docker ps -a and docker images to find the ID of the image named spiritlhl/wds. Then, use the following commands accordingly:

docker rm -f container_ID
 docker rmi image_ID

After deletion, you can create containers of different versions of Windows.

Other similar projects

https://github.com/dockur/windows - Similar project that support more systems, but have more resource requirements

https://github.com/dockur/windows-arm/ - It's great that he has ARM servers for mirror compilation, my project doesn't have

Note that both of the above projects require a host with at least 4 cores of CPU, at least 4G of RAM, and at least 64G of hard disk, which is greater than the mirroring requirements of my project. (The advantage of his project is that you can customize many configuration items, see his corresponding project description for details.)

Manual Provisioning (via the Dockur Project)

This project supports VM creation using QEMU even on host systems that do not support nested virtualization.

Original Project Repositories

⚠️ Notes:

  • The original project provides only the launcher, not a Windows image.

  • The first container startup may take up to 4 hours on domestic (China) networks, due to image download and installation.

  • The host system should meet the following minimum hardware requirements (can be adjusted via script modifications):

    • CPU: At least 4 cores
    • RAM: At least 4 GB
    • Disk: At least 64 GB

For customization such as reducing resource usage or changing launch parameters, refer to:

For x86_64 Architecture Users

A pre-modified single-file launcher is available to simplify building a Windows image. This version writes system files and images directly into Docker’s writable layer—no external image mounting required.

Download link: https://github.com/oneclickvirt/docker/releases/download/amd64_builder/builder.tar

Import Docker image:

bash
docker load -i builder.tar

Launching the Container with a Custom Windows ISO

Download a Windows ISO image from: https://down.idc.wiki/ISOS/Windows/

Sample command to start the container:

bash
docker run -it -d \\
diff --git a/assets/en_guide_docker_docker_windows.md.C1jmpKHD.lean.js b/assets/en_guide_docker_docker_windows.md.ckjy7CPt.lean.js
similarity index 87%
rename from assets/en_guide_docker_docker_windows.md.C1jmpKHD.lean.js
rename to assets/en_guide_docker_docker_windows.md.ckjy7CPt.lean.js
index cc5cf2cc3f..8b9510b6f1 100644
--- a/assets/en_guide_docker_docker_windows.md.C1jmpKHD.lean.js
+++ b/assets/en_guide_docker_docker_windows.md.ckjy7CPt.lean.js
@@ -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"},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1773143516000}'),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.QPV3Ar9-.js";const k=JSON.parse('{"title":"Running Windows Virtual Machine in Docker","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/docker/docker_windows.md","filePath":"en/guide/docker/docker_windows.md","lastUpdated":1773196139000}'),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};
diff --git a/assets/en_guide_incus_incus_custom.md.O4ZDK5u2.js b/assets/en_guide_incus_incus_custom.md.BJKI4at5.js
similarity index 99%
rename from assets/en_guide_incus_incus_custom.md.O4ZDK5u2.js
rename to assets/en_guide_incus_incus_custom.md.BJKI4at5.js
index 07beb36037..083991dcfb 100644
--- a/assets/en_guide_incus_incus_custom.md.O4ZDK5u2.js
+++ b/assets/en_guide_incus_incus_custom.md.BJKI4at5.js
@@ -1,4 +1,4 @@
-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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1773143516000}'),B={name:"en/guide/incus/incus_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t(`

Custom

Adding a customized mirror source

https://incusimages.spiritlhl.net/

This mirror source is obtained by me through daily patching, and will be updated daily, what exactly is patched can be found at https://github.com/oneclickvirt/incus_images for details.

shell
incus remote remove spiritlhl
+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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1773196139000}'),B={name:"en/guide/incus/incus_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t(`

Custom

Adding a customized mirror source

https://incusimages.spiritlhl.net/

This mirror source is obtained by me through daily patching, and will be updated daily, what exactly is patched can be found at https://github.com/oneclickvirt/incus_images for details.

shell
incus remote remove spiritlhl
 incus remote add spiritlhl https://incusimages.spiritlhl.net --protocol simplestreams --public
 incus image list spiritlhl:debian

Attach free IPV6 address segments to host machines

Some machines don't have an IPV6 /64 subnet on the machine itself, here is a method given to attach an IPV6 subnet for free.

Here is a solution using the 6in4 method for a host machine that doesn't have an IPV6 address on its own.

TIP

The operations on this page must be performed on the original system, and ensure that no other scripts from this project are installed(Except for PVE, which needs to be installed first), as this may lead to environment conflicts.

Here are the platforms that are currently running in 2023 that offer IPV6 subnets for free.

Supported PlatformsCorresponding Required Installation PackagesProtocolsNumber of Channels/Subnets
tunnelbroker.netifupdown OR ifupdown2v4tunnel OR sit3✖/64 OR 5✖/64
tunnelbroker.chifupdown OR ifupdown2v4tunnel OR sit3✖/64
ip4market.ruifupdown OR ifupdown2v4tunnel OR sit1✖/64
netassist.uaifupdown OR ifupdown2v4tunnel OR sit1✖/64
https://github.com/oneclickvirt/6in4ifupdown2sit、gre、ipipcustom

The free platform only solves the problem that IPV6 is not available, it does not provide premium IPV6 bandwidth.

If you need high quality bandwidth, please build your own tunnel. When both ifupdown and ifupdown2 are available, try ifupdown first to see if it can be installed successfully, otherwise install ifupdown2.

After the installation is complete, select which package is installed behind to convert the format.

Initial environment modifications

Execute

touch /etc/cloud/cloud-init.disabled

Turn off the automated overwrite of cloud-init first, and then to see what the local machine is using to manage the network, run

systemctl is-active systemd-networkd

and

systemctl is-active networking

See which case this falls into, if it's the former active and the latter inactive, you need to reinstall/DD a system that isn't configured this way, or switch the local machine to use ifupdown/ifupdown2 to manage network execution

# Judge for yourself whether you need to disable the original network management or not
 # systemctl stop systemd-networkd
diff --git a/assets/en_guide_incus_incus_custom.md.O4ZDK5u2.lean.js b/assets/en_guide_incus_incus_custom.md.BJKI4at5.lean.js
similarity index 94%
rename from assets/en_guide_incus_incus_custom.md.O4ZDK5u2.lean.js
rename to assets/en_guide_incus_incus_custom.md.BJKI4at5.lean.js
index d19d0d7f3e..8756ad651c 100644
--- a/assets/en_guide_incus_incus_custom.md.O4ZDK5u2.lean.js
+++ b/assets/en_guide_incus_incus_custom.md.BJKI4at5.lean.js
@@ -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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1773143516000}'),B={name:"en/guide/incus/incus_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t("",198)]))}const S=s(B,[["render",I]]);export{D as __pageData,S as default};
+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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_custom.md","filePath":"en/guide/incus/incus_custom.md","lastUpdated":1773196139000}'),B={name:"en/guide/incus/incus_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t("",198)]))}const S=s(B,[["render",I]]);export{D as __pageData,S as default};
diff --git a/assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.js b/assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.js
similarity index 99%
rename from assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.js
rename to assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.js
index aca0904417..082ec5b436 100644
--- a/assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.js
+++ b/assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.js
@@ -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":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_extra_config.md","filePath":"en/guide/incus/incus_extra_config.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_extra_config.md"};function l(p,s,h,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Custom Configuration

TIP

The following configurations may increase the load on the server. Only install them if necessary.

Automatic IPV6 Address Configuration

  • (Optional, not required if not using)
  • This script is only suitable for servers that have an IPV6 subnet with a prefix, and the server has bound the first IP of the subnet as its IPV6 address or IPV6 gateway.
  • Automatically configures IPV6 addresses for incus containers created with incus.
  • Integrated into buildct.sh and can be controlled by variables without needing to be downloaded beforehand. You don't need to manually use this script; when using buildct.sh, configure with variable Y to enable it.

Download Script

Command:

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

Automatically configure IPV6 mapped addresses for containers

bash
bash build_ipv6_network.sh Container_Name(change_me)

A message is printed when the mapping is complete (Default mapping without iptables)

Example (automatically configure the test container with an IPV6 address, a test_v6 file is written when the configuration is complete)

bash
bash build_ipv6_network.sh test

PS: Add ipv6 processing can choose whether to use ip6tables for mapping, the default is not to use ip6tables for mapping but to add new network devices for mapping.

Use ip6tables for mapping

bash
bash build_ipv6_network.sh Container_name Y

If ip6tables is used for mapping, remove all IPV6 mapped rules available:

bash
ip6tables -t nat -F PREROUTING
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_extra_config.md","filePath":"en/guide/incus/incus_extra_config.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_extra_config.md"};function l(p,s,h,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Custom Configuration

TIP

The following configurations may increase the load on the server. Only install them if necessary.

Automatic IPV6 Address Configuration

  • (Optional, not required if not using)
  • This script is only suitable for servers that have an IPV6 subnet with a prefix, and the server has bound the first IP of the subnet as its IPV6 address or IPV6 gateway.
  • Automatically configures IPV6 addresses for incus containers created with incus.
  • Integrated into buildct.sh and can be controlled by variables without needing to be downloaded beforehand. You don't need to manually use this script; when using buildct.sh, configure with variable Y to enable it.

Download Script

Command:

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

Automatically configure IPV6 mapped addresses for containers

bash
bash build_ipv6_network.sh Container_Name(change_me)

A message is printed when the mapping is complete (Default mapping without iptables)

Example (automatically configure the test container with an IPV6 address, a test_v6 file is written when the configuration is complete)

bash
bash build_ipv6_network.sh test

PS: Add ipv6 processing can choose whether to use ip6tables for mapping, the default is not to use ip6tables for mapping but to add new network devices for mapping.

Use ip6tables for mapping

bash
bash build_ipv6_network.sh Container_name Y

If ip6tables is used for mapping, remove all IPV6 mapped rules available:

bash
ip6tables -t nat -F PREROUTING
 ip6tables-legacy -t nat -F PREROUTING
 ip6tables-save > /etc/iptables/rules.v6
 netfilter-persistent save
diff --git a/assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.lean.js b/assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.lean.js
similarity index 87%
rename from assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.lean.js
rename to assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.lean.js
index 735dc5b1ed..eaa632f4fc 100644
--- a/assets/en_guide_incus_incus_extra_config.md.PNnYtcMO.lean.js
+++ b/assets/en_guide_incus_incus_extra_config.md.BCoKt_Ef.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_extra_config.md","filePath":"en/guide/incus/incus_extra_config.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_extra_config.md"};function l(p,s,h,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e("",33)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_extra_config.md","filePath":"en/guide/incus/incus_extra_config.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_extra_config.md"};function l(p,s,h,r,o,d){return n(),a("div",null,s[0]||(s[0]=[e("",33)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
diff --git a/assets/en_guide_incus_incus_install.md.Ciy_nR33.js b/assets/en_guide_incus_incus_install.md.BSX2i3zJ.js
similarity index 99%
rename from assets/en_guide_incus_incus_install.md.Ciy_nR33.js
rename to assets/en_guide_incus_incus_install.md.BSX2i3zJ.js
index 4a8e5d87e9..5985ac30a0 100644
--- a/assets/en_guide_incus_incus_install.md.Ciy_nR33.js
+++ b/assets/en_guide_incus_incus_install.md.BSX2i3zJ.js
@@ -1,4 +1,4 @@
-import{_ as a,c as e,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_install.md","filePath":"en/guide/incus/incus_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_install.md"};function l(p,s,o,r,h,c){return i(),e("div",null,s[0]||(s[0]=[n(`

Incus

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Incus One-Click Installation Guide

WARNING

If this is a new server, make sure that both update and curl are working properly before executing this script.

  • Prerequisites: Ubuntu 20+(Not recommended to use Incus, please use LXD), Debian 11+(Recommended), RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • During installation, you will be prompted to enter the storage pool creation path as well as the size, and all the VMs or containers you want to open end up taking up space in the storage pool
  • The server needs to be restarted after the environment installation process to load some default configurations
  • By default, lxcfs-related configuration is enabled, so that in-container querying of container information changes to information about the container itself rather than the host
  • This installer has been tested to work on either physical or non-physical machines

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

OR

shell
bash incus_install.sh

Example of initialization configuration:

If you don't need to specify the path of a non-system disk as the default storage pool, then you can directly enter or type n when choosing whether to customize the storage pool path, and you don't need to specify the path.

If you need to specify the path of a non-system disk as the default pool, then you need to select y and enter the corresponding path (the actual absolute path of the disk you mounted).

If the corresponding disk has 18 Gigabytes of free hard disk space in addition to the occupied space and you want to open a 15 Gigabyte storage pool, follow the command line prompts to enter 15.

TIP

The execution process may require a manual reboot to load the storage type into the kernel, the installation is completed at the end of the execution will automatically reboot the server, the first time after the complete installation of the reboot will take about 400 ~ 500 seconds, please be patient

WARNING

If you need to open more than 200 Incus containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Uninstall Incus Environment

One-click uninstall of the complete Incus environment, including all containers, VMs, images, storage pools, network configurations, systemd services, packages, and related configuration files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

Manual Installation (optional)

Not recommended, just to install for some oddball environments where one-click scripts won't run, or if you want to understand the most basic Incus installation process.

Disable Firewall

bash
apt update
+import{_ as a,c as e,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_install.md","filePath":"en/guide/incus/incus_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_install.md"};function l(p,s,o,r,h,c){return i(),e("div",null,s[0]||(s[0]=[n(`

Incus

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Incus One-Click Installation Guide

WARNING

If this is a new server, make sure that both update and curl are working properly before executing this script.

  • Prerequisites: Ubuntu 20+(Not recommended to use Incus, please use LXD), Debian 11+(Recommended), RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • During installation, you will be prompted to enter the storage pool creation path as well as the size, and all the VMs or containers you want to open end up taking up space in the storage pool
  • The server needs to be restarted after the environment installation process to load some default configurations
  • By default, lxcfs-related configuration is enabled, so that in-container querying of container information changes to information about the container itself rather than the host
  • This installer has been tested to work on either physical or non-physical machines

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

OR

shell
bash incus_install.sh

Example of initialization configuration:

If you don't need to specify the path of a non-system disk as the default storage pool, then you can directly enter or type n when choosing whether to customize the storage pool path, and you don't need to specify the path.

If you need to specify the path of a non-system disk as the default pool, then you need to select y and enter the corresponding path (the actual absolute path of the disk you mounted).

If the corresponding disk has 18 Gigabytes of free hard disk space in addition to the occupied space and you want to open a 15 Gigabyte storage pool, follow the command line prompts to enter 15.

TIP

The execution process may require a manual reboot to load the storage type into the kernel, the installation is completed at the end of the execution will automatically reboot the server, the first time after the complete installation of the reboot will take about 400 ~ 500 seconds, please be patient

WARNING

If you need to open more than 200 Incus containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Uninstall Incus Environment

One-click uninstall of the complete Incus environment, including all containers, VMs, images, storage pools, network configurations, systemd services, packages, and related configuration files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

Manual Installation (optional)

Not recommended, just to install for some oddball environments where one-click scripts won't run, or if you want to understand the most basic Incus installation process.

Disable Firewall

bash
apt update
 apt install curl wget sudo dos2unix ufw jq -y
 ufw disable

Enabling Virtual Memory SWAP

The amount of memory depends on how many instances you want to run. If you want to run 8 instances and calculate, you'll need 2GB of memory. If your actual physical memory is 512MB, you'll need an additional 1.5GB. To be cautious, allocate 2GB of virtual memory.

Execute the following commands: Enter '1', then enter '2048'. This signifies allocating 2GB of virtual memory.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

Installing incus

sudo -i
 mkdir -p /etc/apt/keyrings/
diff --git a/assets/en_guide_incus_incus_install.md.Ciy_nR33.lean.js b/assets/en_guide_incus_incus_install.md.BSX2i3zJ.lean.js
similarity index 86%
rename from assets/en_guide_incus_incus_install.md.Ciy_nR33.lean.js
rename to assets/en_guide_incus_incus_install.md.BSX2i3zJ.lean.js
index 35def70640..007909a0fe 100644
--- a/assets/en_guide_incus_incus_install.md.Ciy_nR33.lean.js
+++ b/assets/en_guide_incus_incus_install.md.BSX2i3zJ.lean.js
@@ -1 +1 @@
-import{_ as a,c as e,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_install.md","filePath":"en/guide/incus/incus_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_install.md"};function l(p,s,o,r,h,c){return i(),e("div",null,s[0]||(s[0]=[n("",42)]))}const m=a(t,[["render",l]]);export{u as __pageData,m as default};
+import{_ as a,c as e,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_install.md","filePath":"en/guide/incus/incus_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_install.md"};function l(p,s,o,r,h,c){return i(),e("div",null,s[0]||(s[0]=[n("",42)]))}const m=a(t,[["render",l]]);export{u as __pageData,m as default};
diff --git a/assets/en_guide_incus_incus_lxc.md.BGLDu0wo.js b/assets/en_guide_incus_incus_lxc.md.BvGiSaPF.js
similarity index 99%
rename from assets/en_guide_incus_incus_lxc.md.BGLDu0wo.js
rename to assets/en_guide_incus_incus_lxc.md.BvGiSaPF.js
index ce96dd8610..c3f9d51cee 100644
--- a/assets/en_guide_incus_incus_lxc.md.BGLDu0wo.js
+++ b/assets/en_guide_incus_incus_lxc.md.BvGiSaPF.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Running LXC Container in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_lxc.md","filePath":"en/guide/incus/incus_lxc.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_lxc.md"};function l(h,s,p,r,o,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Running LXC Container in Incus

Images available for creating LXC Containers

A portion of the available system parameters are shown here for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually opened out of the Stream version)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (CGroupV1 needs to be enabled in GRUB or it won't start.)
  • kali,archlinux
  • Note that the combination of lowercase letters + numbers or only lowercase letters, try it yourself, if the search is not the system will automatically exit the script
  • The version number can be with English decimal point, in order to adapt to the alpine version number has been supported.
  • If you can't open it, it may be that the hard disk is not big enough or it doesn't fit the host, try it by yourself.
  • The images currently in use are triple filtered and prioritized: self-hostedofficial-hostedopsmaru
  • A complete list of supported systems for self-compiling images: x86_64_all_images.txt and arm64_all_images.txt

TIP

The version number has ended the long-term maintenance of the general no longer have an official mirror, temporarily did not find the archive address of the historical mirror, if you find welcome to leave a message I will add support!

Generate only one NAT container

  • Generate only one NAT container, with customizable restrictions on all content.

Download script

Downloading the boot script is NOT REQUIRED, if you have used the command to install incus with one click, the corresponding boot script will be downloaded automatically, so you don't need to download the script again.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

Usage

. /buildct.sh name Cpu_num Memory_size Hard_disk_size SSH_port Extranet_start_port Extranet_stop_port Download_speed Upload_speed Whether_IPV6_is_enabled(Y or N) System(leave blank for debian11)

Memory size is calculated in MB, hard disk size is calculated in GB, download speed upload speed is calculated in Mbit, whether to enable IPV6 does not have to fill in Y or N, no this parameter can also be left blank default does not enable IPV6

If external start port\`\` and external stop port are both set to 0, then we don't do interval port mapping, only the basic SSH port is mapped, note that \`\`\`can't be null, and it needs to be set to 0 if it's not to be mapped.

Support custom container system, do not fill in the leave blank default use debian11, pay attention to the incoming parameters for the system name + version number

Example

Here is the information about the example chick that is being raised:

AttributeValue
container's Nametest
Username for SSH Loginroot
Password for SSH LoginRandomly generated
Number of CPU Cores1
Memory Size256MB
Disk Size2G
Range of Internal and External Port Mapping20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Automatically Set External IPv6 AddressNo
Operating SystemDebian 11
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian11

If you need to see the information, run

shell
cat ct_name_change_me

For example, the information for the query example is

shell
cat test

If you have already generated chicks through the above methods and still need to batch generate chicks, you can use a customized batch generation version of the script, but note that you should first delete the test chicks before batch generating chicks

Delete Test Chick

shell
incus stop test
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Running LXC Container in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_lxc.md","filePath":"en/guide/incus/incus_lxc.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_lxc.md"};function l(h,s,p,r,o,d){return e(),a("div",null,s[0]||(s[0]=[n(`

Running LXC Container in Incus

Images available for creating LXC Containers

A portion of the available system parameters are shown here for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually opened out of the Stream version)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (CGroupV1 needs to be enabled in GRUB or it won't start.)
  • kali,archlinux
  • Note that the combination of lowercase letters + numbers or only lowercase letters, try it yourself, if the search is not the system will automatically exit the script
  • The version number can be with English decimal point, in order to adapt to the alpine version number has been supported.
  • If you can't open it, it may be that the hard disk is not big enough or it doesn't fit the host, try it by yourself.
  • The images currently in use are triple filtered and prioritized: self-hostedofficial-hostedopsmaru
  • A complete list of supported systems for self-compiling images: x86_64_all_images.txt and arm64_all_images.txt

TIP

The version number has ended the long-term maintenance of the general no longer have an official mirror, temporarily did not find the archive address of the historical mirror, if you find welcome to leave a message I will add support!

Generate only one NAT container

  • Generate only one NAT container, with customizable restrictions on all content.

Download script

Downloading the boot script is NOT REQUIRED, if you have used the command to install incus with one click, the corresponding boot script will be downloaded automatically, so you don't need to download the script again.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

Usage

. /buildct.sh name Cpu_num Memory_size Hard_disk_size SSH_port Extranet_start_port Extranet_stop_port Download_speed Upload_speed Whether_IPV6_is_enabled(Y or N) System(leave blank for debian11)

Memory size is calculated in MB, hard disk size is calculated in GB, download speed upload speed is calculated in Mbit, whether to enable IPV6 does not have to fill in Y or N, no this parameter can also be left blank default does not enable IPV6

If external start port\`\` and external stop port are both set to 0, then we don't do interval port mapping, only the basic SSH port is mapped, note that \`\`\`can't be null, and it needs to be set to 0 if it's not to be mapped.

Support custom container system, do not fill in the leave blank default use debian11, pay attention to the incoming parameters for the system name + version number

Example

Here is the information about the example chick that is being raised:

AttributeValue
container's Nametest
Username for SSH Loginroot
Password for SSH LoginRandomly generated
Number of CPU Cores1
Memory Size256MB
Disk Size2G
Range of Internal and External Port Mapping20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Automatically Set External IPv6 AddressNo
Operating SystemDebian 11
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian11

If you need to see the information, run

shell
cat ct_name_change_me

For example, the information for the query example is

shell
cat test

If you have already generated chicks through the above methods and still need to batch generate chicks, you can use a customized batch generation version of the script, but note that you should first delete the test chicks before batch generating chicks

Delete Test Chick

shell
incus stop test
 incus delete test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/en_guide_incus_incus_lxc.md.BGLDu0wo.lean.js b/assets/en_guide_incus_incus_lxc.md.BvGiSaPF.lean.js
similarity index 87%
rename from assets/en_guide_incus_incus_lxc.md.BGLDu0wo.lean.js
rename to assets/en_guide_incus_incus_lxc.md.BvGiSaPF.lean.js
index e5952e4da7..45eb81a8bc 100644
--- a/assets/en_guide_incus_incus_lxc.md.BGLDu0wo.lean.js
+++ b/assets/en_guide_incus_incus_lxc.md.BvGiSaPF.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Running LXC Container in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_lxc.md","filePath":"en/guide/incus/incus_lxc.md","lastUpdated":1773143516000}'),t={name:"en/guide/incus/incus_lxc.md"};function l(h,s,p,r,o,d){return e(),a("div",null,s[0]||(s[0]=[n("",85)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Running LXC Container in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_lxc.md","filePath":"en/guide/incus/incus_lxc.md","lastUpdated":1773196139000}'),t={name:"en/guide/incus/incus_lxc.md"};function l(h,s,p,r,o,d){return e(),a("div",null,s[0]||(s[0]=[n("",85)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
diff --git a/assets/en_guide_incus_incus_precheck.md.wD-FlxZP.js b/assets/en_guide_incus_incus_precheck.md.EJPThZ6i.js
similarity index 98%
rename from assets/en_guide_incus_incus_precheck.md.wD-FlxZP.js
rename to assets/en_guide_incus_incus_precheck.md.EJPThZ6i.js
index 82a825a0c2..ead8d0264d 100644
--- a/assets/en_guide_incus_incus_precheck.md.wD-FlxZP.js
+++ b/assets/en_guide_incus_incus_precheck.md.EJPThZ6i.js
@@ -1 +1 @@
-import{_ as t,c as n,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_precheck.md","filePath":"en/guide/incus/incus_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/incus/incus_precheck.md"};function i(s,e,c,d,l,h){return o(),n("div",null,e[0]||(e[0]=[r('

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/incus

Requirements

Hardware requirements.

  • System: Ubuntu 20+, Debian 11+, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • Virtualization: KVM, VMWARE recommended.
  • CPU: The number of cores should be greater than or equal to 2, otherwise there may be a kernel idling slice cycle resulting in 100% occupancy
  • Memory: At least 512MB of RAM
  • Hard disk: hard disk (system disk) at least 10G
  • Network: Independent IPV4 address, IPV6 is optional, bandwidth can download scripts on the line, the network can connect to the Github raw page on the line

PS: If the hardware is very good and has a lot of resources, you can use PVE to batch open KVM virtualized VMs Jump

PS: If the hardware resources are even worse, virtualization is not supported, you can use the docker version, the adaption surface is wider Jump

Project Features

  • This set of script development using Ubuntu24 and Debian12, other long-term maintenance version should also be no problem, automatically switch to another storage type if btrfs not supported

  • Set up both TCP and UDP forwarding, in addition to SSH ports, other mapping intranet and extranet ports are the same.

  • Support for docker nested virtualization of open incus containers has been set up, and the default normal version and pure probe version use the debian11 system.

  • lxcfs has been set to be enabled by default, so that querying resources within a container uses the configured view rather than the host's view

  • Have blocked the container may be used to abuse the toolkit and IPV4 network TCP/UDP protocol ports ( 3389 8888 54321 65432 ), to prevent the container is used for scanning and blasting, and can be external process checking for problems automatically shut down

  • Has supported one-click configuration of IPV6 addresses for incus containers (provided that the mother hen has an IPV6 subnet, no IPV6 address is not configured), automatically adapted to the size of the subnet

  • Ensure that the disk you want to open is the default system disk (sda or sda1) and not the mounted disk (sdb and so on), if you are not sure, use fdisk -l and df to check.

  • See Other notes for details on mounting other disks.

  • One-click scripts support custom restrictions on all content, the normal version supports multiple runs of the batch generation does not overwrite the previously generated configuration

Detecting the environment

Use the subsequent script must execute this command to detect the hen whether it meets the requirements

Command:

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)
',15)]))}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; +import{_ as t,c as n,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_precheck.md","filePath":"en/guide/incus/incus_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/incus/incus_precheck.md"};function i(s,e,c,d,l,h){return o(),n("div",null,e[0]||(e[0]=[r('

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the incus module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/incus

Requirements

Hardware requirements.

  • System: Ubuntu 20+, Debian 11+, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(After installing bash on your own), Arch
  • Virtualization: KVM, VMWARE recommended.
  • CPU: The number of cores should be greater than or equal to 2, otherwise there may be a kernel idling slice cycle resulting in 100% occupancy
  • Memory: At least 512MB of RAM
  • Hard disk: hard disk (system disk) at least 10G
  • Network: Independent IPV4 address, IPV6 is optional, bandwidth can download scripts on the line, the network can connect to the Github raw page on the line

PS: If the hardware is very good and has a lot of resources, you can use PVE to batch open KVM virtualized VMs Jump

PS: If the hardware resources are even worse, virtualization is not supported, you can use the docker version, the adaption surface is wider Jump

Project Features

  • This set of script development using Ubuntu24 and Debian12, other long-term maintenance version should also be no problem, automatically switch to another storage type if btrfs not supported

  • Set up both TCP and UDP forwarding, in addition to SSH ports, other mapping intranet and extranet ports are the same.

  • Support for docker nested virtualization of open incus containers has been set up, and the default normal version and pure probe version use the debian11 system.

  • lxcfs has been set to be enabled by default, so that querying resources within a container uses the configured view rather than the host's view

  • Have blocked the container may be used to abuse the toolkit and IPV4 network TCP/UDP protocol ports ( 3389 8888 54321 65432 ), to prevent the container is used for scanning and blasting, and can be external process checking for problems automatically shut down

  • Has supported one-click configuration of IPV6 addresses for incus containers (provided that the mother hen has an IPV6 subnet, no IPV6 address is not configured), automatically adapted to the size of the subnet

  • Ensure that the disk you want to open is the default system disk (sda or sda1) and not the mounted disk (sdb and so on), if you are not sure, use fdisk -l and df to check.

  • See Other notes for details on mounting other disks.

  • One-click scripts support custom restrictions on all content, the normal version supports multiple runs of the batch generation does not overwrite the previously generated configuration

Detecting the environment

Use the subsequent script must execute this command to detect the hen whether it meets the requirements

Command:

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)
',15)]))}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; diff --git a/assets/en_guide_incus_incus_precheck.md.wD-FlxZP.lean.js b/assets/en_guide_incus_incus_precheck.md.EJPThZ6i.lean.js similarity index 86% rename from assets/en_guide_incus_incus_precheck.md.wD-FlxZP.lean.js rename to assets/en_guide_incus_incus_precheck.md.EJPThZ6i.lean.js index 9371337734..d5a4604d39 100644 --- a/assets/en_guide_incus_incus_precheck.md.wD-FlxZP.lean.js +++ b/assets/en_guide_incus_incus_precheck.md.EJPThZ6i.lean.js @@ -1 +1 @@ -import{_ as t,c as n,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_precheck.md","filePath":"en/guide/incus/incus_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/incus/incus_precheck.md"};function i(s,e,c,d,l,h){return o(),n("div",null,e[0]||(e[0]=[r("",15)]))}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; +import{_ as t,c as n,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_precheck.md","filePath":"en/guide/incus/incus_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/incus/incus_precheck.md"};function i(s,e,c,d,l,h){return o(),n("div",null,e[0]||(e[0]=[r("",15)]))}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; diff --git a/assets/en_guide_incus_incus_qa.md.6SEJtO6O.js b/assets/en_guide_incus_incus_qa.md.XwrY30_W.js similarity index 99% rename from assets/en_guide_incus_incus_qa.md.6SEJtO6O.js rename to assets/en_guide_incus_incus_qa.md.XwrY30_W.js index 89f341be7f..ecb0ff9d26 100644 --- a/assets/en_guide_incus_incus_qa.md.6SEJtO6O.js +++ b/assets/en_guide_incus_incus_qa.md.XwrY30_W.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qa.md","filePath":"en/guide/incus/incus_qa.md","lastUpdated":1773143516000}'),n={name:"en/guide/incus/incus_qa.md"};function l(r,s,o,h,p,d){return a(),i("div",null,s[0]||(s[0]=[t('

Solve the puzzle

What to do if you open centos7 and find that CGroupV1 is not supported?

Enable CGroup V1: To enable CGroup V1 on an Ubuntu system, you need to edit the kernel boot parameters.

Please note that before changing kernel boot parameters, make sure to backup important data and settings to prevent unexpected problems.

Edit the ```/etc/default/grubfile and addsystemd.unified_cgroup_hierarchy=0to the end of the parameters inGRUB_CMDLINE_LINUX_DEFAULT``, just like:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

Save the file and run the following command to update the GRUB boot.

bash
sudo update-grub

Reboot the system for the changes to take effect

If the above changes still do not support the opening of centos7, try using a different host system.

Requires both Incus and Docker compatibility to exist

If left unaddressed, docker will override the iptables setting and cause Incus to have no network link

You need to install a scheduled task to detect and fix this issue

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Incus has high CPU usage on single-core hosts after long-term use

This high CPU usage is native to Incus, there is no workaround for it, and it can only be reproduced on single-core hosts, so you don't need to bother with multi-core hosts.

You need to install a timed task to detect and fix the problem, and check the usage every 5 minutes to see if you need to restart the Incus back-end.

  • Download
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart. sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh
  • Installation
bash
bash incus_fixed_restart.sh install

will be copied to /usr/local/bin/incus_fixed_restart.sh and written to cron to run every minute.

  • Uninstall
bash
bash incus_fixed_restart.sh uninstall

Removes cron tasks, script files, log files, and count files.

  • Runs normally (called by cron)
bash
/usr/local/bin/incus_fixed_restart.sh

Currently verified VPS vendors that can open containers with separate IPV6 addresses.

kuroit Phoenix, USA regular

datalix German AMD Promotions

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',36)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; +import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qa.md","filePath":"en/guide/incus/incus_qa.md","lastUpdated":1773196139000}'),n={name:"en/guide/incus/incus_qa.md"};function l(r,s,o,h,p,d){return a(),i("div",null,s[0]||(s[0]=[t('

Solve the puzzle

What to do if you open centos7 and find that CGroupV1 is not supported?

Enable CGroup V1: To enable CGroup V1 on an Ubuntu system, you need to edit the kernel boot parameters.

Please note that before changing kernel boot parameters, make sure to backup important data and settings to prevent unexpected problems.

Edit the ```/etc/default/grubfile and addsystemd.unified_cgroup_hierarchy=0to the end of the parameters inGRUB_CMDLINE_LINUX_DEFAULT``, just like:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

Save the file and run the following command to update the GRUB boot.

bash
sudo update-grub

Reboot the system for the changes to take effect

If the above changes still do not support the opening of centos7, try using a different host system.

Requires both Incus and Docker compatibility to exist

If left unaddressed, docker will override the iptables setting and cause Incus to have no network link

You need to install a scheduled task to detect and fix this issue

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Incus has high CPU usage on single-core hosts after long-term use

This high CPU usage is native to Incus, there is no workaround for it, and it can only be reproduced on single-core hosts, so you don't need to bother with multi-core hosts.

You need to install a timed task to detect and fix the problem, and check the usage every 5 minutes to see if you need to restart the Incus back-end.

  • Download
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart. sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh
  • Installation
bash
bash incus_fixed_restart.sh install

will be copied to /usr/local/bin/incus_fixed_restart.sh and written to cron to run every minute.

  • Uninstall
bash
bash incus_fixed_restart.sh uninstall

Removes cron tasks, script files, log files, and count files.

  • Runs normally (called by cron)
bash
/usr/local/bin/incus_fixed_restart.sh

Currently verified VPS vendors that can open containers with separate IPV6 addresses.

kuroit Phoenix, USA regular

datalix German AMD Promotions

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',36)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/assets/en_guide_incus_incus_qa.md.6SEJtO6O.lean.js b/assets/en_guide_incus_incus_qa.md.XwrY30_W.lean.js similarity index 86% rename from assets/en_guide_incus_incus_qa.md.6SEJtO6O.lean.js rename to assets/en_guide_incus_incus_qa.md.XwrY30_W.lean.js index dff59a0785..f1a3ead36c 100644 --- a/assets/en_guide_incus_incus_qa.md.6SEJtO6O.lean.js +++ b/assets/en_guide_incus_incus_qa.md.XwrY30_W.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qa.md","filePath":"en/guide/incus/incus_qa.md","lastUpdated":1773143516000}'),n={name:"en/guide/incus/incus_qa.md"};function l(r,s,o,h,p,d){return a(),i("div",null,s[0]||(s[0]=[t("",36)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; +import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qa.md","filePath":"en/guide/incus/incus_qa.md","lastUpdated":1773196139000}'),n={name:"en/guide/incus/incus_qa.md"};function l(r,s,o,h,p,d){return a(),i("div",null,s[0]||(s[0]=[t("",36)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/assets/en_guide_incus_incus_qemu.md.7dyIDO2-.js b/assets/en_guide_incus_incus_qemu.md.DkepcBp-.js similarity index 99% rename from assets/en_guide_incus_incus_qemu.md.7dyIDO2-.js rename to assets/en_guide_incus_incus_qemu.md.DkepcBp-.js index 958c314569..93149938c8 100644 --- a/assets/en_guide_incus_incus_qemu.md.7dyIDO2-.js +++ b/assets/en_guide_incus_incus_qemu.md.DkepcBp-.js @@ -1,4 +1,4 @@ -import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Running QEMU Virtualized Linux Virtual Machines in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qemu.md","filePath":"en/guide/incus/incus_qemu.md","lastUpdated":1773143516000}'),n={name:"en/guide/incus/incus_qemu.md"};function l(r,s,h,d,p,o){return a(),i("div",null,s[0]||(s[0]=[t(`

Running QEMU Virtualized Linux Virtual Machines in Incus

Available Images for QEMU Virtual Machines

Here are some of the available system parameters for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually deployed as Stream versions)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21, openwrt22, fedora37, fedora38, fedora39
  • rockylinux8, rockylinux9, oracle8, oracle9
  • oracle7, centos7 (all require enabling CGroupV1 in GRUB, otherwise they won't start - see FAQ for details)
  • kali, archlinux
  • Note that all are combinations of lowercase letters + numbers or lowercase letters only. Try them yourself - if the system is not found in the search, the script will automatically exit.
  • Version numbers can include English decimal points to accommodate Alpine version numbers.
  • Systems that fail to start may be due to insufficient disk space, memory, or incompatibility with the host machine. Check the error messages for systems that won't start.
  • Currently, only self-compiled images are used for virtual machine systems. Non-self-compiled images lack dependencies and configurations and cannot be used.
  • Complete list of supported systems for self-compiled images: kvm_images

Creating a Single NAT Server

  • Create only one NAT server with customizable limitations for all content

Download Script

International:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Domestic (China):

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Usage

./buildvm.sh ServerName CPUCores MemorySize DiskSize SSHPort ExternalStartPort ExternalEndPort DownloadSpeed UploadSpeed EnableIPV6(Y or N) System(leave empty for debian11)

CPU cores must be less than or equal to the host machine's cores. Memory size is calculated in MB, disk size in GB, download and upload speeds in Mbit. EnableIPV6 doesn't necessarily need to be Y or N - it can be omitted, defaulting to disabled IPV6.

If both ExternalStartPort and ExternalEndPort are set to 0, no external port range mapping will be performed - only the basic SSH port will be mapped. Note that these cannot be empty - set them to 0 if no mapping is needed.

Supports custom server systems. When left empty, debian13 is used by default. Note that the parameter should be system name + version number.

Except for Alpine systems, all other systems require disk size greater than 6G, otherwise the system won't start, cannot initialize and function, and will crash during the setup process.

Example

Here's the information for the example server being created:

PropertyValue
Server Nametest
SSH Login Usernameroot
SSH Login PasswordRandomly generated
CPU Cores1
Memory Size256MB
Disk Size10G
Internal/External Port Mapping Range20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Auto-configure External IPV6N
Systemdebian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

To enter the virtual machine, execute:

shell
incus console test

To exit, first press and hold Ctrl then press a, release them, then press q.

To view information, execute:

shell
cat ServerName

For example, to query the example's information:

shell
cat test

Delete Test Server

shell
incus stop -f test
+import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Running QEMU Virtualized Linux Virtual Machines in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qemu.md","filePath":"en/guide/incus/incus_qemu.md","lastUpdated":1773196139000}'),n={name:"en/guide/incus/incus_qemu.md"};function l(r,s,h,d,p,o){return a(),i("div",null,s[0]||(s[0]=[t(`

Running QEMU Virtualized Linux Virtual Machines in Incus

Available Images for QEMU Virtual Machines

Here are some of the available system parameters for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually deployed as Stream versions)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21, openwrt22, fedora37, fedora38, fedora39
  • rockylinux8, rockylinux9, oracle8, oracle9
  • oracle7, centos7 (all require enabling CGroupV1 in GRUB, otherwise they won't start - see FAQ for details)
  • kali, archlinux
  • Note that all are combinations of lowercase letters + numbers or lowercase letters only. Try them yourself - if the system is not found in the search, the script will automatically exit.
  • Version numbers can include English decimal points to accommodate Alpine version numbers.
  • Systems that fail to start may be due to insufficient disk space, memory, or incompatibility with the host machine. Check the error messages for systems that won't start.
  • Currently, only self-compiled images are used for virtual machine systems. Non-self-compiled images lack dependencies and configurations and cannot be used.
  • Complete list of supported systems for self-compiled images: kvm_images

Creating a Single NAT Server

  • Create only one NAT server with customizable limitations for all content

Download Script

International:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Domestic (China):

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Usage

./buildvm.sh ServerName CPUCores MemorySize DiskSize SSHPort ExternalStartPort ExternalEndPort DownloadSpeed UploadSpeed EnableIPV6(Y or N) System(leave empty for debian11)

CPU cores must be less than or equal to the host machine's cores. Memory size is calculated in MB, disk size in GB, download and upload speeds in Mbit. EnableIPV6 doesn't necessarily need to be Y or N - it can be omitted, defaulting to disabled IPV6.

If both ExternalStartPort and ExternalEndPort are set to 0, no external port range mapping will be performed - only the basic SSH port will be mapped. Note that these cannot be empty - set them to 0 if no mapping is needed.

Supports custom server systems. When left empty, debian13 is used by default. Note that the parameter should be system name + version number.

Except for Alpine systems, all other systems require disk size greater than 6G, otherwise the system won't start, cannot initialize and function, and will crash during the setup process.

Example

Here's the information for the example server being created:

PropertyValue
Server Nametest
SSH Login Usernameroot
SSH Login PasswordRandomly generated
CPU Cores1
Memory Size256MB
Disk Size10G
Internal/External Port Mapping Range20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Auto-configure External IPV6N
Systemdebian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

To enter the virtual machine, execute:

shell
incus console test

To exit, first press and hold Ctrl then press a, release them, then press q.

To view information, execute:

shell
cat ServerName

For example, to query the example's information:

shell
cat test

Delete Test Server

shell
incus stop -f test
 incus delete -f test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/en_guide_incus_incus_qemu.md.7dyIDO2-.lean.js b/assets/en_guide_incus_incus_qemu.md.DkepcBp-.lean.js
similarity index 87%
rename from assets/en_guide_incus_incus_qemu.md.7dyIDO2-.lean.js
rename to assets/en_guide_incus_incus_qemu.md.DkepcBp-.lean.js
index db29bc3a11..9ad6b04996 100644
--- a/assets/en_guide_incus_incus_qemu.md.7dyIDO2-.lean.js
+++ b/assets/en_guide_incus_incus_qemu.md.DkepcBp-.lean.js
@@ -1 +1 @@
-import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Running QEMU Virtualized Linux Virtual Machines in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qemu.md","filePath":"en/guide/incus/incus_qemu.md","lastUpdated":1773143516000}'),n={name:"en/guide/incus/incus_qemu.md"};function l(r,s,h,d,p,o){return a(),i("div",null,s[0]||(s[0]=[t("",31)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default};
+import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Running QEMU Virtualized Linux Virtual Machines in Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/incus/incus_qemu.md","filePath":"en/guide/incus/incus_qemu.md","lastUpdated":1773196139000}'),n={name:"en/guide/incus/incus_qemu.md"};function l(r,s,h,d,p,o){return a(),i("div",null,s[0]||(s[0]=[t("",31)]))}const k=e(n,[["render",l]]);export{u as __pageData,k as default};
diff --git a/assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.js b/assets/en_guide_incus_incus_thanks.md.MEfOzHR4.js
similarity index 97%
rename from assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.js
rename to assets/en_guide_incus_incus_thanks.md.MEfOzHR4.js
index 86e30b7128..a256ec3269 100644
--- a/assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.js
+++ b/assets/en_guide_incus_incus_thanks.md.MEfOzHR4.js
@@ -1 +1 @@
-import{_ as e,c as r,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_thanks.md","filePath":"en/guide/incus/incus_thanks.md","lastUpdated":1773143516000}'),a={name:"en/guide/incus/incus_thanks.md"};function o(i,t,c,p,l,u){return n(),r("div",null,t[0]||(t[0]=[s('

Acknowledgements

https://github.com/lxc/lxd

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://github.com/zabbly/incus

',10)]))}const g=e(a,[["render",o]]);export{d as __pageData,g as default}; +import{_ as e,c as r,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_thanks.md","filePath":"en/guide/incus/incus_thanks.md","lastUpdated":1773196139000}'),a={name:"en/guide/incus/incus_thanks.md"};function o(i,t,c,p,l,u){return n(),r("div",null,t[0]||(t[0]=[s('

Acknowledgements

https://github.com/lxc/lxd

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://github.com/zabbly/incus

',10)]))}const g=e(a,[["render",o]]);export{d as __pageData,g as default}; diff --git a/assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.lean.js b/assets/en_guide_incus_incus_thanks.md.MEfOzHR4.lean.js similarity index 85% rename from assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.lean.js rename to assets/en_guide_incus_incus_thanks.md.MEfOzHR4.lean.js index 50b5453728..b06be074d5 100644 --- a/assets/en_guide_incus_incus_thanks.md.B7ZrWUmI.lean.js +++ b/assets/en_guide_incus_incus_thanks.md.MEfOzHR4.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_thanks.md","filePath":"en/guide/incus/incus_thanks.md","lastUpdated":1773143516000}'),a={name:"en/guide/incus/incus_thanks.md"};function o(i,t,c,p,l,u){return n(),r("div",null,t[0]||(t[0]=[s("",10)]))}const g=e(a,[["render",o]]);export{d as __pageData,g as default}; +import{_ as e,c as r,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_thanks.md","filePath":"en/guide/incus/incus_thanks.md","lastUpdated":1773196139000}'),a={name:"en/guide/incus/incus_thanks.md"};function o(i,t,c,p,l,u){return n(),r("div",null,t[0]||(t[0]=[s("",10)]))}const g=e(a,[["render",o]]);export{d as __pageData,g as default}; diff --git a/assets/en_guide_incus_incus_windows.md.v0GUr3pl.js b/assets/en_guide_incus_incus_windows.md.iGTwb3TD.js similarity index 99% rename from assets/en_guide_incus_incus_windows.md.v0GUr3pl.js rename to assets/en_guide_incus_incus_windows.md.iGTwb3TD.js index f1edaa3e92..3a01ff15c0 100644 --- a/assets/en_guide_incus_incus_windows.md.v0GUr3pl.js +++ b/assets/en_guide_incus_incus_windows.md.iGTwb3TD.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.BYIcp55m.png",l="/assets/win2.BNn7RQzT.jpg",p="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",k="/assets/win7.xhBfJRvu.jpg",c="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in Incus","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_windows.md","filePath":"en/guide/incus/incus_windows.md","lastUpdated":1773143516000}'),u={name:"en/guide/incus/incus_windows.md"};function g(F,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n(`

Running Windows Virtual Machines in Incus

Verify the Incus Driver

Ensure that incus info output contains qemu, otherwise you cannot create VMs:

shell
incus info | grep -i driver:

If it only shows lxc, no need to read the subsequent tutorials, incus drivers don't support opening a VM.

Prepare the Environment and Patch the Image

Execute the following commands in sequence in the /root directory:

shell
apt update
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.BYIcp55m.png",l="/assets/win2.BNn7RQzT.jpg",p="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",k="/assets/win7.xhBfJRvu.jpg",c="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in Incus","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_windows.md","filePath":"en/guide/incus/incus_windows.md","lastUpdated":1773196139000}'),u={name:"en/guide/incus/incus_windows.md"};function g(F,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n(`

Running Windows Virtual Machines in Incus

Verify the Incus Driver

Ensure that incus info output contains qemu, otherwise you cannot create VMs:

shell
incus info | grep -i driver:

If it only shows lxc, no need to read the subsequent tutorials, incus drivers don't support opening a VM.

Prepare the Environment and Patch the Image

Execute the following commands in sequence in the /root directory:

shell
apt update
 apt install -y snapd libguestfs-tools wimtools rsync libhivex-bin libwin-hivex-perl genisoimage || apt install -y mkisofs
 snap install distrobuilder --classic
 # reboot to load some config
diff --git a/assets/en_guide_incus_incus_windows.md.v0GUr3pl.lean.js b/assets/en_guide_incus_incus_windows.md.iGTwb3TD.lean.js
similarity index 91%
rename from assets/en_guide_incus_incus_windows.md.v0GUr3pl.lean.js
rename to assets/en_guide_incus_incus_windows.md.iGTwb3TD.lean.js
index d3037385cc..f3830a98e4 100644
--- a/assets/en_guide_incus_incus_windows.md.v0GUr3pl.lean.js
+++ b/assets/en_guide_incus_incus_windows.md.iGTwb3TD.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.BYIcp55m.png",l="/assets/win2.BNn7RQzT.jpg",p="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",k="/assets/win7.xhBfJRvu.jpg",c="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in Incus","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_windows.md","filePath":"en/guide/incus/incus_windows.md","lastUpdated":1773143516000}'),u={name:"en/guide/incus/incus_windows.md"};function g(F,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n("",64)]))}const B=i(u,[["render",g]]);export{v as __pageData,B as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.BYIcp55m.png",l="/assets/win2.BNn7RQzT.jpg",p="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",k="/assets/win7.xhBfJRvu.jpg",c="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in Incus","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/incus/incus_windows.md","filePath":"en/guide/incus/incus_windows.md","lastUpdated":1773196139000}'),u={name:"en/guide/incus/incus_windows.md"};function g(F,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n("",64)]))}const B=i(u,[["render",g]]);export{v as __pageData,B as default};
diff --git a/assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.js b/assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.js
similarity index 99%
rename from assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.js
rename to assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.js
index ff0b2eee3f..279e219212 100644
--- a/assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.js
+++ b/assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_build.md","filePath":"en/guide/kubevirt/kubevirt_build.md","lastUpdated":1773143516000}'),n={name:"en/guide/kubevirt/kubevirt_build.md"};function l(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[t(`

Introduction

Two ways to create virtual machines.

Create a Single VM

  • Creates only one KVM virtual machine (via KubeVirt VirtualMachine resource), automatically detects international or domestic server
  • Can configure binding of an independent IPv6 address (requires host to have a public IPv6 address and IPv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onekubevirt.sh
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_build.md","filePath":"en/guide/kubevirt/kubevirt_build.md","lastUpdated":1773196139000}'),n={name:"en/guide/kubevirt/kubevirt_build.md"};function l(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[t(`

Introduction

Two ways to create virtual machines.

Create a Single VM

  • Creates only one KVM virtual machine (via KubeVirt VirtualMachine resource), automatically detects international or domestic server
  • Can configure binding of an independent IPv6 address (requires host to have a public IPv6 address and IPv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onekubevirt.sh
 chmod +x onekubevirt.sh

Example

Supported variables:

bash
./onekubevirt.sh <name> <cpu> <memory_mb> <disk_gb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system]

Currently supported systems:

  • debian
  • ubuntu

Default is debian if not specified.

shell
./onekubevirt.sh vm1 1 1024 10 MyPassword 25000 34975 35000 n debian

Example VM details:

PropertyValue
VM namevm1
SSH usernameroot
SSH passwordMyPassword
CPU cores1
Memory1024MB
Disk size10GB
SSH port25000
Port mapping range34975 to 35000
Systemdebian
Independent IPv6N

List all virtual machines

shell
kubectl get vmi -n default

Check VM status

shell
kubectl get vm vm1 -n default

Start a virtual machine

shell
virtctl start vm1 -n default

Stop a virtual machine

shell
virtctl stop vm1 -n default

Access VM serial console

shell
virtctl console vm1 -n default

Press Ctrl + ] to exit the console.

Delete example

shell
kubectl delete vm vm1 -n default
 kubectl delete pvc vm1-pvc -n default

Batch Create VMs

  • Generates multiple VMs inheriting the same configuration
  • Automatically increments VM names (vm1, vm2, ...), SSH ports, and public ports
  • VM information is logged to the vmlog file
  • It is recommended to run in a screen session when creating multiple VMs to avoid SSH disconnection
  • Supports x86_64 and ARM64 architecture servers

Run

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/create_kubevirt.sh
 chmod +x create_kubevirt.sh
diff --git a/assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.lean.js b/assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.lean.js
similarity index 87%
rename from assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.lean.js
rename to assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.lean.js
index b637b9ebed..4b3a62625c 100644
--- a/assets/en_guide_kubevirt_kubevirt_build.md.DX1CYXPd.lean.js
+++ b/assets/en_guide_kubevirt_kubevirt_build.md.DxEJ3rPc.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_build.md","filePath":"en/guide/kubevirt/kubevirt_build.md","lastUpdated":1773143516000}'),n={name:"en/guide/kubevirt/kubevirt_build.md"};function l(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[t("",43)]))}const F=i(n,[["render",l]]);export{c as __pageData,F as default};
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_build.md","filePath":"en/guide/kubevirt/kubevirt_build.md","lastUpdated":1773196139000}'),n={name:"en/guide/kubevirt/kubevirt_build.md"};function l(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[t("",43)]))}const F=i(n,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.js b/assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.js
similarity index 98%
rename from assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.js
rename to assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.js
index db1ec5c207..c0eb2d88fe 100644
--- a/assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.js
+++ b/assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.js
@@ -1 +1 @@
-import{_ as s,c as e,o as t,ag as a}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_install.md","filePath":"en/guide/kubevirt/kubevirt_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/kubevirt/kubevirt_install.md"};function l(r,i,o,p,d,h){return t(),e("div",null,i[0]||(i[0]=[a('

Introduction

Install the KubeVirt environment, including k3s + KubeVirt + network configuration + port forwarding as a complete set.

Add Swap Memory

TIP

Adding some swap prevents the host from running out of memory.

Unit conversion: entering 1024 creates 1GB of SWAP virtual memory. Virtual memory uses disk space. When actual memory runs out, virtual memory is used automatically, but this brings high I/O and CPU usage.

It is recommended to create swap no larger than twice the actual memory size.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Installation

  • Supported OS: Debian 11+, Ubuntu 20.04+
  • Automatically installs k3s (lightweight Kubernetes)
  • Automatically deploys KubeVirt operator and CDI (Containerized Data Importer)
  • Automatically configures Flannel network plugin and port forwarding
  • Automatically detects public IPv6 address and configures IPv6 network (if present)
  • Supports x86_64 and ARM64 architecture servers
shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

TIP

After installation, it is recommended to run kubectl get pods -n kubevirt to verify that the KubeVirt environment is working correctly. All Pods should be in Running state.

WARNING

The k3s + KubeVirt installation takes some time (usually 5–15 minutes). Please run it inside a screen or tmux session to avoid installation failure due to SSH disconnection.

Uninstall KubeVirt Environment

One-click uninstall of the complete environment, including all virtual machines, k3s, KubeVirt, and auxiliary files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

WARNING

The script will require you to enter yes to confirm before execution. This operation is irreversible. Content deleted includes all virtual machines, images, k3s and all KubeVirt components. Reset procedure: run uninstall first, then run install again to verify the entire installation process from scratch.

',16)]))}const k=s(n,[["render",l]]);export{c as __pageData,k as default}; +import{_ as s,c as e,o as t,ag as a}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_install.md","filePath":"en/guide/kubevirt/kubevirt_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/kubevirt/kubevirt_install.md"};function l(r,i,o,p,d,h){return t(),e("div",null,i[0]||(i[0]=[a('

Introduction

Install the KubeVirt environment, including k3s + KubeVirt + network configuration + port forwarding as a complete set.

Add Swap Memory

TIP

Adding some swap prevents the host from running out of memory.

Unit conversion: entering 1024 creates 1GB of SWAP virtual memory. Virtual memory uses disk space. When actual memory runs out, virtual memory is used automatically, but this brings high I/O and CPU usage.

It is recommended to create swap no larger than twice the actual memory size.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Installation

  • Supported OS: Debian 11+, Ubuntu 20.04+
  • Automatically installs k3s (lightweight Kubernetes)
  • Automatically deploys KubeVirt operator and CDI (Containerized Data Importer)
  • Automatically configures Flannel network plugin and port forwarding
  • Automatically detects public IPv6 address and configures IPv6 network (if present)
  • Supports x86_64 and ARM64 architecture servers
shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

TIP

After installation, it is recommended to run kubectl get pods -n kubevirt to verify that the KubeVirt environment is working correctly. All Pods should be in Running state.

WARNING

The k3s + KubeVirt installation takes some time (usually 5–15 minutes). Please run it inside a screen or tmux session to avoid installation failure due to SSH disconnection.

Uninstall KubeVirt Environment

One-click uninstall of the complete environment, including all virtual machines, k3s, KubeVirt, and auxiliary files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

WARNING

The script will require you to enter yes to confirm before execution. This operation is irreversible. Content deleted includes all virtual machines, images, k3s and all KubeVirt components. Reset procedure: run uninstall first, then run install again to verify the entire installation process from scratch.

',16)]))}const k=s(n,[["render",l]]);export{c as __pageData,k as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.lean.js b/assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.lean.js similarity index 87% rename from assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.lean.js rename to assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.lean.js index da87a6095d..311dcb3e26 100644 --- a/assets/en_guide_kubevirt_kubevirt_install.md.DlcdObuG.lean.js +++ b/assets/en_guide_kubevirt_kubevirt_install.md.jOOXKJJC.lean.js @@ -1 +1 @@ -import{_ as s,c as e,o as t,ag as a}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_install.md","filePath":"en/guide/kubevirt/kubevirt_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/kubevirt/kubevirt_install.md"};function l(r,i,o,p,d,h){return t(),e("div",null,i[0]||(i[0]=[a("",16)]))}const k=s(n,[["render",l]]);export{c as __pageData,k as default}; +import{_ as s,c as e,o as t,ag as a}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_install.md","filePath":"en/guide/kubevirt/kubevirt_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/kubevirt/kubevirt_install.md"};function l(r,i,o,p,d,h){return t(),e("div",null,i[0]||(i[0]=[a("",16)]))}const k=s(n,[["render",l]]);export{c as __pageData,k as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.js b/assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.js similarity index 98% rename from assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.js rename to assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.js index b6e44fec0b..f921006068 100644 --- a/assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.js +++ b/assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_precheck.md","filePath":"en/guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773143516000}'),o={name:"en/guide/kubevirt/kubevirt_precheck.md"};function s(n,t,l,d,c,u){return a(),i("div",null,t[0]||(t[0]=[r('

Introduction

The following is an introduction to the non-customized part. The customized part has its own corresponding introduction; please do not mix them up.

Please give the project a Star for free support --> https://github.com/oneclickvirt/kubevirt

Project Features

One-click deployment and management of KVM virtual machines based on KubeVirt on a Kubernetes (k3s) cluster, supporting batch or individual VM creation

  • One-click deployment of the complete k3s + KubeVirt environment
  • Manages virtual machines in a Kubernetes environment via KubeVirt CRDs
  • Each virtual machine comes with its own dedicated SSH port and port mapping
  • Supports IPv4/IPv6 automatic allocation and port forwarding
  • Supports batch creation with automatic logging to a log file
  • Supports X86_64 and ARM64 architectures
  • Supports domestic CDN mirror acceleration

Supported Systems (Host)

Systemamd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

Configuration Requirements

  • Host nodes must support KVM hardware virtualization (/dev/kvm available)
  • Kernel version: ≥ 4.15
  • Architecture: x86_64 (amd64) or ARM64
  • Memory: at least 4GB available (including k3s + KubeVirt overhead)
  • Storage: at least 20GB available disk space
  • OS: Debian 11+, Ubuntu 20.04+

WARNING

Before using this project, make sure the host supports KVM virtualization. You can check with the following command:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

A result greater than 0 indicates KVM virtualization is supported. You can also run ls /dev/kvm to confirm the device file exists.

TIP

This project will automatically deploy k3s. There is no need to prepare a Kubernetes cluster in advance.

It is recommended to add some SWAP virtual memory before creating virtual machines to avoid sudden memory usage causing the host to crash.

',13)]))}const m=e(o,[["render",s]]);export{h as __pageData,m as default}; +import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_precheck.md","filePath":"en/guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773196139000}'),o={name:"en/guide/kubevirt/kubevirt_precheck.md"};function s(n,t,l,d,c,u){return a(),i("div",null,t[0]||(t[0]=[r('

Introduction

The following is an introduction to the non-customized part. The customized part has its own corresponding introduction; please do not mix them up.

Please give the project a Star for free support --> https://github.com/oneclickvirt/kubevirt

Project Features

One-click deployment and management of KVM virtual machines based on KubeVirt on a Kubernetes (k3s) cluster, supporting batch or individual VM creation

  • One-click deployment of the complete k3s + KubeVirt environment
  • Manages virtual machines in a Kubernetes environment via KubeVirt CRDs
  • Each virtual machine comes with its own dedicated SSH port and port mapping
  • Supports IPv4/IPv6 automatic allocation and port forwarding
  • Supports batch creation with automatic logging to a log file
  • Supports X86_64 and ARM64 architectures
  • Supports domestic CDN mirror acceleration

Supported Systems (Host)

Systemamd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

Configuration Requirements

  • Host nodes must support KVM hardware virtualization (/dev/kvm available)
  • Kernel version: ≥ 4.15
  • Architecture: x86_64 (amd64) or ARM64
  • Memory: at least 4GB available (including k3s + KubeVirt overhead)
  • Storage: at least 20GB available disk space
  • OS: Debian 11+, Ubuntu 20.04+

WARNING

Before using this project, make sure the host supports KVM virtualization. You can check with the following command:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

A result greater than 0 indicates KVM virtualization is supported. You can also run ls /dev/kvm to confirm the device file exists.

TIP

This project will automatically deploy k3s. There is no need to prepare a Kubernetes cluster in advance.

It is recommended to add some SWAP virtual memory before creating virtual machines to avoid sudden memory usage causing the host to crash.

',13)]))}const m=e(o,[["render",s]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.lean.js b/assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.lean.js similarity index 87% rename from assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.lean.js rename to assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.lean.js index 1cd1c56cd7..b35c618a01 100644 --- a/assets/en_guide_kubevirt_kubevirt_precheck.md.DX4nJZaS.lean.js +++ b/assets/en_guide_kubevirt_kubevirt_precheck.md.BVIFjpig.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_precheck.md","filePath":"en/guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773143516000}'),o={name:"en/guide/kubevirt/kubevirt_precheck.md"};function s(n,t,l,d,c,u){return a(),i("div",null,t[0]||(t[0]=[r("",13)]))}const m=e(o,[["render",s]]);export{h as __pageData,m as default}; +import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_precheck.md","filePath":"en/guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773196139000}'),o={name:"en/guide/kubevirt/kubevirt_precheck.md"};function s(n,t,l,d,c,u){return a(),i("div",null,t[0]||(t[0]=[r("",13)]))}const m=e(o,[["render",s]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.js b/assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.js similarity index 99% rename from assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.js rename to assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.js index 07f1eed77d..0742dbe168 100644 --- a/assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.js +++ b/assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_qa.md","filePath":"en/guide/kubevirt/kubevirt_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/kubevirt/kubevirt_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

kubectl: command not found

The k3s environment was not installed correctly. Please re-run the installation script:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

KubeVirt Pods not ready

View all Pod statuses in the KubeVirt namespace:

shell
kubectl get pods -n kubevirt

If any Pod is in Pending or CrashLoopBackOff state, check details:

shell
kubectl describe pod <pod-name> -n kubevirt
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_qa.md","filePath":"en/guide/kubevirt/kubevirt_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/kubevirt/kubevirt_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

kubectl: command not found

The k3s environment was not installed correctly. Please re-run the installation script:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

KubeVirt Pods not ready

View all Pod statuses in the KubeVirt namespace:

shell
kubectl get pods -n kubevirt

If any Pod is in Pending or CrashLoopBackOff state, check details:

shell
kubectl describe pod <pod-name> -n kubevirt
 kubectl logs <pod-name> -n kubevirt

Common causes:

  • Host does not support KVM (check if /dev/kvm exists)
  • Insufficient memory (k3s + KubeVirt requires at least 4GB of available memory)

VM cannot access the internet (IPv4)

Check if the iptables NAT rules exist:

shell
iptables -t nat -L POSTROUTING -n -v | grep flannel

If missing, check if the Flannel network plugin is running correctly:

shell
kubectl get pods -n kube-system | grep flannel

VM IPv6 not working

  1. Confirm the host has a public IPv6 address
  2. Check if the IPv6 resources are configured:
shell
kubectl get svc -n default | grep ipv6

KVM not available

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
 ls /dev/kvm

If you cannot use KVM on a VPS, the host may not support nested virtualization. Please contact your VPS provider to confirm.

VM stays in Pending state

Check VM instance details:

shell
kubectl describe vmi vm1 -n default

Common causes:

  • CDI (Containerized Data Importer) has not finished importing the disk image. Wait for the DataVolume to be ready:
shell
kubectl get dv -n default
  • Insufficient host resources (CPU/memory/storage)

How to view SSH login info

View the vmlog file for batch-created VM info:

shell
cat vmlog

How to completely reset the KubeVirt environment

Uninstall first, then reinstall:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/kubevirtuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

`,43)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.lean.js b/assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.lean.js similarity index 86% rename from assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.lean.js rename to assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.lean.js index 2478cdd340..ca03478cd7 100644 --- a/assets/en_guide_kubevirt_kubevirt_qa.md.Z_df9QPM.lean.js +++ b/assets/en_guide_kubevirt_kubevirt_qa.md.faoAuBLj.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_qa.md","filePath":"en/guide/kubevirt/kubevirt_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/kubevirt/kubevirt_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",43)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_qa.md","filePath":"en/guide/kubevirt/kubevirt_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/kubevirt/kubevirt_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",43)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.js b/assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.js similarity index 95% rename from assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.js rename to assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.js index 251d85445f..0a3059edf9 100644 --- a/assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.js +++ b/assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.js @@ -1 +1 @@ -import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_thanks.md","filePath":"en/guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773143516000}'),i={name:"en/guide/kubevirt/kubevirt_thanks.md"};function o(s,e,p,h,u,l){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/kubevirt/kubevirt

https://github.com/kubevirt/containerized-data-importer

https://github.com/k3s-io/k3s

https://github.com/flannel-io/flannel

https://github.com/qemu/qemu

https://github.com/spiritLHLS/addswap

https://kubernetes.io/

',8)]))}const c=t(i,[["render",o]]);export{b as __pageData,c as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_thanks.md","filePath":"en/guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773196139000}'),i={name:"en/guide/kubevirt/kubevirt_thanks.md"};function o(s,e,p,h,u,l){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/kubevirt/kubevirt

https://github.com/kubevirt/containerized-data-importer

https://github.com/k3s-io/k3s

https://github.com/flannel-io/flannel

https://github.com/qemu/qemu

https://github.com/spiritLHLS/addswap

https://kubernetes.io/

',8)]))}const c=t(i,[["render",o]]);export{b as __pageData,c as default}; diff --git a/assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.lean.js b/assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.lean.js similarity index 86% rename from assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.lean.js rename to assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.lean.js index b687e3f47e..22b8165707 100644 --- a/assets/en_guide_kubevirt_kubevirt_thanks.md.CQiaCeIm.lean.js +++ b/assets/en_guide_kubevirt_kubevirt_thanks.md.C23kwvPI.lean.js @@ -1 +1 @@ -import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_thanks.md","filePath":"en/guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773143516000}'),i={name:"en/guide/kubevirt/kubevirt_thanks.md"};function o(s,e,p,h,u,l){return a(),r("div",null,e[0]||(e[0]=[n("",8)]))}const c=t(i,[["render",o]]);export{b as __pageData,c as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/kubevirt/kubevirt_thanks.md","filePath":"en/guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773196139000}'),i={name:"en/guide/kubevirt/kubevirt_thanks.md"};function o(s,e,p,h,u,l){return a(),r("div",null,e[0]||(e[0]=[n("",8)]))}const c=t(i,[["render",o]]);export{b as __pageData,c as default}; diff --git a/assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.js b/assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.js similarity index 99% rename from assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.js rename to assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.js index b6cff370ff..516585c0b2 100644 --- a/assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.js +++ b/assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.js @@ -1,4 +1,4 @@ -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",h="/assets/lxd7.EJ0s1ls2.png",c="/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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_custom.md","filePath":"en/guide/lxd/lxd_custom.md","lastUpdated":1773143516000}'),B={name:"en/guide/lxd/lxd_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t(`

Custom

Adding a customized mirror source

https://lxdimages.spiritlhl.net/

This mirror source is obtained by me through daily patching, and will be updated daily, what exactly is patched can be found at https://github.com/oneclickvirt/lxd_images for details.

shell
lxc remote remove spiritlhl
+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",h="/assets/lxd7.EJ0s1ls2.png",c="/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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_custom.md","filePath":"en/guide/lxd/lxd_custom.md","lastUpdated":1773196139000}'),B={name:"en/guide/lxd/lxd_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t(`

Custom

Adding a customized mirror source

https://lxdimages.spiritlhl.net/

This mirror source is obtained by me through daily patching, and will be updated daily, what exactly is patched can be found at https://github.com/oneclickvirt/lxd_images for details.

shell
lxc remote remove spiritlhl
 lxc remote add spiritlhl https://lxdimages.spiritlhl.net --protocol simplestreams --public
 lxc image list spiritlhl:debian

Attach free IPV6 address segments to host machines

Some machines don't have an IPV6 /64 subnet on the machine itself, here is a method given to attach an IPV6 subnet for free.

Here is a solution using the 6in4 method for a host machine that doesn't have an IPV6 address on its own.

TIP

The operations on this page must be performed on the original system, and ensure that no other scripts from this project are installed(Except for PVE, which needs to be installed first), as this may lead to environment conflicts.

Here are the platforms that are currently running in 2023 that offer IPV6 subnets for free.

Supported PlatformsCorresponding Required Installation PackagesProtocolsNumber of Channels/Subnets
tunnelbroker.netifupdown OR ifupdown2v4tunnel OR sit3✖/64 OR 5✖/64
tunnelbroker.chifupdown OR ifupdown2v4tunnel OR sit3✖/64
ip4market.ruifupdown OR ifupdown2v4tunnel OR sit1✖/64
netassist.uaifupdown OR ifupdown2v4tunnel OR sit1✖/64
https://github.com/oneclickvirt/6in4ifupdown2sit、gre、ipipcustom

The free platform only solves the problem that IPV6 is not available, it does not provide premium IPV6 bandwidth.

If you need high quality bandwidth, please build your own tunnel. When both ifupdown and ifupdown2 are available, try ifupdown first to see if it can be installed successfully, otherwise install ifupdown2.

After the installation is complete, select which package is installed behind to convert the format.

Initial environment modifications

Execute

touch /etc/cloud/cloud-init.disabled

Turn off the automated overwrite of cloud-init first, and then to see what the local machine is using to manage the network, run

systemctl is-active systemd-networkd

and

systemctl is-active networking

See which case this falls into, if it's the former active and the latter inactive, you need to reinstall/DD a system that isn't configured this way, or switch the local machine to use ifupdown/ifupdown2 to manage network execution

# Judge for yourself whether you need to disable the original network management or not
 # systemctl stop systemd-networkd
diff --git a/assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.lean.js b/assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.lean.js
similarity index 94%
rename from assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.lean.js
rename to assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.lean.js
index fbb7d56c18..0408ce42e5 100644
--- a/assets/en_guide_lxd_lxd_custom.md.Bp6v5Zy-.lean.js
+++ b/assets/en_guide_lxd_lxd_custom.md.C5IE6kcj.lean.js
@@ -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",h="/assets/lxd7.EJ0s1ls2.png",c="/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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_custom.md","filePath":"en/guide/lxd/lxd_custom.md","lastUpdated":1773143516000}'),B={name:"en/guide/lxd/lxd_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t("",198)]))}const S=s(B,[["render",I]]);export{D as __pageData,S as default};
+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",h="/assets/lxd7.EJ0s1ls2.png",c="/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",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",F="/assets/lxd17.CWPY1pea.png",w="/assets/lxd18.DqnpcYcL.png",C="/assets/lxd19.B9_MB265.png",x="/assets/lxd20.rK3P3TT8.png",P="/assets/lxd21.w-R0l00Y.png",_="/assets/lxd22.45M-VX6J.png",E="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"Custom","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_custom.md","filePath":"en/guide/lxd/lxd_custom.md","lastUpdated":1773196139000}'),B={name:"en/guide/lxd/lxd_custom.md"};function I(q,e,T,V,A,z){return n(),a("div",null,e[0]||(e[0]=[t("",198)]))}const S=s(B,[["render",I]]);export{D as __pageData,S as default};
diff --git a/assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.js b/assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.js
similarity index 99%
rename from assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.js
rename to assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.js
index e9f060ea11..8398b6146e 100644
--- a/assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.js
+++ b/assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.js
@@ -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":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_extra_config.md","filePath":"en/guide/lxd/lxd_extra_config.md","lastUpdated":1773143516000}'),t={name:"en/guide/lxd/lxd_extra_config.md"};function l(p,s,h,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e(`

Custom Configuration

TIP

The following configurations may increase the load on the server. Only install them if necessary.

Automatic IPV6 Address Configuration

  • (Optional, not required if not using)
  • This script is only suitable for servers that have an IPV6 subnet with a prefix, and the server has bound the first IP of the subnet as its IPV6 address or IPV6 gateway.
  • Automatically configures IPV6 addresses for LXC containers created with LXD.
  • Integrated into buildct.sh and can be controlled by variables without needing to be downloaded beforehand. You don't need to manually use this script; when using buildct.sh, configure with variable Y to enable it.

Download Script

Command:

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

Automatically configure IPV6 mapped addresses for containers

bash
bash build_ipv6_network.sh Container_Name(change_me)

A message is printed when the mapping is complete (Default mapping without iptables)

Example (automatically configure the test container with an IPV6 address, a test_v6 file is written when the configuration is complete)

bash
bash build_ipv6_network.sh test

PS: Add ipv6 processing can choose whether to use ip6tables for mapping, the default is not to use ip6tables for mapping but to add new network devices for mapping.

Use ip6tables for mapping

bash
bash build_ipv6_network.sh Container_name Y

If ip6tables is used for mapping, remove all IPV6 mapped rules available:

bash
ip6tables -t nat -F PREROUTING
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_extra_config.md","filePath":"en/guide/lxd/lxd_extra_config.md","lastUpdated":1773196139000}'),t={name:"en/guide/lxd/lxd_extra_config.md"};function l(p,s,h,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e(`

Custom Configuration

TIP

The following configurations may increase the load on the server. Only install them if necessary.

Automatic IPV6 Address Configuration

  • (Optional, not required if not using)
  • This script is only suitable for servers that have an IPV6 subnet with a prefix, and the server has bound the first IP of the subnet as its IPV6 address or IPV6 gateway.
  • Automatically configures IPV6 addresses for LXC containers created with LXD.
  • Integrated into buildct.sh and can be controlled by variables without needing to be downloaded beforehand. You don't need to manually use this script; when using buildct.sh, configure with variable Y to enable it.

Download Script

Command:

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

Automatically configure IPV6 mapped addresses for containers

bash
bash build_ipv6_network.sh Container_Name(change_me)

A message is printed when the mapping is complete (Default mapping without iptables)

Example (automatically configure the test container with an IPV6 address, a test_v6 file is written when the configuration is complete)

bash
bash build_ipv6_network.sh test

PS: Add ipv6 processing can choose whether to use ip6tables for mapping, the default is not to use ip6tables for mapping but to add new network devices for mapping.

Use ip6tables for mapping

bash
bash build_ipv6_network.sh Container_name Y

If ip6tables is used for mapping, remove all IPV6 mapped rules available:

bash
ip6tables -t nat -F PREROUTING
 ip6tables-legacy -t nat -F PREROUTING
 ip6tables-save > /etc/iptables/rules.v6
 netfilter-persistent save
diff --git a/assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.lean.js b/assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.lean.js
similarity index 87%
rename from assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.lean.js
rename to assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.lean.js
index 1745520447..3f257f511b 100644
--- a/assets/en_guide_lxd_lxd_extra_config.md.iGGYT1xK.lean.js
+++ b/assets/en_guide_lxd_lxd_extra_config.md.BbuKC6nF.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_extra_config.md","filePath":"en/guide/lxd/lxd_extra_config.md","lastUpdated":1773143516000}'),t={name:"en/guide/lxd/lxd_extra_config.md"};function l(p,s,h,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e("",33)]))}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.QPV3Ar9-.js";const c=JSON.parse('{"title":"Custom Configuration","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_extra_config.md","filePath":"en/guide/lxd/lxd_extra_config.md","lastUpdated":1773196139000}'),t={name:"en/guide/lxd/lxd_extra_config.md"};function l(p,s,h,r,d,o){return n(),a("div",null,s[0]||(s[0]=[e("",33)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/en_guide_lxd_lxd_install.md.DEVhwMpg.js b/assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.js
similarity index 99%
rename from assets/en_guide_lxd_lxd_install.md.DEVhwMpg.js
rename to assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.js
index 025f072557..084c081d75 100644
--- a/assets/en_guide_lxd_lxd_install.md.DEVhwMpg.js
+++ b/assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.js
@@ -1,4 +1,4 @@
-import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/lxdd1.CVTAIewh.png",l="/assets/lxdd2.C_mYE7sL.png",o="/assets/lxdd3.DZ2Na5-t.png",p="/assets/lxdd4.CO1I1FPh.png",h="/assets/lxdd0.QoEngFSd.png",y=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_install.md","filePath":"en/guide/lxd/lxd_install.md","lastUpdated":1773143516000}'),r={name:"en/guide/lxd/lxd_install.md"};function d(c,s,u,k,m,g){return i(),e("div",null,s[0]||(s[0]=[t('

LXD

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

LXD One-Click Installation Guide

WARNING

If this is a new server, make sure that both apt update and apt install curl are working properly before executing this script.

TIP

It's recommended to wait for at least 5 minutes after the system boots up before executing the following commands. This is to avoid the script being executed by the default system settings, which could cause issues with apt sources.

  • Prerequisites: Ubuntu 18+ (recommended), Debian 8+ (Incus more recommended)
  • During installation, you will be prompted to enter the storage pool creation path as well as the size, and all the VMs or containers you want to open end up taking up space in the storage pool
  • The server needs to be restarted after the environment installation process to load some default configurations
  • By default, lxd's lxcfs-related configuration is enabled, so that in-container querying of container information changes to information about the container itself rather than the host
  • This installer has been tested to work on either physical or non-physical machines

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

OR

shell
bash lxdinstall.sh

Example of initialization configuration:

If you don't need to specify the path of a non-system disk as the default storage pool, then you can directly enter or type n when choosing whether to customize the storage pool path, and you don't need to specify the path.

If you need to specify the path of a non-system disk as the default pool, then you need to select y and enter the corresponding path (the actual absolute path of the disk you mounted).

If the corresponding disk has 18 Gigabytes of free hard disk space in addition to the occupied space and you want to open a 15 Gigabyte storage pool, follow the command line prompts to enter 15.

WARNING

If you need to open more than 200 LXD containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Installation of WEB Control Panel

Customization There are tutorials on how to enable the official panel, but here do not choose to use the official panel, because the official panel in order to security, at the expense of a lot of user experience, this piece of using the

https://github.com/turtle0x1/LxdMosaic

third-party panels

shell
sudo snap install lxdmosaic

Do a straightforward one-click install, then open the current host's https://<public IP address>/ and force access to it to get to the setup page

lxd

lxd

lxd

This piece can be changed if you need to set up the site name

lxd

Better than nothing can only mean that there is no RBAC access control for sub-user segregation

Manual installation (optional)

Not recommended, just to install for some oddball environments where one-click scripts won't run, or if you want to understand the most basic LXD installation process.

Disable Firewall

bash
apt update
+import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/lxdd1.CVTAIewh.png",l="/assets/lxdd2.C_mYE7sL.png",o="/assets/lxdd3.DZ2Na5-t.png",p="/assets/lxdd4.CO1I1FPh.png",h="/assets/lxdd0.QoEngFSd.png",y=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_install.md","filePath":"en/guide/lxd/lxd_install.md","lastUpdated":1773196139000}'),r={name:"en/guide/lxd/lxd_install.md"};function d(c,s,u,k,m,g){return i(),e("div",null,s[0]||(s[0]=[t('

LXD

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

LXD One-Click Installation Guide

WARNING

If this is a new server, make sure that both apt update and apt install curl are working properly before executing this script.

TIP

It's recommended to wait for at least 5 minutes after the system boots up before executing the following commands. This is to avoid the script being executed by the default system settings, which could cause issues with apt sources.

  • Prerequisites: Ubuntu 18+ (recommended), Debian 8+ (Incus more recommended)
  • During installation, you will be prompted to enter the storage pool creation path as well as the size, and all the VMs or containers you want to open end up taking up space in the storage pool
  • The server needs to be restarted after the environment installation process to load some default configurations
  • By default, lxd's lxcfs-related configuration is enabled, so that in-container querying of container information changes to information about the container itself rather than the host
  • This installer has been tested to work on either physical or non-physical machines

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

OR

shell
bash lxdinstall.sh

Example of initialization configuration:

If you don't need to specify the path of a non-system disk as the default storage pool, then you can directly enter or type n when choosing whether to customize the storage pool path, and you don't need to specify the path.

If you need to specify the path of a non-system disk as the default pool, then you need to select y and enter the corresponding path (the actual absolute path of the disk you mounted).

If the corresponding disk has 18 Gigabytes of free hard disk space in addition to the occupied space and you want to open a 15 Gigabyte storage pool, follow the command line prompts to enter 15.

WARNING

If you need to open more than 200 LXD containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Installation of WEB Control Panel

Customization There are tutorials on how to enable the official panel, but here do not choose to use the official panel, because the official panel in order to security, at the expense of a lot of user experience, this piece of using the

https://github.com/turtle0x1/LxdMosaic

third-party panels

shell
sudo snap install lxdmosaic

Do a straightforward one-click install, then open the current host's https://<public IP address>/ and force access to it to get to the setup page

lxd

lxd

lxd

This piece can be changed if you need to set up the site name

lxd

Better than nothing can only mean that there is no RBAC access control for sub-user segregation

Manual installation (optional)

Not recommended, just to install for some oddball environments where one-click scripts won't run, or if you want to understand the most basic LXD installation process.

Disable Firewall

bash
apt update
 apt install curl wget sudo dos2unix ufw jq -y
 ufw disable

Enabling Virtual Memory SWAP

The amount of memory depends on how many instances you want to run. If you want to run 8 instances and calculate, you'll need 2GB of memory. If your actual physical memory is 512MB, you'll need an additional 1.5GB. To be cautious, allocate 2GB of virtual memory.

Execute the following commands: Enter '1', then enter '2048'. This signifies allocating 2GB of virtual memory.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

Installing LXD

Actually, the virtual memory allocated for swap should be twice the size of the actual memory. So, it's reasonable to allocate 1GB if the actual memory is 500MB. The scenario I described above is an excessive allocation.

apt install snapd -y
 snap install lxd
diff --git a/assets/en_guide_lxd_lxd_install.md.DEVhwMpg.lean.js b/assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.lean.js
similarity index 89%
rename from assets/en_guide_lxd_lxd_install.md.DEVhwMpg.lean.js
rename to assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.lean.js
index 2b29962f83..3f82fd1582 100644
--- a/assets/en_guide_lxd_lxd_install.md.DEVhwMpg.lean.js
+++ b/assets/en_guide_lxd_lxd_install.md.CM9Mkw_Z.lean.js
@@ -1 +1 @@
-import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/lxdd1.CVTAIewh.png",l="/assets/lxdd2.C_mYE7sL.png",o="/assets/lxdd3.DZ2Na5-t.png",p="/assets/lxdd4.CO1I1FPh.png",h="/assets/lxdd0.QoEngFSd.png",y=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_install.md","filePath":"en/guide/lxd/lxd_install.md","lastUpdated":1773143516000}'),r={name:"en/guide/lxd/lxd_install.md"};function d(c,s,u,k,m,g){return i(),e("div",null,s[0]||(s[0]=[t("",61)]))}const F=a(r,[["render",d]]);export{y as __pageData,F as default};
+import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/lxdd1.CVTAIewh.png",l="/assets/lxdd2.C_mYE7sL.png",o="/assets/lxdd3.DZ2Na5-t.png",p="/assets/lxdd4.CO1I1FPh.png",h="/assets/lxdd0.QoEngFSd.png",y=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_install.md","filePath":"en/guide/lxd/lxd_install.md","lastUpdated":1773196139000}'),r={name:"en/guide/lxd/lxd_install.md"};function d(c,s,u,k,m,g){return i(),e("div",null,s[0]||(s[0]=[t("",61)]))}const F=a(r,[["render",d]]);export{y as __pageData,F as default};
diff --git a/assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.js b/assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.js
similarity index 99%
rename from assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.js
rename to assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.js
index 13c9b809c8..92769a9eaf 100644
--- a/assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.js
+++ b/assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_lxc.md","filePath":"en/guide/lxd/lxd_lxc.md","lastUpdated":1773143516000}'),t={name:"en/guide/lxd/lxd_lxc.md"};function l(h,s,p,r,d,o){return e(),a("div",null,s[0]||(s[0]=[n(`

LXC virtualization

Generate only one NAT container

  • Generate only one NAT container, with customizable restrictions on all content.

Downloading the boot script is NOT REQUIRED, if you have used the command to install LXD with one click, the corresponding boot script will be downloaded automatically, so you don't need to download the script again.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

Usage

. /buildct.sh name Cpu_num Memory_size Hard_disk_size SSH_port Extranet_start_port Extranet_stop_port Download_speed Upload_speed Whether_IPV6_is_enabled(Y or N) System(leave blank for debian12)

Memory size is calculated in MB, hard disk size is calculated in GB, download speed upload speed is calculated in Mbit, whether to enable IPV6 does not have to fill in Y or N, no this parameter can also be left blank default does not enable IPV6

If external start port\`\` and external stop port are both set to 0, then we don't do interval port mapping, only the basic SSH port is mapped, note that \`\`\`can't be null, and it needs to be set to 0 if it's not to be mapped.

Support for customizing the system of the container, do not fill out the default use of debian12 when left blank, note that the incoming parameters for the system name + version number, such as:

  • debian12, debian13
  • ubuntu22, ubuntu24
  • centos8,centos9
  • alpine3.16, alpine3.17, alpine3.18,alpine3.19
  • Note that the combination of lowercase letters + numbers or only lowercase letters, try it yourself, if the search is not the system will automatically exit the script
  • The version number can be with English decimal point, in order to adapt to the alpine version number has been supported.
  • If you can't open it, it may be that the hard disk is not big enough or it doesn't fit the host, try it by yourself.
  • The images currently in use are triple filtered and prioritized: self-hostedofficial-hostedopsmaru
  • A complete list of supported systems for self-compiling images: x86_64_all_images.txt and arm64_all_images.txt

Example

Here is the information about the example chick that is being raised:

AttributeValue
container's Nametest
Username for SSH Loginroot
Password for SSH LoginRandomly generated
Number of CPU Cores1
Memory Size256MB
Disk Size2G
Range of Internal and External Port Mapping20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Automatically Set External IPv6 AddressNo
Operating SystemDebian 12
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian13

If you need to see the information, run

shell
cat ct_name_change_me

For example, the information for the query example is

shell
cat test

If you have already generated chicks through the above methods and still need to batch generate chicks, you can use a customized batch generation version of the script, but note that you should first delete the test chicks before batch generating chicks

Delete Test Chick

shell
lxc stop test
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_lxc.md","filePath":"en/guide/lxd/lxd_lxc.md","lastUpdated":1773196139000}'),t={name:"en/guide/lxd/lxd_lxc.md"};function l(h,s,p,r,d,o){return e(),a("div",null,s[0]||(s[0]=[n(`

LXC virtualization

Generate only one NAT container

  • Generate only one NAT container, with customizable restrictions on all content.

Downloading the boot script is NOT REQUIRED, if you have used the command to install LXD with one click, the corresponding boot script will be downloaded automatically, so you don't need to download the script again.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

Usage

. /buildct.sh name Cpu_num Memory_size Hard_disk_size SSH_port Extranet_start_port Extranet_stop_port Download_speed Upload_speed Whether_IPV6_is_enabled(Y or N) System(leave blank for debian12)

Memory size is calculated in MB, hard disk size is calculated in GB, download speed upload speed is calculated in Mbit, whether to enable IPV6 does not have to fill in Y or N, no this parameter can also be left blank default does not enable IPV6

If external start port\`\` and external stop port are both set to 0, then we don't do interval port mapping, only the basic SSH port is mapped, note that \`\`\`can't be null, and it needs to be set to 0 if it's not to be mapped.

Support for customizing the system of the container, do not fill out the default use of debian12 when left blank, note that the incoming parameters for the system name + version number, such as:

  • debian12, debian13
  • ubuntu22, ubuntu24
  • centos8,centos9
  • alpine3.16, alpine3.17, alpine3.18,alpine3.19
  • Note that the combination of lowercase letters + numbers or only lowercase letters, try it yourself, if the search is not the system will automatically exit the script
  • The version number can be with English decimal point, in order to adapt to the alpine version number has been supported.
  • If you can't open it, it may be that the hard disk is not big enough or it doesn't fit the host, try it by yourself.
  • The images currently in use are triple filtered and prioritized: self-hostedofficial-hostedopsmaru
  • A complete list of supported systems for self-compiling images: x86_64_all_images.txt and arm64_all_images.txt

Example

Here is the information about the example chick that is being raised:

AttributeValue
container's Nametest
Username for SSH Loginroot
Password for SSH LoginRandomly generated
Number of CPU Cores1
Memory Size256MB
Disk Size2G
Range of Internal and External Port Mapping20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Automatically Set External IPv6 AddressNo
Operating SystemDebian 12
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian13

If you need to see the information, run

shell
cat ct_name_change_me

For example, the information for the query example is

shell
cat test

If you have already generated chicks through the above methods and still need to batch generate chicks, you can use a customized batch generation version of the script, but note that you should first delete the test chicks before batch generating chicks

Delete Test Chick

shell
lxc stop test
 lxc delete test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.lean.js b/assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.lean.js
similarity index 86%
rename from assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.lean.js
rename to assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.lean.js
index ddff2e8f02..de2c80ae5d 100644
--- a/assets/en_guide_lxd_lxd_lxc.md.Dq7KibPk.lean.js
+++ b/assets/en_guide_lxd_lxd_lxc.md.DGr-zCMD.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_lxc.md","filePath":"en/guide/lxd/lxd_lxc.md","lastUpdated":1773143516000}'),t={name:"en/guide/lxd/lxd_lxc.md"};function l(h,s,p,r,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",81)]))}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.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_lxc.md","filePath":"en/guide/lxd/lxd_lxc.md","lastUpdated":1773196139000}'),t={name:"en/guide/lxd/lxd_lxc.md"};function l(h,s,p,r,d,o){return e(),a("div",null,s[0]||(s[0]=[n("",81)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.js b/assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.js
similarity index 98%
rename from assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.js
rename to assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.js
index 2d204d41bc..8570c1ef55 100644
--- a/assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.js
+++ b/assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.js
@@ -1 +1 @@
-import{_ as t,c as o,o as n,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_precheck.md","filePath":"en/guide/lxd/lxd_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/lxd/lxd_precheck.md"};function s(i,e,d,c,l,h){return n(),o("div",null,e[0]||(e[0]=[r('

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/lxd

Requirements

Hardware requirements.

  • System: Ubuntu 18+ (recommended), Debian 8+ (Incus more recommended)
  • Virtualization: KVM, VMWARE recommended.
  • Memory: At least 512MB of RAM
  • Hard disk: hard disk (system disk) at least 10G
  • Network: Independent IPV4 address, IPV6 is optional, bandwidth can download scripts on the line, the network can connect to the public network.

PS: If the hardware is very good and has a lot of resources, you can use PVE to batch open KVM virtualized VMs Jump

PS: If the hardware resources are even worse, virtualization is not supported, you can use the docker version, the adaption surface is wider Jump

Project Features

  • This set of script development using Ubuntu20, Ubuntu other long-term maintenance version should also be no problem, automatically switch to another storage type if btrfs not supported

  • Set up both TCP and UDP forwarding, in addition to SSH ports, other mapping intranet and extranet ports are the same.

  • Support for docker nested virtualization of open LXC containers has been set up, and the default normal version and pure probe version use the debian11 system.

  • lxcfs has been set to be enabled by default, so that querying resources within a container uses the configured view rather than the host's view

  • Have blocked the container may be used to abuse the toolkit and IPV4 network TCP/UDP protocol ports ( 3389 8888 54321 65432 ), to prevent the container is used for scanning and blasting, and can be external process checking for problems automatically shut down

  • Has supported one-click configuration of IPV6 addresses for LXC containers (provided that the mother hen has an IPV6 subnet, no IPV6 address is not configured), automatically adapted to the size of the subnet

  • Ensure that the disk you want to open is the default system disk (sda or sda1) and not the mounted disk (sdb and so on), if you are not sure, use fdisk -l and df to check.

  • See Other notes for details on mounting other disks.

  • One-click scripts support custom restrictions on all content, the normal version supports multiple runs of the batch generation does not overwrite the previously generated configuration

Detecting the environment

Use the subsequent script must execute this command to detect the hen whether it meets the requirements

Command:

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)
',15)]))}const m=t(a,[["render",s]]);export{u as __pageData,m as default}; +import{_ as t,c as o,o as n,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_precheck.md","filePath":"en/guide/lxd/lxd_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/lxd/lxd_precheck.md"};function s(i,e,d,c,l,h){return n(),o("div",null,e[0]||(e[0]=[r('

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If your host does not have an IPV6 subnet and you want to assign IPV6 addresses to containers, then please check the Customize partition in the LXD module for the Attach a free IPV6 address segment to the host, and attach an IPV6 subnet to the host before installing the environment.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/lxd

Requirements

Hardware requirements.

  • System: Ubuntu 18+ (recommended), Debian 8+ (Incus more recommended)
  • Virtualization: KVM, VMWARE recommended.
  • Memory: At least 512MB of RAM
  • Hard disk: hard disk (system disk) at least 10G
  • Network: Independent IPV4 address, IPV6 is optional, bandwidth can download scripts on the line, the network can connect to the public network.

PS: If the hardware is very good and has a lot of resources, you can use PVE to batch open KVM virtualized VMs Jump

PS: If the hardware resources are even worse, virtualization is not supported, you can use the docker version, the adaption surface is wider Jump

Project Features

  • This set of script development using Ubuntu20, Ubuntu other long-term maintenance version should also be no problem, automatically switch to another storage type if btrfs not supported

  • Set up both TCP and UDP forwarding, in addition to SSH ports, other mapping intranet and extranet ports are the same.

  • Support for docker nested virtualization of open LXC containers has been set up, and the default normal version and pure probe version use the debian11 system.

  • lxcfs has been set to be enabled by default, so that querying resources within a container uses the configured view rather than the host's view

  • Have blocked the container may be used to abuse the toolkit and IPV4 network TCP/UDP protocol ports ( 3389 8888 54321 65432 ), to prevent the container is used for scanning and blasting, and can be external process checking for problems automatically shut down

  • Has supported one-click configuration of IPV6 addresses for LXC containers (provided that the mother hen has an IPV6 subnet, no IPV6 address is not configured), automatically adapted to the size of the subnet

  • Ensure that the disk you want to open is the default system disk (sda or sda1) and not the mounted disk (sdb and so on), if you are not sure, use fdisk -l and df to check.

  • See Other notes for details on mounting other disks.

  • One-click scripts support custom restrictions on all content, the normal version supports multiple runs of the batch generation does not overwrite the previously generated configuration

Detecting the environment

Use the subsequent script must execute this command to detect the hen whether it meets the requirements

Command:

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)
',15)]))}const m=t(a,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.lean.js b/assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.lean.js similarity index 86% rename from assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.lean.js rename to assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.lean.js index d7b0207771..490e4cc6dd 100644 --- a/assets/en_guide_lxd_lxd_precheck.md.CSuViZhP.lean.js +++ b/assets/en_guide_lxd_lxd_precheck.md.Cb8rneCu.lean.js @@ -1 +1 @@ -import{_ as t,c as o,o as n,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_precheck.md","filePath":"en/guide/lxd/lxd_precheck.md","lastUpdated":1773143516000}'),a={name:"en/guide/lxd/lxd_precheck.md"};function s(i,e,d,c,l,h){return n(),o("div",null,e[0]||(e[0]=[r("",15)]))}const m=t(a,[["render",s]]);export{u as __pageData,m as default}; +import{_ as t,c as o,o as n,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_precheck.md","filePath":"en/guide/lxd/lxd_precheck.md","lastUpdated":1773196139000}'),a={name:"en/guide/lxd/lxd_precheck.md"};function s(i,e,d,c,l,h){return n(),o("div",null,e[0]||(e[0]=[r("",15)]))}const m=t(a,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.js b/assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.js similarity index 99% rename from assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.js rename to assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.js index c8f5903b66..798e6281ed 100644 --- a/assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.js +++ b/assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.js @@ -1 +1 @@ -import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qa.md","filePath":"en/guide/lxd/lxd_qa.md","lastUpdated":1773143516000}'),n={name:"en/guide/lxd/lxd_qa.md"};function o(l,e,r,p,d,h){return t(),s("div",null,e[0]||(e[0]=[i('

Solve the puzzle

What if the lxc command says it can't be found after LXD is installed?

! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc\nexport PATH=$PATH:/snap/bin

After executing this command try

lxc -h

to see if the lxc command is fixed.

What to do if you open centos7 and find that CGroupV1 is not supported?

Enable CGroup V1: To enable CGroup V1 on an Ubuntu system, you need to edit the kernel boot parameters.

Please note that before changing kernel boot parameters, make sure to backup important data and settings to prevent unexpected problems.

Edit the ```/etc/default/grubfile and addsystemd.unified_cgroup_hierarchy=0to the end of the parameters inGRUB_CMDLINE_LINUX_DEFAULT``, just like:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

Save the file and run the following command to update the GRUB boot.

bash
sudo update-grub

Reboot the system for the changes to take effect

If the above changes still do not support the opening of centos7, try using a different host system.

Requires both LXD and Docker compatibility to exist

If left unaddressed, docker will override the iptables setting and cause LXD to have no network link

You need to install a scheduled task to detect and fix this issue

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Currently verified VPS vendors that can open containers with separate IPV6 addresses.

kuroit Phoenix, USA regular

datalix German AMD Promotions

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',28)]))}const b=a(n,[["render",o]]);export{u as __pageData,b as default}; +import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qa.md","filePath":"en/guide/lxd/lxd_qa.md","lastUpdated":1773196139000}'),n={name:"en/guide/lxd/lxd_qa.md"};function o(l,e,r,p,d,h){return t(),s("div",null,e[0]||(e[0]=[i('

Solve the puzzle

What if the lxc command says it can't be found after LXD is installed?

! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc\nexport PATH=$PATH:/snap/bin

After executing this command try

lxc -h

to see if the lxc command is fixed.

What to do if you open centos7 and find that CGroupV1 is not supported?

Enable CGroup V1: To enable CGroup V1 on an Ubuntu system, you need to edit the kernel boot parameters.

Please note that before changing kernel boot parameters, make sure to backup important data and settings to prevent unexpected problems.

Edit the ```/etc/default/grubfile and addsystemd.unified_cgroup_hierarchy=0to the end of the parameters inGRUB_CMDLINE_LINUX_DEFAULT``, just like:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

Save the file and run the following command to update the GRUB boot.

bash
sudo update-grub

Reboot the system for the changes to take effect

If the above changes still do not support the opening of centos7, try using a different host system.

Requires both LXD and Docker compatibility to exist

If left unaddressed, docker will override the iptables setting and cause LXD to have no network link

You need to install a scheduled task to detect and fix this issue

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Currently verified VPS vendors that can open containers with separate IPV6 addresses.

kuroit Phoenix, USA regular

datalix German AMD Promotions

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

',28)]))}const b=a(n,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.lean.js b/assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.lean.js similarity index 85% rename from assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.lean.js rename to assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.lean.js index af29ceffc0..b9933bdb9b 100644 --- a/assets/en_guide_lxd_lxd_qa.md.B1l7HXAo.lean.js +++ b/assets/en_guide_lxd_lxd_qa.md.BdzbCpAs.lean.js @@ -1 +1 @@ -import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qa.md","filePath":"en/guide/lxd/lxd_qa.md","lastUpdated":1773143516000}'),n={name:"en/guide/lxd/lxd_qa.md"};function o(l,e,r,p,d,h){return t(),s("div",null,e[0]||(e[0]=[i("",28)]))}const b=a(n,[["render",o]]);export{u as __pageData,b as default}; +import{_ as a,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qa.md","filePath":"en/guide/lxd/lxd_qa.md","lastUpdated":1773196139000}'),n={name:"en/guide/lxd/lxd_qa.md"};function o(l,e,r,p,d,h){return t(),s("div",null,e[0]||(e[0]=[i("",28)]))}const b=a(n,[["render",o]]);export{u as __pageData,b as default}; diff --git a/assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.js b/assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.js similarity index 99% rename from assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.js rename to assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.js index c7e1a035fb..3bbf6844aa 100644 --- a/assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.js +++ b/assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.js @@ -1,4 +1,4 @@ -import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"QEMU virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qemu.md","filePath":"en/guide/lxd/lxd_qemu.md","lastUpdated":1773143516000}'),n={name:"en/guide/lxd/lxd_qemu.md"};function l(r,s,d,h,p,o){return a(),i("div",null,s[0]||(s[0]=[t(`

QEMU virtualization

Available Images for QEMU Virtual Machines

Here are some of the available system parameters for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually deployed as Stream versions)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21, openwrt22, fedora37, fedora38, fedora39
  • rockylinux8, rockylinux9, oracle8, oracle9
  • oracle7, centos7 (all require enabling CGroupV1 in GRUB, otherwise they won't start - see FAQ for details)
  • kali, archlinux
  • Note that all are combinations of lowercase letters + numbers or lowercase letters only. Try them yourself - if the system is not found in the search, the script will automatically exit.
  • Version numbers can include English decimal points to accommodate Alpine version numbers.
  • Systems that fail to start may be due to insufficient disk space, memory, or incompatibility with the host machine. Check the error messages for systems that won't start.
  • Currently, only self-compiled images are used for virtual machine systems. Non-self-compiled images lack dependencies and configurations and cannot be used.
  • Complete list of supported systems for self-compiled images: kvm_images

Creating a Single NAT Server

  • Create only one NAT server with customizable limitations for all content

Download Script

International:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Domestic (China):

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Usage

./buildvm.sh ServerName CPUCores MemorySize DiskSize SSHPort ExternalStartPort ExternalEndPort DownloadSpeed UploadSpeed EnableIPV6(Y or N) System(leave empty for debian11)

CPU cores must be less than or equal to the host machine's cores. Memory size is calculated in MB, disk size in GB, download and upload speeds in Mbit. EnableIPV6 doesn't necessarily need to be Y or N - it can be omitted, defaulting to disabled IPV6.

If both ExternalStartPort and ExternalEndPort are set to 0, no external port range mapping will be performed - only the basic SSH port will be mapped. Note that these cannot be empty - set them to 0 if no mapping is needed.

Supports custom server systems. When left empty, debian13 is used by default. Note that the parameter should be system name + version number.

Except for Alpine systems, all other systems require disk size greater than 6G, otherwise the system won't start, cannot initialize and function, and will crash during the setup process.

Example

Here's the information for the example server being created:

PropertyValue
Server Nametest
SSH Login Usernameroot
SSH Login PasswordRandomly generated
CPU Cores1
Memory Size256MB
Disk Size10G
Internal/External Port Mapping Range20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Auto-configure External IPV6N
Systemdebian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

To enter the virtual machine, execute:

shell
lxc console test

To exit, first press and hold Ctrl then press a, release them, then press q.

To view information, execute:

shell
cat ServerName

For example, to query the example's information:

shell
cat test

Delete Test Server

shell
lxc stop -f test
+import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"QEMU virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qemu.md","filePath":"en/guide/lxd/lxd_qemu.md","lastUpdated":1773196139000}'),n={name:"en/guide/lxd/lxd_qemu.md"};function l(r,s,d,h,p,o){return a(),i("div",null,s[0]||(s[0]=[t(`

QEMU virtualization

Available Images for QEMU Virtual Machines

Here are some of the available system parameters for your reference:

  • debian10, debian11, debian12, debian13
  • ubuntu18, ubuntu20, ubuntu22
  • centos8, centos9 (actually deployed as Stream versions)
  • alpine3.15, alpine3.16, alpine3.17, alpine3.18
  • openwrt21, openwrt22, fedora37, fedora38, fedora39
  • rockylinux8, rockylinux9, oracle8, oracle9
  • oracle7, centos7 (all require enabling CGroupV1 in GRUB, otherwise they won't start - see FAQ for details)
  • kali, archlinux
  • Note that all are combinations of lowercase letters + numbers or lowercase letters only. Try them yourself - if the system is not found in the search, the script will automatically exit.
  • Version numbers can include English decimal points to accommodate Alpine version numbers.
  • Systems that fail to start may be due to insufficient disk space, memory, or incompatibility with the host machine. Check the error messages for systems that won't start.
  • Currently, only self-compiled images are used for virtual machine systems. Non-self-compiled images lack dependencies and configurations and cannot be used.
  • Complete list of supported systems for self-compiled images: kvm_images

Creating a Single NAT Server

  • Create only one NAT server with customizable limitations for all content

Download Script

International:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Domestic (China):

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

Usage

./buildvm.sh ServerName CPUCores MemorySize DiskSize SSHPort ExternalStartPort ExternalEndPort DownloadSpeed UploadSpeed EnableIPV6(Y or N) System(leave empty for debian11)

CPU cores must be less than or equal to the host machine's cores. Memory size is calculated in MB, disk size in GB, download and upload speeds in Mbit. EnableIPV6 doesn't necessarily need to be Y or N - it can be omitted, defaulting to disabled IPV6.

If both ExternalStartPort and ExternalEndPort are set to 0, no external port range mapping will be performed - only the basic SSH port will be mapped. Note that these cannot be empty - set them to 0 if no mapping is needed.

Supports custom server systems. When left empty, debian13 is used by default. Note that the parameter should be system name + version number.

Except for Alpine systems, all other systems require disk size greater than 6G, otherwise the system won't start, cannot initialize and function, and will crash during the setup process.

Example

Here's the information for the example server being created:

PropertyValue
Server Nametest
SSH Login Usernameroot
SSH Login PasswordRandomly generated
CPU Cores1
Memory Size256MB
Disk Size10G
Internal/External Port Mapping Range20002 to 20025
Upload Bandwidth500Mbit
Download Bandwidth500Mbit
Auto-configure External IPV6N
Systemdebian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

To enter the virtual machine, execute:

shell
lxc console test

To exit, first press and hold Ctrl then press a, release them, then press q.

To view information, execute:

shell
cat ServerName

For example, to query the example's information:

shell
cat test

Delete Test Server

shell
lxc stop -f test
 lxc delete -f test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.lean.js b/assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.lean.js
similarity index 86%
rename from assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.lean.js
rename to assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.lean.js
index 7e30d51477..fd456f56da 100644
--- a/assets/en_guide_lxd_lxd_qemu.md.JrZJ0oUF.lean.js
+++ b/assets/en_guide_lxd_lxd_qemu.md.DzDaHLS2.lean.js
@@ -1 +1 @@
-import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"QEMU virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qemu.md","filePath":"en/guide/lxd/lxd_qemu.md","lastUpdated":1773143516000}'),n={name:"en/guide/lxd/lxd_qemu.md"};function l(r,s,d,h,p,o){return a(),i("div",null,s[0]||(s[0]=[t("",31)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default};
+import{_ as e,c as i,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"QEMU virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/lxd/lxd_qemu.md","filePath":"en/guide/lxd/lxd_qemu.md","lastUpdated":1773196139000}'),n={name:"en/guide/lxd/lxd_qemu.md"};function l(r,s,d,h,p,o){return a(),i("div",null,s[0]||(s[0]=[t("",31)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default};
diff --git a/assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.js b/assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.js
similarity index 94%
rename from assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.js
rename to assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.js
index 743c0f9cf8..a8098feb90 100644
--- a/assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.js
+++ b/assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.js
@@ -1 +1 @@
-import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_thanks.md","filePath":"en/guide/lxd/lxd_thanks.md","lastUpdated":1773143516000}'),s={name:"en/guide/lxd/lxd_thanks.md"};function o(i,e,l,p,c,d){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/lxc/lxd

https://lxdware.com/

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://images.opsmaru.dev/

Thank @Ella-Alinda @fscarmen for providing guidance.

',12)]))}const g=t(s,[["render",o]]);export{u as __pageData,g as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_thanks.md","filePath":"en/guide/lxd/lxd_thanks.md","lastUpdated":1773196139000}'),s={name:"en/guide/lxd/lxd_thanks.md"};function o(i,e,l,p,c,d){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/lxc/lxd

https://lxdware.com/

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://images.opsmaru.dev/

Thank @Ella-Alinda @fscarmen for providing guidance.

',12)]))}const g=t(s,[["render",o]]);export{u as __pageData,g as default}; diff --git a/assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.lean.js b/assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.lean.js similarity index 71% rename from assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.lean.js rename to assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.lean.js index 34449aaa3a..9ba0d455c9 100644 --- a/assets/en_guide_lxd_lxd_thanks.md.BCd8YLMv.lean.js +++ b/assets/en_guide_lxd_lxd_thanks.md.D1geRhkU.lean.js @@ -1 +1 @@ -import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_thanks.md","filePath":"en/guide/lxd/lxd_thanks.md","lastUpdated":1773143516000}'),s={name:"en/guide/lxd/lxd_thanks.md"};function o(i,e,l,p,c,d){return a(),r("div",null,e[0]||(e[0]=[n("",12)]))}const g=t(s,[["render",o]]);export{u as __pageData,g as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_thanks.md","filePath":"en/guide/lxd/lxd_thanks.md","lastUpdated":1773196139000}'),s={name:"en/guide/lxd/lxd_thanks.md"};function o(i,e,l,p,c,d){return a(),r("div",null,e[0]||(e[0]=[n("",12)]))}const g=t(s,[["render",o]]);export{u as __pageData,g as default}; diff --git a/assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.js b/assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.js similarity index 99% rename from assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.js rename to assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.js index ed2c159cf0..e5aed69db1 100644 --- a/assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.js +++ b/assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.CJKAoRm5.png",l="/assets/win2.BNn7RQzT.jpg",h="/assets/win3.BgsODJcQ.jpg",p="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.C8qmMo1u.jpg",k="/assets/win7.CI43Ul0V.jpg",c="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in LXD","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_windows.md","filePath":"en/guide/lxd/lxd_windows.md","lastUpdated":1773143516000}'),g={name:"en/guide/lxd/lxd_windows.md"};function F(u,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n(`

Running Windows Virtual Machines in LXD

Verify the LXD Driver

Ensure that lxc info output contains qemu, otherwise you cannot create VMs:

shell
lxc info | grep -i driver:

If it only shows lxc, no need to read the subsequent tutorials, lxd drivers don't support opening a VM.

Prepare the Environment and Patch the Image

Execute the following commands in sequence in the /root directory:

shell
apt update
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.CJKAoRm5.png",l="/assets/win2.BNn7RQzT.jpg",h="/assets/win3.BgsODJcQ.jpg",p="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.C8qmMo1u.jpg",k="/assets/win7.CI43Ul0V.jpg",c="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in LXD","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_windows.md","filePath":"en/guide/lxd/lxd_windows.md","lastUpdated":1773196139000}'),g={name:"en/guide/lxd/lxd_windows.md"};function F(u,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n(`

Running Windows Virtual Machines in LXD

Verify the LXD Driver

Ensure that lxc info output contains qemu, otherwise you cannot create VMs:

shell
lxc info | grep -i driver:

If it only shows lxc, no need to read the subsequent tutorials, lxd drivers don't support opening a VM.

Prepare the Environment and Patch the Image

Execute the following commands in sequence in the /root directory:

shell
apt update
 apt install -y snapd libguestfs-tools wimtools rsync libhivex-bin libwin-hivex-perl genisoimage || apt install -y mkisofs
 snap install lxd-imagebuilder --classic --edge
 # reboot to load some config
diff --git a/assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.lean.js b/assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.lean.js
similarity index 91%
rename from assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.lean.js
rename to assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.lean.js
index cae5010f39..2d6f16b6f3 100644
--- a/assets/en_guide_lxd_lxd_windows.md.UJUaq5rg.lean.js
+++ b/assets/en_guide_lxd_lxd_windows.md.Bnh9M5gT.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.CJKAoRm5.png",l="/assets/win2.BNn7RQzT.jpg",h="/assets/win3.BgsODJcQ.jpg",p="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.C8qmMo1u.jpg",k="/assets/win7.CI43Ul0V.jpg",c="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in LXD","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_windows.md","filePath":"en/guide/lxd/lxd_windows.md","lastUpdated":1773143516000}'),g={name:"en/guide/lxd/lxd_windows.md"};function F(u,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n("",63)]))}const B=i(g,[["render",F]]);export{v as __pageData,B as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/win1.CJKAoRm5.png",l="/assets/win2.BNn7RQzT.jpg",h="/assets/win3.BgsODJcQ.jpg",p="/assets/wintj.tP8uDOfH.jpg",r="/assets/wincf.B_Jc2M1G.jpg",o="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.C8qmMo1u.jpg",k="/assets/win7.CI43Ul0V.jpg",c="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"Running Windows Virtual Machines in LXD","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/lxd/lxd_windows.md","filePath":"en/guide/lxd/lxd_windows.md","lastUpdated":1773196139000}'),g={name:"en/guide/lxd/lxd_windows.md"};function F(u,s,m,y,b,C){return e(),a("div",null,s[0]||(s[0]=[n("",63)]))}const B=i(g,[["render",F]]);export{v as __pageData,B as default};
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.js b/assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.js
similarity index 99%
rename from assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.js
index 10d0e2101c..d5006ca363 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/proxy.Dm-mUL3T.png",l="/assets/init.CCPKl32d.png",p="/assets/init_success.DAbHwjWK.png",r="/assets/home.BlmfOIEU.png",m=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_install.md","filePath":"en/guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773143516000}'),h={name:"en/guide/oneclickvirt/oneclickvirt_install.md"};function o(d,s,c,k,u,g){return e(),a("div",null,s[0]||(s[0]=[n('

OneClickVirt

Distinguish between the panel side and the controlled side. The controlled side needs to have the corresponding virtualization environment installed in advance. You can use the main installation of other virtualization in one-click virtualization for environment installation. The control side is actually just a panel, with no virtualization environment requirements.

Controlled Side

For other virtual environments corresponding to this guide, their main installation scripts can be used to set up the environment. We won't elaborate further here. This tutorial provides installation commands for the main setup of the four major virtualization technologies. Please refer to them directly.

If possible, always use the scripts to install the corresponding environment. Otherwise, you may encounter strange issues like inconsistent presets. If you lack technical expertise, do not manually install the environment. Use scripts for everything.

The controlled end only requires the virtualization environment to be installed. There is no need to install an additional agent for control. Simply ensure SSH login is possible (the SSH login address can be public or internal network, as long as connectivity is unimpeded).

WARNING

Managed nodes require the host machine's network interface to be directly bound to the IP address to be mapped, such as a public IP. Host machines providing the IP to be mapped via methods like port mapping (e.g., Alibaba Cloud VPC) or NAT forwarding are not supported. Host machines providing the IP to be mapped using full-port NAT or port forwarding cannot serve as node machines. (Simply put, if a cloud server has a public IP address, this IP must be directly bound to the network interface card. It cannot be a scenario where the NIC only has an internal IP without a public IP, with traffic routing through the internal IP and then being forwarded to the public IP.)

Panel Side

Hardware requirements include at least 1G of free memory and 2G of free disk space. Installation can be completed through any of the following methods.

Installation MethodApplicable ScenarioAdvantagesDisadvantages
Frontend-Backend Separated DeploymentHigh performance, minimal resource usageBest performance, flexible configurationComplex configuration, requires reverse proxy setup
All-in-One DeploymentWorks with or without public IPv4 addressSimple deployment, no reverse proxy neededRelatively poor performance
Docker Deployment (Pre-built Image)Quick deployment, larger resource usageOne-click installation, data persistenceRequires Docker environment, large image download
Docker Compose DeploymentSuitable for source code updates and maintenanceHighly customizableRequires Docker environment, lengthy compilation time
Dockerfile Self-CompilationSuitable for source code updates and maintenanceHighly customizableRequires Docker environment, lengthy compilation time

Installation via Pre-compiled Binary Files

Two methods are distinguished here:

  • Frontend-backend separated deployment (backend and frontend are compiled separately into corresponding files for deployment), better performance
  • All-in-one deployment (frontend and backend combined into one file for deployment), relatively poorer performance

Frontend-Backend Separated Deployment

Linux
Download Script

International

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh
Environment Installation

Interactive environment installation

./install.sh env

Non-interactive environment installation

noninteractive=true ./install.sh env
Main Installation
./install.sh install

Installation directory: /opt/oneclickvirt

After successful installation, you need to manually start the service:

shell
systemctl start oneclickvirt

Other usage methods:

Stop service:

shell
systemctl stop oneclickvirt

Enable auto-start on boot:

shell
systemctl enable oneclickvirt

Check status:

shell
systemctl status oneclickvirt

View logs:

shell
journalctl -u oneclickvirt -f

Restart service:

shell
systemctl restart oneclickvirt
Upgrade Frontend and Backend
./install.sh upgrade

Except for configuration files, both backend and frontend files will be upgraded

During the upgrade process, you will be prompted whether you need to customize the frontend file path. If you choose not to customize, it will be extracted to /opt/oneclickvirt/web/ by default

This setting is mainly to accommodate the issue that 1panel cannot customize the frontend file path. The 1panel file path is similar to /opt/1panel/www/sites/beta/index/web, where beta is the name of the website you set up

Deploy Frontend

The previous installation script will extract the static files to (when not customized)

shell
cd /opt/oneclickvirt/web/

This path

Use nginx or caddy to establish a static website with this path. Whether you need to bind a domain name is your choice

After the static files are deployed, you need to reverse proxy the backend address for frontend use. Here is a specific example using OpenResty:

You need to reverse proxy the path /api to the backend http://127.0.0.1:8888 address. If you are using 1panel, you only need to fill in these, and the default backend domain name uses the default $host without modification.

If you are using nginx or caddy, please refer to the proxy source code below and modify it yourself for proxying

shell
location /api {
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/proxy.Dm-mUL3T.png",l="/assets/init.CCPKl32d.png",p="/assets/init_success.DAbHwjWK.png",r="/assets/home.BlmfOIEU.png",m=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_install.md","filePath":"en/guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773196139000}'),h={name:"en/guide/oneclickvirt/oneclickvirt_install.md"};function o(d,s,c,k,u,g){return e(),a("div",null,s[0]||(s[0]=[n('

OneClickVirt

Distinguish between the panel side and the controlled side. The controlled side needs to have the corresponding virtualization environment installed in advance. You can use the main installation of other virtualization in one-click virtualization for environment installation. The control side is actually just a panel, with no virtualization environment requirements.

Controlled Side

For other virtual environments corresponding to this guide, their main installation scripts can be used to set up the environment. We won't elaborate further here. This tutorial provides installation commands for the main setup of the four major virtualization technologies. Please refer to them directly.

If possible, always use the scripts to install the corresponding environment. Otherwise, you may encounter strange issues like inconsistent presets. If you lack technical expertise, do not manually install the environment. Use scripts for everything.

The controlled end only requires the virtualization environment to be installed. There is no need to install an additional agent for control. Simply ensure SSH login is possible (the SSH login address can be public or internal network, as long as connectivity is unimpeded).

WARNING

Managed nodes require the host machine's network interface to be directly bound to the IP address to be mapped, such as a public IP. Host machines providing the IP to be mapped via methods like port mapping (e.g., Alibaba Cloud VPC) or NAT forwarding are not supported. Host machines providing the IP to be mapped using full-port NAT or port forwarding cannot serve as node machines. (Simply put, if a cloud server has a public IP address, this IP must be directly bound to the network interface card. It cannot be a scenario where the NIC only has an internal IP without a public IP, with traffic routing through the internal IP and then being forwarded to the public IP.)

Panel Side

Hardware requirements include at least 1G of free memory and 2G of free disk space. Installation can be completed through any of the following methods.

Installation MethodApplicable ScenarioAdvantagesDisadvantages
Frontend-Backend Separated DeploymentHigh performance, minimal resource usageBest performance, flexible configurationComplex configuration, requires reverse proxy setup
All-in-One DeploymentWorks with or without public IPv4 addressSimple deployment, no reverse proxy neededRelatively poor performance
Docker Deployment (Pre-built Image)Quick deployment, larger resource usageOne-click installation, data persistenceRequires Docker environment, large image download
Docker Compose DeploymentSuitable for source code updates and maintenanceHighly customizableRequires Docker environment, lengthy compilation time
Dockerfile Self-CompilationSuitable for source code updates and maintenanceHighly customizableRequires Docker environment, lengthy compilation time

Installation via Pre-compiled Binary Files

Two methods are distinguished here:

  • Frontend-backend separated deployment (backend and frontend are compiled separately into corresponding files for deployment), better performance
  • All-in-one deployment (frontend and backend combined into one file for deployment), relatively poorer performance

Frontend-Backend Separated Deployment

Linux
Download Script

International

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh
Environment Installation

Interactive environment installation

./install.sh env

Non-interactive environment installation

noninteractive=true ./install.sh env
Main Installation
./install.sh install

Installation directory: /opt/oneclickvirt

After successful installation, you need to manually start the service:

shell
systemctl start oneclickvirt

Other usage methods:

Stop service:

shell
systemctl stop oneclickvirt

Enable auto-start on boot:

shell
systemctl enable oneclickvirt

Check status:

shell
systemctl status oneclickvirt

View logs:

shell
journalctl -u oneclickvirt -f

Restart service:

shell
systemctl restart oneclickvirt
Upgrade Frontend and Backend
./install.sh upgrade

Except for configuration files, both backend and frontend files will be upgraded

During the upgrade process, you will be prompted whether you need to customize the frontend file path. If you choose not to customize, it will be extracted to /opt/oneclickvirt/web/ by default

This setting is mainly to accommodate the issue that 1panel cannot customize the frontend file path. The 1panel file path is similar to /opt/1panel/www/sites/beta/index/web, where beta is the name of the website you set up

Deploy Frontend

The previous installation script will extract the static files to (when not customized)

shell
cd /opt/oneclickvirt/web/

This path

Use nginx or caddy to establish a static website with this path. Whether you need to bind a domain name is your choice

After the static files are deployed, you need to reverse proxy the backend address for frontend use. Here is a specific example using OpenResty:

You need to reverse proxy the path /api to the backend http://127.0.0.1:8888 address. If you are using 1panel, you only need to fill in these, and the default backend domain name uses the default $host without modification.

If you are using nginx or caddy, please refer to the proxy source code below and modify it yourself for proxying

shell
location /api {
     proxy_pass http://127.0.0.1:8888; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.lean.js b/assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.lean.js
similarity index 90%
rename from assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.lean.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.lean.js
index 6295303b80..4f55f4b4c2 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_install.md.Ba_g8SBd.lean.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_install.md.CDr-08BT.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/proxy.Dm-mUL3T.png",l="/assets/init.CCPKl32d.png",p="/assets/init_success.DAbHwjWK.png",r="/assets/home.BlmfOIEU.png",m=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_install.md","filePath":"en/guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773143516000}'),h={name:"en/guide/oneclickvirt/oneclickvirt_install.md"};function o(d,s,c,k,u,g){return e(),a("div",null,s[0]||(s[0]=[n("",155)]))}const F=i(h,[["render",o]]);export{m as __pageData,F as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/proxy.Dm-mUL3T.png",l="/assets/init.CCPKl32d.png",p="/assets/init_success.DAbHwjWK.png",r="/assets/home.BlmfOIEU.png",m=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_install.md","filePath":"en/guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773196139000}'),h={name:"en/guide/oneclickvirt/oneclickvirt_install.md"};function o(d,s,c,k,u,g){return e(),a("div",null,s[0]||(s[0]=[n("",155)]))}const F=i(h,[["render",o]]);export{m as __pageData,F as default};
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.js b/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.js
similarity index 97%
rename from assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.js
index dc68bc9d2c..812dab895d 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.js
@@ -1,4 +1,4 @@
-import{_ as t,c as a,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773143516000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_precheck.md"};function o(r,e,p,l,c,d){return n(),a("div",null,e[0]||(e[0]=[i(`

Preface

This is a control panel for interfacing with mainstream virtualization technologies, supplementing features not natively supported by virtualization platforms such as user management, traffic monitoring, NAT port mapping, and custom system images.

Welcome to support the project with a Star for free --> https://github.com/oneclickvirt/oneclickvirt

WARNING

This is a project in early development and may have various bugs and instabilities. Please assess the risks before use. Updates will be relatively frequent.

Environment Requirements

Supported architectures: amd64 or arm64

Supported systems: Linux, Windows, or any self-compiled system architecture

Only requires public network access. The deployed machine does not need an independent public IP address. This is just a virtualization control panel that only needs port display for the frontend. In fact, one important reason for development is that I need to manage multiple virtualization environments without a public IPv4 address.

This control panel has no special environmental dependency requirements. For one-click deployment, you can use the all-in-one Docker image with database included or docker-compose deployment with separated containers.

Frontend static files are deployed through nginx or caddy or OpenResty. For non-source code deployment and non-Docker deployment, API path reverse proxy to the backend port is required.

WARNING

Managed nodes require the host machine's network interface to be directly bound to the IP address to be mapped, such as a public IP. Host machines providing the IP to be mapped via methods like port mapping (e.g., Alibaba Cloud VPC) or NAT forwarding are not supported. Host machines providing the IP to be mapped using full-port NAT or port forwarding cannot serve as node machines. (Simply put, if a cloud server has a public IP address, this IP must be directly bound to the network interface card. It cannot be a scenario where the NIC only has an internal IP without a public IP, with traffic routing through the internal IP and then being forwarded to the public IP.)

Platform Features

  • Language internationalization: Frontend supports bilingual display in Chinese and English, defaults to Chinese display, with switchable default system language

  • Provider Integration: Supports ProxmoxVE、Incus、Docker、LXD、Podman、Containerd - 6 major mainstream virtualization platforms, with more platforms coming soon

  • Flexible Instance Types: Supports automatic creation of virtual machines (VM) and containers (Container), providing a unified virtualization resource management experience through abstraction design

  • Built-in Image Seed Data: No need to search for platform-specific images yourself. All platforms come with self-compiled image loading, supporting unified management or custom image download URLs

  • Automatic NAT Port Mapping: Supports automatic port mapping for IPv4/IPv6, with mapped IPs supporting non-public IPs. Supports multiple network types:

NAT IPv4
+import{_ as t,c as a,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773196139000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_precheck.md"};function o(r,e,p,l,c,d){return n(),a("div",null,e[0]||(e[0]=[i(`

Preface

This is a control panel for interfacing with mainstream virtualization technologies, supplementing features not natively supported by virtualization platforms such as user management, traffic monitoring, NAT port mapping, and custom system images.

Welcome to support the project with a Star for free --> https://github.com/oneclickvirt/oneclickvirt

WARNING

This is a project in early development and may have various bugs and instabilities. Please assess the risks before use. Updates will be relatively frequent.

Environment Requirements

Supported architectures: amd64 or arm64

Supported systems: Linux, Windows, or any self-compiled system architecture

Only requires public network access. The deployed machine does not need an independent public IP address. This is just a virtualization control panel that only needs port display for the frontend. In fact, one important reason for development is that I need to manage multiple virtualization environments without a public IPv4 address.

This control panel has no special environmental dependency requirements. For one-click deployment, you can use the all-in-one Docker image with database included or docker-compose deployment with separated containers.

Frontend static files are deployed through nginx or caddy or OpenResty. For non-source code deployment and non-Docker deployment, API path reverse proxy to the backend port is required.

WARNING

Managed nodes require the host machine's network interface to be directly bound to the IP address to be mapped, such as a public IP. Host machines providing the IP to be mapped via methods like port mapping (e.g., Alibaba Cloud VPC) or NAT forwarding are not supported. Host machines providing the IP to be mapped using full-port NAT or port forwarding cannot serve as node machines. (Simply put, if a cloud server has a public IP address, this IP must be directly bound to the network interface card. It cannot be a scenario where the NIC only has an internal IP without a public IP, with traffic routing through the internal IP and then being forwarded to the public IP.)

Platform Features

  • Language internationalization: Frontend supports bilingual display in Chinese and English, defaults to Chinese display, with switchable default system language

  • Provider Integration: Supports ProxmoxVE、Incus、Docker、LXD、Podman、Containerd - 6 major mainstream virtualization platforms, with more platforms coming soon

  • Flexible Instance Types: Supports automatic creation of virtual machines (VM) and containers (Container), providing a unified virtualization resource management experience through abstraction design

  • Built-in Image Seed Data: No need to search for platform-specific images yourself. All platforms come with self-compiled image loading, supporting unified management or custom image download URLs

  • Automatic NAT Port Mapping: Supports automatic port mapping for IPv4/IPv6, with mapped IPs supporting non-public IPs. Supports multiple network types:

NAT IPv4
 NAT IPv4 + Independent IPv6
 Independent IPv4
 Independent IPv4 + IPv6
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.lean.js b/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.lean.js
similarity index 75%
rename from assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.lean.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.lean.js
index 18f50f80a3..cd16843964 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.Cp8bxn8j.lean.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_precheck.md.De29Dzxa.lean.js
@@ -1 +1 @@
-import{_ as t,c as a,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773143516000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_precheck.md"};function o(r,e,p,l,c,d){return n(),a("div",null,e[0]||(e[0]=[i("",15)]))}const h=t(s,[["render",o]]);export{m as __pageData,h as default};
+import{_ as t,c as a,o as n,ag as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"en/guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773196139000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_precheck.md"};function o(r,e,p,l,c,d){return n(),a("div",null,e[0]||(e[0]=[i("",15)]))}const h=t(s,[["render",o]]);export{m as __pageData,h as default};
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.js b/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.js
similarity index 99%
rename from assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.js
index 5290b75a78..0dc1299ce7 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/iofailed.BIGD2fYy.png",g=JSON.parse('{"title":"Please Report Issues to the Corresponding Repository","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","filePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773143516000}'),l={name:"en/guide/oneclickvirt/oneclickvirt_qa.md"};function p(r,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

Please Report Issues to the Corresponding Repository

What to Do If You Forgot the Administrator Password

You need to forcibly change the password through database operations

  1. Generate Password Hash
bash
# Generate using Python (replace NewPassword123! with your new password)
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/iofailed.BIGD2fYy.png",g=JSON.parse('{"title":"Please Report Issues to the Corresponding Repository","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","filePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773196139000}'),l={name:"en/guide/oneclickvirt/oneclickvirt_qa.md"};function p(r,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

Please Report Issues to the Corresponding Repository

What to Do If You Forgot the Administrator Password

You need to forcibly change the password through database operations

  1. Generate Password Hash
bash
# Generate using Python (replace NewPassword123! with your new password)
 python3 -c "import bcrypt; print(bcrypt.hashpw(b'NewPassword123!', bcrypt.gensalt()).decode('utf-8'))"

Example output: $2b$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  1. Enter the Database

Docker Deployment (All-in-One Version):

bash
docker exec -it oneclickvirt mysql -u root oneclickvirt

Standalone Database Deployment:

bash
mysql -h 127.0.0.1 -P 3306 -u root -p oneclickvirt
  1. Update Password
sql
-- View administrator account
 SELECT id, username, user_type FROM users WHERE user_type = 'admin';
 
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.lean.js b/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.lean.js
similarity index 89%
rename from assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.lean.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.lean.js
index 92bdd329f9..71b1eb8305 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.DkuKBHYB.lean.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_qa.md.CmrQuK61.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/iofailed.BIGD2fYy.png",g=JSON.parse('{"title":"Please Report Issues to the Corresponding Repository","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","filePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773143516000}'),l={name:"en/guide/oneclickvirt/oneclickvirt_qa.md"};function p(r,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",60)]))}const u=i(l,[["render",p]]);export{g as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/iofailed.BIGD2fYy.png",g=JSON.parse('{"title":"Please Report Issues to the Corresponding Repository","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","filePath":"en/guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773196139000}'),l={name:"en/guide/oneclickvirt/oneclickvirt_qa.md"};function p(r,s,h,o,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",60)]))}const u=i(l,[["render",p]]);export{g as __pageData,u as default};
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.js b/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.js
similarity index 94%
rename from assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.js
index 7f39d503ff..d3c35ae525 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.js
@@ -1 +1 @@
-import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773143516000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_thanks.md"};function n(c,e,i,l,m,p){return o(),r("div",null,e[0]||(e[0]=[a('

Acknowledgments

We extend our gratitude to the following platforms for providing servers available for testing.

https://console.zmto.com/

https://fossvps.org/

https://community.ibm.com/zsystems/form/l1cc-oss-vm-request/

',5)]))}const f=t(s,[["render",n]]);export{_ as __pageData,f as default}; +import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773196139000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_thanks.md"};function n(c,e,i,l,m,p){return o(),r("div",null,e[0]||(e[0]=[a('

Acknowledgments

We extend our gratitude to the following platforms for providing servers available for testing.

https://console.zmto.com/

https://fossvps.org/

https://community.ibm.com/zsystems/form/l1cc-oss-vm-request/

',5)]))}const f=t(s,[["render",n]]);export{_ as __pageData,f as default}; diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.lean.js b/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.lean.js similarity index 87% rename from assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.lean.js rename to assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.lean.js index ba27e053c8..4e69200861 100644 --- a/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.OOvm5In9.lean.js +++ b/assets/en_guide_oneclickvirt_oneclickvirt_thanks.md.DxEIEfyg.lean.js @@ -1 +1 @@ -import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773143516000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_thanks.md"};function n(c,e,i,l,m,p){return o(),r("div",null,e[0]||(e[0]=[a("",5)]))}const f=t(s,[["render",n]]);export{_ as __pageData,f as default}; +import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"en/guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773196139000}'),s={name:"en/guide/oneclickvirt/oneclickvirt_thanks.md"};function n(c,e,i,l,m,p){return o(),r("div",null,e[0]||(e[0]=[a("",5)]))}const f=t(s,[["render",n]]);export{_ as __pageData,f as default}; diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.js b/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.js similarity index 99% rename from assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.js rename to assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.js index 6a47e9fccb..3d962f34a2 100644 --- a/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.js +++ b/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.js @@ -1,4 +1,4 @@ -import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/resetuserpassword.CqOxip2E.png",l="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",r="/assets/edituser.5rScwK1u.png",o="/assets/switch.yK08dswR.png",p="/assets/base.DRc_UdCb.png",h="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",k="/assets/setvirt.DKwPSHcD.png",u="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",m="/assets/ipt1.BWlPVFUI.png",y="/assets/ipt2.BZjM3d2a.png",E="/assets/bw1.Cf2N9DNJ.png",b="/assets/bw2.DJ4v_edl.png",f="/assets/bw3.D087jBmd.png",v="/assets/cz.CpDm16A7.png",C="/assets/pcz.Bf32qIMb.png",F="/assets/level.ClT-FQGb.png",w="/assets/setmore1.C4F--yVn.png",x="/assets/setmore2.DbU1hlgY.png",q="/assets/autoapi1.DUEk35Fd.png",B="/assets/autoapi2.YWfGcqPd.png",D="/assets/autoapi3.PO1KiLU6.png",A="/assets/hardwareconfig.qww9PB2d.png",_="/assets/autoapi4.BMm_5qST.png",P="/assets/autoapi45.D3Ei-57N.png",z="/assets/images.CshFq7yK.png",I="/assets/userlevel.Dff1Ev4j.png",M="/assets/usercontrol.VCrXBaGX.png",H=JSON.parse('{"title":"Usage Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","filePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773143516000}'),T={name:"en/guide/oneclickvirt/oneclickvirt_usage.md"};function S(L,s,N,R,O,U){return a(),e("div",null,s[0]||(s[0]=[n('

Usage Guide

This document provides detailed instructions on how to use this panel. If you have any questions, please join the group for assistance from administrators: https://t.me/oneclickvirt

User Management

After logging into the administrator interface, open the user management page and you must click reset password to ensure the admin account password is a strong password, preventing malicious brute force attacks. If you defined your own password during initialization, you may skip resetting the password.

Resetting the password will automatically generate a strong password, which is displayed only once. Be sure to copy and save it to avoid forgetting it.

If you need to change a user's type, click on the corresponding user to edit. The edit popup supports changing the user type.

Administrators can click on the avatar in the upper right corner, where the dropdown menu has a button to switch between administrator and regular user views. If you need to test any features, you can directly use the administrator user for testing. (Regular users do not have this view switching button)

Managing Nodes

First, you need to ensure that the node to be managed has one of the four major virtualization technologies installed.

Ping the node's IP from the machine where this panel is deployed. Ideally, the latency should be within 300ms and the packet loss rate should not be too high, otherwise connection failures may occur, resulting in missed command execution in control.

Below are the steps for setting up nodes. Required and mandatory steps must be followed, while optional steps depend on your needs.

Basic Information (Required)

The server name should preferably use only English letters and numbers, avoid special characters, and ideally be within 6 characters. When creating containers or virtual machines later, this server name will be automatically added as a prefix.

Select the virtualization technology name you actually installed for the server type. Docker can only create containers by default, while other virtualization technologies can create virtual machines.

For SSH address, fill in the node's public IPv4 address or internal SSH connection address. This address will be used for SSH connections and API connections.

NAT port mapping prioritizes using the port IP for mapping. If no specific port IP is provided, the SSH address IP will be used for mapping. Neither needs to be a public IPv4 address.

In the port field, fill in the port for SSH connection to the node.

Description can note some information about the current node, visible only to administrators.

Status is enabled by default, allowing regular users to apply and claim instances after health checks.

Architecture is the node's own architecture. Currently supports managing amd64 and arm64 architecture nodes, select accordingly.

(Nodes with existing instances are temporarily not supported for management. The feature to synchronize and manage existing instances has not yet been developed)

Connection Configuration (Required)

Username is recommended to be root user, as automatic API configuration later requires downloading some dependencies. Non-root users may encounter permission issues.

Password is the password used for SSH login. Of course, if you don't use a password and use key-based login, that's also acceptable.

SSH timeout configuration is designed to test connectivity and optimize fault tolerance, and can also be used to check connectivity.

After filling in the previous information, click test and corresponding prompt values will appear. Click apply to proceed. Of course, not applying is also fine, with higher fault tolerance.

The latency here is the latency of actually executing commands on the corresponding node via ping, so it's generally around 2s or more, which is normal latency.

This design is to accommodate nodes with extremely poor connectivity to the panel machine. Increasing these parameter values means higher fault tolerance.

Execution timeout generally doesn't need modification unless your node's performance is particularly weak and command execution takes a long time.

Location Information (Optional)

Directly enter a specific country and click to select. Most countries already have presets with corresponding flag icons.

After setting the location, regular users will be able to see the corresponding flag and region in the application interface, along with the automatically matched continent.

You can optionally fill in the corresponding city. Not filling it in is fine and doesn't affect usage.

Instance Type and Quantity Limits (Required)

For docker type nodes, only containers can be created. Other virtualization types support creating both containers and virtual machines (provided the node itself supports it; forced creation on unsupported nodes will automatically fail).

If you don't need to create virtual machines, be sure to uncheck the virtual machine option.

If the quantity limit maintains the default parameter of 0, it means no node-level quantity limit for this type of instance.

For container type, it's recommended to set the quantity according to the following formula:

Node free storage disk size / Minimum disk size of instances to be distributed = Maximum number of instances

For virtual machine type:

Node free memory size (including virtual memory) / Minimum memory size of instances to be distributed = Number of instances

The reason for this calculation is that containers generally don't limit total CPU quantity and memory size, but limit disk size, while memory is usually the bottleneck for the number of virtual machines that can be created.

If you need to overcommit, the values obtained from the above calculation rules can be appropriately increased, and the following configuration should be set up.

Resource Overcommitment Configuration (Optional)

Overcommitment resource configuration means whether to strictly limit corresponding resources. Removing limits means no checks will be performed and forced creation may occur, which may lead to creation task failures.

By default, container type doesn't limit total CPU and memory pre-allocation, but limits total pre-allocated disk capacity to achieve optimal resource sharing and maximum number of instances. Generally doesn't need modification.

By default, virtual machine type limits all resources, with the maximum total pre-allocated resources not exceeding actual resource size.

For ProxmoxVE, there's also a storage pool name setting for the disk to be created. If it's a multi-disk PVE, you need to set which storage pool to create on.

Other types of virtualization environments have asked about the specific storage pool creation location during installation, so there's no need to set it.

In general, if you need to limit which resources cannot be overcommitted, click limit. After limiting, corresponding resources cannot be overcommitted; without limiting, corresponding resources can be overcommitted.

The limit here is for the total resource usage of this type of instance on this node, used to calculate available resources and limit instance creation.

Not recommended to modify unless you know what this setting does.

IP Mapping Configuration (Optional)

Generally doesn't need modification. Here you can set the number of port mappings, range, network configuration method, and port mapping method for each instance.

By default, instances are created with NAT-mapped public IPv4 ports. The priority of mapped IPs is: Port IP > SSH connection IP (used when port IP is not set)

If the node itself has an IPv6 subnet greater than or equal to /80 in size, change the network configuration to create instances with independent public IPv6 addresses.

Extremely, you can also create instances with only independent IPv6 addresses. Make your own choice.

Not recommended to modify the mapping method unless you know what this setting does. The default configuration is already the best configuration.

Bandwidth and Traffic Configuration (Required)

Literal meaning: set the maximum bandwidth and total available traffic calculated by natural month for instances created on the node. Traffic monitoring and traffic statistics are not automatically enabled by default.

Starting traffic monitoring will have a corresponding memory burden because traffic statistics data needs to be cached. Even after extreme optimization by this project, it will still increase with bandwidth. Don't enable traffic statistics if you don't have enough memory.

If traffic statistics are enabled, pay attention to the statistics mode. The default statistics mode is the most universal. If your local performance is good enough (mainly enough memory), you can choose higher collection frequency and collection quantity. If performance is very poor, it's recommended to choose the last tier. Custom parameters are also supported, but not recommended for beginners to modify; the preset modes are sufficient.

If traffic statistics are enabled, note that the allocated bandwidth for levels should not be too large. Monitoring will dynamically generate configuration files according to the allocated bandwidth for monitoring. The larger the bandwidth, the more memory monitoring occupies.

LevelInstance Bandwidthplugin_pipe_sizesql_cache_entriesBase UsageBurst Usage
Low≤50 Mbps2 MB325~8 MB8~12 MB
Medium-Low51~100 Mbps10 MB6410~15 MB15~30 MB
Medium101~200 Mbps25 MB12815~20 MB30~50 MB
Medium-High201~500 Mbps50 MB25620~30 MB50~80 MB
High501~1000 Mbps128 MB51230~50 MB80~150 MB
Very High1001~2000 Mbps256 MB76850~80 MB150~300 MB
Extremely High>2000 Mbps512 MB102480~120 MB300~600 MB

Traffic statistics error margin is about 0.1G deviation per 10G. NAT mapping and instances with independent IPv6 IPs are automatically handled, no manual management needed.

However, if traffic statistics were previously enabled and need to be disabled and monitoring uninstalled later, you need to delete the monitoring in the following place first before disabling traffic statistics. This ensures complete uninstallation, otherwise it will still collect statistics in the background.

Only after enabling traffic control will the traffic monitoring management button appear here. After entering, three buttons are visible, mainly for manually synchronizing monitoring situations. Generally, if traffic monitoring is not enabled after some instances are created, manual management is not needed. If needed, just click detect traffic monitoring, which will batch detect the monitoring situation of all instances under the current instance.

Level Restrictions (Required)

Five levels are preset here, and users will be filtered through this restriction configuration when applying and claiming.

During the actual instance creation process, the node-level level restrictions will be compared with the global user level resource restrictions, taking the minimum value as the user's available resource limit on the current node.

This setting is to specialize the configuration limits of instances that users of corresponding levels can create on the current node, avoiding situations where global limits are not suitable for the current node. Global limits can be set in system configuration and are generally used for user account-level resource usage restrictions.

Advanced Settings (Optional)

Expiration time:

Prevents users from continuing to operate expired nodes. Expired nodes will be automatically frozen, at which time corresponding instances will not allow any operations but will not be automatically deleted. If a node is frozen, please clean and delete it in time.

Task concurrency control:

Default is single-threaded serial execution. At the same time, only one add/delete/modify task (corresponding to instance creation, deletion, and reset operations) will exist.

Can be changed to multi-threaded concurrent execution, where multiple add/delete/modify tasks can exist at the same time. Only when concurrent execution is used does the concurrency number setting make sense.

Serial execution is suitable for situations where the node itself has weak performance or the platform has few users. Concurrent operation is suitable for situations where the node itself has strong performance or there are many users. Please choose the mode yourself.

Personally recommend using default settings. Concurrent execution may have boundary conditions that have not been fully tested and may have bugs.

Task polling settings:

Controls whether to enable task execution and the interval for polling to check status. Generally keep default.

Operation execution rules:

Node operation mode supports API only, SSH only, and automatic switching. By default, automatic switching mode is used. Generally, there's no need to modify unless there are special requirements.

If you need to enable API operation mode, after successfully saving the node settings, click the auto-configure API button outside to execute background tasks to automatically interface with the virtualization platform API, no manual configuration required. After waiting for about 15-20 seconds, it should have been configured successfully. Click the button to see the configuration history tasks and corresponding logs. After successful configuration, click health check again to ensure the API status is green online status, and you've successfully configured and enabled the API.

Hardware Configuration (Optional)

Only lxd and incus support setting default instance parameter configurations. Generally use the defaults unless you need to manually limit certain special hardware resources; otherwise, generally no modification is needed.

If you need to set the maximum percentage of CPU usage or similar parameters, the settings here can meet your requirements.

Health Check (Required)

Click the operation button

After saving the node, after completing the health check, regular users can see the corresponding server and can apply for creation. If health check is not performed, users cannot apply for creation and claiming.

After health check, it will display whether the corresponding type of connection status is online and will automatically detect the actual total resources of the entire machine. This total resource amount is the total resource limit for non-overcommitted creation set above.

Whether the API is available does not affect specific usage. Auto-configuring the API is not mandatory.

System Images

By default, seed data will include all available images for all virtualization environments. By default, only alpine and debian images are enabled to avoid too many available images for users.

If you need images for any system, any virtualization environment, any architecture, please search and enable them yourself, otherwise users cannot select the corresponding images.

Custom image addresses are temporarily not supported. The current frontend entry function is not available. Do not manually enter images.

System Configuration

General options here won't be elaborated on. There are two configurations that need special explanation.

User Level Configuration (Required)

This limits the total account available resources for regular user levels.

When creating instances on corresponding nodes, this global configuration will work together with the node's own level configuration to filter and provide users with configurations that meet both conditions.

Instance Permission Configuration (Required)

Here you can control the minimum level required for users to perform sensitive operations. You can control the minimum user level required for instance creation, instance deletion, and instance system reset.

Configuration File

The default system configuration is already sufficient for light usage. If advanced customization is needed, you need to modify the configuration file or modify it in the administrator interface after initialization.

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

This is the complete initialization configuration file. Below we will explain the specific configuration items:

auth Authentication Configuration

yaml
auth:
+import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/resetuserpassword.CqOxip2E.png",l="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",r="/assets/edituser.5rScwK1u.png",o="/assets/switch.yK08dswR.png",p="/assets/base.DRc_UdCb.png",h="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",k="/assets/setvirt.DKwPSHcD.png",u="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",m="/assets/ipt1.BWlPVFUI.png",y="/assets/ipt2.BZjM3d2a.png",E="/assets/bw1.Cf2N9DNJ.png",b="/assets/bw2.DJ4v_edl.png",f="/assets/bw3.D087jBmd.png",v="/assets/cz.CpDm16A7.png",C="/assets/pcz.Bf32qIMb.png",F="/assets/level.ClT-FQGb.png",w="/assets/setmore1.C4F--yVn.png",x="/assets/setmore2.DbU1hlgY.png",q="/assets/autoapi1.DUEk35Fd.png",B="/assets/autoapi2.YWfGcqPd.png",D="/assets/autoapi3.PO1KiLU6.png",A="/assets/hardwareconfig.qww9PB2d.png",_="/assets/autoapi4.BMm_5qST.png",P="/assets/autoapi45.D3Ei-57N.png",z="/assets/images.CshFq7yK.png",I="/assets/userlevel.Dff1Ev4j.png",M="/assets/usercontrol.VCrXBaGX.png",H=JSON.parse('{"title":"Usage Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","filePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773196139000}'),T={name:"en/guide/oneclickvirt/oneclickvirt_usage.md"};function S(L,s,N,R,O,U){return a(),e("div",null,s[0]||(s[0]=[n('

Usage Guide

This document provides detailed instructions on how to use this panel. If you have any questions, please join the group for assistance from administrators: https://t.me/oneclickvirt

User Management

After logging into the administrator interface, open the user management page and you must click reset password to ensure the admin account password is a strong password, preventing malicious brute force attacks. If you defined your own password during initialization, you may skip resetting the password.

Resetting the password will automatically generate a strong password, which is displayed only once. Be sure to copy and save it to avoid forgetting it.

If you need to change a user's type, click on the corresponding user to edit. The edit popup supports changing the user type.

Administrators can click on the avatar in the upper right corner, where the dropdown menu has a button to switch between administrator and regular user views. If you need to test any features, you can directly use the administrator user for testing. (Regular users do not have this view switching button)

Managing Nodes

First, you need to ensure that the node to be managed has one of the four major virtualization technologies installed.

Ping the node's IP from the machine where this panel is deployed. Ideally, the latency should be within 300ms and the packet loss rate should not be too high, otherwise connection failures may occur, resulting in missed command execution in control.

Below are the steps for setting up nodes. Required and mandatory steps must be followed, while optional steps depend on your needs.

Basic Information (Required)

The server name should preferably use only English letters and numbers, avoid special characters, and ideally be within 6 characters. When creating containers or virtual machines later, this server name will be automatically added as a prefix.

Select the virtualization technology name you actually installed for the server type. Docker can only create containers by default, while other virtualization technologies can create virtual machines.

For SSH address, fill in the node's public IPv4 address or internal SSH connection address. This address will be used for SSH connections and API connections.

NAT port mapping prioritizes using the port IP for mapping. If no specific port IP is provided, the SSH address IP will be used for mapping. Neither needs to be a public IPv4 address.

In the port field, fill in the port for SSH connection to the node.

Description can note some information about the current node, visible only to administrators.

Status is enabled by default, allowing regular users to apply and claim instances after health checks.

Architecture is the node's own architecture. Currently supports managing amd64 and arm64 architecture nodes, select accordingly.

(Nodes with existing instances are temporarily not supported for management. The feature to synchronize and manage existing instances has not yet been developed)

Connection Configuration (Required)

Username is recommended to be root user, as automatic API configuration later requires downloading some dependencies. Non-root users may encounter permission issues.

Password is the password used for SSH login. Of course, if you don't use a password and use key-based login, that's also acceptable.

SSH timeout configuration is designed to test connectivity and optimize fault tolerance, and can also be used to check connectivity.

After filling in the previous information, click test and corresponding prompt values will appear. Click apply to proceed. Of course, not applying is also fine, with higher fault tolerance.

The latency here is the latency of actually executing commands on the corresponding node via ping, so it's generally around 2s or more, which is normal latency.

This design is to accommodate nodes with extremely poor connectivity to the panel machine. Increasing these parameter values means higher fault tolerance.

Execution timeout generally doesn't need modification unless your node's performance is particularly weak and command execution takes a long time.

Location Information (Optional)

Directly enter a specific country and click to select. Most countries already have presets with corresponding flag icons.

After setting the location, regular users will be able to see the corresponding flag and region in the application interface, along with the automatically matched continent.

You can optionally fill in the corresponding city. Not filling it in is fine and doesn't affect usage.

Instance Type and Quantity Limits (Required)

For docker type nodes, only containers can be created. Other virtualization types support creating both containers and virtual machines (provided the node itself supports it; forced creation on unsupported nodes will automatically fail).

If you don't need to create virtual machines, be sure to uncheck the virtual machine option.

If the quantity limit maintains the default parameter of 0, it means no node-level quantity limit for this type of instance.

For container type, it's recommended to set the quantity according to the following formula:

Node free storage disk size / Minimum disk size of instances to be distributed = Maximum number of instances

For virtual machine type:

Node free memory size (including virtual memory) / Minimum memory size of instances to be distributed = Number of instances

The reason for this calculation is that containers generally don't limit total CPU quantity and memory size, but limit disk size, while memory is usually the bottleneck for the number of virtual machines that can be created.

If you need to overcommit, the values obtained from the above calculation rules can be appropriately increased, and the following configuration should be set up.

Resource Overcommitment Configuration (Optional)

Overcommitment resource configuration means whether to strictly limit corresponding resources. Removing limits means no checks will be performed and forced creation may occur, which may lead to creation task failures.

By default, container type doesn't limit total CPU and memory pre-allocation, but limits total pre-allocated disk capacity to achieve optimal resource sharing and maximum number of instances. Generally doesn't need modification.

By default, virtual machine type limits all resources, with the maximum total pre-allocated resources not exceeding actual resource size.

For ProxmoxVE, there's also a storage pool name setting for the disk to be created. If it's a multi-disk PVE, you need to set which storage pool to create on.

Other types of virtualization environments have asked about the specific storage pool creation location during installation, so there's no need to set it.

In general, if you need to limit which resources cannot be overcommitted, click limit. After limiting, corresponding resources cannot be overcommitted; without limiting, corresponding resources can be overcommitted.

The limit here is for the total resource usage of this type of instance on this node, used to calculate available resources and limit instance creation.

Not recommended to modify unless you know what this setting does.

IP Mapping Configuration (Optional)

Generally doesn't need modification. Here you can set the number of port mappings, range, network configuration method, and port mapping method for each instance.

By default, instances are created with NAT-mapped public IPv4 ports. The priority of mapped IPs is: Port IP > SSH connection IP (used when port IP is not set)

If the node itself has an IPv6 subnet greater than or equal to /80 in size, change the network configuration to create instances with independent public IPv6 addresses.

Extremely, you can also create instances with only independent IPv6 addresses. Make your own choice.

Not recommended to modify the mapping method unless you know what this setting does. The default configuration is already the best configuration.

Bandwidth and Traffic Configuration (Required)

Literal meaning: set the maximum bandwidth and total available traffic calculated by natural month for instances created on the node. Traffic monitoring and traffic statistics are not automatically enabled by default.

Starting traffic monitoring will have a corresponding memory burden because traffic statistics data needs to be cached. Even after extreme optimization by this project, it will still increase with bandwidth. Don't enable traffic statistics if you don't have enough memory.

If traffic statistics are enabled, pay attention to the statistics mode. The default statistics mode is the most universal. If your local performance is good enough (mainly enough memory), you can choose higher collection frequency and collection quantity. If performance is very poor, it's recommended to choose the last tier. Custom parameters are also supported, but not recommended for beginners to modify; the preset modes are sufficient.

If traffic statistics are enabled, note that the allocated bandwidth for levels should not be too large. Monitoring will dynamically generate configuration files according to the allocated bandwidth for monitoring. The larger the bandwidth, the more memory monitoring occupies.

LevelInstance Bandwidthplugin_pipe_sizesql_cache_entriesBase UsageBurst Usage
Low≤50 Mbps2 MB325~8 MB8~12 MB
Medium-Low51~100 Mbps10 MB6410~15 MB15~30 MB
Medium101~200 Mbps25 MB12815~20 MB30~50 MB
Medium-High201~500 Mbps50 MB25620~30 MB50~80 MB
High501~1000 Mbps128 MB51230~50 MB80~150 MB
Very High1001~2000 Mbps256 MB76850~80 MB150~300 MB
Extremely High>2000 Mbps512 MB102480~120 MB300~600 MB

Traffic statistics error margin is about 0.1G deviation per 10G. NAT mapping and instances with independent IPv6 IPs are automatically handled, no manual management needed.

However, if traffic statistics were previously enabled and need to be disabled and monitoring uninstalled later, you need to delete the monitoring in the following place first before disabling traffic statistics. This ensures complete uninstallation, otherwise it will still collect statistics in the background.

Only after enabling traffic control will the traffic monitoring management button appear here. After entering, three buttons are visible, mainly for manually synchronizing monitoring situations. Generally, if traffic monitoring is not enabled after some instances are created, manual management is not needed. If needed, just click detect traffic monitoring, which will batch detect the monitoring situation of all instances under the current instance.

Level Restrictions (Required)

Five levels are preset here, and users will be filtered through this restriction configuration when applying and claiming.

During the actual instance creation process, the node-level level restrictions will be compared with the global user level resource restrictions, taking the minimum value as the user's available resource limit on the current node.

This setting is to specialize the configuration limits of instances that users of corresponding levels can create on the current node, avoiding situations where global limits are not suitable for the current node. Global limits can be set in system configuration and are generally used for user account-level resource usage restrictions.

Advanced Settings (Optional)

Expiration time:

Prevents users from continuing to operate expired nodes. Expired nodes will be automatically frozen, at which time corresponding instances will not allow any operations but will not be automatically deleted. If a node is frozen, please clean and delete it in time.

Task concurrency control:

Default is single-threaded serial execution. At the same time, only one add/delete/modify task (corresponding to instance creation, deletion, and reset operations) will exist.

Can be changed to multi-threaded concurrent execution, where multiple add/delete/modify tasks can exist at the same time. Only when concurrent execution is used does the concurrency number setting make sense.

Serial execution is suitable for situations where the node itself has weak performance or the platform has few users. Concurrent operation is suitable for situations where the node itself has strong performance or there are many users. Please choose the mode yourself.

Personally recommend using default settings. Concurrent execution may have boundary conditions that have not been fully tested and may have bugs.

Task polling settings:

Controls whether to enable task execution and the interval for polling to check status. Generally keep default.

Operation execution rules:

Node operation mode supports API only, SSH only, and automatic switching. By default, automatic switching mode is used. Generally, there's no need to modify unless there are special requirements.

If you need to enable API operation mode, after successfully saving the node settings, click the auto-configure API button outside to execute background tasks to automatically interface with the virtualization platform API, no manual configuration required. After waiting for about 15-20 seconds, it should have been configured successfully. Click the button to see the configuration history tasks and corresponding logs. After successful configuration, click health check again to ensure the API status is green online status, and you've successfully configured and enabled the API.

Hardware Configuration (Optional)

Only lxd and incus support setting default instance parameter configurations. Generally use the defaults unless you need to manually limit certain special hardware resources; otherwise, generally no modification is needed.

If you need to set the maximum percentage of CPU usage or similar parameters, the settings here can meet your requirements.

Health Check (Required)

Click the operation button

After saving the node, after completing the health check, regular users can see the corresponding server and can apply for creation. If health check is not performed, users cannot apply for creation and claiming.

After health check, it will display whether the corresponding type of connection status is online and will automatically detect the actual total resources of the entire machine. This total resource amount is the total resource limit for non-overcommitted creation set above.

Whether the API is available does not affect specific usage. Auto-configuring the API is not mandatory.

System Images

By default, seed data will include all available images for all virtualization environments. By default, only alpine and debian images are enabled to avoid too many available images for users.

If you need images for any system, any virtualization environment, any architecture, please search and enable them yourself, otherwise users cannot select the corresponding images.

Custom image addresses are temporarily not supported. The current frontend entry function is not available. Do not manually enter images.

System Configuration

General options here won't be elaborated on. There are two configurations that need special explanation.

User Level Configuration (Required)

This limits the total account available resources for regular user levels.

When creating instances on corresponding nodes, this global configuration will work together with the node's own level configuration to filter and provide users with configurations that meet both conditions.

Instance Permission Configuration (Required)

Here you can control the minimum level required for users to perform sensitive operations. You can control the minimum user level required for instance creation, instance deletion, and instance system reset.

Configuration File

The default system configuration is already sufficient for light usage. If advanced customization is needed, you need to modify the configuration file or modify it in the administrator interface after initialization.

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

This is the complete initialization configuration file. Below we will explain the specific configuration items:

auth Authentication Configuration

yaml
auth:
     email-password: ""
     email-smtp-host: ""
     email-smtp-port: "3306"
diff --git a/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.lean.js b/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.lean.js
similarity index 95%
rename from assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.lean.js
rename to assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.lean.js
index 8a3a7470e8..bf3075c977 100644
--- a/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DUd22Iil.lean.js
+++ b/assets/en_guide_oneclickvirt_oneclickvirt_usage.md.DrKuZHOx.lean.js
@@ -1 +1 @@
-import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/resetuserpassword.CqOxip2E.png",l="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",r="/assets/edituser.5rScwK1u.png",o="/assets/switch.yK08dswR.png",p="/assets/base.DRc_UdCb.png",h="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",k="/assets/setvirt.DKwPSHcD.png",u="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",m="/assets/ipt1.BWlPVFUI.png",y="/assets/ipt2.BZjM3d2a.png",E="/assets/bw1.Cf2N9DNJ.png",b="/assets/bw2.DJ4v_edl.png",f="/assets/bw3.D087jBmd.png",v="/assets/cz.CpDm16A7.png",C="/assets/pcz.Bf32qIMb.png",F="/assets/level.ClT-FQGb.png",w="/assets/setmore1.C4F--yVn.png",x="/assets/setmore2.DbU1hlgY.png",q="/assets/autoapi1.DUEk35Fd.png",B="/assets/autoapi2.YWfGcqPd.png",D="/assets/autoapi3.PO1KiLU6.png",A="/assets/hardwareconfig.qww9PB2d.png",_="/assets/autoapi4.BMm_5qST.png",P="/assets/autoapi45.D3Ei-57N.png",z="/assets/images.CshFq7yK.png",I="/assets/userlevel.Dff1Ev4j.png",M="/assets/usercontrol.VCrXBaGX.png",H=JSON.parse('{"title":"Usage Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","filePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773143516000}'),T={name:"en/guide/oneclickvirt/oneclickvirt_usage.md"};function S(L,s,N,R,O,U){return a(),e("div",null,s[0]||(s[0]=[n("",171)]))}const W=i(T,[["render",S]]);export{H as __pageData,W as default};
+import{_ as i,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/resetuserpassword.CqOxip2E.png",l="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",r="/assets/edituser.5rScwK1u.png",o="/assets/switch.yK08dswR.png",p="/assets/base.DRc_UdCb.png",h="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",k="/assets/setvirt.DKwPSHcD.png",u="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",m="/assets/ipt1.BWlPVFUI.png",y="/assets/ipt2.BZjM3d2a.png",E="/assets/bw1.Cf2N9DNJ.png",b="/assets/bw2.DJ4v_edl.png",f="/assets/bw3.D087jBmd.png",v="/assets/cz.CpDm16A7.png",C="/assets/pcz.Bf32qIMb.png",F="/assets/level.ClT-FQGb.png",w="/assets/setmore1.C4F--yVn.png",x="/assets/setmore2.DbU1hlgY.png",q="/assets/autoapi1.DUEk35Fd.png",B="/assets/autoapi2.YWfGcqPd.png",D="/assets/autoapi3.PO1KiLU6.png",A="/assets/hardwareconfig.qww9PB2d.png",_="/assets/autoapi4.BMm_5qST.png",P="/assets/autoapi45.D3Ei-57N.png",z="/assets/images.CshFq7yK.png",I="/assets/userlevel.Dff1Ev4j.png",M="/assets/usercontrol.VCrXBaGX.png",H=JSON.parse('{"title":"Usage Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","filePath":"en/guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773196139000}'),T={name:"en/guide/oneclickvirt/oneclickvirt_usage.md"};function S(L,s,N,R,O,U){return a(),e("div",null,s[0]||(s[0]=[n("",171)]))}const W=i(T,[["render",S]]);export{H as __pageData,W as default};
diff --git a/assets/en_guide_podman_podman_build.md.BjM-TffL.js b/assets/en_guide_podman_podman_build.md.CirV5HL_.js
similarity index 99%
rename from assets/en_guide_podman_podman_build.md.BjM-TffL.js
rename to assets/en_guide_podman_podman_build.md.CirV5HL_.js
index fbadcb1c7d..0daeb5e80b 100644
--- a/assets/en_guide_podman_podman_build.md.BjM-TffL.js
+++ b/assets/en_guide_podman_podman_build.md.CirV5HL_.js
@@ -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":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_build.md","filePath":"en/guide/podman/podman_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_build.md"};function l(p,s,h,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

Preface

Two methods for provisioning containers.

Single Container Provisioning

  • Creates a single Podman container, automatically detects international or China mainland server
  • Can configure binding of an independent IPv6 address (requires host with public IPv6 and podman-ipv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_build.md","filePath":"en/guide/podman/podman_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_build.md"};function l(p,s,h,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

Preface

Two methods for provisioning containers.

Single Container Provisioning

  • Creates a single Podman container, automatically detects international or China mainland server
  • Can configure binding of an independent IPv6 address (requires host with public IPv6 and podman-ipv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
 chmod +x onepodman.sh

China Mainland

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
 chmod +x onepodman.sh

Example

Supported variables for running:

bash
./onepodman.sh <name> <cpu> <memory_mb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system] [disk_gb]

Currently supported system values:

  • debian
  • ubuntu
  • alpine
  • almalinux
  • rockylinux
  • openeuler

Default is debian if not specified.

shell
./onepodman.sh ct1 1 512 MyPassword 25000 34975 35000 n debian 0

Example container information:

AttributeValue
Container namect1
SSH usernameroot
SSH passwordMyPassword
CPU cores1
Memory512MB
SSH port25000
External/internal port range34975 to 35000
Systemdebian
Independent IPv6N
Disk sizeUnlimited

List all containers

shell
podman ps -a

Enter container

shell
podman exec -it ct1 bash

Enter Alpine container

shell
podman exec -it ct1 sh

Type exit to leave the container.

Delete container

shell
podman rm -f ct1

View container logs

shell
podman logs ct1

Batch Container Provisioning

  • Multiple runs inherit configuration and generate sequentially
  • Auto-increments container name (ct1, ct2, ...), SSH port, and public ports
  • Container information recorded to ctlog file
  • Recommended to run in screen to avoid SSH disconnection

Run

International

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/create_podman.sh
 chmod +x create_podman.sh
diff --git a/assets/en_guide_podman_podman_build.md.BjM-TffL.lean.js b/assets/en_guide_podman_podman_build.md.CirV5HL_.lean.js
similarity index 86%
rename from assets/en_guide_podman_podman_build.md.BjM-TffL.lean.js
rename to assets/en_guide_podman_podman_build.md.CirV5HL_.lean.js
index 98aa088d07..52bd8f3c79 100644
--- a/assets/en_guide_podman_podman_build.md.BjM-TffL.lean.js
+++ b/assets/en_guide_podman_podman_build.md.CirV5HL_.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_build.md","filePath":"en/guide/podman/podman_build.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_build.md"};function l(p,s,h,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}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.QPV3Ar9-.js";const c=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_build.md","filePath":"en/guide/podman/podman_build.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_build.md"};function l(p,s,h,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/en_guide_podman_podman_install.md.DqguNd1F.js b/assets/en_guide_podman_podman_install.md.BnXmYAFj.js
similarity index 99%
rename from assets/en_guide_podman_podman_install.md.DqguNd1F.js
rename to assets/en_guide_podman_podman_install.md.BnXmYAFj.js
index 0f590864ae..35f60d67f4 100644
--- a/assets/en_guide_podman_podman_install.md.DqguNd1F.js
+++ b/assets/en_guide_podman_podman_install.md.BnXmYAFj.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_install.md","filePath":"en/guide/podman/podman_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_install.md"};function l(p,s,r,o,h,d){return e(),a("div",null,s[0]||(s[0]=[n('

Preface

Install the Podman environment, including podman + network configuration + DNS liveness check service.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Installs Podman via each distribution's official packages (daemonless architecture, no Docker daemon required)
  • Automatically configures Podman network (podman-net: 172.21.0.0/16)
  • Detects public IPv6 address; if present, automatically creates podman-ipv6 network and starts NDP Responder
  • Installs DNS liveness check service (check-dns-podman.service)
  • Supports x86_64 and ARM64 architecture servers

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

TIP

After installation, run podman ps -a to verify the Podman environment is working correctly.

Uninstall Podman Environment

One-click uninstall of the entire Podman environment, including all containers, images, networks, and auxiliary files:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and Podman network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

',21)]))}const m=i(t,[["render",l]]);export{k as __pageData,m as default}; +import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_install.md","filePath":"en/guide/podman/podman_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_install.md"};function l(p,s,r,o,h,d){return e(),a("div",null,s[0]||(s[0]=[n('

Preface

Install the Podman environment, including podman + network configuration + DNS liveness check service.

Setting Up Virtual Memory

TIP

Allocate some swap space to prevent your machine from crashing.

Unit conversion: Inputting 1024 results in 1G of SWAP - virtual memory. Virtual memory occupies disk space and is automatically utilized when the physical memory is insufficient. However, this leads to high IO usage and CPU performance overhead.

It is recommended to allocate virtual memory twice the size of your physical memory.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Setup

  • Supported systems: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Installs Podman via each distribution's official packages (daemonless architecture, no Docker daemon required)
  • Automatically configures Podman network (podman-net: 172.21.0.0/16)
  • Detects public IPv6 address; if present, automatically creates podman-ipv6 network and starts NDP Responder
  • Installs DNS liveness check service (check-dns-podman.service)
  • Supports x86_64 and ARM64 architecture servers

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

TIP

After installation, run podman ps -a to verify the Podman environment is working correctly.

Uninstall Podman Environment

One-click uninstall of the entire Podman environment, including all containers, images, networks, and auxiliary files:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and Podman network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

',21)]))}const m=i(t,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_podman_podman_install.md.DqguNd1F.lean.js b/assets/en_guide_podman_podman_install.md.BnXmYAFj.lean.js similarity index 86% rename from assets/en_guide_podman_podman_install.md.DqguNd1F.lean.js rename to assets/en_guide_podman_podman_install.md.BnXmYAFj.lean.js index 0a0734afc0..b29dc17b11 100644 --- a/assets/en_guide_podman_podman_install.md.DqguNd1F.lean.js +++ b/assets/en_guide_podman_podman_install.md.BnXmYAFj.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_install.md","filePath":"en/guide/podman/podman_install.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_install.md"};function l(p,s,r,o,h,d){return e(),a("div",null,s[0]||(s[0]=[n("",21)]))}const m=i(t,[["render",l]]);export{k as __pageData,m as default}; +import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_install.md","filePath":"en/guide/podman/podman_install.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_install.md"};function l(p,s,r,o,h,d){return e(),a("div",null,s[0]||(s[0]=[n("",21)]))}const m=i(t,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/en_guide_podman_podman_precheck.md.DxYY0UwE.js b/assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.js similarity index 98% rename from assets/en_guide_podman_podman_precheck.md.DxYY0UwE.js rename to assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.js index c466bc6e01..d80e33dbd2 100644 --- a/assets/en_guide_podman_podman_precheck.md.DxYY0UwE.js +++ b/assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.js @@ -1 +1 @@ -import{_ as e,c as o,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_precheck.md","filePath":"en/guide/podman/podman_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/podman/podman_precheck.md"};function n(s,t,d,l,c,u){return i(),o("div",null,t[0]||(t[0]=[a('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

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.

WARNING

The Podman solution does not support KVM/QEMU virtual machines. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.

Feel free to give the project a Star for free support! --> https://github.com/oneclickvirt/podman

Project Features

Bulk or individual NAT server provisioning based on Podman (daemonless architecture) runtime

  • Uses each distribution's official packages to install Podman (no daemon, daemonless architecture)
  • Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to ghcr.io images
  • Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding
  • Supports lxcfs mounting (if lxcfs is installed on the host), providing real /proc view inside containers
  • Native rootless support (this solution runs as root to simplify network configuration)
  • Supports China CDN acceleration

Supported Systems

Systemamd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

Configuration Requirements

  • Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Architecture: x86_64 (amd64) or ARM64
  • Kernel must support overlay filesystem
  • Network must be able to connect to GitHub raw interface
  • At least 3GB free disk space
  • No KVM hardware support required
',12)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; +import{_ as e,c as o,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_precheck.md","filePath":"en/guide/podman/podman_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/podman/podman_precheck.md"};function n(s,t,d,l,c,u){return i(),o("div",null,t[0]||(t[0]=[a('

Introduction

The following is an introduction to the non-customized sections. Please ensure that you don't confuse them with the customized parts.

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.

WARNING

The Podman solution does not support KVM/QEMU virtual machines. It only supports Linux containers (LXC) and is suitable for environments without KVM hardware virtualization support.

Feel free to give the project a Star for free support! --> https://github.com/oneclickvirt/podman

Project Features

Bulk or individual NAT server provisioning based on Podman (daemonless architecture) runtime

  • Uses each distribution's official packages to install Podman (no daemon, daemonless architecture)
  • Uses self-compiled base images (stored in GitHub Releases), with offline loading prioritized and fallback to ghcr.io images
  • Each container comes with 1 external SSH port, 25 consistent internal/external ports, with optional independent IPv6 address binding
  • Supports lxcfs mounting (if lxcfs is installed on the host), providing real /proc view inside containers
  • Native rootless support (this solution runs as root to simplify network configuration)
  • Supports China CDN acceleration

Supported Systems

Systemamd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

Configuration Requirements

  • Host OS: Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, CentOS 9+, Alpine, Arch
  • Architecture: x86_64 (amd64) or ARM64
  • Kernel must support overlay filesystem
  • Network must be able to connect to GitHub raw interface
  • At least 3GB free disk space
  • No KVM hardware support required
',12)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_podman_podman_precheck.md.DxYY0UwE.lean.js b/assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.lean.js similarity index 87% rename from assets/en_guide_podman_podman_precheck.md.DxYY0UwE.lean.js rename to assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.lean.js index 56901ea1d2..e710ccb8d5 100644 --- a/assets/en_guide_podman_podman_precheck.md.DxYY0UwE.lean.js +++ b/assets/en_guide_podman_podman_precheck.md.Bsk1Ohm8.lean.js @@ -1 +1 @@ -import{_ as e,c as o,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_precheck.md","filePath":"en/guide/podman/podman_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/podman/podman_precheck.md"};function n(s,t,d,l,c,u){return i(),o("div",null,t[0]||(t[0]=[a("",12)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; +import{_ as e,c as o,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_precheck.md","filePath":"en/guide/podman/podman_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/podman/podman_precheck.md"};function n(s,t,d,l,c,u){return i(),o("div",null,t[0]||(t[0]=[a("",12)]))}const m=e(r,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.js b/assets/en_guide_podman_podman_qa.md._Zd6OG2N.js similarity index 99% rename from assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.js rename to assets/en_guide_podman_podman_qa.md._Zd6OG2N.js index a3a62d3eeb..c2363f6ae2 100644 --- a/assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.js +++ b/assets/en_guide_podman_podman_qa.md._Zd6OG2N.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_qa.md","filePath":"en/guide/podman/podman_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_qa.md"};function l(h,s,p,d,r,o){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

podman: command not found

The Podman environment is not correctly installed. Re-run the installation script:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

Container cannot access external network (IPv4)

Check if iptables NAT rules exist:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.21

If not present, add manually:

shell
iptables -t nat -A POSTROUTING -s 172.21.0.0/16 ! -d 172.21.0.0/16 -j MASQUERADE
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_qa.md","filePath":"en/guide/podman/podman_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_qa.md"};function l(h,s,p,d,r,o){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

podman: command not found

The Podman environment is not correctly installed. Re-run the installation script:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

Container cannot access external network (IPv4)

Check if iptables NAT rules exist:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.21

If not present, add manually:

shell
iptables -t nat -A POSTROUTING -s 172.21.0.0/16 ! -d 172.21.0.0/16 -j MASQUERADE
 iptables -A FORWARD -s 172.21.0.0/16 -j ACCEPT
 iptables -A FORWARD -d 172.21.0.0/16 -j ACCEPT

Container IPv6 not working

  1. Confirm the host has a public IPv6 address
  2. Check if the podman-ipv6 network exists:
shell
podman network ls | grep ipv6
  1. Check if the ndpresponder container is running:
shell
podman ps | grep ndpresponder

Podman vs Docker command comparison

FunctionDocker commandPodman command
List containersdocker ps -apodman ps -a
Enter containerdocker exec -itpodman exec -it
Delete containerdocker rm -fpodman rm -f
List imagesdocker imagespodman images
Delete imagedocker rmipodman rmi
View logsdocker logspodman logs

Image pull failed

Images are prioritized from GitHub Releases as offline tar packages, with fallback to ghcr.io:

shell
ghcr.io/oneclickvirt/podman:<os>-amd64
 ghcr.io/oneclickvirt/podman:<os>-arm64
diff --git a/assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.lean.js b/assets/en_guide_podman_podman_qa.md._Zd6OG2N.lean.js
similarity index 86%
rename from assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.lean.js
rename to assets/en_guide_podman_podman_qa.md._Zd6OG2N.lean.js
index d39d037a10..de9028e18a 100644
--- a/assets/en_guide_podman_podman_qa.md.DM9Gt1Vh.lean.js
+++ b/assets/en_guide_podman_podman_qa.md._Zd6OG2N.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_qa.md","filePath":"en/guide/podman/podman_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/podman/podman_qa.md"};function l(h,s,p,d,r,o){return e(),a("div",null,s[0]||(s[0]=[n("",37)]))}const m=i(t,[["render",l]]);export{c as __pageData,m as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/podman/podman_qa.md","filePath":"en/guide/podman/podman_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/podman/podman_qa.md"};function l(h,s,p,d,r,o){return e(),a("div",null,s[0]||(s[0]=[n("",37)]))}const m=i(t,[["render",l]]);export{c as __pageData,m as default};
diff --git a/assets/en_guide_podman_podman_thanks.md.CzETp0OB.js b/assets/en_guide_podman_podman_thanks.md.CbSsZZj7.js
similarity index 96%
rename from assets/en_guide_podman_podman_thanks.md.CzETp0OB.js
rename to assets/en_guide_podman_podman_thanks.md.CbSsZZj7.js
index aa0e51b574..dd4c0a5f8d 100644
--- a/assets/en_guide_podman_podman_thanks.md.CzETp0OB.js
+++ b/assets/en_guide_podman_podman_thanks.md.CbSsZZj7.js
@@ -1 +1 @@
-import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/podman/podman_thanks.md","filePath":"en/guide/podman/podman_thanks.md","lastUpdated":1773143516000}'),o={name:"en/guide/podman/podman_thanks.md"};function s(p,e,i,c,h,l){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/containers/podman

https://github.com/containers/buildah

https://github.com/containers/netavark

https://github.com/containers/crun

https://github.com/opencontainers/runc

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/

',10)]))}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/podman/podman_thanks.md","filePath":"en/guide/podman/podman_thanks.md","lastUpdated":1773196139000}'),o={name:"en/guide/podman/podman_thanks.md"};function s(p,e,i,c,h,l){return a(),r("div",null,e[0]||(e[0]=[n('

Acknowledgements

https://github.com/containers/podman

https://github.com/containers/buildah

https://github.com/containers/netavark

https://github.com/containers/crun

https://github.com/opencontainers/runc

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/

',10)]))}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_podman_podman_thanks.md.CzETp0OB.lean.js b/assets/en_guide_podman_podman_thanks.md.CbSsZZj7.lean.js similarity index 86% rename from assets/en_guide_podman_podman_thanks.md.CzETp0OB.lean.js rename to assets/en_guide_podman_podman_thanks.md.CbSsZZj7.lean.js index 6494ff5bbe..210ca66373 100644 --- a/assets/en_guide_podman_podman_thanks.md.CzETp0OB.lean.js +++ b/assets/en_guide_podman_podman_thanks.md.CbSsZZj7.lean.js @@ -1 +1 @@ -import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/podman/podman_thanks.md","filePath":"en/guide/podman/podman_thanks.md","lastUpdated":1773143516000}'),o={name:"en/guide/podman/podman_thanks.md"};function s(p,e,i,c,h,l){return a(),r("div",null,e[0]||(e[0]=[n("",10)]))}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; +import{_ as t,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/podman/podman_thanks.md","filePath":"en/guide/podman/podman_thanks.md","lastUpdated":1773196139000}'),o={name:"en/guide/podman/podman_thanks.md"};function s(p,e,i,c,h,l){return a(),r("div",null,e[0]||(e[0]=[n("",10)]))}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_pve_images_readme.md.Cc_yQGo9.js b/assets/en_guide_pve_images_readme.md.DvtVh_YV.js similarity index 86% rename from assets/en_guide_pve_images_readme.md.Cc_yQGo9.js rename to assets/en_guide_pve_images_readme.md.DvtVh_YV.js index 6da751ce34..a281681ea9 100644 --- a/assets/en_guide_pve_images_readme.md.Cc_yQGo9.js +++ b/assets/en_guide_pve_images_readme.md.DvtVh_YV.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/images/readme.md","filePath":"en/guide/pve/images/readme.md","lastUpdated":1773143516000}'),d={name:"en/guide/pve/images/readme.md"};function n(o,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",n]]);export{u as __pageData,_ as default}; +import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/images/readme.md","filePath":"en/guide/pve/images/readme.md","lastUpdated":1773196139000}'),d={name:"en/guide/pve/images/readme.md"};function n(o,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/en_guide_pve_images_readme.md.Cc_yQGo9.lean.js b/assets/en_guide_pve_images_readme.md.DvtVh_YV.lean.js similarity index 86% rename from assets/en_guide_pve_images_readme.md.Cc_yQGo9.lean.js rename to assets/en_guide_pve_images_readme.md.DvtVh_YV.lean.js index 6da751ce34..a281681ea9 100644 --- a/assets/en_guide_pve_images_readme.md.Cc_yQGo9.lean.js +++ b/assets/en_guide_pve_images_readme.md.DvtVh_YV.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/images/readme.md","filePath":"en/guide/pve/images/readme.md","lastUpdated":1773143516000}'),d={name:"en/guide/pve/images/readme.md"};function n(o,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",n]]);export{u as __pageData,_ as default}; +import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/images/readme.md","filePath":"en/guide/pve/images/readme.md","lastUpdated":1773196139000}'),d={name:"en/guide/pve/images/readme.md"};function n(o,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",n]]);export{u as __pageData,_ as default}; diff --git a/assets/en_guide_pve_pve_android.md.CkHMSJua.js b/assets/en_guide_pve_pve_android.md.BZoivCDl.js similarity index 99% rename from assets/en_guide_pve_pve_android.md.CkHMSJua.js rename to assets/en_guide_pve_pve_android.md.BZoivCDl.js index 49fbf51e3f..c20d770d83 100644 --- a/assets/en_guide_pve_pve_android.md.CkHMSJua.js +++ b/assets/en_guide_pve_pve_android.md.BZoivCDl.js @@ -1 +1 @@ -import{_ as t,c as o,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/a1.DvgNELwZ.png",n="/assets/a2.BQniQEw_.png",r="/assets/a3.DHUpjnAe.png",p="/assets/a4.BtVJtyBL.png",c="/assets/a5.CamDlEuL.png",l="/assets/a6.auUigeOH.png",d="/assets/a7.3_Is3HF1.png",h="/assets/a8.CkyIulFy.png",g="/assets/a9.Dg58RrTs.png",m="/assets/a10.CPK2ZJEJ.png",u="/assets/a11.Bq6vmveu.png",y="/assets/a12.bStrZLWw.png",f="/assets/a13.DRz8WTJR.png",_="/assets/a14.D56M6gMb.png",b="/assets/a15.CtjmUhal.png",k="/assets/a16.BL0_sgNg.png",z="/assets/a17.B9keXK9k.png",w="/assets/a18.Bu92JFv5.png",v="/assets/a19.DZjr60Xs.png",x="/assets/a20.CesdkIR_.png",C="/assets/a21.BO8sy8n4.png",I="/assets/a22.COjD9r-B.png",B="/assets/a23.BxEEAckp.png",S="/assets/a24.BrCKYLHX.png",A="/assets/a25.CUB6zoiS.png",T="/assets/a26.zvaFRs59.png",P="/assets/ar.Dy_5EjFU.png",F="/assets/a27.QkS9Cjl7.png",O="/assets/a31.BiCzGFMR.png",q="/assets/a32.54sdf1AZ.png",D="/assets/a33.QYBAXO71.png",E="/assets/a34.BBqAz_kr.png",V="/assets/a35.B8NF_iJX.png",U="/assets/a36.CPvsggxV.png",M="/assets/a37.DJRI7pv9.png",R="/assets/a38.BhfuTk-3.png",K="/assets/a39.BNtfZ4xd.png",N="/assets/a40.DTfyEQe2.png",G="/assets/a41.Cb6MjiUm.png",j="/assets/a42.Du63tHI8.png",H="/assets/a43.Cxy9Fqxr.png",L="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Y="/assets/b2.BnvPQMj3.png",Q="/assets/b3.DPn2dzFl.png",X="/assets/b4.JBQupWN9.png",Z="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ee="/assets/b7.5Fkbt05C.png",te="/assets/b8.BXlK1Dnb.png",oe="/assets/b9.CaK5eLKm.png",ae="/assets/b10.DGHfd73s.png",se="/assets/b11.DKZjwgY8.png",ie="/assets/b12.BISDj2Ri.png",ne="/assets/b13.WGr5jMeK.png",re="/assets/b14.BqBpvoFk.png",pe="/assets/b15.Cd3Rj7ju.png",ce="/assets/b16.BR7AHi1X.png",le="/assets/b17.Cn1C4e1e.png",de="/assets/b18.ElAa2UCQ.png",he="/assets/b19.BwC-oHOW.png",ge="/assets/b20.Dj-0rOwy.png",me="/assets/b21.CYRPkSXE.png",ue="/assets/b22.BH7kRZ3Z.png",ye="/assets/b23.JVX-KOL7.png",fe="/assets/b24.a2fv8lkf.png",_e="/assets/b25.BJrNgkiA.png",be="/assets/b26.5bTO5HK5.png",ke="/assets/b27.BSRz6moE.png",ze="/assets/b28.WNjJaEPB.png",we="/assets/b29.Bs69Ykqp.png",ve="/assets/b30.B96bh_Ou.png",xe="/assets/b31.BBIAIScF.png",Ce="/assets/b32.8G5Xy9mr.png",Ie="/assets/b33.RYxcR7vu.png",Be="/assets/b34.Dw6MyLex.png",Se="/assets/b35.DUCPsVIG.png",Ae="/assets/b36.7aKaNaLh.png",Te="/assets/b37.B5CHAJzN.png",Pe="/assets/br.CyzpZwsx.png",Fe="/assets/b38.Pnnij22W.png",Oe="/assets/b39.ajiHDdbx.png",qe="/assets/b40.B6FTkFUT.png",De="/assets/b41.DcCdod5l.png",Ee="/assets/b42.CT1JvTLX.png",Ve="/assets/b43.HthhPs5o.png",Ue="/assets/b44.C9NeP-UC.png",Me="/assets/b45.BWxBBH-l.png",Re="/assets/b46.B6Ds58im.png",Ye=JSON.parse('{"title":"Android Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_android.md","filePath":"en/guide/pve/pve_android.md","lastUpdated":1773143516000}'),Ke={name:"en/guide/pve/pve_android.md"};function Ne(Ge,e,je,He,Le,Je){return a(),o("div",null,e[0]||(e[0]=[s('

Android Virtual Machine

Android System Image Download

Download links for Android system version 9 and earlier:

International

https://www.fosshub.com/Android-x86.html

https://sourceforge.net/projects/android-x86/files/

Domestic (China)

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/

Download links for Android system version 10 and later:

https://blissos.org/index.html#download

https://sourceforge.net/projects/blissos-x86/files/Official/

Virtual Machine Setup

Setting up an Android Virtual Machine with version 9 and earlier images

This guide demonstrates using:

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/71931/android-x86_64-9.0-rc2.iso

as an example

1

Template Configuration

Create a virtual machine with VMID 100 and select the corresponding storage disk

2

Select the Android image, then choose Linux for Type and choose an option with version 2.6 for Version

3

Select Vmware compatible for Graphic card, other options are default as shown

4

Choose SATA for disk format, allocate at least 30GB of disk space (size can be chosen based on your needs)

5

CPU count should be at least 2 cores

If your host machine supports nested virtualization, choose host for CPU type (verified to work)

If your host machine doesn't support nested virtualization, choose qemu64 for CPU type, and after creating the template, go to Options and uncheck KVM hardware virtualization before starting the virtual machine (no guarantee that system initialization will work properly)

6

Memory should be at least 4GB, enter at least 4096

7

Select vmbr1 for the network bridge, choose VirtIO (paravirtualized) for Model, and uncheck Firewall

8

After clicking the continue button, the template is successfully created. You need to manually start it and enter the VNC interface

9

System Installation

After entering the boot menu, select the option starting with Installation

10

Then you need to create disk partitions. If you can't select it, press the keyboard button 'c' to select it

11

Choose not to use GPT format

12

When the empty disk is displayed, select New

13

Select partition type Primary

14

Then you'll be prompted to specify the size of the space. Just press Enter to use all available space

15

Then select Flags, move to Bootable, press Enter until Boot appears under Flags

16

Then move to Write and press Enter to write changes

17

You'll be asked to confirm whether to continue. Type yes and press Enter to continue

18

After a progress bar completes, you'll return to the initial menu. Select Quit to exit the menu, everything is now ready

19

Then you'll return to the UI interface. Use the previously initialized disk and select the OK button

20

Use the arrow keys to select ext4 file system type, then select the OK button

21

Confirm formatting by selecting the Yes button

22

Confirm GRUB boot installation by selecting the OK button

23

Confirm the file system is readable and writable by selecting the OK button

24

After a progress bar runs for some time, it will show that installation was successful. Select Reboot and the OK button

25

After a while, you'll enter the Android logo screen

26

Removing the Image

Then there will be a black screen. If it's still black after 3-5 minutes, execute qm stop 100 on the host machine, then start removing the image file.

Remove the installed ISO file by manually clicking on the corresponding CD in the Hardware section of the ProxmoxVE web interface and selecting Remove

ar

Then execute qm start 100 on the host machine again, and you should enter the Android system initialization interface

System Initialization

In the initialization interface, select the language and click the confirm button

27

It will try to connect to WiFi. Since our PVE installation uses a completely static network configuration, just skip this and set it up later

31

Click the next button to confirm the time settings

32

Click to cancel screen protection, confirm to skip again

33

After a period of black screen, the main screen application selection will appear. If this interface doesn't appear after waiting 3-5 minutes, restart the virtual machine as before, and it should display after entering VNC

Select Quickstep

34

Network Settings

After entering the desktop, you need to set up the network. Click the settings icon in the upper left corner

35

A dropdown appears, click and hold to pull down

36

Click the gear button

37

Enter Network & Internet settings

38

Double-click WIFI with the left mouse button

39

Modify the detected VirtWIFI. Right-click to bring up the selection box, then click Modify network

40

Advanced options appear, click to open hidden options

41

Configure the network settings as shown

IP address 172.16.1.xxx (replace xxx with your desired IP, I used 100 because my vmid is 100 for convenience)

Subnet mask 24

Default gateway 172.16.1.1

DNS 8.8.8.8 or 144.144.144.144

Then click the save button

42

At this point, the settings may still not be applied. Turn off WiFi and then turn it back on, it should then show as connected

43

Then exit to the main interface, click on Google Chrome, and try to open a webpage

44

You can see that opening this guide's URL works without problems, proving that the network is connected

45

Setting up an Android Virtual Machine with version 10 and later images

This guide demonstrates using:

https://psychz.dl.sourceforge.net/project/blissos-x86/Official/BlissOS15/Gapps/Generic/Bliss-v15.9.2-x86_64-OFFICIAL-gapps-20241012.iso?viasf=1

as an example

1

Template Configuration

The host machine needs to execute the following command to install graphics environment dependencies

shell
apt install libgl1 libegl1 -y

Then start creating the virtual machine by clicking the Create VM button in the upper right corner. Fill in VMID, Name, Resource Pool

2

Select the Android image, then choose Linux for Type and an option with version 2.6 for Version

3

If the host machine has a GPU, select VirGL GPU for Graphic card.

If the host machine doesn't have a GPU, select VirtIO or Vmware compatible for Graphic card.

Select q35 for Machine, select OVMF (UEFI) for BIOS, and select local for EFI Storage.

4

Choose SATA for disk format. How much disk space to allocate is up to you, but at least 30GB is recommended

5

CPU count should be at least 2 cores

If your host machine supports nested virtualization, choose host for CPU type (verified to work)

If your host machine doesn't support nested virtualization, choose qemu64 for CPU type, and after creating the template, go to Options and uncheck KVM hardware virtualization before starting the virtual machine (no guarantee that system initialization will work properly)

6

Memory should be at least 4GB, enter at least 4096

7

Select vmbr1 for the network bridge, choose VirtIO (paravirtualized) for Model, and uncheck Firewall

8

After clicking the continue button, the template is successfully created. You need to manually start it and enter the VNC interface.

System Installation

After entering the boot menu, select the option ending with Installation

9

Then you need to create disk partitions. If you can't select it, press the keyboard button 'c' to select it.

10

Choose not to use GPT format, continue using cfdisk format.

11

When the format selection box appears, select gpt.

12

When the empty disk is displayed, select New.

13

Because you need to create an EFI partition, you need to change the size rather than using the default. Change the number to 1 to allocate 1GB of disk space, then press Enter.

14

Then you'll return to the menu bar. Use the arrow keys to select Type, then press Enter to choose the format type for the partition

15

Use the arrow keys to select the first option EFI System, then press Enter

16

Now you're back at the menu bar. In the upper half of the page, you can see the specific partition size and format

17

Then press the down arrow key to select the next empty partition line

18

Select New from the menu bar, then press Enter

19

Here you need to fill in the partition size. Match it with the empty partition size shown in the upper right corner, then press Enter.

20

Return to the menu bar, select Write, press Enter to write the partition.

21

You'll be prompted to enter yes to confirm. Enter it and press Enter.

22

After a progress bar runs, you should return to the menu bar. Select Quit to exit the menu, everything is now ready

23

Then you'll return to the UI interface. Use the previously initialized 1GB disk and select the OK button

24

Use the arrow keys to select fat32 file system type, then select the OK button

25

Confirm not to modify the name by selecting the OK button

26

Confirm formatting by selecting the Yes button

27

Then you'll return to the initial UI bar. Select the second partition that is not 1GB in size and select the OK button

28

Use the arrow keys to select ext4 file system type, then select the OK button

29

Confirm not to modify the name by selecting the OK button

30

Confirm formatting by selecting the Yes button

31

Choose not to use extra space for updates by selecting the No button

32

Confirm GRUB2 EFI BootLoader by selecting the OK button

33

After a progress bar runs for some time, it will show that installation was successful. Select Reboot and the OK button.

34

System Initialization

After a while, you'll enter the logo screen.

35

After some more time, you should enter the initial Android interface. You'll see a popup and the time. Hold the left mouse button and swipe up

36

The main screen application selection will appear. Select Quickstep

If this interface doesn't appear after waiting 3-5 minutes, restart the virtual machine, and it should display after entering VNC

37

Removing the Image

After the Android interface appears, execute qm stop 100 on the host machine, then start removing the image file.

Remove the installed ISO file by manually clicking on the corresponding CD in the Hardware section of the ProxmoxVE web interface and selecting Remove

br

Then execute qm start 100 on the host machine again, and you should enter the system's initial interface.

Network Settings

After entering the desktop, you need to set up the network. Hold the left mouse button in the indicated position and swipe up

38

A bunch of applications will pop up. Find the one called Bliss Ethernet Manager and click to open it

39

Click to open IP Assignment, select Static type, click the OK button to confirm

40

Click to open IP Address, enter 172.16.1.xxx/24 (I used 100 for xxx because my virtual machine VMID is 100 for easy identification), click the OK button to confirm

41

Click to open Gateway Address, enter 172.16.1.1, click the OK button to confirm

42

Click to open DNS Address, enter 8.8.8.8, click the OK button to confirm

43

Then in the application interface, click Interface Up and Refresh, then press the exit key on the keyboard to exit the program

44

Open the browser in the main interface to verify that the network is working properly

45

You can see that opening this guide works without problems, the network is functioning

46

',228)]))}const Qe=t(Ke,[["render",Ne]]);export{Ye as __pageData,Qe as default}; +import{_ as t,c as o,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/a1.DvgNELwZ.png",n="/assets/a2.BQniQEw_.png",r="/assets/a3.DHUpjnAe.png",p="/assets/a4.BtVJtyBL.png",c="/assets/a5.CamDlEuL.png",l="/assets/a6.auUigeOH.png",d="/assets/a7.3_Is3HF1.png",h="/assets/a8.CkyIulFy.png",g="/assets/a9.Dg58RrTs.png",m="/assets/a10.CPK2ZJEJ.png",u="/assets/a11.Bq6vmveu.png",y="/assets/a12.bStrZLWw.png",f="/assets/a13.DRz8WTJR.png",_="/assets/a14.D56M6gMb.png",b="/assets/a15.CtjmUhal.png",k="/assets/a16.BL0_sgNg.png",z="/assets/a17.B9keXK9k.png",w="/assets/a18.Bu92JFv5.png",v="/assets/a19.DZjr60Xs.png",x="/assets/a20.CesdkIR_.png",C="/assets/a21.BO8sy8n4.png",I="/assets/a22.COjD9r-B.png",B="/assets/a23.BxEEAckp.png",S="/assets/a24.BrCKYLHX.png",A="/assets/a25.CUB6zoiS.png",T="/assets/a26.zvaFRs59.png",P="/assets/ar.Dy_5EjFU.png",F="/assets/a27.QkS9Cjl7.png",O="/assets/a31.BiCzGFMR.png",q="/assets/a32.54sdf1AZ.png",D="/assets/a33.QYBAXO71.png",E="/assets/a34.BBqAz_kr.png",V="/assets/a35.B8NF_iJX.png",U="/assets/a36.CPvsggxV.png",M="/assets/a37.DJRI7pv9.png",R="/assets/a38.BhfuTk-3.png",K="/assets/a39.BNtfZ4xd.png",N="/assets/a40.DTfyEQe2.png",G="/assets/a41.Cb6MjiUm.png",j="/assets/a42.Du63tHI8.png",H="/assets/a43.Cxy9Fqxr.png",L="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Y="/assets/b2.BnvPQMj3.png",Q="/assets/b3.DPn2dzFl.png",X="/assets/b4.JBQupWN9.png",Z="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ee="/assets/b7.5Fkbt05C.png",te="/assets/b8.BXlK1Dnb.png",oe="/assets/b9.CaK5eLKm.png",ae="/assets/b10.DGHfd73s.png",se="/assets/b11.DKZjwgY8.png",ie="/assets/b12.BISDj2Ri.png",ne="/assets/b13.WGr5jMeK.png",re="/assets/b14.BqBpvoFk.png",pe="/assets/b15.Cd3Rj7ju.png",ce="/assets/b16.BR7AHi1X.png",le="/assets/b17.Cn1C4e1e.png",de="/assets/b18.ElAa2UCQ.png",he="/assets/b19.BwC-oHOW.png",ge="/assets/b20.Dj-0rOwy.png",me="/assets/b21.CYRPkSXE.png",ue="/assets/b22.BH7kRZ3Z.png",ye="/assets/b23.JVX-KOL7.png",fe="/assets/b24.a2fv8lkf.png",_e="/assets/b25.BJrNgkiA.png",be="/assets/b26.5bTO5HK5.png",ke="/assets/b27.BSRz6moE.png",ze="/assets/b28.WNjJaEPB.png",we="/assets/b29.Bs69Ykqp.png",ve="/assets/b30.B96bh_Ou.png",xe="/assets/b31.BBIAIScF.png",Ce="/assets/b32.8G5Xy9mr.png",Ie="/assets/b33.RYxcR7vu.png",Be="/assets/b34.Dw6MyLex.png",Se="/assets/b35.DUCPsVIG.png",Ae="/assets/b36.7aKaNaLh.png",Te="/assets/b37.B5CHAJzN.png",Pe="/assets/br.CyzpZwsx.png",Fe="/assets/b38.Pnnij22W.png",Oe="/assets/b39.ajiHDdbx.png",qe="/assets/b40.B6FTkFUT.png",De="/assets/b41.DcCdod5l.png",Ee="/assets/b42.CT1JvTLX.png",Ve="/assets/b43.HthhPs5o.png",Ue="/assets/b44.C9NeP-UC.png",Me="/assets/b45.BWxBBH-l.png",Re="/assets/b46.B6Ds58im.png",Ye=JSON.parse('{"title":"Android Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_android.md","filePath":"en/guide/pve/pve_android.md","lastUpdated":1773196139000}'),Ke={name:"en/guide/pve/pve_android.md"};function Ne(Ge,e,je,He,Le,Je){return a(),o("div",null,e[0]||(e[0]=[s('

Android Virtual Machine

Android System Image Download

Download links for Android system version 9 and earlier:

International

https://www.fosshub.com/Android-x86.html

https://sourceforge.net/projects/android-x86/files/

Domestic (China)

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/

Download links for Android system version 10 and later:

https://blissos.org/index.html#download

https://sourceforge.net/projects/blissos-x86/files/Official/

Virtual Machine Setup

Setting up an Android Virtual Machine with version 9 and earlier images

This guide demonstrates using:

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/71931/android-x86_64-9.0-rc2.iso

as an example

1

Template Configuration

Create a virtual machine with VMID 100 and select the corresponding storage disk

2

Select the Android image, then choose Linux for Type and choose an option with version 2.6 for Version

3

Select Vmware compatible for Graphic card, other options are default as shown

4

Choose SATA for disk format, allocate at least 30GB of disk space (size can be chosen based on your needs)

5

CPU count should be at least 2 cores

If your host machine supports nested virtualization, choose host for CPU type (verified to work)

If your host machine doesn't support nested virtualization, choose qemu64 for CPU type, and after creating the template, go to Options and uncheck KVM hardware virtualization before starting the virtual machine (no guarantee that system initialization will work properly)

6

Memory should be at least 4GB, enter at least 4096

7

Select vmbr1 for the network bridge, choose VirtIO (paravirtualized) for Model, and uncheck Firewall

8

After clicking the continue button, the template is successfully created. You need to manually start it and enter the VNC interface

9

System Installation

After entering the boot menu, select the option starting with Installation

10

Then you need to create disk partitions. If you can't select it, press the keyboard button 'c' to select it

11

Choose not to use GPT format

12

When the empty disk is displayed, select New

13

Select partition type Primary

14

Then you'll be prompted to specify the size of the space. Just press Enter to use all available space

15

Then select Flags, move to Bootable, press Enter until Boot appears under Flags

16

Then move to Write and press Enter to write changes

17

You'll be asked to confirm whether to continue. Type yes and press Enter to continue

18

After a progress bar completes, you'll return to the initial menu. Select Quit to exit the menu, everything is now ready

19

Then you'll return to the UI interface. Use the previously initialized disk and select the OK button

20

Use the arrow keys to select ext4 file system type, then select the OK button

21

Confirm formatting by selecting the Yes button

22

Confirm GRUB boot installation by selecting the OK button

23

Confirm the file system is readable and writable by selecting the OK button

24

After a progress bar runs for some time, it will show that installation was successful. Select Reboot and the OK button

25

After a while, you'll enter the Android logo screen

26

Removing the Image

Then there will be a black screen. If it's still black after 3-5 minutes, execute qm stop 100 on the host machine, then start removing the image file.

Remove the installed ISO file by manually clicking on the corresponding CD in the Hardware section of the ProxmoxVE web interface and selecting Remove

ar

Then execute qm start 100 on the host machine again, and you should enter the Android system initialization interface

System Initialization

In the initialization interface, select the language and click the confirm button

27

It will try to connect to WiFi. Since our PVE installation uses a completely static network configuration, just skip this and set it up later

31

Click the next button to confirm the time settings

32

Click to cancel screen protection, confirm to skip again

33

After a period of black screen, the main screen application selection will appear. If this interface doesn't appear after waiting 3-5 minutes, restart the virtual machine as before, and it should display after entering VNC

Select Quickstep

34

Network Settings

After entering the desktop, you need to set up the network. Click the settings icon in the upper left corner

35

A dropdown appears, click and hold to pull down

36

Click the gear button

37

Enter Network & Internet settings

38

Double-click WIFI with the left mouse button

39

Modify the detected VirtWIFI. Right-click to bring up the selection box, then click Modify network

40

Advanced options appear, click to open hidden options

41

Configure the network settings as shown

IP address 172.16.1.xxx (replace xxx with your desired IP, I used 100 because my vmid is 100 for convenience)

Subnet mask 24

Default gateway 172.16.1.1

DNS 8.8.8.8 or 144.144.144.144

Then click the save button

42

At this point, the settings may still not be applied. Turn off WiFi and then turn it back on, it should then show as connected

43

Then exit to the main interface, click on Google Chrome, and try to open a webpage

44

You can see that opening this guide's URL works without problems, proving that the network is connected

45

Setting up an Android Virtual Machine with version 10 and later images

This guide demonstrates using:

https://psychz.dl.sourceforge.net/project/blissos-x86/Official/BlissOS15/Gapps/Generic/Bliss-v15.9.2-x86_64-OFFICIAL-gapps-20241012.iso?viasf=1

as an example

1

Template Configuration

The host machine needs to execute the following command to install graphics environment dependencies

shell
apt install libgl1 libegl1 -y

Then start creating the virtual machine by clicking the Create VM button in the upper right corner. Fill in VMID, Name, Resource Pool

2

Select the Android image, then choose Linux for Type and an option with version 2.6 for Version

3

If the host machine has a GPU, select VirGL GPU for Graphic card.

If the host machine doesn't have a GPU, select VirtIO or Vmware compatible for Graphic card.

Select q35 for Machine, select OVMF (UEFI) for BIOS, and select local for EFI Storage.

4

Choose SATA for disk format. How much disk space to allocate is up to you, but at least 30GB is recommended

5

CPU count should be at least 2 cores

If your host machine supports nested virtualization, choose host for CPU type (verified to work)

If your host machine doesn't support nested virtualization, choose qemu64 for CPU type, and after creating the template, go to Options and uncheck KVM hardware virtualization before starting the virtual machine (no guarantee that system initialization will work properly)

6

Memory should be at least 4GB, enter at least 4096

7

Select vmbr1 for the network bridge, choose VirtIO (paravirtualized) for Model, and uncheck Firewall

8

After clicking the continue button, the template is successfully created. You need to manually start it and enter the VNC interface.

System Installation

After entering the boot menu, select the option ending with Installation

9

Then you need to create disk partitions. If you can't select it, press the keyboard button 'c' to select it.

10

Choose not to use GPT format, continue using cfdisk format.

11

When the format selection box appears, select gpt.

12

When the empty disk is displayed, select New.

13

Because you need to create an EFI partition, you need to change the size rather than using the default. Change the number to 1 to allocate 1GB of disk space, then press Enter.

14

Then you'll return to the menu bar. Use the arrow keys to select Type, then press Enter to choose the format type for the partition

15

Use the arrow keys to select the first option EFI System, then press Enter

16

Now you're back at the menu bar. In the upper half of the page, you can see the specific partition size and format

17

Then press the down arrow key to select the next empty partition line

18

Select New from the menu bar, then press Enter

19

Here you need to fill in the partition size. Match it with the empty partition size shown in the upper right corner, then press Enter.

20

Return to the menu bar, select Write, press Enter to write the partition.

21

You'll be prompted to enter yes to confirm. Enter it and press Enter.

22

After a progress bar runs, you should return to the menu bar. Select Quit to exit the menu, everything is now ready

23

Then you'll return to the UI interface. Use the previously initialized 1GB disk and select the OK button

24

Use the arrow keys to select fat32 file system type, then select the OK button

25

Confirm not to modify the name by selecting the OK button

26

Confirm formatting by selecting the Yes button

27

Then you'll return to the initial UI bar. Select the second partition that is not 1GB in size and select the OK button

28

Use the arrow keys to select ext4 file system type, then select the OK button

29

Confirm not to modify the name by selecting the OK button

30

Confirm formatting by selecting the Yes button

31

Choose not to use extra space for updates by selecting the No button

32

Confirm GRUB2 EFI BootLoader by selecting the OK button

33

After a progress bar runs for some time, it will show that installation was successful. Select Reboot and the OK button.

34

System Initialization

After a while, you'll enter the logo screen.

35

After some more time, you should enter the initial Android interface. You'll see a popup and the time. Hold the left mouse button and swipe up

36

The main screen application selection will appear. Select Quickstep

If this interface doesn't appear after waiting 3-5 minutes, restart the virtual machine, and it should display after entering VNC

37

Removing the Image

After the Android interface appears, execute qm stop 100 on the host machine, then start removing the image file.

Remove the installed ISO file by manually clicking on the corresponding CD in the Hardware section of the ProxmoxVE web interface and selecting Remove

br

Then execute qm start 100 on the host machine again, and you should enter the system's initial interface.

Network Settings

After entering the desktop, you need to set up the network. Hold the left mouse button in the indicated position and swipe up

38

A bunch of applications will pop up. Find the one called Bliss Ethernet Manager and click to open it

39

Click to open IP Assignment, select Static type, click the OK button to confirm

40

Click to open IP Address, enter 172.16.1.xxx/24 (I used 100 for xxx because my virtual machine VMID is 100 for easy identification), click the OK button to confirm

41

Click to open Gateway Address, enter 172.16.1.1, click the OK button to confirm

42

Click to open DNS Address, enter 8.8.8.8, click the OK button to confirm

43

Then in the application interface, click Interface Up and Refresh, then press the exit key on the keyboard to exit the program

44

Open the browser in the main interface to verify that the network is working properly

45

You can see that opening this guide works without problems, the network is functioning

46

',228)]))}const Qe=t(Ke,[["render",Ne]]);export{Ye as __pageData,Qe as default}; diff --git a/assets/en_guide_pve_pve_android.md.CkHMSJua.lean.js b/assets/en_guide_pve_pve_android.md.BZoivCDl.lean.js similarity index 97% rename from assets/en_guide_pve_pve_android.md.CkHMSJua.lean.js rename to assets/en_guide_pve_pve_android.md.BZoivCDl.lean.js index ac09496bcc..0c6d52d897 100644 --- a/assets/en_guide_pve_pve_android.md.CkHMSJua.lean.js +++ b/assets/en_guide_pve_pve_android.md.BZoivCDl.lean.js @@ -1 +1 @@ -import{_ as t,c as o,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/a1.DvgNELwZ.png",n="/assets/a2.BQniQEw_.png",r="/assets/a3.DHUpjnAe.png",p="/assets/a4.BtVJtyBL.png",c="/assets/a5.CamDlEuL.png",l="/assets/a6.auUigeOH.png",d="/assets/a7.3_Is3HF1.png",h="/assets/a8.CkyIulFy.png",g="/assets/a9.Dg58RrTs.png",m="/assets/a10.CPK2ZJEJ.png",u="/assets/a11.Bq6vmveu.png",y="/assets/a12.bStrZLWw.png",f="/assets/a13.DRz8WTJR.png",_="/assets/a14.D56M6gMb.png",b="/assets/a15.CtjmUhal.png",k="/assets/a16.BL0_sgNg.png",z="/assets/a17.B9keXK9k.png",w="/assets/a18.Bu92JFv5.png",v="/assets/a19.DZjr60Xs.png",x="/assets/a20.CesdkIR_.png",C="/assets/a21.BO8sy8n4.png",I="/assets/a22.COjD9r-B.png",B="/assets/a23.BxEEAckp.png",S="/assets/a24.BrCKYLHX.png",A="/assets/a25.CUB6zoiS.png",T="/assets/a26.zvaFRs59.png",P="/assets/ar.Dy_5EjFU.png",F="/assets/a27.QkS9Cjl7.png",O="/assets/a31.BiCzGFMR.png",q="/assets/a32.54sdf1AZ.png",D="/assets/a33.QYBAXO71.png",E="/assets/a34.BBqAz_kr.png",V="/assets/a35.B8NF_iJX.png",U="/assets/a36.CPvsggxV.png",M="/assets/a37.DJRI7pv9.png",R="/assets/a38.BhfuTk-3.png",K="/assets/a39.BNtfZ4xd.png",N="/assets/a40.DTfyEQe2.png",G="/assets/a41.Cb6MjiUm.png",j="/assets/a42.Du63tHI8.png",H="/assets/a43.Cxy9Fqxr.png",L="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Y="/assets/b2.BnvPQMj3.png",Q="/assets/b3.DPn2dzFl.png",X="/assets/b4.JBQupWN9.png",Z="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ee="/assets/b7.5Fkbt05C.png",te="/assets/b8.BXlK1Dnb.png",oe="/assets/b9.CaK5eLKm.png",ae="/assets/b10.DGHfd73s.png",se="/assets/b11.DKZjwgY8.png",ie="/assets/b12.BISDj2Ri.png",ne="/assets/b13.WGr5jMeK.png",re="/assets/b14.BqBpvoFk.png",pe="/assets/b15.Cd3Rj7ju.png",ce="/assets/b16.BR7AHi1X.png",le="/assets/b17.Cn1C4e1e.png",de="/assets/b18.ElAa2UCQ.png",he="/assets/b19.BwC-oHOW.png",ge="/assets/b20.Dj-0rOwy.png",me="/assets/b21.CYRPkSXE.png",ue="/assets/b22.BH7kRZ3Z.png",ye="/assets/b23.JVX-KOL7.png",fe="/assets/b24.a2fv8lkf.png",_e="/assets/b25.BJrNgkiA.png",be="/assets/b26.5bTO5HK5.png",ke="/assets/b27.BSRz6moE.png",ze="/assets/b28.WNjJaEPB.png",we="/assets/b29.Bs69Ykqp.png",ve="/assets/b30.B96bh_Ou.png",xe="/assets/b31.BBIAIScF.png",Ce="/assets/b32.8G5Xy9mr.png",Ie="/assets/b33.RYxcR7vu.png",Be="/assets/b34.Dw6MyLex.png",Se="/assets/b35.DUCPsVIG.png",Ae="/assets/b36.7aKaNaLh.png",Te="/assets/b37.B5CHAJzN.png",Pe="/assets/br.CyzpZwsx.png",Fe="/assets/b38.Pnnij22W.png",Oe="/assets/b39.ajiHDdbx.png",qe="/assets/b40.B6FTkFUT.png",De="/assets/b41.DcCdod5l.png",Ee="/assets/b42.CT1JvTLX.png",Ve="/assets/b43.HthhPs5o.png",Ue="/assets/b44.C9NeP-UC.png",Me="/assets/b45.BWxBBH-l.png",Re="/assets/b46.B6Ds58im.png",Ye=JSON.parse('{"title":"Android Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_android.md","filePath":"en/guide/pve/pve_android.md","lastUpdated":1773143516000}'),Ke={name:"en/guide/pve/pve_android.md"};function Ne(Ge,e,je,He,Le,Je){return a(),o("div",null,e[0]||(e[0]=[s("",228)]))}const Qe=t(Ke,[["render",Ne]]);export{Ye as __pageData,Qe as default}; +import{_ as t,c as o,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/a1.DvgNELwZ.png",n="/assets/a2.BQniQEw_.png",r="/assets/a3.DHUpjnAe.png",p="/assets/a4.BtVJtyBL.png",c="/assets/a5.CamDlEuL.png",l="/assets/a6.auUigeOH.png",d="/assets/a7.3_Is3HF1.png",h="/assets/a8.CkyIulFy.png",g="/assets/a9.Dg58RrTs.png",m="/assets/a10.CPK2ZJEJ.png",u="/assets/a11.Bq6vmveu.png",y="/assets/a12.bStrZLWw.png",f="/assets/a13.DRz8WTJR.png",_="/assets/a14.D56M6gMb.png",b="/assets/a15.CtjmUhal.png",k="/assets/a16.BL0_sgNg.png",z="/assets/a17.B9keXK9k.png",w="/assets/a18.Bu92JFv5.png",v="/assets/a19.DZjr60Xs.png",x="/assets/a20.CesdkIR_.png",C="/assets/a21.BO8sy8n4.png",I="/assets/a22.COjD9r-B.png",B="/assets/a23.BxEEAckp.png",S="/assets/a24.BrCKYLHX.png",A="/assets/a25.CUB6zoiS.png",T="/assets/a26.zvaFRs59.png",P="/assets/ar.Dy_5EjFU.png",F="/assets/a27.QkS9Cjl7.png",O="/assets/a31.BiCzGFMR.png",q="/assets/a32.54sdf1AZ.png",D="/assets/a33.QYBAXO71.png",E="/assets/a34.BBqAz_kr.png",V="/assets/a35.B8NF_iJX.png",U="/assets/a36.CPvsggxV.png",M="/assets/a37.DJRI7pv9.png",R="/assets/a38.BhfuTk-3.png",K="/assets/a39.BNtfZ4xd.png",N="/assets/a40.DTfyEQe2.png",G="/assets/a41.Cb6MjiUm.png",j="/assets/a42.Du63tHI8.png",H="/assets/a43.Cxy9Fqxr.png",L="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Y="/assets/b2.BnvPQMj3.png",Q="/assets/b3.DPn2dzFl.png",X="/assets/b4.JBQupWN9.png",Z="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ee="/assets/b7.5Fkbt05C.png",te="/assets/b8.BXlK1Dnb.png",oe="/assets/b9.CaK5eLKm.png",ae="/assets/b10.DGHfd73s.png",se="/assets/b11.DKZjwgY8.png",ie="/assets/b12.BISDj2Ri.png",ne="/assets/b13.WGr5jMeK.png",re="/assets/b14.BqBpvoFk.png",pe="/assets/b15.Cd3Rj7ju.png",ce="/assets/b16.BR7AHi1X.png",le="/assets/b17.Cn1C4e1e.png",de="/assets/b18.ElAa2UCQ.png",he="/assets/b19.BwC-oHOW.png",ge="/assets/b20.Dj-0rOwy.png",me="/assets/b21.CYRPkSXE.png",ue="/assets/b22.BH7kRZ3Z.png",ye="/assets/b23.JVX-KOL7.png",fe="/assets/b24.a2fv8lkf.png",_e="/assets/b25.BJrNgkiA.png",be="/assets/b26.5bTO5HK5.png",ke="/assets/b27.BSRz6moE.png",ze="/assets/b28.WNjJaEPB.png",we="/assets/b29.Bs69Ykqp.png",ve="/assets/b30.B96bh_Ou.png",xe="/assets/b31.BBIAIScF.png",Ce="/assets/b32.8G5Xy9mr.png",Ie="/assets/b33.RYxcR7vu.png",Be="/assets/b34.Dw6MyLex.png",Se="/assets/b35.DUCPsVIG.png",Ae="/assets/b36.7aKaNaLh.png",Te="/assets/b37.B5CHAJzN.png",Pe="/assets/br.CyzpZwsx.png",Fe="/assets/b38.Pnnij22W.png",Oe="/assets/b39.ajiHDdbx.png",qe="/assets/b40.B6FTkFUT.png",De="/assets/b41.DcCdod5l.png",Ee="/assets/b42.CT1JvTLX.png",Ve="/assets/b43.HthhPs5o.png",Ue="/assets/b44.C9NeP-UC.png",Me="/assets/b45.BWxBBH-l.png",Re="/assets/b46.B6Ds58im.png",Ye=JSON.parse('{"title":"Android Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_android.md","filePath":"en/guide/pve/pve_android.md","lastUpdated":1773196139000}'),Ke={name:"en/guide/pve/pve_android.md"};function Ne(Ge,e,je,He,Le,Je){return a(),o("div",null,e[0]||(e[0]=[s("",228)]))}const Qe=t(Ke,[["render",Ne]]);export{Ye as __pageData,Qe as default}; diff --git a/assets/en_guide_pve_pve_custom.md.C2ClsMUA.js b/assets/en_guide_pve_pve_custom.md.DoZZakT9.js similarity index 99% rename from assets/en_guide_pve_pve_custom.md.C2ClsMUA.js rename to assets/en_guide_pve_pve_custom.md.DoZZakT9.js index 4c155da499..cc28e1502d 100644 --- a/assets/en_guide_pve_pve_custom.md.C2ClsMUA.js +++ b/assets/en_guide_pve_pve_custom.md.DoZZakT9.js @@ -1,4 +1,4 @@ -import{_ as e,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Customized partitions","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_custom.md","filePath":"en/guide/pve/pve_custom.md","lastUpdated":1773143516000}'),t={name:"en/guide/pve/pve_custom.md"};function p(l,s,o,r,h,c){return i(),a("div",null,s[0]||(s[0]=[n(`

Customized partitions

Installing Proxmox VE 7 on a non-Debian system

Minimum local hardware requirements are the same as for the previous normal installation.

You need to install docker first.

curl -sSL https://get.docker.com/ | sh
+import{_ as e,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Customized partitions","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_custom.md","filePath":"en/guide/pve/pve_custom.md","lastUpdated":1773196139000}'),t={name:"en/guide/pve/pve_custom.md"};function p(l,s,o,r,h,c){return i(),a("div",null,s[0]||(s[0]=[n(`

Customized partitions

Installing Proxmox VE 7 on a non-Debian system

Minimum local hardware requirements are the same as for the previous normal installation.

You need to install docker first.

curl -sSL https://get.docker.com/ | sh
 curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
 chmod +x /usr/local/bin/docker-compose
 docker-compose --version

Then use uname -m to query the architecture and use the command corresponding to the architecture

The opened PVE panel information is:

Login username and password are both root, after logging in be sure to use web SSH to change the password to avoid being blown up.

When using host SSH, be sure to log into the corresponding https://IPV4:8006 to use SSH on the web panel, do not use the host's port 22 to manipulate the PVE.

Because the SSH on the web panel is inside Docker, it does not support subsequent one-click configurations, so please configure your own gateway, etc. to use it.

X86 architecture

bash
docker run -idt --network host \\
diff --git a/assets/en_guide_pve_pve_custom.md.C2ClsMUA.lean.js b/assets/en_guide_pve_pve_custom.md.DoZZakT9.lean.js
similarity index 86%
rename from assets/en_guide_pve_pve_custom.md.C2ClsMUA.lean.js
rename to assets/en_guide_pve_pve_custom.md.DoZZakT9.lean.js
index 5993e0591c..3cd86015ea 100644
--- a/assets/en_guide_pve_pve_custom.md.C2ClsMUA.lean.js
+++ b/assets/en_guide_pve_pve_custom.md.DoZZakT9.lean.js
@@ -1 +1 @@
-import{_ as e,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Customized partitions","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_custom.md","filePath":"en/guide/pve/pve_custom.md","lastUpdated":1773143516000}'),t={name:"en/guide/pve/pve_custom.md"};function p(l,s,o,r,h,c){return i(),a("div",null,s[0]||(s[0]=[n("",63)]))}const m=e(t,[["render",p]]);export{u as __pageData,m as default};
+import{_ as e,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Customized partitions","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_custom.md","filePath":"en/guide/pve/pve_custom.md","lastUpdated":1773196139000}'),t={name:"en/guide/pve/pve_custom.md"};function p(l,s,o,r,h,c){return i(),a("div",null,s[0]||(s[0]=[n("",63)]))}const m=e(t,[["render",p]]);export{u as __pageData,m as default};
diff --git a/assets/en_guide_pve_pve_install.md.Ba7wEJMt.js b/assets/en_guide_pve_pve_install.md.DWz0cnZq.js
similarity index 99%
rename from assets/en_guide_pve_pve_install.md.Ba7wEJMt.js
rename to assets/en_guide_pve_pve_install.md.DWz0cnZq.js
index 7c8923bec8..c930ec0349 100644
--- a/assets/en_guide_pve_pve_install.md.Ba7wEJMt.js
+++ b/assets/en_guide_pve_pve_install.md.DWz0cnZq.js
@@ -1 +1 @@
-import{_ as t,c as i,o as s,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"PVE Body Installation","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_install.md","filePath":"en/guide/pve/pve_install.md","lastUpdated":1773143516000}'),o={name:"en/guide/pve/pve_install.md"};function n(l,e,r,h,d,c){return s(),i("div",null,e[0]||(e[0]=[a('

PVE Body Installation

If you don't know how to choose an option during installation, just press enter.

TIP

For low-configuration hosts, it is recommended to check the contents of the Custom partition after all the content has been installed to perform memory tuning and reduce the memory footprint.

Installation on non-physical machines

Proxmox installed by this method can subsequently use all scripts of this project.

One-click PVE installation

TIP

Suggest debian12+, the actual test part of the independent server debian11 system will appear a reboot network will be lost, debian12 does not have such a problem!

  • The installation is the latest PVE from the apt source at the moment.
  • For example, debian10 is pve6.4, debian11 is pve7.x, debian12 is pve8.x, debian13 is pve9.x
  • Changes to the /etc/hosts file (to fix the wrong hostname setting for merchants and to add the required content for PVE)
  • /etc/cloud/cloud.cfg file modification (to avoid overwriting modified hostname etc.)
  • /etc/network/interfaces file modification (fix auto, dhcp type to static, add vmbr0 gateway)
  • Detect whether it is China IP, if it is China IP use Tsinghua mirror source, otherwise use the official source, and at the same time deal with the source of apt and the corresponding nameserver, to avoid disconnections
  • Create vmbr0 (independent IP gateway), the host allows addr and gateway for intranet IP or extranet IP, has been automatically recognized
  • vmbr0 creation support to open pure IPV4, pure IPV6, dual-stack virtual machine, automatic identification of IPV4 address and IPV6 address, automatic identification of the corresponding IP interval
  • Installation of the necessary toolkit for PVE to open a virtual machine
  • x86_64 replace enterprise subscriptions in apt sources with community sources, arm sources built using third-party patches for fixes
  • Print query Linux system kernel and PVE kernel installed or not
  • Setting up DNS detection 8.8.8.8.8 for boot add DNS systemd service
  • Download PVE and printout of login information after adding APT source link for PVE

All modified files have been set to read-only mode to avoid overwriting after reboot.

If you want to modify the file, please use` chattr -i file path to cancel the read-only lock, and run chattr +i file path to lock the read-only lock when you finish modifying the file.

You will be prompted to reboot your system once during the execution process, After rebooting, be sure to wait at least 20 seconds to make sure the system does not reboot automatically again.

Because the original environment may be missing ifupdown or ifupdown2 environment, there is a self-installation daemon loaded for the installation, after the installation of the system will automatically reboot the system again, wait for 20 seconds without reboot to ensure that the installation has been run.

If the host itself exists SLAAC assigned IPV6 address, will be able to choose whether to use the largest IPV6 subnet range, the default carriage return does not use the largest IPV6 subnet range only use the local IPV6, if you subsequently need to attach a separate IPV6 address to the virtual machine/container, the option must be selected y.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

or

shell
bash install_pve.sh

TIP

After successful installation, the web page may not be safe to open, click on Advanced or More Options and insist on accessing it!

The login information is your SSH account and password.

Pre-configure the environment

  • Creating a resource pool mypool
  • Remove the subscription popup
  • Attempt to enable hardware passthrough
  • Detect and auto-install AppArmor modules.
  • Before rebooting the system, it is recommended to hook up nezha probe to facilitate the use of the command line in the background without SSH, to avoid the possibility that SSH may lead to the loss of the root password after the reboot due to the merchant's strange presets.
  • Before executing reboot, you need to wait for the background task to finish executing, some host system apt command execution is very slow, you have to wait for a while to finish executing, of course, most of the machines are not so bad!

Command:

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

Automatically configure the host's gateway

WARNING

Before using this command, please make sure that you have restarted the server and that PVE can use the WEB terminal normally before executing this command. Do not execute this command immediately after restarting the machine, wait for at least 1 minute after the WEB terminal is successfully started before executing this command. If the WEB side doesn't start, run systemctl status pveproxy to see if it starts, if it's stuck, run systemctl start pveproxy to start the WEB side.

TIP

This step is most likely to cause SSH disconnections, the reason is to modify the network without waiting for the PVE kernel to start, which will result in setting conflicts, so wait at least a few minutes until the kernel is started, that is, the WEB side is started successfully before execution.

TIP

If the host needs to attach an IPV6 tunnel (add an IPV6 subnet to a host that does not have an IPV6 address) before executing this command, please check the IPV6 free subnet attachment section to attach to the corresponding configuration file, but please ignore 'initial environment modifications' and attach directly, and then execute the following one-click gateway configuration commands after verifying that you have an IPV6 address.

  • If vmbr0 is not created, it is automatically created with the same logic as the main installation
  • Create vmbr1 (NAT gateway) to support IPV4 servers that open NAT for IPV6 networks with NAT.
  • Create vmbr2 (standalone IPV6 gateway), use ndppd to solve the problem of MAC verification of IPV6 addresses by the host, support the opening of servers with standalone IPV6 networks.
  • If you want to see the complete settings, you can execute cat /etc/network/interfaces to see, if you need to modify the gateway you need to modify the file, the web site can not be modified!
  • Load iptables and set back to source and allow NAT port forwarding.

In short, vmbr0 is responsible for v4 standalone IPs, and vmbr1 is responsible for complex v4/v6 NATs, vmbr2 is responsible for v6 standalone IPs.

Open independent IPV4 virtual machine using vmbr0, gateway with the host, IPV4/CIDR using the same network segment address and the same subnet mask, using the host's unbound IPV4 address for IPV4/CIDR, of course, if the subsequent use of this script does not need to pay attention to this point of the nuances of the thing

Use vmbr1 for IPV4 VM with NAT, 172.16.1.1 for gateway, 172.16.1.x/24 for IPV4/CIDR, where x can't be 1, but of course you don't need to pay attention to this minutia if you use this script later.

Command:

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

TIP

This step may require you to reboot your system after a few minutes of successful execution, see the final execution of the script at the end of the tip. However, a reboot will ensure that some of the hidden settings are loaded successfully, so be sure to reboot the server once if you are in a position to do so.

To this point the main body is installed.

One-Click Uninstall PVE

After the uninstall script completes, restarting the host machine will restore it to its pre-installation state.

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

Installation on a physical machine

Proxmox installed by this method NOT to be used subsequently with all scripts of this project.

This method has not been tested and adapted on a large scale, only I installed PVE8.4 on the local machine, the router itself is not automatically obtain an IP address but fixed IP address connection way, if there is a problem corresponding to the warehouse open issues.

U disk burning official ISO

Official ISO download address:

https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso

You need to download it locally in advance.

You also need a USB flash drive with a good read/write rate for making a boot disk, as the boot disk needs to be formatted using rufus for boot disk making, you need to make sure that the USB flash drive is empty before making the disk

rufus download address (download to your local, not USB flash drive):

https://rufus.ie/zh/

or

https://github.com/pbatard/rufus

Burning needs to use DD method to burn, the original data of the USB flash disk will be completely erased after burning.

PVE installation

Find out how to get into the BIOS on the host itself, and modify two things after entering the BIOS

  1. Safe boot needs to be turned off

  2. the order of the boot needs to be moved to the first USB order

Then save the settings, then insert the USB flash drive, reboot the system, and choose to use the graphical interface for installation.

FQDN need to fill in a URL, you can fill in something like pve.spiritlhl.net, preferably a sub-domain of the domain name you own, not the actual domain name if you write it as something like pve.localsite.com will also work, the subsequent may not be used!

After the installation will automatically shut down and restart, reboot after the black screen can be unplugged USB, to avoid restarting the installation from the USB flash drive, of course, if you forget to reboot to the installation page, shut down the machine after unplugging the USB flash drive and then start up is also OK!

Wireless Network Configuration

Download the required zip file and shell scripts

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.zip

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.sh

After downloading, unzip the zip file, drag the wireless folder into the root directory of a new USB flash drive, and the wireless.sh file has to be put into the root directory as well.

After the flash drive is plugged into the physical machine, you need to mount the flash drive, here sdx1 is the actual path of the flash drive queried by the first command, you need to modify it yourself

shell
fdisk -l \nmount /dev/sdx1 /mnt

The wireless.zip on the USB flash drive should be unzipped and opened to see the deb file.

At this point, run the one-click configuration

shell
bash /mnt/wireless.sh

After the configuration is complete, the system will automatically reboot and the public network will be available after the reboot.

During the execution of the configuration script, you will be prompted to enter the name and password of the WIFI. Since there is no Chinese input method in the pure CI environment, the name of the WIFI must be composed of English numbers only, and the password must be the same.

Cautions

Physical machine after the installation of unlimited modules can not use NAT to connect directly to the virtual machine to access the network, so the subsequent tutorials of this project does not support this method of access to the bridge, the subsequent scripts of this project does not support this method of installation of Proxmox.

Currently feasible wireless module used on the PVE success stories, are required to WIFI router access to the network is automatically obtain an IP address (DHCP) (the subsequent use of openwrt or ikuai or directly nat after the network available within the virtual machine), or can be modified in the router static routing table, if the WIFI router to use a fixed IP address Connection to the network, for the time being did not find success stories.

',72)]))}const m=t(o,[["render",n]]);export{u as __pageData,m as default}; +import{_ as t,c as i,o as s,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"PVE Body Installation","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_install.md","filePath":"en/guide/pve/pve_install.md","lastUpdated":1773196139000}'),o={name:"en/guide/pve/pve_install.md"};function n(l,e,r,h,d,c){return s(),i("div",null,e[0]||(e[0]=[a('

PVE Body Installation

If you don't know how to choose an option during installation, just press enter.

TIP

For low-configuration hosts, it is recommended to check the contents of the Custom partition after all the content has been installed to perform memory tuning and reduce the memory footprint.

Installation on non-physical machines

Proxmox installed by this method can subsequently use all scripts of this project.

One-click PVE installation

TIP

Suggest debian12+, the actual test part of the independent server debian11 system will appear a reboot network will be lost, debian12 does not have such a problem!

  • The installation is the latest PVE from the apt source at the moment.
  • For example, debian10 is pve6.4, debian11 is pve7.x, debian12 is pve8.x, debian13 is pve9.x
  • Changes to the /etc/hosts file (to fix the wrong hostname setting for merchants and to add the required content for PVE)
  • /etc/cloud/cloud.cfg file modification (to avoid overwriting modified hostname etc.)
  • /etc/network/interfaces file modification (fix auto, dhcp type to static, add vmbr0 gateway)
  • Detect whether it is China IP, if it is China IP use Tsinghua mirror source, otherwise use the official source, and at the same time deal with the source of apt and the corresponding nameserver, to avoid disconnections
  • Create vmbr0 (independent IP gateway), the host allows addr and gateway for intranet IP or extranet IP, has been automatically recognized
  • vmbr0 creation support to open pure IPV4, pure IPV6, dual-stack virtual machine, automatic identification of IPV4 address and IPV6 address, automatic identification of the corresponding IP interval
  • Installation of the necessary toolkit for PVE to open a virtual machine
  • x86_64 replace enterprise subscriptions in apt sources with community sources, arm sources built using third-party patches for fixes
  • Print query Linux system kernel and PVE kernel installed or not
  • Setting up DNS detection 8.8.8.8.8 for boot add DNS systemd service
  • Download PVE and printout of login information after adding APT source link for PVE

All modified files have been set to read-only mode to avoid overwriting after reboot.

If you want to modify the file, please use` chattr -i file path to cancel the read-only lock, and run chattr +i file path to lock the read-only lock when you finish modifying the file.

You will be prompted to reboot your system once during the execution process, After rebooting, be sure to wait at least 20 seconds to make sure the system does not reboot automatically again.

Because the original environment may be missing ifupdown or ifupdown2 environment, there is a self-installation daemon loaded for the installation, after the installation of the system will automatically reboot the system again, wait for 20 seconds without reboot to ensure that the installation has been run.

If the host itself exists SLAAC assigned IPV6 address, will be able to choose whether to use the largest IPV6 subnet range, the default carriage return does not use the largest IPV6 subnet range only use the local IPV6, if you subsequently need to attach a separate IPV6 address to the virtual machine/container, the option must be selected y.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

or

shell
bash install_pve.sh

TIP

After successful installation, the web page may not be safe to open, click on Advanced or More Options and insist on accessing it!

The login information is your SSH account and password.

Pre-configure the environment

  • Creating a resource pool mypool
  • Remove the subscription popup
  • Attempt to enable hardware passthrough
  • Detect and auto-install AppArmor modules.
  • Before rebooting the system, it is recommended to hook up nezha probe to facilitate the use of the command line in the background without SSH, to avoid the possibility that SSH may lead to the loss of the root password after the reboot due to the merchant's strange presets.
  • Before executing reboot, you need to wait for the background task to finish executing, some host system apt command execution is very slow, you have to wait for a while to finish executing, of course, most of the machines are not so bad!

Command:

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

Automatically configure the host's gateway

WARNING

Before using this command, please make sure that you have restarted the server and that PVE can use the WEB terminal normally before executing this command. Do not execute this command immediately after restarting the machine, wait for at least 1 minute after the WEB terminal is successfully started before executing this command. If the WEB side doesn't start, run systemctl status pveproxy to see if it starts, if it's stuck, run systemctl start pveproxy to start the WEB side.

TIP

This step is most likely to cause SSH disconnections, the reason is to modify the network without waiting for the PVE kernel to start, which will result in setting conflicts, so wait at least a few minutes until the kernel is started, that is, the WEB side is started successfully before execution.

TIP

If the host needs to attach an IPV6 tunnel (add an IPV6 subnet to a host that does not have an IPV6 address) before executing this command, please check the IPV6 free subnet attachment section to attach to the corresponding configuration file, but please ignore 'initial environment modifications' and attach directly, and then execute the following one-click gateway configuration commands after verifying that you have an IPV6 address.

  • If vmbr0 is not created, it is automatically created with the same logic as the main installation
  • Create vmbr1 (NAT gateway) to support IPV4 servers that open NAT for IPV6 networks with NAT.
  • Create vmbr2 (standalone IPV6 gateway), use ndppd to solve the problem of MAC verification of IPV6 addresses by the host, support the opening of servers with standalone IPV6 networks.
  • If you want to see the complete settings, you can execute cat /etc/network/interfaces to see, if you need to modify the gateway you need to modify the file, the web site can not be modified!
  • Load iptables and set back to source and allow NAT port forwarding.

In short, vmbr0 is responsible for v4 standalone IPs, and vmbr1 is responsible for complex v4/v6 NATs, vmbr2 is responsible for v6 standalone IPs.

Open independent IPV4 virtual machine using vmbr0, gateway with the host, IPV4/CIDR using the same network segment address and the same subnet mask, using the host's unbound IPV4 address for IPV4/CIDR, of course, if the subsequent use of this script does not need to pay attention to this point of the nuances of the thing

Use vmbr1 for IPV4 VM with NAT, 172.16.1.1 for gateway, 172.16.1.x/24 for IPV4/CIDR, where x can't be 1, but of course you don't need to pay attention to this minutia if you use this script later.

Command:

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

TIP

This step may require you to reboot your system after a few minutes of successful execution, see the final execution of the script at the end of the tip. However, a reboot will ensure that some of the hidden settings are loaded successfully, so be sure to reboot the server once if you are in a position to do so.

To this point the main body is installed.

One-Click Uninstall PVE

After the uninstall script completes, restarting the host machine will restore it to its pre-installation state.

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

Installation on a physical machine

Proxmox installed by this method NOT to be used subsequently with all scripts of this project.

This method has not been tested and adapted on a large scale, only I installed PVE8.4 on the local machine, the router itself is not automatically obtain an IP address but fixed IP address connection way, if there is a problem corresponding to the warehouse open issues.

U disk burning official ISO

Official ISO download address:

https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso

You need to download it locally in advance.

You also need a USB flash drive with a good read/write rate for making a boot disk, as the boot disk needs to be formatted using rufus for boot disk making, you need to make sure that the USB flash drive is empty before making the disk

rufus download address (download to your local, not USB flash drive):

https://rufus.ie/zh/

or

https://github.com/pbatard/rufus

Burning needs to use DD method to burn, the original data of the USB flash disk will be completely erased after burning.

PVE installation

Find out how to get into the BIOS on the host itself, and modify two things after entering the BIOS

  1. Safe boot needs to be turned off

  2. the order of the boot needs to be moved to the first USB order

Then save the settings, then insert the USB flash drive, reboot the system, and choose to use the graphical interface for installation.

FQDN need to fill in a URL, you can fill in something like pve.spiritlhl.net, preferably a sub-domain of the domain name you own, not the actual domain name if you write it as something like pve.localsite.com will also work, the subsequent may not be used!

After the installation will automatically shut down and restart, reboot after the black screen can be unplugged USB, to avoid restarting the installation from the USB flash drive, of course, if you forget to reboot to the installation page, shut down the machine after unplugging the USB flash drive and then start up is also OK!

Wireless Network Configuration

Download the required zip file and shell scripts

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.zip

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.sh

After downloading, unzip the zip file, drag the wireless folder into the root directory of a new USB flash drive, and the wireless.sh file has to be put into the root directory as well.

After the flash drive is plugged into the physical machine, you need to mount the flash drive, here sdx1 is the actual path of the flash drive queried by the first command, you need to modify it yourself

shell
fdisk -l \nmount /dev/sdx1 /mnt

The wireless.zip on the USB flash drive should be unzipped and opened to see the deb file.

At this point, run the one-click configuration

shell
bash /mnt/wireless.sh

After the configuration is complete, the system will automatically reboot and the public network will be available after the reboot.

During the execution of the configuration script, you will be prompted to enter the name and password of the WIFI. Since there is no Chinese input method in the pure CI environment, the name of the WIFI must be composed of English numbers only, and the password must be the same.

Cautions

Physical machine after the installation of unlimited modules can not use NAT to connect directly to the virtual machine to access the network, so the subsequent tutorials of this project does not support this method of access to the bridge, the subsequent scripts of this project does not support this method of installation of Proxmox.

Currently feasible wireless module used on the PVE success stories, are required to WIFI router access to the network is automatically obtain an IP address (DHCP) (the subsequent use of openwrt or ikuai or directly nat after the network available within the virtual machine), or can be modified in the router static routing table, if the WIFI router to use a fixed IP address Connection to the network, for the time being did not find success stories.

',72)]))}const m=t(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_pve_pve_install.md.Ba7wEJMt.lean.js b/assets/en_guide_pve_pve_install.md.DWz0cnZq.lean.js similarity index 86% rename from assets/en_guide_pve_pve_install.md.Ba7wEJMt.lean.js rename to assets/en_guide_pve_pve_install.md.DWz0cnZq.lean.js index ddec325c1d..9e1f84453f 100644 --- a/assets/en_guide_pve_pve_install.md.Ba7wEJMt.lean.js +++ b/assets/en_guide_pve_pve_install.md.DWz0cnZq.lean.js @@ -1 +1 @@ -import{_ as t,c as i,o as s,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"PVE Body Installation","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_install.md","filePath":"en/guide/pve/pve_install.md","lastUpdated":1773143516000}'),o={name:"en/guide/pve/pve_install.md"};function n(l,e,r,h,d,c){return s(),i("div",null,e[0]||(e[0]=[a("",72)]))}const m=t(o,[["render",n]]);export{u as __pageData,m as default}; +import{_ as t,c as i,o as s,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"PVE Body Installation","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_install.md","filePath":"en/guide/pve/pve_install.md","lastUpdated":1773196139000}'),o={name:"en/guide/pve/pve_install.md"};function n(l,e,r,h,d,c){return s(),i("div",null,e[0]||(e[0]=[a("",72)]))}const m=t(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_pve_pve_kvm.md.HBF0dK3U.js b/assets/en_guide_pve_pve_kvm.md.GX7sLtZY.js similarity index 99% rename from assets/en_guide_pve_pve_kvm.md.HBF0dK3U.js rename to assets/en_guide_pve_pve_kvm.md.GX7sLtZY.js index bf99cc4ba8..1bf190f8ee 100644 --- a/assets/en_guide_pve_pve_kvm.md.HBF0dK3U.js +++ b/assets/en_guide_pve_pve_kvm.md.GX7sLtZY.js @@ -1,4 +1,4 @@ -import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Linux Virtual Machine (KVM/TCG Virtualization)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_kvm.md","filePath":"en/guide/pve/pve_kvm.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_kvm.md"};function l(r,s,d,h,o,p){return a(),e("div",null,s[0]||(s[0]=[t(`

Linux Virtual Machine (KVM/TCG Virtualization)

SSH Login Instructions

When open a virtual machine, the default generated username can be something other than root, in which case you need to run sudo -i to switch to root!

If the default username is not root, the default unset root password is password or oneclickvirt.

After logging into SSH and switching to root privileges, be sure to change the root password, which can be changed using the following command:

bash
bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

Considerations for opening a virtual machine with an IPV6 address

Due to long-term inactivity IPV6 does not use may lead to NDP broadcast cache invalidation reset, generally idle for about 50 minutes will appear IPV6 unavailable, commonly known as "IPV6 cutoff", at this time it is necessary to set up a timer task.

shell
echo '*/1 * * * * curl -m 6 -s ipv6.ip.sb || curl -m 6 -s ipv6.ip.sb' | crontab -

Executing the above commands in the opened virtual machine ensures that the IPV6 network is always used and does not fail over.

Images available for creating virtual machines

  • Pre-installed with cloud-init enabled.
  • Enabled SSH login.
  • Pre-configured SSH to listen on ports 22 for both IPv4 and IPv6.
  • Enabled password authentication for login.
  • Enabled root login.
  • Partially pre-installed QEMU guest agent.
  • System support:
    • See pve_kvm_images or kvm_images for details on the x86_64 architecture, you only need to write the system name + system version number, such as ubuntu20, ubutnu22, debian11, debian12, and so on.
    • For arm architecture, see the systems listed in ubuntu or debian, you only need to write the system name + system version number, such as ubuntu20, ubutnu22, debian11, debian12, and so on.

Virtual machines with standalone NAT configuration.

  • Automatically deploy NAT servers with the default Debian 10 image, chosen for its minimal footprint.
  • It's possible to customize the image used through the command, and pre-configured images are available. These images come with storage settings ranging from 2 to 10 GB of disk space. For regular use, at least 10 GB of disk space is recommended. You can increase the disk size if certain images fail to start.
  • The command allows for specifying the storage disk location. When not specified, it defaults to the local disk, which is the system disk. It can also be set to a mount disk as displayed in PVE.
  • Recommended custom memory size is 512 MB.
  • Automatic internal and external port mapping, including ports 22, 80, 443, and 25 other port numbers shared between internal and external networks.
  • After generation, there's a wait time for the virtual machine's internal cloud-init configuration to establish network and login information. This process takes approximately 5 minutes.
  • Pertinent virtual machine information will be stored in the NOTES section of the corresponding VM on the web interface, accessible for viewing through the web portal.
  • If the host machine has an IPV6 subnet, IPV6 networking will be automatically added. However, there won't be any public IPV6 addresses.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet

Usage Instructions

TIP

Note that usernames consisting of only numbers may cause issues with cloud-init. It's preferable to use usernames that are entirely in English or start with an English character.

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

Meaning of each parameter

shell
# ./buildvm.sh VMID Username Password Number_of_CPU_Cores Memory Disk SSH_Port Port_80 Port_443 Public_Port_Start Public_Port_End System Storage_Disk Independent_IPV6_address(leave default N blank)

TIP

Note that the Password here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the Password due to special characters being escaped during the setup process.

Test Example

shell
./buildvm.sh 111 root oneclick123 1 512 10 40001 40002 40003 50000 50025 debian11 local N

After setup is completed, you can execute cat vm111 to view the information or check the NOTES section for the corresponding VM on the WEB interface.

Below is the information for the example VM that has been set up:

AttributeValue
VMID111
SSH Usernameroot
SSH Passwordoneclick123
Number of CPU Cores1
Memory Size512MB
Disk Size10G
SSH Port40001
Port 8040002
Port 44340003
Port Range for NAT50000 to 50025
Operating Systemdebian11
Host Storage Disklocal
IPV6 addressN

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

Deletion specific VM

  • Stop VM
  • Delete VM
  • Delete port mapping
  • Restart network
  • Delete log files

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

Meaning of each parameter

You can delete the VM with the corresponding VMID, as demonstrated here using the example 111 above

shell
./pve_delete.sh 111

The actual number of deletions is not fixed, a space separates each VMID, and more than one can be deleted at a time.

Batch Creation of Virtual Machines with NAT

WARNING

Before initial use, ensure that the current Proxmox Virtual Environment (PVE) is clean and the host machine has not undergone any port forwarding, as conflicting settings may result in bugs.

TIP

Before initiating the batch creation process, please use the 'screen' command to execute it in the background. This will help avoid interruptions due to the instability of SSH caused by extended batch creation times.

  • The batch creation process can be run multiple times to generate multiple virtual machines (VMs).
  • NAT servers are automatically created during the process. If left blank, the default Debian 11 image will be used. You can also customize the image name. Refer to the list of supported images in the previous section.
  • Automatic internal and external port mapping is performed, including ports 22, 80, 443, and other ports with identical internal and external numbers (25 ports in total).
  • After generation, a waiting period is required for the cloud-init configuration of the VM's network and login information to be set up. This process takes approximately 5 minutes. There is a 60-second interval between creating each VM to avoid potential performance issues.
  • The default network configuration for VMs created in batches includes port mappings for ports 22, 80, 443, and a range of 25 ports for internal and external communication.
  • You can customize the number of CPU cores, memory size, disk size, and which storage disk on the host machine to use for batch creation. Ensure you calculate available resources before proceeding.
  • Relevant information about the virtual machines will be stored in the 'NOTES' section of the corresponding VM on the web interface, where you can view them.
  • If the host machine comes with an IPv6 subnet, an IPv6 network will be automatically attached, although there will be no public IPv6 addresses available.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

After the setup is completed, you can execute cat vmlog to view the information, or check the NOTES in the corresponding VM on the web interface.

Delete All Virtual Machines

  • Delete all VMs
  • Delete all NAT port mappings
  • Restart the network
  • Delete log files
shell
for vmid in $(qm list | awk '{if(NR>1) print $1}'); do qm stop $vmid; qm destroy $vmid; rm -rf /var/lib/vz/images/$vmid*; done
+import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Linux Virtual Machine (KVM/TCG Virtualization)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_kvm.md","filePath":"en/guide/pve/pve_kvm.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_kvm.md"};function l(r,s,d,h,o,p){return a(),e("div",null,s[0]||(s[0]=[t(`

Linux Virtual Machine (KVM/TCG Virtualization)

SSH Login Instructions

When open a virtual machine, the default generated username can be something other than root, in which case you need to run sudo -i to switch to root!

If the default username is not root, the default unset root password is password or oneclickvirt.

After logging into SSH and switching to root privileges, be sure to change the root password, which can be changed using the following command:

bash
bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

Considerations for opening a virtual machine with an IPV6 address

Due to long-term inactivity IPV6 does not use may lead to NDP broadcast cache invalidation reset, generally idle for about 50 minutes will appear IPV6 unavailable, commonly known as "IPV6 cutoff", at this time it is necessary to set up a timer task.

shell
echo '*/1 * * * * curl -m 6 -s ipv6.ip.sb || curl -m 6 -s ipv6.ip.sb' | crontab -

Executing the above commands in the opened virtual machine ensures that the IPV6 network is always used and does not fail over.

Images available for creating virtual machines

  • Pre-installed with cloud-init enabled.
  • Enabled SSH login.
  • Pre-configured SSH to listen on ports 22 for both IPv4 and IPv6.
  • Enabled password authentication for login.
  • Enabled root login.
  • Partially pre-installed QEMU guest agent.
  • System support:
    • See pve_kvm_images or kvm_images for details on the x86_64 architecture, you only need to write the system name + system version number, such as ubuntu20, ubutnu22, debian11, debian12, and so on.
    • For arm architecture, see the systems listed in ubuntu or debian, you only need to write the system name + system version number, such as ubuntu20, ubutnu22, debian11, debian12, and so on.

Virtual machines with standalone NAT configuration.

  • Automatically deploy NAT servers with the default Debian 10 image, chosen for its minimal footprint.
  • It's possible to customize the image used through the command, and pre-configured images are available. These images come with storage settings ranging from 2 to 10 GB of disk space. For regular use, at least 10 GB of disk space is recommended. You can increase the disk size if certain images fail to start.
  • The command allows for specifying the storage disk location. When not specified, it defaults to the local disk, which is the system disk. It can also be set to a mount disk as displayed in PVE.
  • Recommended custom memory size is 512 MB.
  • Automatic internal and external port mapping, including ports 22, 80, 443, and 25 other port numbers shared between internal and external networks.
  • After generation, there's a wait time for the virtual machine's internal cloud-init configuration to establish network and login information. This process takes approximately 5 minutes.
  • Pertinent virtual machine information will be stored in the NOTES section of the corresponding VM on the web interface, accessible for viewing through the web portal.
  • If the host machine has an IPV6 subnet, IPV6 networking will be automatically added. However, there won't be any public IPV6 addresses.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet

Usage Instructions

TIP

Note that usernames consisting of only numbers may cause issues with cloud-init. It's preferable to use usernames that are entirely in English or start with an English character.

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

Meaning of each parameter

shell
# ./buildvm.sh VMID Username Password Number_of_CPU_Cores Memory Disk SSH_Port Port_80 Port_443 Public_Port_Start Public_Port_End System Storage_Disk Independent_IPV6_address(leave default N blank)

TIP

Note that the Password here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the Password due to special characters being escaped during the setup process.

Test Example

shell
./buildvm.sh 111 root oneclick123 1 512 10 40001 40002 40003 50000 50025 debian11 local N

After setup is completed, you can execute cat vm111 to view the information or check the NOTES section for the corresponding VM on the WEB interface.

Below is the information for the example VM that has been set up:

AttributeValue
VMID111
SSH Usernameroot
SSH Passwordoneclick123
Number of CPU Cores1
Memory Size512MB
Disk Size10G
SSH Port40001
Port 8040002
Port 44340003
Port Range for NAT50000 to 50025
Operating Systemdebian11
Host Storage Disklocal
IPV6 addressN

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

Deletion specific VM

  • Stop VM
  • Delete VM
  • Delete port mapping
  • Restart network
  • Delete log files

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

Meaning of each parameter

You can delete the VM with the corresponding VMID, as demonstrated here using the example 111 above

shell
./pve_delete.sh 111

The actual number of deletions is not fixed, a space separates each VMID, and more than one can be deleted at a time.

Batch Creation of Virtual Machines with NAT

WARNING

Before initial use, ensure that the current Proxmox Virtual Environment (PVE) is clean and the host machine has not undergone any port forwarding, as conflicting settings may result in bugs.

TIP

Before initiating the batch creation process, please use the 'screen' command to execute it in the background. This will help avoid interruptions due to the instability of SSH caused by extended batch creation times.

  • The batch creation process can be run multiple times to generate multiple virtual machines (VMs).
  • NAT servers are automatically created during the process. If left blank, the default Debian 11 image will be used. You can also customize the image name. Refer to the list of supported images in the previous section.
  • Automatic internal and external port mapping is performed, including ports 22, 80, 443, and other ports with identical internal and external numbers (25 ports in total).
  • After generation, a waiting period is required for the cloud-init configuration of the VM's network and login information to be set up. This process takes approximately 5 minutes. There is a 60-second interval between creating each VM to avoid potential performance issues.
  • The default network configuration for VMs created in batches includes port mappings for ports 22, 80, 443, and a range of 25 ports for internal and external communication.
  • You can customize the number of CPU cores, memory size, disk size, and which storage disk on the host machine to use for batch creation. Ensure you calculate available resources before proceeding.
  • Relevant information about the virtual machines will be stored in the 'NOTES' section of the corresponding VM on the web interface, where you can view them.
  • If the host machine comes with an IPv6 subnet, an IPv6 network will be automatically attached, although there will be no public IPv6 addresses available.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

After the setup is completed, you can execute cat vmlog to view the information, or check the NOTES in the corresponding VM on the web interface.

Delete All Virtual Machines

  • Delete all VMs
  • Delete all NAT port mappings
  • Restart the network
  • Delete log files
shell
for vmid in $(qm list | awk '{if(NR>1) print $1}'); do qm stop $vmid; qm destroy $vmid; rm -rf /var/lib/vz/images/$vmid*; done
 iptables -t nat -F
 iptables -t filter -F
 service networking restart
diff --git a/assets/en_guide_pve_pve_kvm.md.HBF0dK3U.lean.js b/assets/en_guide_pve_pve_kvm.md.GX7sLtZY.lean.js
similarity index 87%
rename from assets/en_guide_pve_pve_kvm.md.HBF0dK3U.lean.js
rename to assets/en_guide_pve_pve_kvm.md.GX7sLtZY.lean.js
index 457e8264c3..8ed183a5f1 100644
--- a/assets/en_guide_pve_pve_kvm.md.HBF0dK3U.lean.js
+++ b/assets/en_guide_pve_pve_kvm.md.GX7sLtZY.lean.js
@@ -1 +1 @@
-import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Linux Virtual Machine (KVM/TCG Virtualization)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_kvm.md","filePath":"en/guide/pve/pve_kvm.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_kvm.md"};function l(r,s,d,h,o,p){return a(),e("div",null,s[0]||(s[0]=[t("",113)]))}const k=i(n,[["render",l]]);export{u as __pageData,k as default};
+import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Linux Virtual Machine (KVM/TCG Virtualization)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_kvm.md","filePath":"en/guide/pve/pve_kvm.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_kvm.md"};function l(r,s,d,h,o,p){return a(),e("div",null,s[0]||(s[0]=[t("",113)]))}const k=i(n,[["render",l]]);export{u as __pageData,k as default};
diff --git a/assets/en_guide_pve_pve_lxc.md.ByndHppy.js b/assets/en_guide_pve_pve_lxc.md.VErvMYbe.js
similarity index 99%
rename from assets/en_guide_pve_pve_lxc.md.ByndHppy.js
rename to assets/en_guide_pve_pve_lxc.md.VErvMYbe.js
index 29c376ec61..473fc324f1 100644
--- a/assets/en_guide_pve_pve_lxc.md.ByndHppy.js
+++ b/assets/en_guide_pve_pve_lxc.md.VErvMYbe.js
@@ -1,4 +1,4 @@
-import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"LXC Virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_lxc.md","filePath":"en/guide/pve/pve_lxc.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_lxc.md"};function l(r,s,h,o,p,d){return a(),e("div",null,s[0]||(s[0]=[t(`

LXC Virtualization

WARNING

If you need to open more than 200 LXC containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Images available for creating LXC Containers

x86_64:

Auto-patching images: https://github.com/oneclickvirt/lxc_amd64_images/blob/main/all_images.txt

TIP

Automated daily pulls for compilation and patching

Self-patching images: https://github.com/oneclickvirt/pve_lxc_images/blob/main/all_images.txt

TIP

Some of these images are flawed and not guaranteed to be available for all PVEs, with names like ubuntu16.04, debian6, centos7, opensuse42.2, opensuse42.3 Don't use them unless necessary.

and

Run pveam available --section system to see the names and version numbers of the officially available systems.

Priority: Self-patching images (not supported by Proxmox-VE 5 and below) > Official default images (both supported) image

The version has been automatically recognized by a script to use the corresponding image.

arm:

https://github.com/oneclickvirt/lxc_arm_images/blob/main/all_images.txt

Supported systems can be viewed in the file above, which lists debian and ubuntu systems do not use the aliases in it, just use the numeric designators.

TIP

All system parameters are lowercase system names spliced with version numbers, e.g. debian11, ubuntu22, etc. (Self-patched images support some out-of-the-way systems, such as centos6, centos7, debian8, debian9, etc.)

The default CT username for all systems is root

TIP

Of course, sometimes there are special cases where the version may be current/base, in which case it is sufficient to use only the English system name, e.g. archlinux, gentoo, kali.

Creating Individual LXC Containers for Virtualization

WARNING

Before initial use, ensure that the current PVE (Proxmox Virtual Environment) is clean and the host machine has not undergone any port mapping, as conflicts in settings could lead to bugs.

TIP

Before creating containers, use the 'screen' command to run them in the background. This helps to avoid extended creation times that might lead to interruptions due to unstable SSH connections.

  • Automatically create NAT servers using the default Debian 11 image, or customize the system image as needed.
  • Automatically perform internal and external network port mapping, including ports 22, 80, 443, and 25 additional ports with identical numbers for both internal and external networks.
  • After generation, allow some time for the virtual machine to configure its internal network and login information. This process takes approximately 3 minutes.
  • The default network configuration includes port mappings for 22, 80, 443, and a range of 25 ports for both internal and external networks.
  • Customize the number of cores, memory size, disk size, and the storage disk on the host machine for allocation. Ensure that you calculate available resources before creating containers.
  • Optionally specify the storage disk location in the command. When not specified, it defaults to the local disk, which is the system disk. Alternatively, you can specify a mount disk as displayed in PVE.
  • The created containers are enabled with SSH by default, allowing root login. They are also configured to support nested virtualization for Docker.
  • Relevant container information will be stored in the respective container's notes, accessible through the web interface.
  • If the host machine has an IPV6 subnet, IPV6 networking will be automatically attached, but no public IPV6 addresses will be provided.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

Meaning of each parameter

shell
# ./buildct.sh CTID Password Number_of_CPU_Cores Memory Disk SSH_Port Port_80 Port_443 Start_Public_Port End_Public_Port System Storage_Disk Independent_IPV6_address(leave default N blank)

Test Example

shell
./buildct.sh 111 oneclick123 1 512 5 20001 20002 20003 30000 30025 debian11 local N

After setting up, you can execute cat ct111 to view the information, or check the NOTES section on the web interface.

Here is the information for the created example CT:

Please note that "CT" and other technical terms might have specific meanings in different contexts. If "CT" stands for something specific in your domain, you might want to provide additional context for accurate translation.

AttributeValue
CTID111
SSH Usernameroot
SSH Passwordoneclick123
Number of CPU Cores1
Memory Size512MB
Disk Size5G
SSH Port20001
Port 8020002
Port 44320003
Port Range for NAT30000 to 30025
Operating Systemdebian11
Host Storage Disklocal
IPV6 addressN

TIP

Note that only CTIDs from 100 to 256 can be used here, no other numbers can be used.

Deletion specific CT

  • Stop CT
  • Delete CT
  • Delete Port Mapping
  • Restart Network
  • Delete Log Files

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

Meaning of each parameter

You can delete the CT with the corresponding CTID, as demonstrated here using the example 111 above

shell
./pve_delete.sh 111

The actual number of deletions is not fixed, a space separates each CTID, and more than one can be deleted at a time.

Batch Creation of LXC Containers with NAT

WARNING

Make sure the current Proxmox Virtual Environment (PVE) is clean and the host machine has not undergone any port mapping before the first use, as conflicting settings may result in bugs.

TIP

Before initiating the creation process, it's recommended to use the 'screen' command to execute the batch creation. This will prevent interruptions due to potential instability in SSH during the extended creation time.

  • It is possible to run the batch container creation process multiple times. However, please be mindful of allocating enough memory to the host machine to prevent system crashes. For adding swap space, refer to this link.
  • There is a 60-second interval between creating each container to avoid sudden performance bottlenecks.
  • Customization options include selecting the number of CPU cores, memory size, disk size, and the storage drive on the host machine. Ensure that you have calculated available resources appropriately before initiating the process.
  • The created containers have SSH enabled by default, allowing root login. Additionally, they are configured to support nested virtualization for Docker usage.
  • Relevant information about the containers will be stored in the corresponding container's notes, which can be viewed on the web interface.
  • If the host machine has an IPv6 subnet, it will be automatically assigned to the containers. However, public IPv6 addresses will not be provided.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet.

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

After the setup is complete, you can execute cat ctlog to view the information, or check in the NOTES section on the web interface.

Delete All CT

  • Delete all CTs
  • Delete port mappings for all NATs
  • Restart the network
  • Delete log files
shell
pct list | awk 'NR>1{print $1}' | xargs -I {} sh -c 'pct stop {}; pct destroy {}'
+import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"LXC Virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_lxc.md","filePath":"en/guide/pve/pve_lxc.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_lxc.md"};function l(r,s,h,o,p,d){return a(),e("div",null,s[0]||(s[0]=[t(`

LXC Virtualization

WARNING

If you need to open more than 200 LXC containers on a single server, then it is not recommended to use this project, there may be problems with lxcfs access drift, which generates IO occupancy that cannot be released. (This is a native LXC problem that can't be fixed.)

Images available for creating LXC Containers

x86_64:

Auto-patching images: https://github.com/oneclickvirt/lxc_amd64_images/blob/main/all_images.txt

TIP

Automated daily pulls for compilation and patching

Self-patching images: https://github.com/oneclickvirt/pve_lxc_images/blob/main/all_images.txt

TIP

Some of these images are flawed and not guaranteed to be available for all PVEs, with names like ubuntu16.04, debian6, centos7, opensuse42.2, opensuse42.3 Don't use them unless necessary.

and

Run pveam available --section system to see the names and version numbers of the officially available systems.

Priority: Self-patching images (not supported by Proxmox-VE 5 and below) > Official default images (both supported) image

The version has been automatically recognized by a script to use the corresponding image.

arm:

https://github.com/oneclickvirt/lxc_arm_images/blob/main/all_images.txt

Supported systems can be viewed in the file above, which lists debian and ubuntu systems do not use the aliases in it, just use the numeric designators.

TIP

All system parameters are lowercase system names spliced with version numbers, e.g. debian11, ubuntu22, etc. (Self-patched images support some out-of-the-way systems, such as centos6, centos7, debian8, debian9, etc.)

The default CT username for all systems is root

TIP

Of course, sometimes there are special cases where the version may be current/base, in which case it is sufficient to use only the English system name, e.g. archlinux, gentoo, kali.

Creating Individual LXC Containers for Virtualization

WARNING

Before initial use, ensure that the current PVE (Proxmox Virtual Environment) is clean and the host machine has not undergone any port mapping, as conflicts in settings could lead to bugs.

TIP

Before creating containers, use the 'screen' command to run them in the background. This helps to avoid extended creation times that might lead to interruptions due to unstable SSH connections.

  • Automatically create NAT servers using the default Debian 11 image, or customize the system image as needed.
  • Automatically perform internal and external network port mapping, including ports 22, 80, 443, and 25 additional ports with identical numbers for both internal and external networks.
  • After generation, allow some time for the virtual machine to configure its internal network and login information. This process takes approximately 3 minutes.
  • The default network configuration includes port mappings for 22, 80, 443, and a range of 25 ports for both internal and external networks.
  • Customize the number of cores, memory size, disk size, and the storage disk on the host machine for allocation. Ensure that you calculate available resources before creating containers.
  • Optionally specify the storage disk location in the command. When not specified, it defaults to the local disk, which is the system disk. Alternatively, you can specify a mount disk as displayed in PVE.
  • The created containers are enabled with SSH by default, allowing root login. They are also configured to support nested virtualization for Docker.
  • Relevant container information will be stored in the respective container's notes, accessible through the web interface.
  • If the host machine has an IPV6 subnet, IPV6 networking will be automatically attached, but no public IPV6 addresses will be provided.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

Meaning of each parameter

shell
# ./buildct.sh CTID Password Number_of_CPU_Cores Memory Disk SSH_Port Port_80 Port_443 Start_Public_Port End_Public_Port System Storage_Disk Independent_IPV6_address(leave default N blank)

Test Example

shell
./buildct.sh 111 oneclick123 1 512 5 20001 20002 20003 30000 30025 debian11 local N

After setting up, you can execute cat ct111 to view the information, or check the NOTES section on the web interface.

Here is the information for the created example CT:

Please note that "CT" and other technical terms might have specific meanings in different contexts. If "CT" stands for something specific in your domain, you might want to provide additional context for accurate translation.

AttributeValue
CTID111
SSH Usernameroot
SSH Passwordoneclick123
Number of CPU Cores1
Memory Size512MB
Disk Size5G
SSH Port20001
Port 8020002
Port 44320003
Port Range for NAT30000 to 30025
Operating Systemdebian11
Host Storage Disklocal
IPV6 addressN

TIP

Note that only CTIDs from 100 to 256 can be used here, no other numbers can be used.

Deletion specific CT

  • Stop CT
  • Delete CT
  • Delete Port Mapping
  • Restart Network
  • Delete Log Files

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

Meaning of each parameter

You can delete the CT with the corresponding CTID, as demonstrated here using the example 111 above

shell
./pve_delete.sh 111

The actual number of deletions is not fixed, a space separates each CTID, and more than one can be deleted at a time.

Batch Creation of LXC Containers with NAT

WARNING

Make sure the current Proxmox Virtual Environment (PVE) is clean and the host machine has not undergone any port mapping before the first use, as conflicting settings may result in bugs.

TIP

Before initiating the creation process, it's recommended to use the 'screen' command to execute the batch creation. This will prevent interruptions due to potential instability in SSH during the extended creation time.

  • It is possible to run the batch container creation process multiple times. However, please be mindful of allocating enough memory to the host machine to prevent system crashes. For adding swap space, refer to this link.
  • There is a 60-second interval between creating each container to avoid sudden performance bottlenecks.
  • Customization options include selecting the number of CPU cores, memory size, disk size, and the storage drive on the host machine. Ensure that you have calculated available resources appropriately before initiating the process.
  • The created containers have SSH enabled by default, allowing root login. Additionally, they are configured to support nested virtualization for Docker usage.
  • Relevant information about the containers will be stored in the corresponding container's notes, which can be viewed on the web interface.
  • If the host machine has an IPv6 subnet, it will be automatically assigned to the containers. However, public IPv6 addresses will not be provided.
  • Optionally enable or disable standalone IPV6, requires the host to have at least one /64 subnet.

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

After the setup is complete, you can execute cat ctlog to view the information, or check in the NOTES section on the web interface.

Delete All CT

  • Delete all CTs
  • Delete port mappings for all NATs
  • Restart the network
  • Delete log files
shell
pct list | awk 'NR>1{print $1}' | xargs -I {} sh -c 'pct stop {}; pct destroy {}'
 rm -rf ct*
 iptables -t nat -F
 iptables -t filter -F
diff --git a/assets/en_guide_pve_pve_lxc.md.ByndHppy.lean.js b/assets/en_guide_pve_pve_lxc.md.VErvMYbe.lean.js
similarity index 86%
rename from assets/en_guide_pve_pve_lxc.md.ByndHppy.lean.js
rename to assets/en_guide_pve_pve_lxc.md.VErvMYbe.lean.js
index ef3ba2aaee..d091f85805 100644
--- a/assets/en_guide_pve_pve_lxc.md.ByndHppy.lean.js
+++ b/assets/en_guide_pve_pve_lxc.md.VErvMYbe.lean.js
@@ -1 +1 @@
-import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"LXC Virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_lxc.md","filePath":"en/guide/pve/pve_lxc.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_lxc.md"};function l(r,s,h,o,p,d){return a(),e("div",null,s[0]||(s[0]=[t("",66)]))}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.QPV3Ar9-.js";const k=JSON.parse('{"title":"LXC Virtualization","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_lxc.md","filePath":"en/guide/pve/pve_lxc.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_lxc.md"};function l(r,s,h,o,p,d){return a(),e("div",null,s[0]||(s[0]=[t("",66)]))}const u=i(n,[["render",l]]);export{k as __pageData,u as default};
diff --git a/assets/en_guide_pve_pve_macos.md.8CuaOLGH.js b/assets/en_guide_pve_pve_macos.md.Bu149fm6.js
similarity index 99%
rename from assets/en_guide_pve_pve_macos.md.8CuaOLGH.js
rename to assets/en_guide_pve_pve_macos.md.Bu149fm6.js
index ee582ef1f1..e592a43293 100644
--- a/assets/en_guide_pve_pve_macos.md.8CuaOLGH.js
+++ b/assets/en_guide_pve_pve_macos.md.Bu149fm6.js
@@ -1,4 +1,4 @@
-import{_ as a}from"./chunks/wk7.BpuwpIoq.js";import{_ as s,c as t,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o="/assets/mac0.CofQ9vw_.png",l="/assets/mac00.DelKhhmr.png",r="/assets/mac1.D7yJtJrl.png",c="/assets/mac2.du7V_m90.png",p="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",h="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",u="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",k="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",y="/assets/mac11.P11nsmhn.png",f="/assets/mac12.DHTBO7ih.png",v="/assets/mac13.DDrsH3zK.png",w="/assets/mac14.dLHoMtJy.png",F="/assets/mac15.vkr7IxY1.png",C="/assets/mac16.CeB_3pKz.png",_="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",B="/assets/mac19.C_d085-7.png",S="/assets/mac20.DsWyqQaw.png",T=JSON.parse('{"title":"Setting Up MacOS Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_macos.md","filePath":"en/guide/pve/pve_macos.md","lastUpdated":1773143516000}'),z={name:"en/guide/pve/pve_macos.md"};function E(P,e,I,M,q,A){return i(),t("div",null,e[0]||(e[0]=[n(`

Setting Up MacOS Virtual Machine

Prerequisites

System and hardware configuration requirements left bar --> Configuration requirements

You can only set up a MacOS virtual machine when the environment detection confirms that the host machine supports KVM nested virtualization. Otherwise, it will be detected by hardware and cannot be set up.

Setting Up the Prerequisites

  • Automatically identify CPU type (AMD or Intel) and set nested virtualization parameters according to the type.
  • Modify GRUB boot parameters to enable IOMMU and disable default framebuffer.
  • Add VFIO module support for hardware device passthrough.
  • Blacklist sound card and graphics card driver modules to avoid conflicts with macOS.
  • Configure KVM-related kernel parameters, ignore MSR errors, and improve compatibility.
  • Patch Proxmox frontend status detection logic to bypass status restrictions.
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

After successful execution, it will show that the system will restart in 15 seconds. This is the normal process, as kernel parameters cannot take effect without restarting.

System Image Download

  • All images have pre-installed components and are relatively large (minimum about 4.9GB). Download and extraction tasks will run in the background.
  • Images are complete systems with all components and can be booted and used without internet connection.
  • If the free space on the system disk is less than twice the size of the image, the download will be rejected.
  • Images are in 7z compressed format and need to be extracted before use.
  • You can check the status of current download and extraction tasks at any time. Virtual machines can only be created after completion.
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh --lang=en

Or

shell
bash install_macos_images.sh --lang=en

After the background download task starts, you can close the SSH window and wait for 30 minutes to 3 hours (depending on your server bandwidth and connectivity) to download the ISO 7z compressed package.

When the download task is complete and the current download task query shows empty, you can choose to execute the extraction task. The waiting time for extraction depends on your server's CPU performance.

When the extraction task is complete and the current extraction task query shows empty, all preparations are ready.

Tasks of the same type can run concurrently, and any task can be canceled at any time by entering the PID value.

Build from https://github.com/oneclickvirt/macos currently supported image compressed packages:

# Listed by system release date from old to new
+import{_ as a}from"./chunks/wk7.BpuwpIoq.js";import{_ as s,c as t,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o="/assets/mac0.CofQ9vw_.png",l="/assets/mac00.DelKhhmr.png",r="/assets/mac1.D7yJtJrl.png",c="/assets/mac2.du7V_m90.png",p="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",h="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",u="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",k="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",y="/assets/mac11.P11nsmhn.png",f="/assets/mac12.DHTBO7ih.png",v="/assets/mac13.DDrsH3zK.png",w="/assets/mac14.dLHoMtJy.png",F="/assets/mac15.vkr7IxY1.png",C="/assets/mac16.CeB_3pKz.png",_="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",B="/assets/mac19.C_d085-7.png",S="/assets/mac20.DsWyqQaw.png",T=JSON.parse('{"title":"Setting Up MacOS Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_macos.md","filePath":"en/guide/pve/pve_macos.md","lastUpdated":1773196139000}'),z={name:"en/guide/pve/pve_macos.md"};function E(P,e,I,M,q,A){return i(),t("div",null,e[0]||(e[0]=[n(`

Setting Up MacOS Virtual Machine

Prerequisites

System and hardware configuration requirements left bar --> Configuration requirements

You can only set up a MacOS virtual machine when the environment detection confirms that the host machine supports KVM nested virtualization. Otherwise, it will be detected by hardware and cannot be set up.

Setting Up the Prerequisites

  • Automatically identify CPU type (AMD or Intel) and set nested virtualization parameters according to the type.
  • Modify GRUB boot parameters to enable IOMMU and disable default framebuffer.
  • Add VFIO module support for hardware device passthrough.
  • Blacklist sound card and graphics card driver modules to avoid conflicts with macOS.
  • Configure KVM-related kernel parameters, ignore MSR errors, and improve compatibility.
  • Patch Proxmox frontend status detection logic to bypass status restrictions.
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

After successful execution, it will show that the system will restart in 15 seconds. This is the normal process, as kernel parameters cannot take effect without restarting.

System Image Download

  • All images have pre-installed components and are relatively large (minimum about 4.9GB). Download and extraction tasks will run in the background.
  • Images are complete systems with all components and can be booted and used without internet connection.
  • If the free space on the system disk is less than twice the size of the image, the download will be rejected.
  • Images are in 7z compressed format and need to be extracted before use.
  • You can check the status of current download and extraction tasks at any time. Virtual machines can only be created after completion.
shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh --lang=en

Or

shell
bash install_macos_images.sh --lang=en

After the background download task starts, you can close the SSH window and wait for 30 minutes to 3 hours (depending on your server bandwidth and connectivity) to download the ISO 7z compressed package.

When the download task is complete and the current download task query shows empty, you can choose to execute the extraction task. The waiting time for extraction depends on your server's CPU performance.

When the extraction task is complete and the current extraction task query shows empty, all preparations are ready.

Tasks of the same type can run concurrently, and any task can be canceled at any time by entering the PID value.

Build from https://github.com/oneclickvirt/macos currently supported image compressed packages:

# Listed by system release date from old to new
 high-sierra.iso.7z (Size: 5.23GB)
 mojave.iso.7z (Size: 6.03GB)
 catalina.iso.7z (Size: 8.33GB)
diff --git a/assets/en_guide_pve_pve_macos.md.8CuaOLGH.lean.js b/assets/en_guide_pve_pve_macos.md.Bu149fm6.lean.js
similarity index 94%
rename from assets/en_guide_pve_pve_macos.md.8CuaOLGH.lean.js
rename to assets/en_guide_pve_pve_macos.md.Bu149fm6.lean.js
index 85cc81c704..4cfc45b0c7 100644
--- a/assets/en_guide_pve_pve_macos.md.8CuaOLGH.lean.js
+++ b/assets/en_guide_pve_pve_macos.md.Bu149fm6.lean.js
@@ -1 +1 @@
-import{_ as a}from"./chunks/wk7.BpuwpIoq.js";import{_ as s,c as t,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o="/assets/mac0.CofQ9vw_.png",l="/assets/mac00.DelKhhmr.png",r="/assets/mac1.D7yJtJrl.png",c="/assets/mac2.du7V_m90.png",p="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",h="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",u="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",k="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",y="/assets/mac11.P11nsmhn.png",f="/assets/mac12.DHTBO7ih.png",v="/assets/mac13.DDrsH3zK.png",w="/assets/mac14.dLHoMtJy.png",F="/assets/mac15.vkr7IxY1.png",C="/assets/mac16.CeB_3pKz.png",_="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",B="/assets/mac19.C_d085-7.png",S="/assets/mac20.DsWyqQaw.png",T=JSON.parse('{"title":"Setting Up MacOS Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_macos.md","filePath":"en/guide/pve/pve_macos.md","lastUpdated":1773143516000}'),z={name:"en/guide/pve/pve_macos.md"};function E(P,e,I,M,q,A){return i(),t("div",null,e[0]||(e[0]=[n("",91)]))}const O=s(z,[["render",E]]);export{T as __pageData,O as default};
+import{_ as a}from"./chunks/wk7.BpuwpIoq.js";import{_ as s,c as t,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o="/assets/mac0.CofQ9vw_.png",l="/assets/mac00.DelKhhmr.png",r="/assets/mac1.D7yJtJrl.png",c="/assets/mac2.du7V_m90.png",p="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",h="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",u="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",k="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",y="/assets/mac11.P11nsmhn.png",f="/assets/mac12.DHTBO7ih.png",v="/assets/mac13.DDrsH3zK.png",w="/assets/mac14.dLHoMtJy.png",F="/assets/mac15.vkr7IxY1.png",C="/assets/mac16.CeB_3pKz.png",_="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",B="/assets/mac19.C_d085-7.png",S="/assets/mac20.DsWyqQaw.png",T=JSON.parse('{"title":"Setting Up MacOS Virtual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_macos.md","filePath":"en/guide/pve/pve_macos.md","lastUpdated":1773196139000}'),z={name:"en/guide/pve/pve_macos.md"};function E(P,e,I,M,q,A){return i(),t("div",null,e[0]||(e[0]=[n("",91)]))}const O=s(z,[["render",E]]);export{T as __pageData,O as default};
diff --git a/assets/en_guide_pve_pve_precheck.md.DExDyJzI.js b/assets/en_guide_pve_pve_precheck.md.DPbjn0xk.js
similarity index 99%
rename from assets/en_guide_pve_pve_precheck.md.DExDyJzI.js
rename to assets/en_guide_pve_pve_precheck.md.DPbjn0xk.js
index c17132cb47..62dd849cb2 100644
--- a/assets/en_guide_pve_pve_precheck.md.DExDyJzI.js
+++ b/assets/en_guide_pve_pve_precheck.md.DPbjn0xk.js
@@ -1,3 +1,3 @@
-import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/pve_kvm_1.BEDy-Dxt.png",r="/assets/pve_kvm_2.C98l0GO8.png",o="/assets/pve_kvm_3.DzuyyWMo.png",b=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_precheck.md","filePath":"en/guide/pve/pve_precheck.md","lastUpdated":1773143516000}'),l={name:"en/guide/pve/pve_precheck.md"};function h(p,e,c,d,u,m){return i(),s("div",null,e[0]||(e[0]=[a(`

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If there are unadapted merchants or machines welcome to contact @spiritlhl_bot, will try to support it sometime!

WARNING

Will change the network structure of the host, please make sure that the host can reset the system at any time and that there is no important data on the host before running it.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/pve

Various requirements

It is recommended that debian try to use the latest stable version of the system before use.

Warning: This project only supports servers with a dedicated public IPv4 address

This project relies on a fixed IPv4 address for network allocation and does not support the following scenarios:

  • Environments with dynamic IPv4 (e.g., servers whose IP address changes after reboot)
  • Environments without a dedicated public IPv4 address (e.g., accessing the internet via home router NAT and requiring DHCP to obtain an address)

If your server does not have a publicly routable static IPv4 address, please do not use this project.

The one-click installation script of this project only adapts to Debian systems, non-Debian can not be installed through the APT source, the official only gives the image of Debian, other systems can only use the ISO installation, or use custom partitions and other ways to solve the problem in the FAQ partition.

  • System requirements: Debian 8+

TIP

It is recommended to install debian11 instead of debian12+, because the latter is a beta version, and the debian11 installation is the stable version.

  • Hardware requirements: 2 cores 2G RAM x86_64 or arm architecture server hard disk at least 20G
  • Hardware requirements for KVM: VM-X or AMD-V support (some VPS and all Dedicated servers support).
  • If hardware or system requirements are not met, you can use incus to batch open LXC containers Jump

If you use IPV6 tunnels for IPV6 subnet attachment on the host, be sure to add the contents in the corresponding file when PVE is successfully installed but the gateway is not automatically set, and do not add IPV6 tunnels at the very beginning (without installing PVE).

Warning: If the host is a standalone server without IPMI can not reinstall the system themselves, do not use this script, please directly entrust the technician to manually ISO install PVE, do not use this project, otherwise it may result in loss of connectivity (some of the standalone servers network settings do not support hot-plugging)

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

Command:

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Detecting the environment

  • This project related scripts must be executed before the execution of this script to detect the environment, if it does not meet the requirements of the installation of PVE will not be able to use the subsequent scripts
  • Detection of the local IPV6 network configuration (with or without IPV6 can be installed, just query)
  • Detection of the hardware configuration meets the minimum requirements
  • Detection of the hardware environment can be nested virtualization KVM type of servers, can not be nested virtualization KVM can also open QEMU TCG server, performance is poor
  • Detect whether the system environment can be nested virtualization KVM type of server, can not be nested virtualization KVM can also open QEMU TCG server, performance is poor
  • can not be nested virtualization KVM servers do not recommend the installation of the PVE, it is better to use incus for better performance.

Command:

bash
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

If you need to update the IPV6 information before querying, then execute the following command before querying

bash
rm -rf /usr/local/bin/pve_ipv6*
+import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/pve_kvm_1.BEDy-Dxt.png",r="/assets/pve_kvm_2.C98l0GO8.png",o="/assets/pve_kvm_3.DzuyyWMo.png",b=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_precheck.md","filePath":"en/guide/pve/pve_precheck.md","lastUpdated":1773196139000}'),l={name:"en/guide/pve/pve_precheck.md"};function h(p,e,c,d,u,m){return i(),s("div",null,e[0]||(e[0]=[a(`

Preface

The following is the introduction of the non-customized part, the customized part has its own corresponding introduction, do not get confused!

If there are unadapted merchants or machines welcome to contact @spiritlhl_bot, will try to support it sometime!

WARNING

Will change the network structure of the host, please make sure that the host can reset the system at any time and that there is no important data on the host before running it.

Feel free to give the project a Star for free support!-->https://github.com/oneclickvirt/pve

Various requirements

It is recommended that debian try to use the latest stable version of the system before use.

Warning: This project only supports servers with a dedicated public IPv4 address

This project relies on a fixed IPv4 address for network allocation and does not support the following scenarios:

  • Environments with dynamic IPv4 (e.g., servers whose IP address changes after reboot)
  • Environments without a dedicated public IPv4 address (e.g., accessing the internet via home router NAT and requiring DHCP to obtain an address)

If your server does not have a publicly routable static IPv4 address, please do not use this project.

The one-click installation script of this project only adapts to Debian systems, non-Debian can not be installed through the APT source, the official only gives the image of Debian, other systems can only use the ISO installation, or use custom partitions and other ways to solve the problem in the FAQ partition.

  • System requirements: Debian 8+

TIP

It is recommended to install debian11 instead of debian12+, because the latter is a beta version, and the debian11 installation is the stable version.

  • Hardware requirements: 2 cores 2G RAM x86_64 or arm architecture server hard disk at least 20G
  • Hardware requirements for KVM: VM-X or AMD-V support (some VPS and all Dedicated servers support).
  • If hardware or system requirements are not met, you can use incus to batch open LXC containers Jump

If you use IPV6 tunnels for IPV6 subnet attachment on the host, be sure to add the contents in the corresponding file when PVE is successfully installed but the gateway is not automatically set, and do not add IPV6 tunnels at the very beginning (without installing PVE).

Warning: If the host is a standalone server without IPMI can not reinstall the system themselves, do not use this script, please directly entrust the technician to manually ISO install PVE, do not use this project, otherwise it may result in loss of connectivity (some of the standalone servers network settings do not support hot-plugging)

Setting up virtual memory (SWAP) (optional, not required)

TIP

Memory to open some swap lest the machine blow up, if your host computer does not have enough memory and a lot of free hard disk.

Unit conversion: Enter 1024 to generate 1G SWAP-virtual memory, virtual memory occupies hard disk space.

When the actual memory is not enough, the virtual memory will be automatically used for memory usage, but it will bring high IO usage and CPU performance.

Refer to the description of the organization's related project Jump This opens the size of virtual memory

Physical Memory SizeRecommended SWAP Size
≤ 2G2x memory size
2G < memory ≤ 8GEqual to physical memory
≥ 8GAbout 8G is sufficient
Hibernation neededAt least equal to physical memory

The above values are only recommended settings, the actual value according to their own needs, do not blindly copy the value!

Command:

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Detecting the environment

  • This project related scripts must be executed before the execution of this script to detect the environment, if it does not meet the requirements of the installation of PVE will not be able to use the subsequent scripts
  • Detection of the local IPV6 network configuration (with or without IPV6 can be installed, just query)
  • Detection of the hardware configuration meets the minimum requirements
  • Detection of the hardware environment can be nested virtualization KVM type of servers, can not be nested virtualization KVM can also open QEMU TCG server, performance is poor
  • Detect whether the system environment can be nested virtualization KVM type of server, can not be nested virtualization KVM can also open QEMU TCG server, performance is poor
  • can not be nested virtualization KVM servers do not recommend the installation of the PVE, it is better to use incus for better performance.

Command:

bash
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

If you need to update the IPV6 information before querying, then execute the following command before querying

bash
rm -rf /usr/local/bin/pve_ipv6*
 rm -rf /usr/local/bin/pve_check_ipv6*
 rm -rf /usr/local/bin/pve_last_ipv6*

Commands to set up the testing environment for executing this project are as follows:

图片

To perform the above-mentioned query, you only need to use the one-click script below to automatically create a virtual machine. There is no need to manually modify settings on the web interface.

图片

After creating the virtual machines using the subsequent script as mentioned above, it may be necessary to manually modify the settings on the web interface. You will need to disable hardware nested virtualization for each respective virtual machine, as shown in the following diagram.

图片

Stop the virtual machine before making modifications. After the modifications are done, you can start the machine to use NOVNC. Failure to close it may result in bugs that render this virtual machine unusable.

If you forcibly install PVE to enable KVM, even if the startup fails, you can also disable this option and try to start the virtual machine to see if it works.

The reason for these issues is what was stated above, the host does not support nested virtualized KVMs for acceleration.

TIP

Please use the "screen" command to suspend execution before launching the virtual machine, in order to avoid prolonged startup times. Unstable SSH connections could lead to interruptions during the intermediate execution.



',44)]))}const k=t(l,[["render",h]]);export{b as __pageData,k as default}; diff --git a/assets/en_guide_pve_pve_precheck.md.DExDyJzI.lean.js b/assets/en_guide_pve_pve_precheck.md.DPbjn0xk.lean.js similarity index 88% rename from assets/en_guide_pve_pve_precheck.md.DExDyJzI.lean.js rename to assets/en_guide_pve_pve_precheck.md.DPbjn0xk.lean.js index 7c22a49bb0..7f6f59a8f6 100644 --- a/assets/en_guide_pve_pve_precheck.md.DExDyJzI.lean.js +++ b/assets/en_guide_pve_pve_precheck.md.DPbjn0xk.lean.js @@ -1 +1 @@ -import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/pve_kvm_1.BEDy-Dxt.png",r="/assets/pve_kvm_2.C98l0GO8.png",o="/assets/pve_kvm_3.DzuyyWMo.png",b=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_precheck.md","filePath":"en/guide/pve/pve_precheck.md","lastUpdated":1773143516000}'),l={name:"en/guide/pve/pve_precheck.md"};function h(p,e,c,d,u,m){return i(),s("div",null,e[0]||(e[0]=[a("",44)]))}const k=t(l,[["render",h]]);export{b as __pageData,k as default}; +import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/pve_kvm_1.BEDy-Dxt.png",r="/assets/pve_kvm_2.C98l0GO8.png",o="/assets/pve_kvm_3.DzuyyWMo.png",b=JSON.parse('{"title":"Preface","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_precheck.md","filePath":"en/guide/pve/pve_precheck.md","lastUpdated":1773196139000}'),l={name:"en/guide/pve/pve_precheck.md"};function h(p,e,c,d,u,m){return i(),s("div",null,e[0]||(e[0]=[a("",44)]))}const k=t(l,[["render",h]]);export{b as __pageData,k as default}; diff --git a/assets/en_guide_pve_pve_qa.md.CbFkFSq5.js b/assets/en_guide_pve_pve_qa.md.Qv6hyWLK.js similarity index 99% rename from assets/en_guide_pve_pve_qa.md.CbFkFSq5.js rename to assets/en_guide_pve_pve_qa.md.Qv6hyWLK.js index 61427dec7a..35080fe658 100644 --- a/assets/en_guide_pve_pve_qa.md.CbFkFSq5.js +++ b/assets/en_guide_pve_pve_qa.md.Qv6hyWLK.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/onlinepkg.-C5qKOrj.png",r="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_qa.md","filePath":"en/guide/pve/pve_qa.md","lastUpdated":1773143516000}'),l={name:"en/guide/pve/pve_qa.md"};function o(p,e,h,d,c,u){return i(),a("div",null,e[0]||(e[0]=[t(`

Solve the puzzle

Within 30 seconds of executing the script, the machine dropped.

Original system execution

systemctl restart networking

See if it is not directly offline, if so that is the machine native problem, hot plug or dhcp caused by the network can not restart, it is recommended to replace the host system or DD a new system to try!

Generally speaking, this situation occurs in the exclusive service Debian11 system, switch to Debian12+ system will not be a problem!

Installation of PVE fails with an error saying that some packages do not exist.

Execute the following command to query the source of apt

shell
grep -r "deb " /etc/apt/sources.list /etc/apt/sources.list.d/

If you see

deb file://
+import{_ as s,c as a,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/onlinepkg.-C5qKOrj.png",r="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_qa.md","filePath":"en/guide/pve/pve_qa.md","lastUpdated":1773196139000}'),l={name:"en/guide/pve/pve_qa.md"};function o(p,e,h,d,c,u){return i(),a("div",null,e[0]||(e[0]=[t(`

Solve the puzzle

Within 30 seconds of executing the script, the machine dropped.

Original system execution

systemctl restart networking

See if it is not directly offline, if so that is the machine native problem, hot plug or dhcp caused by the network can not restart, it is recommended to replace the host system or DD a new system to try!

Generally speaking, this situation occurs in the exclusive service Debian11 system, switch to Debian12+ system will not be a problem!

Installation of PVE fails with an error saying that some packages do not exist.

Execute the following command to query the source of apt

shell
grep -r "deb " /etc/apt/sources.list /etc/apt/sources.list.d/

If you see

deb file://
 deb cdrom:[

A line starting like this proves that the host is using local sources instead of network sources, and you need to replace the sources in /etc/apt/sources.list with a line such as

pct

Replace the network source with the same to install using the PVE one-click install script.

Replacing the network source can be done using the following command for apt source replacement

bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) --abroad

Successful PVE Installation but Lost Connection After Reboot

If the machine successfully installs PVE and the web interface is accessible, but loses connection after a reboot, please execute the following commands after a successful PVE installation and before rebooting:

bash
auto_interface=$(grep '^auto ' /etc/network/interfaces | grep -v '^auto lo' | awk '{print $2}' | head -n 1)
 if ! grep -q "^post-up /sbin/ethtool" /etc/network/interfaces; then
     chattr -i /etc/network/interfaces
diff --git a/assets/en_guide_pve_pve_qa.md.CbFkFSq5.lean.js b/assets/en_guide_pve_pve_qa.md.Qv6hyWLK.lean.js
similarity index 87%
rename from assets/en_guide_pve_pve_qa.md.CbFkFSq5.lean.js
rename to assets/en_guide_pve_pve_qa.md.Qv6hyWLK.lean.js
index 261b2d265e..afee42081d 100644
--- a/assets/en_guide_pve_pve_qa.md.CbFkFSq5.lean.js
+++ b/assets/en_guide_pve_pve_qa.md.Qv6hyWLK.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/onlinepkg.-C5qKOrj.png",r="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_qa.md","filePath":"en/guide/pve/pve_qa.md","lastUpdated":1773143516000}'),l={name:"en/guide/pve/pve_qa.md"};function o(p,e,h,d,c,u){return i(),a("div",null,e[0]||(e[0]=[t("",110)]))}const b=s(l,[["render",o]]);export{g as __pageData,b as default};
+import{_ as s,c as a,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/onlinepkg.-C5qKOrj.png",r="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"Solve the puzzle","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_qa.md","filePath":"en/guide/pve/pve_qa.md","lastUpdated":1773196139000}'),l={name:"en/guide/pve/pve_qa.md"};function o(p,e,h,d,c,u){return i(),a("div",null,e[0]||(e[0]=[t("",110)]))}const b=s(l,[["render",o]]);export{g as __pageData,b as default};
diff --git a/assets/en_guide_pve_pve_thanks.md.C4i7h17y.js b/assets/en_guide_pve_pve_thanks.md.CSJRH-iq.js
similarity index 97%
rename from assets/en_guide_pve_pve_thanks.md.C4i7h17y.js
rename to assets/en_guide_pve_pve_thanks.md.CSJRH-iq.js
index 41478b8d36..34684b736d 100644
--- a/assets/en_guide_pve_pve_thanks.md.C4i7h17y.js
+++ b/assets/en_guide_pve_pve_thanks.md.CSJRH-iq.js
@@ -1 +1 @@
-import{_ as r,c as t,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/pve_thanks.md","filePath":"en/guide/pve/pve_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_thanks.md"};function p(i,e,s,l,h,m){return o(),t("div",null,e[0]||(e[0]=[a('

Acknowledgements

https://forum.proxmox.com/

https://blog.ilolicon.com/archives/615

https://github.com/Ella-Alinda/somescripts/blob/main/nat.sh

https://pve.proxmox.com/pve-docs/qm.1.html

https://down.idc.wiki/Image/realServer-Template/

https://mirrors.tuna.tsinghua.edu.cn/proxmox/

https://github.com/roacn/pve/blob/main/pve.sh

https://github.com/spiritLHLS/lxc

https://github.com/leitbogioro/Tools

https://github.com/jiangcuo/Proxmox-Port

https://gitlab.com/minkebox/pimox

https://github.com/jiangcuo/run_proxmox_in_docker

https://github.com/yoursunny/ndpresponder

https://github.com/SuperManito/LinuxMirrors

Thank @Ella-Alinda for providing PVE guidance.

',16)]))}const b=r(n,[["render",p]]);export{g as __pageData,b as default}; +import{_ as r,c as t,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/pve_thanks.md","filePath":"en/guide/pve/pve_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_thanks.md"};function p(i,e,s,l,h,m){return o(),t("div",null,e[0]||(e[0]=[a('

Acknowledgements

https://forum.proxmox.com/

https://blog.ilolicon.com/archives/615

https://github.com/Ella-Alinda/somescripts/blob/main/nat.sh

https://pve.proxmox.com/pve-docs/qm.1.html

https://down.idc.wiki/Image/realServer-Template/

https://mirrors.tuna.tsinghua.edu.cn/proxmox/

https://github.com/roacn/pve/blob/main/pve.sh

https://github.com/spiritLHLS/lxc

https://github.com/leitbogioro/Tools

https://github.com/jiangcuo/Proxmox-Port

https://gitlab.com/minkebox/pimox

https://github.com/jiangcuo/run_proxmox_in_docker

https://github.com/yoursunny/ndpresponder

https://github.com/SuperManito/LinuxMirrors

Thank @Ella-Alinda for providing PVE guidance.

',16)]))}const b=r(n,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/en_guide_pve_pve_thanks.md.C4i7h17y.lean.js b/assets/en_guide_pve_pve_thanks.md.CSJRH-iq.lean.js similarity index 85% rename from assets/en_guide_pve_pve_thanks.md.C4i7h17y.lean.js rename to assets/en_guide_pve_pve_thanks.md.CSJRH-iq.lean.js index 53d82e0b1a..0f73845ba8 100644 --- a/assets/en_guide_pve_pve_thanks.md.C4i7h17y.lean.js +++ b/assets/en_guide_pve_pve_thanks.md.CSJRH-iq.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/pve_thanks.md","filePath":"en/guide/pve/pve_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/pve/pve_thanks.md"};function p(i,e,s,l,h,m){return o(),t("div",null,e[0]||(e[0]=[a("",16)]))}const b=r(n,[["render",p]]);export{g as __pageData,b as default}; +import{_ as r,c as t,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/pve/pve_thanks.md","filePath":"en/guide/pve/pve_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/pve/pve_thanks.md"};function p(i,e,s,l,h,m){return o(),t("div",null,e[0]||(e[0]=[a("",16)]))}const b=r(n,[["render",p]]);export{g as __pageData,b as default}; diff --git a/assets/en_guide_pve_pve_windows.md.DLVpqdqe.js b/assets/en_guide_pve_pve_windows.md.CqTZC21M.js similarity index 99% rename from assets/en_guide_pve_pve_windows.md.DLVpqdqe.js rename to assets/en_guide_pve_pve_windows.md.CqTZC21M.js index a0faf4c62b..eb8de5a40a 100644 --- a/assets/en_guide_pve_pve_windows.md.DLVpqdqe.js +++ b/assets/en_guide_pve_pve_windows.md.CqTZC21M.js @@ -1,2 +1,2 @@ -import{_ as o}from"./chunks/wk7.BpuwpIoq.js";import{_ as t,c as i,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const s="/assets/dlwiniso.BxXucu9m.png",r="/assets/dlwiniso1.CQyxWlSu.png",d="/assets/general.BkOp2iK4.png",c="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",p="/assets/disks.BJniy5pO.png",h="/assets/cpu.DedcVQ_T.png",g="/assets/memory.CH7Gxf76.png",m="/assets/network.DPXM5W42.png",u="/assets/finish.Cf6DgPp1.png",w="/assets/start.vjgB4hml.png",k="/assets/gic1.XkdPXihx.png",f="/assets/gic2.s5VB7-xp.png",y="/assets/gic3.2zLznATL.png",v="/assets/gic4.CX3t8C19.png",_="/assets/gic5.pjwHWuhn.png",I="/assets/gic6.BnmyenL0.png",b="/assets/gic7.ZYHWzF5W.png",C="/assets/gic8.BwCbmRgC.png",x="/assets/gic9.62-9wTBo.png",z="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",O="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",P="/assets/virtio.CUVhk14O.png",D="/assets/lower2.SPGPKJ4N.png",q="/assets/lower1.DFw6c1iw.png",N="/assets/nodisk.CH47I8Tu.png",M="/assets/nodisk1.gZ09o2py.png",T="/assets/nodisk2.Do6XEKMW.png",U="/assets/nodisk3.1vBQc75S.png",B="/assets/nodisk4.CJjHGgtp.png",E="/assets/wk4.K5XvE6uQ.png",W="/assets/wk5.BEJ5BAWW.png",A="/assets/wk6.D9MKwk3w.png",K="/assets/wk1.BGnwsbrE.png",L="/assets/wk2.BasdNK2d.png",F="/assets/wk3.CWstwLHH.png",Z=JSON.parse('{"title":"Setting Up Windows Visual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_windows.md","filePath":"en/guide/pve/pve_windows.md","lastUpdated":1773143516000}'),G={name:"en/guide/pve/pve_windows.md"};function H(X,e,R,Q,J,j){return a(),i("div",null,e[0]||(e[0]=[n('

Setting Up Windows Visual Machine

Choose KVM virtualization or QEMU's TCG emulation at startup

The host itself, if it supports nested virtualization, can use host or kvm64 or qemu64 type CPUs

In terms of performance, host > kvm64 > qemu64

The qemu type of virtualization has a lot of performance loss

If you don't support nested virtualization, you can only use qemu64 type CPU, and you need to change KVM hardware virtualization in Options before you start the VM

Set it to no to uncheck Enabled[enabled].

If you're really not sure if your machine supports nested virtualization, then check System and Hardware Configuration Requirements --> Detecting the Environment Detecting to ensure it's available (with attempts to enable the feature)

The main logic for this is in the

https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh

It is recommended to use PVE's System and Hardware Requirements --> Environment Detection in this tutorial for one-click detection, or the following detection logic:

egrep -c '(vmx|svm)' /proc/cpuinfo if it is 1

cat /sys/module/kvm_intel/parameters/nested if it exists and is 1

lsmod | grep -q kvm if it is loaded.

If all of these are supported, choose the host type to be 100% problem-free, in other cases there may be unknown errors try it yourself.

Using ISO Image with VirtIO for VM Setup

1. Download the Image

Before installation, you need to download the image file via local(pve) --> ISO images --> Download from URL

For the download link (URL:), you can use files from: https://github.com/ILLKX/Windows-VirtIO

Enter win.iso as the File Name:

download

Click Download. After downloading is complete, you can see the file size of win.iso on the current page, confirming it's in ISO format.

downloaded

2. Setting Up the Template

Click Create VM in the top right corner of the page.

In the General window, select mypool for Resource Pool:, enter win for Name, then click Next.

general

In the OS window, select win.iso for ISO image. For Guest OS, select Microsoft Windows as the Type and choose the appropriate Version for your ISO. For example, if you downloaded Windows 2022, select 11/2022, then click Next.

OS

In the System window, select VirtIO-GPU for Graphic card, q35 for Machine, VirtIO SCSI for SCSI Controller, and Default (SeaBIOS) for BIOS, then click Next.

system

In the Disk window, select Write Back for Cache, enter your desired disk size in Disk size (GiB) (generally not less than 20), and choose the storage location in Storage. In this example, only the system disk local is available, so local is selected. Then click Next.

disk

In the CPU window, enter the number of cores needed in Cores, then click Next.

cpu

In the Memory window, enter the desired memory size in Memory (MiB), then click Next.

memory

In the Network window, select vmbr1 for Bridge, VirtIO (paravirtualized) for Model, uncheck Firewall, then click Next.

Network

In the Confirm window, click Finish.

finish

3. Graphical Installation Configuration

Click on the template you've set up on the left, click Start in the upper right corner to start the virtual machine, then click Console to enter the VNC interface and wait for the operating system to boot.

console

In the VNC, click Next, then Install now, then I don't have a product key, check Accept license, click Next, and then select Custom installation.

win0win1win2win3win4

If the image comes with VirtIO drivers, you should be able to see the available system storage disk and its size. Select it and click Next.

win5win6

Wait for the system to install. It may restart automatically several times and could take more than 10 minutes.

win7

After installation is complete, you'll be asked to set a password during first login.

win8

Once setup is complete, there's a pop-up box on the left side of the NOVNC page. Click the first button, then follow the login prompt by pressing Ctrl+Alt+last button to enter the login page.

4. Network Initialization

Since the PVE is set up with a static network through this project, you need to manually modify the bound IP address after logging in, rather than using DHCP.

Right-click in the bottom right corner of the desktop and select Open Network and Internet settings. In the settings page that appears, click Change adapter options. win9

In the Network Connections, select Ethernet and click Change settings of this connection. win10

In the popup window, select Internet Protocol Version 4 (TCP/IPv4) and click Properties. win11

In the new dialog box, select Use the following IP address and enter: IP address(I): 172.16.1.xxx (replace xxx with your desired IP, I used 100 for convenience as my vmid is 100) Subnet mask(U): 255.255.255.0 Default gateway(D): 172.16.1.1

Then select Use the following DNS server addresses and enter:

8.8.8.8
+import{_ as o}from"./chunks/wk7.BpuwpIoq.js";import{_ as t,c as i,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const s="/assets/dlwiniso.BxXucu9m.png",r="/assets/dlwiniso1.CQyxWlSu.png",d="/assets/general.BkOp2iK4.png",c="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",p="/assets/disks.BJniy5pO.png",h="/assets/cpu.DedcVQ_T.png",g="/assets/memory.CH7Gxf76.png",m="/assets/network.DPXM5W42.png",u="/assets/finish.Cf6DgPp1.png",w="/assets/start.vjgB4hml.png",k="/assets/gic1.XkdPXihx.png",f="/assets/gic2.s5VB7-xp.png",y="/assets/gic3.2zLznATL.png",v="/assets/gic4.CX3t8C19.png",_="/assets/gic5.pjwHWuhn.png",I="/assets/gic6.BnmyenL0.png",b="/assets/gic7.ZYHWzF5W.png",C="/assets/gic8.BwCbmRgC.png",x="/assets/gic9.62-9wTBo.png",z="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",O="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",P="/assets/virtio.CUVhk14O.png",D="/assets/lower2.SPGPKJ4N.png",q="/assets/lower1.DFw6c1iw.png",N="/assets/nodisk.CH47I8Tu.png",M="/assets/nodisk1.gZ09o2py.png",T="/assets/nodisk2.Do6XEKMW.png",U="/assets/nodisk3.1vBQc75S.png",B="/assets/nodisk4.CJjHGgtp.png",E="/assets/wk4.K5XvE6uQ.png",W="/assets/wk5.BEJ5BAWW.png",A="/assets/wk6.D9MKwk3w.png",K="/assets/wk1.BGnwsbrE.png",L="/assets/wk2.BasdNK2d.png",F="/assets/wk3.CWstwLHH.png",Z=JSON.parse('{"title":"Setting Up Windows Visual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_windows.md","filePath":"en/guide/pve/pve_windows.md","lastUpdated":1773196139000}'),G={name:"en/guide/pve/pve_windows.md"};function H(X,e,R,Q,J,j){return a(),i("div",null,e[0]||(e[0]=[n('

Setting Up Windows Visual Machine

Choose KVM virtualization or QEMU's TCG emulation at startup

The host itself, if it supports nested virtualization, can use host or kvm64 or qemu64 type CPUs

In terms of performance, host > kvm64 > qemu64

The qemu type of virtualization has a lot of performance loss

If you don't support nested virtualization, you can only use qemu64 type CPU, and you need to change KVM hardware virtualization in Options before you start the VM

Set it to no to uncheck Enabled[enabled].

If you're really not sure if your machine supports nested virtualization, then check System and Hardware Configuration Requirements --> Detecting the Environment Detecting to ensure it's available (with attempts to enable the feature)

The main logic for this is in the

https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh

It is recommended to use PVE's System and Hardware Requirements --> Environment Detection in this tutorial for one-click detection, or the following detection logic:

egrep -c '(vmx|svm)' /proc/cpuinfo if it is 1

cat /sys/module/kvm_intel/parameters/nested if it exists and is 1

lsmod | grep -q kvm if it is loaded.

If all of these are supported, choose the host type to be 100% problem-free, in other cases there may be unknown errors try it yourself.

Using ISO Image with VirtIO for VM Setup

1. Download the Image

Before installation, you need to download the image file via local(pve) --> ISO images --> Download from URL

For the download link (URL:), you can use files from: https://github.com/ILLKX/Windows-VirtIO

Enter win.iso as the File Name:

download

Click Download. After downloading is complete, you can see the file size of win.iso on the current page, confirming it's in ISO format.

downloaded

2. Setting Up the Template

Click Create VM in the top right corner of the page.

In the General window, select mypool for Resource Pool:, enter win for Name, then click Next.

general

In the OS window, select win.iso for ISO image. For Guest OS, select Microsoft Windows as the Type and choose the appropriate Version for your ISO. For example, if you downloaded Windows 2022, select 11/2022, then click Next.

OS

In the System window, select VirtIO-GPU for Graphic card, q35 for Machine, VirtIO SCSI for SCSI Controller, and Default (SeaBIOS) for BIOS, then click Next.

system

In the Disk window, select Write Back for Cache, enter your desired disk size in Disk size (GiB) (generally not less than 20), and choose the storage location in Storage. In this example, only the system disk local is available, so local is selected. Then click Next.

disk

In the CPU window, enter the number of cores needed in Cores, then click Next.

cpu

In the Memory window, enter the desired memory size in Memory (MiB), then click Next.

memory

In the Network window, select vmbr1 for Bridge, VirtIO (paravirtualized) for Model, uncheck Firewall, then click Next.

Network

In the Confirm window, click Finish.

finish

3. Graphical Installation Configuration

Click on the template you've set up on the left, click Start in the upper right corner to start the virtual machine, then click Console to enter the VNC interface and wait for the operating system to boot.

console

In the VNC, click Next, then Install now, then I don't have a product key, check Accept license, click Next, and then select Custom installation.

win0win1win2win3win4

If the image comes with VirtIO drivers, you should be able to see the available system storage disk and its size. Select it and click Next.

win5win6

Wait for the system to install. It may restart automatically several times and could take more than 10 minutes.

win7

After installation is complete, you'll be asked to set a password during first login.

win8

Once setup is complete, there's a pop-up box on the left side of the NOVNC page. Click the first button, then follow the login prompt by pressing Ctrl+Alt+last button to enter the login page.

4. Network Initialization

Since the PVE is set up with a static network through this project, you need to manually modify the bound IP address after logging in, rather than using DHCP.

Right-click in the bottom right corner of the desktop and select Open Network and Internet settings. In the settings page that appears, click Change adapter options. win9

In the Network Connections, select Ethernet and click Change settings of this connection. win10

In the popup window, select Internet Protocol Version 4 (TCP/IPv4) and click Properties. win11

In the new dialog box, select Use the following IP address and enter: IP address(I): 172.16.1.xxx (replace xxx with your desired IP, I used 100 for convenience as my vmid is 100) Subnet mask(U): 255.255.255.0 Default gateway(D): 172.16.1.1

Then select Use the following DNS server addresses and enter:

8.8.8.8
 144.144.144.144

Click OK in the bottom right corner, and make sure Validate settings upon exit is NOT checked.

win12

Click OK and Yes for any other dialog boxes, and your virtual machine will now have network connectivity.

5. Unmounting the CD Drive

Manually click on the corresponding CD in the Hardware on the web side of ProxmoxVE and select Remove, then restart the VM and you can use it directly.

wk

Using ISO Images without VirtIO for VM Installation

1. Download Images

For Windows images without VirtIO, you can use:

https://github.com/ILLKX/Windows

For VirtIO ISO images, you can use:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

Alternatively, you can download just the MSI package, package it into an ISO format locally, and then upload it to ProxmoxVE.

This way, the package is smaller. The official package contains support for all Windows images and is about 500MB, while a self-packaged one is around 5MB.

2. VirtIO Import

Note that in ProxmoxVE version 8.x and later, you can select VirtIO boot loading by default in the OS section, as shown in the image:

virtio

In lower versions of ProxmoxVE, such as 7.x and 6.x, you cannot select VirtIO boot loading by default in the OS section:

lower

You need to manually add CD/DVD Drive by clicking Add in the Hardware section and selecting the downloaded VirtIO ISO file:

lower

Then proceed as usual until you reach:

nodisk

At this point, you can't find the hard disk. You need to select Load Driver:

nodisk

Then select the VirtIO as your driver disk, click open, and import the corresponding system driver from the amd64 directory:

nodisk

I'm using a Windows Server 2019 image, so I imported the 2k19 driver. After importing, select the imported driver and click Next:

nodisk

nodisk

Now you should be able to see the hard disk. Select it and continue with the installation steps as in the previous tutorial until the system installation is complete and you reach the desktop.

3. Installing Drivers via virtio-win-guest-tools

Once successfully installed and at the desktop, you still need to manually install the drivers.

Open the VirtIO driver's CD drive directory. At the bottom, there's a virtio-win-guest-tools program that will install the required VirtIO drivers, including the VirtIO network card driver:

wk

wk

wk

After clicking install, the network card driver will be installed. For subsequent network settings, refer to the network initialization tutorial mentioned earlier.

4. Installing Network Card Driver (Alternative)

After successful installation and reaching the desktop, you may still need to manually install the network card driver to connect to the network:

  1. Open Control PanelDevice Manager
  2. Find the Ethernet Controller, right-click and select Update Driver
  3. Select Browse my computer for driver software (R)
  4. Browse to the VirtIO driver's CD drive directory
  5. Open the NetKVM folder
  6. Select the driver folder corresponding to your current system version (like the above operation, I would choose the 2k19 folder with amd64 drivers)
  7. Confirm the installation, and after completion, the VirtIO network card driver will be successfully loaded

wk

wk

wk

For subsequent network settings, refer to the network initialization tutorial mentioned earlier.

5. Unmounting the CD Drive

In the ProxmoxVE web interface, manually click on the corresponding CD in the Hardware section, select Remove, and then restart the virtual machine. This way, you can use it directly:

wk

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

',113)]))}const ee=t(G,[["render",H]]);export{Z as __pageData,ee as default}; diff --git a/assets/en_guide_pve_pve_windows.md.DLVpqdqe.lean.js b/assets/en_guide_pve_pve_windows.md.CqTZC21M.lean.js similarity index 96% rename from assets/en_guide_pve_pve_windows.md.DLVpqdqe.lean.js rename to assets/en_guide_pve_pve_windows.md.CqTZC21M.lean.js index 85bec9a822..6903def53e 100644 --- a/assets/en_guide_pve_pve_windows.md.DLVpqdqe.lean.js +++ b/assets/en_guide_pve_pve_windows.md.CqTZC21M.lean.js @@ -1 +1 @@ -import{_ as o}from"./chunks/wk7.BpuwpIoq.js";import{_ as t,c as i,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const s="/assets/dlwiniso.BxXucu9m.png",r="/assets/dlwiniso1.CQyxWlSu.png",d="/assets/general.BkOp2iK4.png",c="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",p="/assets/disks.BJniy5pO.png",h="/assets/cpu.DedcVQ_T.png",g="/assets/memory.CH7Gxf76.png",m="/assets/network.DPXM5W42.png",u="/assets/finish.Cf6DgPp1.png",w="/assets/start.vjgB4hml.png",k="/assets/gic1.XkdPXihx.png",f="/assets/gic2.s5VB7-xp.png",y="/assets/gic3.2zLznATL.png",v="/assets/gic4.CX3t8C19.png",_="/assets/gic5.pjwHWuhn.png",I="/assets/gic6.BnmyenL0.png",b="/assets/gic7.ZYHWzF5W.png",C="/assets/gic8.BwCbmRgC.png",x="/assets/gic9.62-9wTBo.png",z="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",O="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",P="/assets/virtio.CUVhk14O.png",D="/assets/lower2.SPGPKJ4N.png",q="/assets/lower1.DFw6c1iw.png",N="/assets/nodisk.CH47I8Tu.png",M="/assets/nodisk1.gZ09o2py.png",T="/assets/nodisk2.Do6XEKMW.png",U="/assets/nodisk3.1vBQc75S.png",B="/assets/nodisk4.CJjHGgtp.png",E="/assets/wk4.K5XvE6uQ.png",W="/assets/wk5.BEJ5BAWW.png",A="/assets/wk6.D9MKwk3w.png",K="/assets/wk1.BGnwsbrE.png",L="/assets/wk2.BasdNK2d.png",F="/assets/wk3.CWstwLHH.png",Z=JSON.parse('{"title":"Setting Up Windows Visual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_windows.md","filePath":"en/guide/pve/pve_windows.md","lastUpdated":1773143516000}'),G={name:"en/guide/pve/pve_windows.md"};function H(X,e,R,Q,J,j){return a(),i("div",null,e[0]||(e[0]=[n("",113)]))}const ee=t(G,[["render",H]]);export{Z as __pageData,ee as default}; +import{_ as o}from"./chunks/wk7.BpuwpIoq.js";import{_ as t,c as i,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const s="/assets/dlwiniso.BxXucu9m.png",r="/assets/dlwiniso1.CQyxWlSu.png",d="/assets/general.BkOp2iK4.png",c="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",p="/assets/disks.BJniy5pO.png",h="/assets/cpu.DedcVQ_T.png",g="/assets/memory.CH7Gxf76.png",m="/assets/network.DPXM5W42.png",u="/assets/finish.Cf6DgPp1.png",w="/assets/start.vjgB4hml.png",k="/assets/gic1.XkdPXihx.png",f="/assets/gic2.s5VB7-xp.png",y="/assets/gic3.2zLznATL.png",v="/assets/gic4.CX3t8C19.png",_="/assets/gic5.pjwHWuhn.png",I="/assets/gic6.BnmyenL0.png",b="/assets/gic7.ZYHWzF5W.png",C="/assets/gic8.BwCbmRgC.png",x="/assets/gic9.62-9wTBo.png",z="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",O="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",P="/assets/virtio.CUVhk14O.png",D="/assets/lower2.SPGPKJ4N.png",q="/assets/lower1.DFw6c1iw.png",N="/assets/nodisk.CH47I8Tu.png",M="/assets/nodisk1.gZ09o2py.png",T="/assets/nodisk2.Do6XEKMW.png",U="/assets/nodisk3.1vBQc75S.png",B="/assets/nodisk4.CJjHGgtp.png",E="/assets/wk4.K5XvE6uQ.png",W="/assets/wk5.BEJ5BAWW.png",A="/assets/wk6.D9MKwk3w.png",K="/assets/wk1.BGnwsbrE.png",L="/assets/wk2.BasdNK2d.png",F="/assets/wk3.CWstwLHH.png",Z=JSON.parse('{"title":"Setting Up Windows Visual Machine","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/pve/pve_windows.md","filePath":"en/guide/pve/pve_windows.md","lastUpdated":1773196139000}'),G={name:"en/guide/pve/pve_windows.md"};function H(X,e,R,Q,J,j){return a(),i("div",null,e[0]||(e[0]=[n("",113)]))}const ee=t(G,[["render",H]]);export{Z as __pageData,ee as default}; diff --git a/assets/en_guide_qemu_qemu_build.md.Ne4D861D.js b/assets/en_guide_qemu_qemu_build.md.D5GNAYVL.js similarity index 99% rename from assets/en_guide_qemu_qemu_build.md.Ne4D861D.js rename to assets/en_guide_qemu_qemu_build.md.D5GNAYVL.js index 3d66cc09fb..8c934d359e 100644 --- a/assets/en_guide_qemu_qemu_build.md.Ne4D861D.js +++ b/assets/en_guide_qemu_qemu_build.md.D5GNAYVL.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_build.md","filePath":"en/guide/qemu/qemu_build.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_build.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t(`

Introduction

Two ways to create virtual machines.

Create a Single VM

  • Creates only one KVM/QEMU virtual machine, automatically detects international or domestic server
  • Can configure binding of an independent IPv6 address (requires host to have a public IPv6 address and IPv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/oneqemu.sh
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_build.md","filePath":"en/guide/qemu/qemu_build.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_build.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t(`

Introduction

Two ways to create virtual machines.

Create a Single VM

  • Creates only one KVM/QEMU virtual machine, automatically detects international or domestic server
  • Can configure binding of an independent IPv6 address (requires host to have a public IPv6 address and IPv6 network configured during installation)
  • Supports x86_64 and ARM64 architecture servers

Download Script

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/oneqemu.sh
 chmod +x oneqemu.sh

Example

Supported variables:

bash
./oneqemu.sh <name> <cpu> <memory_mb> <disk_gb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system]

Currently supported systems:

  • debian
  • ubuntu

Default is debian if not specified.

shell
./oneqemu.sh vm1 1 1024 10 passwordhere 25000 34975 35000 n debian13

Example VM details:

PropertyValue
VM namevm1
SSH usernameroot
SSH passwordMyPassword
CPU cores1
Memory1024MB
Disk size10GB
SSH port25000
Port mapping range34975 to 35000
Systemdebian
Independent IPv6N

List all virtual machines

shell
virsh list --all

Start a virtual machine

shell
virsh start vm1

Shut down a virtual machine

shell
virsh shutdown vm1

Force stop a virtual machine

shell
virsh destroy vm1

Access VM console

shell
virsh console vm1

Press Ctrl + ] to exit the console.

Delete example

shell
virsh destroy vm1
 virsh undefine vm1 --remove-all-storage

View VM info

shell
virsh dominfo vm1

Batch Create VMs

  • Generates multiple VMs inheriting the same configuration
  • Automatically increments VM names (vm1, vm2, ...), SSH ports, and public ports
  • VM information is logged to the vmlog file
  • It is recommended to run in a screen session when creating multiple VMs to avoid SSH disconnection
  • Supports x86_64 and ARM64 architecture servers

Run

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/create_qemu.sh
 chmod +x create_qemu.sh
diff --git a/assets/en_guide_qemu_qemu_build.md.Ne4D861D.lean.js b/assets/en_guide_qemu_qemu_build.md.D5GNAYVL.lean.js
similarity index 86%
rename from assets/en_guide_qemu_qemu_build.md.Ne4D861D.lean.js
rename to assets/en_guide_qemu_qemu_build.md.D5GNAYVL.lean.js
index eadc4414d8..b9e0025e42 100644
--- a/assets/en_guide_qemu_qemu_build.md.Ne4D861D.lean.js
+++ b/assets/en_guide_qemu_qemu_build.md.D5GNAYVL.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_build.md","filePath":"en/guide/qemu/qemu_build.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_build.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t("",47)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default};
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_build.md","filePath":"en/guide/qemu/qemu_build.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_build.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t("",47)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/en_guide_qemu_qemu_install.md.Dlupwn8V.js b/assets/en_guide_qemu_qemu_install.md.CJGX2MBk.js
similarity index 98%
rename from assets/en_guide_qemu_qemu_install.md.Dlupwn8V.js
rename to assets/en_guide_qemu_qemu_install.md.CJGX2MBk.js
index 6ff944ef30..773b67a7ea 100644
--- a/assets/en_guide_qemu_qemu_install.md.Dlupwn8V.js
+++ b/assets/en_guide_qemu_qemu_install.md.CJGX2MBk.js
@@ -1 +1 @@
-import{_ as s,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_install.md","filePath":"en/guide/qemu/qemu_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_install.md"};function l(r,i,o,p,h,d){return e(),a("div",null,i[0]||(i[0]=[t('

Introduction

Install the QEMU/KVM environment, including qemu-kvm + network configuration + port forwarding as a complete set.

Add Swap Memory

TIP

Adding some swap prevents the host from running out of memory.

Unit conversion: entering 1024 creates 1GB of SWAP virtual memory. Virtual memory uses disk space. When actual memory runs out, virtual memory is used automatically, but this brings high I/O and CPU usage.

It is recommended to create swap no larger than twice the actual memory size.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Installation

  • Supported OS: Debian 11+, Ubuntu 20.04+
  • Automatically installs QEMU/KVM, libvirt, bridge utilities, and all related components
  • Automatically configures the host bridge (virbr0) and NAT network
  • Automatically detects public IPv6 address and configures IPv6 network (if present)
  • Supports x86_64 and ARM64 architecture servers
shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

TIP

After installation, it is recommended to run virsh list --all to verify that the KVM environment is working correctly.

Uninstall QEMU/KVM Environment

One-click uninstall of the complete QEMU/KVM environment, including all virtual machines, images, networks, and auxiliary files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

WARNING

The script will require you to enter yes to confirm before execution. This operation is irreversible. Content deleted includes all virtual machines, images, and QEMU/KVM network configurations. Reset procedure: run uninstall first, then run install again to verify the entire installation process from scratch.

',15)]))}const m=s(n,[["render",l]]);export{u as __pageData,m as default}; +import{_ as s,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_install.md","filePath":"en/guide/qemu/qemu_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_install.md"};function l(r,i,o,p,h,d){return e(),a("div",null,i[0]||(i[0]=[t('

Introduction

Install the QEMU/KVM environment, including qemu-kvm + network configuration + port forwarding as a complete set.

Add Swap Memory

TIP

Adding some swap prevents the host from running out of memory.

Unit conversion: entering 1024 creates 1GB of SWAP virtual memory. Virtual memory uses disk space. When actual memory runs out, virtual memory is used automatically, but this brings high I/O and CPU usage.

It is recommended to create swap no larger than twice the actual memory size.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Environment Installation

  • Supported OS: Debian 11+, Ubuntu 20.04+
  • Automatically installs QEMU/KVM, libvirt, bridge utilities, and all related components
  • Automatically configures the host bridge (virbr0) and NAT network
  • Automatically detects public IPv6 address and configures IPv6 network (if present)
  • Supports x86_64 and ARM64 architecture servers
shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

TIP

After installation, it is recommended to run virsh list --all to verify that the KVM environment is working correctly.

Uninstall QEMU/KVM Environment

One-click uninstall of the complete QEMU/KVM environment, including all virtual machines, images, networks, and auxiliary files:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

WARNING

The script will require you to enter yes to confirm before execution. This operation is irreversible. Content deleted includes all virtual machines, images, and QEMU/KVM network configurations. Reset procedure: run uninstall first, then run install again to verify the entire installation process from scratch.

',15)]))}const m=s(n,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_qemu_qemu_install.md.Dlupwn8V.lean.js b/assets/en_guide_qemu_qemu_install.md.CJGX2MBk.lean.js similarity index 86% rename from assets/en_guide_qemu_qemu_install.md.Dlupwn8V.lean.js rename to assets/en_guide_qemu_qemu_install.md.CJGX2MBk.lean.js index 21c0eb1778..064d04dec6 100644 --- a/assets/en_guide_qemu_qemu_install.md.Dlupwn8V.lean.js +++ b/assets/en_guide_qemu_qemu_install.md.CJGX2MBk.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_install.md","filePath":"en/guide/qemu/qemu_install.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_install.md"};function l(r,i,o,p,h,d){return e(),a("div",null,i[0]||(i[0]=[t("",15)]))}const m=s(n,[["render",l]]);export{u as __pageData,m as default}; +import{_ as s,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_install.md","filePath":"en/guide/qemu/qemu_install.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_install.md"};function l(r,i,o,p,h,d){return e(),a("div",null,i[0]||(i[0]=[t("",15)]))}const m=s(n,[["render",l]]);export{u as __pageData,m as default}; diff --git a/assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.js b/assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.js similarity index 98% rename from assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.js rename to assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.js index dba4ee1189..614b7cdc6c 100644 --- a/assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.js +++ b/assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as o}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_precheck.md","filePath":"en/guide/qemu/qemu_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/qemu/qemu_precheck.md"};function s(n,t,l,d,c,u){return i(),a("div",null,t[0]||(t[0]=[o('

Introduction

The following is an introduction to the non-customized part. The customized part has its own corresponding introduction; please do not mix them up.

Please give the project a Star for free support --> https://github.com/oneclickvirt/qemu

Project Features

Virtualization based on QEMU/KVM, supporting batch or individual creation of KVM virtual machines without needing Proxmox VE or Incus management platforms

  • Pure QEMU/KVM virtualization solution, lightweight with no additional management platform required
  • Each virtual machine comes with its own dedicated SSH port and port mapping
  • Supports IPv4/IPv6 automatic allocation and port forwarding
  • Supports batch creation with automatic logging to a log file
  • Supports X86_64 and ARM64 architectures
  • Supports domestic CDN mirror acceleration

Supported Systems (Host)

Systemamd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

Configuration Requirements

  • Host must support KVM hardware virtualization (/dev/kvm available)
  • Kernel version: ≥ 4.15
  • Architecture: x86_64 (amd64) or ARM64
  • Memory: at least 1GB available (excluding host OS overhead)
  • Storage: at least 10GB available disk space
  • OS: Debian 11+, Ubuntu 20.04+

WARNING

Before using this project, make sure the host supports KVM virtualization. You can check with the following command:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

A result greater than 0 indicates KVM virtualization is supported. You can also run ls /dev/kvm to confirm the device file exists.

TIP

If the host does not have an IPv6 subnet but you want to assign IPv6 addresses to virtual machines, the host itself must have a public IPv6 address. The installation script will automatically detect and configure this.

It is recommended to add some SWAP virtual memory before creating virtual machines to avoid sudden memory usage causing the host to crash.

',13)]))}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; +import{_ as e,c as a,o as i,ag as o}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_precheck.md","filePath":"en/guide/qemu/qemu_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/qemu/qemu_precheck.md"};function s(n,t,l,d,c,u){return i(),a("div",null,t[0]||(t[0]=[o('

Introduction

The following is an introduction to the non-customized part. The customized part has its own corresponding introduction; please do not mix them up.

Please give the project a Star for free support --> https://github.com/oneclickvirt/qemu

Project Features

Virtualization based on QEMU/KVM, supporting batch or individual creation of KVM virtual machines without needing Proxmox VE or Incus management platforms

  • Pure QEMU/KVM virtualization solution, lightweight with no additional management platform required
  • Each virtual machine comes with its own dedicated SSH port and port mapping
  • Supports IPv4/IPv6 automatic allocation and port forwarding
  • Supports batch creation with automatic logging to a log file
  • Supports X86_64 and ARM64 architectures
  • Supports domestic CDN mirror acceleration

Supported Systems (Host)

Systemamd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

Configuration Requirements

  • Host must support KVM hardware virtualization (/dev/kvm available)
  • Kernel version: ≥ 4.15
  • Architecture: x86_64 (amd64) or ARM64
  • Memory: at least 1GB available (excluding host OS overhead)
  • Storage: at least 10GB available disk space
  • OS: Debian 11+, Ubuntu 20.04+

WARNING

Before using this project, make sure the host supports KVM virtualization. You can check with the following command:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

A result greater than 0 indicates KVM virtualization is supported. You can also run ls /dev/kvm to confirm the device file exists.

TIP

If the host does not have an IPv6 subnet but you want to assign IPv6 addresses to virtual machines, the host itself must have a public IPv6 address. The installation script will automatically detect and configure this.

It is recommended to add some SWAP virtual memory before creating virtual machines to avoid sudden memory usage causing the host to crash.

',13)]))}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.lean.js b/assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.lean.js similarity index 86% rename from assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.lean.js rename to assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.lean.js index 98ad229b32..ddcb4824a5 100644 --- a/assets/en_guide_qemu_qemu_precheck.md.DiLLa72V.lean.js +++ b/assets/en_guide_qemu_qemu_precheck.md.Db_hUnRO.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as o}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_precheck.md","filePath":"en/guide/qemu/qemu_precheck.md","lastUpdated":1773143516000}'),r={name:"en/guide/qemu/qemu_precheck.md"};function s(n,t,l,d,c,u){return i(),a("div",null,t[0]||(t[0]=[o("",13)]))}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; +import{_ as e,c as a,o as i,ag as o}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_precheck.md","filePath":"en/guide/qemu/qemu_precheck.md","lastUpdated":1773196139000}'),r={name:"en/guide/qemu/qemu_precheck.md"};function s(n,t,l,d,c,u){return i(),a("div",null,t[0]||(t[0]=[o("",13)]))}const m=e(r,[["render",s]]);export{h as __pageData,m as default}; diff --git a/assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.js b/assets/en_guide_qemu_qemu_qa.md.CokSOtlt.js similarity index 99% rename from assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.js rename to assets/en_guide_qemu_qemu_qa.md.CokSOtlt.js index d7d6cd1bea..6f68fb832c 100644 --- a/assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.js +++ b/assets/en_guide_qemu_qemu_qa.md.CokSOtlt.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_qa.md","filePath":"en/guide/qemu/qemu_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/qemu/qemu_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

KVM not available / /dev/kvm does not exist

Check if the host supports hardware virtualization:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_qa.md","filePath":"en/guide/qemu/qemu_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/qemu/qemu_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n(`

FAQ

KVM not available / /dev/kvm does not exist

Check if the host supports hardware virtualization:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
 ls /dev/kvm

If you cannot use KVM on a VPS, the host may not support nested virtualization. Please contact your VPS provider to confirm.

virsh: command not found

The QEMU/KVM environment was not installed correctly. Please re-run the installation script:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

VM cannot access the internet (IPv4)

Check if the iptables NAT rules exist:

shell
iptables -t nat -L POSTROUTING -n -v | grep virbr

If not, add them manually (assuming virbr0 subnet is 192.168.122.0/24):

shell
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
 iptables -A FORWARD -s 192.168.122.0/24 -j ACCEPT
 iptables -A FORWARD -d 192.168.122.0/24 -j ACCEPT

VM IPv6 not working

  1. Confirm the host has a public IPv6 address
  2. Check if the IPv6 bridge is configured:
shell
ip -6 addr show
  1. Confirm the installation script fully executed and configured the IPv6 network.

VM fails to start / status is shut off

Check the VM error log:

shell
virsh dominfo vm1
diff --git a/assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.lean.js b/assets/en_guide_qemu_qemu_qa.md.CokSOtlt.lean.js
similarity index 85%
rename from assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.lean.js
rename to assets/en_guide_qemu_qemu_qa.md.CokSOtlt.lean.js
index 3c01eb20c4..fa80df0f1d 100644
--- a/assets/en_guide_qemu_qemu_qa.md.DWYL6NQl.lean.js
+++ b/assets/en_guide_qemu_qemu_qa.md.CokSOtlt.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_qa.md","filePath":"en/guide/qemu/qemu_qa.md","lastUpdated":1773143516000}'),t={name:"en/guide/qemu/qemu_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",36)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/guide/qemu/qemu_qa.md","filePath":"en/guide/qemu/qemu_qa.md","lastUpdated":1773196139000}'),t={name:"en/guide/qemu/qemu_qa.md"};function l(h,s,p,r,d,k){return e(),a("div",null,s[0]||(s[0]=[n("",36)]))}const u=i(t,[["render",l]]);export{c as __pageData,u as default};
diff --git a/assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.js b/assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.js
similarity index 95%
rename from assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.js
rename to assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.js
index cbd70fff1e..a14987b609 100644
--- a/assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.js
+++ b/assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.js
@@ -1 +1 @@
-import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/qemu/qemu_thanks.md","filePath":"en/guide/qemu/qemu_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_thanks.md"};function o(s,t,p,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i('

Acknowledgements

https://github.com/qemu/qemu

https://github.com/libvirt/libvirt

https://github.com/libvirt/libvirt-python

https://github.com/coreos/ignition

https://github.com/spiritLHLS/addswap

https://www.linux-kvm.org/

',7)]))}const _=e(n,[["render",o]]);export{c as __pageData,_ as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/qemu/qemu_thanks.md","filePath":"en/guide/qemu/qemu_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_thanks.md"};function o(s,t,p,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i('

Acknowledgements

https://github.com/qemu/qemu

https://github.com/libvirt/libvirt

https://github.com/libvirt/libvirt-python

https://github.com/coreos/ignition

https://github.com/spiritLHLS/addswap

https://www.linux-kvm.org/

',7)]))}const _=e(n,[["render",o]]);export{c as __pageData,_ as default}; diff --git a/assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.lean.js b/assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.lean.js similarity index 85% rename from assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.lean.js rename to assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.lean.js index 4876b206a6..52fdf5f1f8 100644 --- a/assets/en_guide_qemu_qemu_thanks.md.Bt6MLM-f.lean.js +++ b/assets/en_guide_qemu_qemu_thanks.md.C2qVQ0i_.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/qemu/qemu_thanks.md","filePath":"en/guide/qemu/qemu_thanks.md","lastUpdated":1773143516000}'),n={name:"en/guide/qemu/qemu_thanks.md"};function o(s,t,p,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i("",7)]))}const _=e(n,[["render",o]]);export{c as __pageData,_ as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en/guide/qemu/qemu_thanks.md","filePath":"en/guide/qemu/qemu_thanks.md","lastUpdated":1773196139000}'),n={name:"en/guide/qemu/qemu_thanks.md"};function o(s,t,p,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i("",7)]))}const _=e(n,[["render",o]]);export{c as __pageData,_ as default}; diff --git a/assets/en_incomplete_bashvm.md.E9fF7lCb.js b/assets/en_incomplete_bashvm.md.CYcAJorD.js similarity index 95% rename from assets/en_incomplete_bashvm.md.E9fF7lCb.js rename to assets/en_incomplete_bashvm.md.CYcAJorD.js index d84e675b3a..49e4c28869 100644 --- a/assets/en_incomplete_bashvm.md.E9fF7lCb.js +++ b/assets/en_incomplete_bashvm.md.CYcAJorD.js @@ -1 +1 @@ -import{_ as e,c as t,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/bashvm.md","filePath":"en/incomplete/bashvm.md","lastUpdated":1773143516000}'),s={name:"en/incomplete/bashvm.md"};function n(i,a,p,h,d,l){return o(),t("div",null,a[0]||(a[0]=[r('

Repo

https://github.com/babywhale321/bashvm

https://bashvm.com/

Description

If you want to go deeper into how to open a VM and how to forward ports, then this program will start completely from the bottom and teach you step by step how to open a VM!

Disadvantages

Very tedious and time consuming, not as fast as other programs to set up a network and open a VM

',7)]))}const b=e(s,[["render",n]]);export{c as __pageData,b as default}; +import{_ as e,c as t,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/bashvm.md","filePath":"en/incomplete/bashvm.md","lastUpdated":1773196139000}'),s={name:"en/incomplete/bashvm.md"};function n(i,a,p,h,d,l){return o(),t("div",null,a[0]||(a[0]=[r('

Repo

https://github.com/babywhale321/bashvm

https://bashvm.com/

Description

If you want to go deeper into how to open a VM and how to forward ports, then this program will start completely from the bottom and teach you step by step how to open a VM!

Disadvantages

Very tedious and time consuming, not as fast as other programs to set up a network and open a VM

',7)]))}const b=e(s,[["render",n]]);export{c as __pageData,b as default}; diff --git a/assets/en_incomplete_bashvm.md.E9fF7lCb.lean.js b/assets/en_incomplete_bashvm.md.CYcAJorD.lean.js similarity index 85% rename from assets/en_incomplete_bashvm.md.E9fF7lCb.lean.js rename to assets/en_incomplete_bashvm.md.CYcAJorD.lean.js index 212f1f56de..8312e899f3 100644 --- a/assets/en_incomplete_bashvm.md.E9fF7lCb.lean.js +++ b/assets/en_incomplete_bashvm.md.CYcAJorD.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/bashvm.md","filePath":"en/incomplete/bashvm.md","lastUpdated":1773143516000}'),s={name:"en/incomplete/bashvm.md"};function n(i,a,p,h,d,l){return o(),t("div",null,a[0]||(a[0]=[r("",7)]))}const b=e(s,[["render",n]]);export{c as __pageData,b as default}; +import{_ as e,c as t,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/bashvm.md","filePath":"en/incomplete/bashvm.md","lastUpdated":1773196139000}'),s={name:"en/incomplete/bashvm.md"};function n(i,a,p,h,d,l){return o(),t("div",null,a[0]||(a[0]=[r("",7)]))}const b=e(s,[["render",n]]);export{c as __pageData,b as default}; diff --git a/assets/en_incomplete_cockpit.md.CyFnyV6C.js b/assets/en_incomplete_cockpit.md.DPRVDtT0.js similarity index 98% rename from assets/en_incomplete_cockpit.md.CyFnyV6C.js rename to assets/en_incomplete_cockpit.md.DPRVDtT0.js index d55ebfcb39..00a1537d57 100644 --- a/assets/en_incomplete_cockpit.md.CyFnyV6C.js +++ b/assets/en_incomplete_cockpit.md.DPRVDtT0.js @@ -1 +1 @@ -import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/cockpit.md","filePath":"en/incomplete/cockpit.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/cockpit.md"};function l(p,s,h,r,o,d){return e(),i("div",null,s[0]||(s[0]=[t('

Repo

hits

https://github.com/oneclickvirt/cockpit

Installation

Supported Systems: Debian,Ubuntu,Almalinux,Rockylinux,Fedora,Centos,Arch

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

Install only with Podman containers

shell
bash install.sh --ct

Install only with virtual machines

shell
bash install.sh --vm

Panel Mount Only

shell
bash install.sh

Both container and VM dependencies are installed

shell
bash install.sh --all

Disadvantages

The network is self-configuring, the mirrors are self-importing, the ports are self-mapped, and there is just one more GUI interface than the command line.

Thanks

https://cockpit-project.org/running.html

',18)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; +import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/cockpit.md","filePath":"en/incomplete/cockpit.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/cockpit.md"};function l(p,s,h,r,o,d){return e(),i("div",null,s[0]||(s[0]=[t('

Repo

hits

https://github.com/oneclickvirt/cockpit

Installation

Supported Systems: Debian,Ubuntu,Almalinux,Rockylinux,Fedora,Centos,Arch

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

Install only with Podman containers

shell
bash install.sh --ct

Install only with virtual machines

shell
bash install.sh --vm

Panel Mount Only

shell
bash install.sh

Both container and VM dependencies are installed

shell
bash install.sh --all

Disadvantages

The network is self-configuring, the mirrors are self-importing, the ports are self-mapped, and there is just one more GUI interface than the command line.

Thanks

https://cockpit-project.org/running.html

',18)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/en_incomplete_cockpit.md.CyFnyV6C.lean.js b/assets/en_incomplete_cockpit.md.DPRVDtT0.lean.js similarity index 85% rename from assets/en_incomplete_cockpit.md.CyFnyV6C.lean.js rename to assets/en_incomplete_cockpit.md.DPRVDtT0.lean.js index 9256b0690d..dfddeab4da 100644 --- a/assets/en_incomplete_cockpit.md.CyFnyV6C.lean.js +++ b/assets/en_incomplete_cockpit.md.DPRVDtT0.lean.js @@ -1 +1 @@ -import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/cockpit.md","filePath":"en/incomplete/cockpit.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/cockpit.md"};function l(p,s,h,r,o,d){return e(),i("div",null,s[0]||(s[0]=[t("",18)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; +import{_ as a,c as i,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/cockpit.md","filePath":"en/incomplete/cockpit.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/cockpit.md"};function l(p,s,h,r,o,d){return e(),i("div",null,s[0]||(s[0]=[t("",18)]))}const u=a(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/assets/en_incomplete_convoy.md.BiEQPyMY.js b/assets/en_incomplete_convoy.md.BiVasIkP.js similarity index 98% rename from assets/en_incomplete_convoy.md.BiEQPyMY.js rename to assets/en_incomplete_convoy.md.BiVasIkP.js index b84d2b0e62..5dedca51fb 100644 --- a/assets/en_incomplete_convoy.md.BiEQPyMY.js +++ b/assets/en_incomplete_convoy.md.BiVasIkP.js @@ -1 +1 @@ -import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/convoy.md","filePath":"en/incomplete/convoy.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/convoy.md"};function l(o,a,r,p,h,c){return s(),t("div",null,a[0]||(a[0]=[i('

Repo

https://github.com/oneclickvirt/convoypanel-scripts

hits

convoypanel-scripts

One-click installation of convoy panel

Prerequisites for installation:

  • PVE is installed, but not the same node(not the same machine)
  • System is debian 11
  • CPU at least 2 cores, hard disk at least 20G, memory at least 4G (memory covers swap)

I don't guarantee that this script is error-free, it's just for my own amusement.

shell
curl -L https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

Thanks

Base on https://github.com/oneclickvirt/pve

Base on https://docs.convoypanel.com/guide/deployment/#installation

Base on https://github.com/ConvoyPanel/panel

',13)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; +import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/convoy.md","filePath":"en/incomplete/convoy.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/convoy.md"};function l(o,a,r,p,h,c){return s(),t("div",null,a[0]||(a[0]=[i('

Repo

https://github.com/oneclickvirt/convoypanel-scripts

hits

convoypanel-scripts

One-click installation of convoy panel

Prerequisites for installation:

  • PVE is installed, but not the same node(not the same machine)
  • System is debian 11
  • CPU at least 2 cores, hard disk at least 20G, memory at least 4G (memory covers swap)

I don't guarantee that this script is error-free, it's just for my own amusement.

shell
curl -L https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

Thanks

Base on https://github.com/oneclickvirt/pve

Base on https://docs.convoypanel.com/guide/deployment/#installation

Base on https://github.com/ConvoyPanel/panel

',13)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/en_incomplete_convoy.md.BiEQPyMY.lean.js b/assets/en_incomplete_convoy.md.BiVasIkP.lean.js similarity index 85% rename from assets/en_incomplete_convoy.md.BiEQPyMY.lean.js rename to assets/en_incomplete_convoy.md.BiVasIkP.lean.js index 2f931ad83c..403a85bb84 100644 --- a/assets/en_incomplete_convoy.md.BiEQPyMY.lean.js +++ b/assets/en_incomplete_convoy.md.BiVasIkP.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/convoy.md","filePath":"en/incomplete/convoy.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/convoy.md"};function l(o,a,r,p,h,c){return s(),t("div",null,a[0]||(a[0]=[i("",13)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; +import{_ as e,c as t,o as s,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/convoy.md","filePath":"en/incomplete/convoy.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/convoy.md"};function l(o,a,r,p,h,c){return s(),t("div",null,a[0]||(a[0]=[i("",13)]))}const m=e(n,[["render",l]]);export{k as __pageData,m as default}; diff --git a/assets/en_incomplete_index.md.CStK-QK9.js b/assets/en_incomplete_index.md.DSVQ049G.js similarity index 95% rename from assets/en_incomplete_index.md.CStK-QK9.js rename to assets/en_incomplete_index.md.DSVQ049G.js index ce05324a5c..cd1f26c3ae 100644 --- a/assets/en_incomplete_index.md.CStK-QK9.js +++ b/assets/en_incomplete_index.md.DSVQ049G.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","description":"","frontmatter":{"layout":"home","title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","hero":{"name":"Other Virtualization Projects","text":"Some incomplete virtualization projects","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"View Projects →","link":"/en/incomplete/webvirtcloud"}]},"features":[{"title":"Notes","details":"Each item in this block has a corresponding drawback, and each item is not as easy to use as the previous ones, and has a certain learning cost."},{"title":"Degree of difficulty","details":"Based on the difficulty of using the program itself, sorted from easiest to hardest, the further back you go the less guidance you'll get with this guide."},{"title":"Project disadvantages","details":"Each project has some drawbacks that result in it not being considered a complete one-click project, and there are some operations that require manual execution of commands that cannot be one-clicked."}]},"headers":[],"relativePath":"en/incomplete/index.md","filePath":"en/incomplete/index.md","lastUpdated":1773143516000}`),i={name:"en/incomplete/index.md"};function o(n,r,s,c,l,d){return a(),t("div")}const p=e(i,[["render",o]]);export{m as __pageData,p as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","description":"","frontmatter":{"layout":"home","title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","hero":{"name":"Other Virtualization Projects","text":"Some incomplete virtualization projects","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"View Projects →","link":"/en/incomplete/webvirtcloud"}]},"features":[{"title":"Notes","details":"Each item in this block has a corresponding drawback, and each item is not as easy to use as the previous ones, and has a certain learning cost."},{"title":"Degree of difficulty","details":"Based on the difficulty of using the program itself, sorted from easiest to hardest, the further back you go the less guidance you'll get with this guide."},{"title":"Project disadvantages","details":"Each project has some drawbacks that result in it not being considered a complete one-click project, and there are some operations that require manual execution of commands that cannot be one-clicked."}]},"headers":[],"relativePath":"en/incomplete/index.md","filePath":"en/incomplete/index.md","lastUpdated":1773196139000}`),i={name:"en/incomplete/index.md"};function o(n,r,s,c,l,d){return a(),t("div")}const p=e(i,[["render",o]]);export{m as __pageData,p as default}; diff --git a/assets/en_incomplete_index.md.CStK-QK9.lean.js b/assets/en_incomplete_index.md.DSVQ049G.lean.js similarity index 95% rename from assets/en_incomplete_index.md.CStK-QK9.lean.js rename to assets/en_incomplete_index.md.DSVQ049G.lean.js index ce05324a5c..cd1f26c3ae 100644 --- a/assets/en_incomplete_index.md.CStK-QK9.lean.js +++ b/assets/en_incomplete_index.md.DSVQ049G.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","description":"","frontmatter":{"layout":"home","title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","hero":{"name":"Other Virtualization Projects","text":"Some incomplete virtualization projects","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"View Projects →","link":"/en/incomplete/webvirtcloud"}]},"features":[{"title":"Notes","details":"Each item in this block has a corresponding drawback, and each item is not as easy to use as the previous ones, and has a certain learning cost."},{"title":"Degree of difficulty","details":"Based on the difficulty of using the program itself, sorted from easiest to hardest, the further back you go the less guidance you'll get with this guide."},{"title":"Project disadvantages","details":"Each project has some drawbacks that result in it not being considered a complete one-click project, and there are some operations that require manual execution of commands that cannot be one-clicked."}]},"headers":[],"relativePath":"en/incomplete/index.md","filePath":"en/incomplete/index.md","lastUpdated":1773143516000}`),i={name:"en/incomplete/index.md"};function o(n,r,s,c,l,d){return a(),t("div")}const p=e(i,[["render",o]]);export{m as __pageData,p as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","description":"","frontmatter":{"layout":"home","title":"Other Virtualization Projects","titleTemplate":"Other Incomplete Virtualization Projects","hero":{"name":"Other Virtualization Projects","text":"Some incomplete virtualization projects","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"View Projects →","link":"/en/incomplete/webvirtcloud"}]},"features":[{"title":"Notes","details":"Each item in this block has a corresponding drawback, and each item is not as easy to use as the previous ones, and has a certain learning cost."},{"title":"Degree of difficulty","details":"Based on the difficulty of using the program itself, sorted from easiest to hardest, the further back you go the less guidance you'll get with this guide."},{"title":"Project disadvantages","details":"Each project has some drawbacks that result in it not being considered a complete one-click project, and there are some operations that require manual execution of commands that cannot be one-clicked."}]},"headers":[],"relativePath":"en/incomplete/index.md","filePath":"en/incomplete/index.md","lastUpdated":1773196139000}`),i={name:"en/incomplete/index.md"};function o(n,r,s,c,l,d){return a(),t("div")}const p=e(i,[["render",o]]);export{m as __pageData,p as default}; diff --git a/assets/en_incomplete_pterodactyl.md.DYrLgbEB.js b/assets/en_incomplete_pterodactyl.md.pBXIj7vG.js similarity index 99% rename from assets/en_incomplete_pterodactyl.md.DYrLgbEB.js rename to assets/en_incomplete_pterodactyl.md.pBXIj7vG.js index 728c9d1be4..25ec853b1b 100644 --- a/assets/en_incomplete_pterodactyl.md.DYrLgbEB.js +++ b/assets/en_incomplete_pterodactyl.md.pBXIj7vG.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/pterodactyl.md","filePath":"en/incomplete/pterodactyl.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/pterodactyl.md"};function l(h,s,p,r,d,o){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/pterodactyl

hits

pterodactyl-scripts

After further research, it was found that creating servers and binding users is too cumbersome compared to using native Docker directly, so further development is currently suspended.

Description

Currently supported systems:

OS TypeVersion RangeNotes
Ubuntu20.04 (recommended), 22.04, 24.04Supported
Debian11 (Bullseye), 12 (Bookworm)Supported

Panel

On the panel side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

Wings

On the wings side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

Import

On the panel side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

This will generate a command to be executed on the wings side.

After executing the generated command, wait for more than 20 seconds to avoid issues caused by unfinished initialization processes. Then on the wings side, run:

shell
bash install_wings.sh

Then go to http://<your_ip>/admin/nodes and you should see your node has been automatically added and managed, with a green heartbeat.

Thanks

https://pterodactyl.io/

',23)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/pterodactyl.md","filePath":"en/incomplete/pterodactyl.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/pterodactyl.md"};function l(h,s,p,r,d,o){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/pterodactyl

hits

pterodactyl-scripts

After further research, it was found that creating servers and binding users is too cumbersome compared to using native Docker directly, so further development is currently suspended.

Description

Currently supported systems:

OS TypeVersion RangeNotes
Ubuntu20.04 (recommended), 22.04, 24.04Supported
Debian11 (Bullseye), 12 (Bookworm)Supported

Panel

On the panel side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

Wings

On the wings side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

Import

On the panel side, run:

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

This will generate a command to be executed on the wings side.

After executing the generated command, wait for more than 20 seconds to avoid issues caused by unfinished initialization processes. Then on the wings side, run:

shell
bash install_wings.sh

Then go to http://<your_ip>/admin/nodes and you should see your node has been automatically added and managed, with a green heartbeat.

Thanks

https://pterodactyl.io/

',23)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/en_incomplete_pterodactyl.md.DYrLgbEB.lean.js b/assets/en_incomplete_pterodactyl.md.pBXIj7vG.lean.js similarity index 86% rename from assets/en_incomplete_pterodactyl.md.DYrLgbEB.lean.js rename to assets/en_incomplete_pterodactyl.md.pBXIj7vG.lean.js index d0caede603..ed6d3b7147 100644 --- a/assets/en_incomplete_pterodactyl.md.DYrLgbEB.lean.js +++ b/assets/en_incomplete_pterodactyl.md.pBXIj7vG.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/pterodactyl.md","filePath":"en/incomplete/pterodactyl.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/pterodactyl.md"};function l(h,s,p,r,d,o){return t(),a("div",null,s[0]||(s[0]=[e("",23)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/pterodactyl.md","filePath":"en/incomplete/pterodactyl.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/pterodactyl.md"};function l(h,s,p,r,d,o){return t(),a("div",null,s[0]||(s[0]=[e("",23)]))}const g=i(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/en_incomplete_virtfusion.md.C0_rAZns.js b/assets/en_incomplete_virtfusion.md.CEcQqESq.js similarity index 99% rename from assets/en_incomplete_virtfusion.md.C0_rAZns.js rename to assets/en_incomplete_virtfusion.md.CEcQqESq.js index f2a2024361..4f5c358eee 100644 --- a/assets/en_incomplete_virtfusion.md.C0_rAZns.js +++ b/assets/en_incomplete_virtfusion.md.CEcQqESq.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtfusion.md","filePath":"en/incomplete/virtfusion.md","lastUpdated":1773143516000}'),e={name:"en/incomplete/virtfusion.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

Official Documents

https://docs.virtfusion.com/next/installation/control-server/#activating-a-license

One-click Installation

debian11

shell
apt install curl -y
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtfusion.md","filePath":"en/incomplete/virtfusion.md","lastUpdated":1773196139000}'),e={name:"en/incomplete/virtfusion.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

Official Documents

https://docs.virtfusion.com/next/installation/control-server/#activating-a-license

One-click Installation

debian11

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-debian-11.sh | sh -s -- --verbose

debian12

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-debian-12.sh | sh -s -- --verbose

RHEL8

shell
dnf install curl -y
 curl https://install.virtfusion.net/install-control-rhel-8.sh | sh -s -- --verbose

RHEL9

shell
dnf install curl -y
diff --git a/assets/en_incomplete_virtfusion.md.C0_rAZns.lean.js b/assets/en_incomplete_virtfusion.md.CEcQqESq.lean.js
similarity index 86%
rename from assets/en_incomplete_virtfusion.md.C0_rAZns.lean.js
rename to assets/en_incomplete_virtfusion.md.CEcQqESq.lean.js
index af5f23ceb0..575e8a690a 100644
--- a/assets/en_incomplete_virtfusion.md.C0_rAZns.lean.js
+++ b/assets/en_incomplete_virtfusion.md.CEcQqESq.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtfusion.md","filePath":"en/incomplete/virtfusion.md","lastUpdated":1773143516000}'),e={name:"en/incomplete/virtfusion.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",18)]))}const F=i(e,[["render",t]]);export{o as __pageData,F as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtfusion.md","filePath":"en/incomplete/virtfusion.md","lastUpdated":1773196139000}'),e={name:"en/incomplete/virtfusion.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",18)]))}const F=i(e,[["render",t]]);export{o as __pageData,F as default};
diff --git a/assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.js b/assets/en_incomplete_virtualizor-docker.md.6Ql1K265.js
similarity index 95%
rename from assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.js
rename to assets/en_incomplete_virtualizor-docker.md.6Ql1K265.js
index aba935fa25..8fadbb99c0 100644
--- a/assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.js
+++ b/assets/en_incomplete_virtualizor-docker.md.6Ql1K265.js
@@ -1 +1 @@
-import{_ as t,c as a,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtualizor-docker.md","filePath":"en/incomplete/virtualizor-docker.md","lastUpdated":1773143516000}'),i={name:"en/incomplete/virtualizor-docker.md"};function n(s,e,d,l,p,c){return o(),a("div",null,e[0]||(e[0]=[r('

Repo

https://github.com/ivstiv/virtualizor-docker

Description

The virtualizor opened in the docker

The certificate used is a trial certificate, valid for one day, and only the OpenVZ virtualization method is installed by default

Disadvantages

There is no community, so you have to figure it out on your own.

Ports for admin panel Don't look at the script's prompt messages, go with the repository instructions.

',8)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default}; +import{_ as t,c as a,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtualizor-docker.md","filePath":"en/incomplete/virtualizor-docker.md","lastUpdated":1773196139000}'),i={name:"en/incomplete/virtualizor-docker.md"};function n(s,e,d,l,p,c){return o(),a("div",null,e[0]||(e[0]=[r('

Repo

https://github.com/ivstiv/virtualizor-docker

Description

The virtualizor opened in the docker

The certificate used is a trial certificate, valid for one day, and only the OpenVZ virtualization method is installed by default

Disadvantages

There is no community, so you have to figure it out on your own.

Ports for admin panel Don't look at the script's prompt messages, go with the repository instructions.

',8)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.lean.js b/assets/en_incomplete_virtualizor-docker.md.6Ql1K265.lean.js similarity index 86% rename from assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.lean.js rename to assets/en_incomplete_virtualizor-docker.md.6Ql1K265.lean.js index 7804b2486d..538a350353 100644 --- a/assets/en_incomplete_virtualizor-docker.md.Dci0ze-C.lean.js +++ b/assets/en_incomplete_virtualizor-docker.md.6Ql1K265.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtualizor-docker.md","filePath":"en/incomplete/virtualizor-docker.md","lastUpdated":1773143516000}'),i={name:"en/incomplete/virtualizor-docker.md"};function n(s,e,d,l,p,c){return o(),a("div",null,e[0]||(e[0]=[r("",8)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default}; +import{_ as t,c as a,o,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/virtualizor-docker.md","filePath":"en/incomplete/virtualizor-docker.md","lastUpdated":1773196139000}'),i={name:"en/incomplete/virtualizor-docker.md"};function n(s,e,d,l,p,c){return o(),a("div",null,e[0]||(e[0]=[r("",8)]))}const m=t(i,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/en_incomplete_webvirtcloud.md.CMGt2znu.js b/assets/en_incomplete_webvirtcloud.md.xtlpSx_X.js similarity index 99% rename from assets/en_incomplete_webvirtcloud.md.CMGt2znu.js rename to assets/en_incomplete_webvirtcloud.md.xtlpSx_X.js index 6a065d9ef6..ee3d48638a 100644 --- a/assets/en_incomplete_webvirtcloud.md.CMGt2znu.js +++ b/assets/en_incomplete_webvirtcloud.md.xtlpSx_X.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/admin.DfyN1XBs.png",l="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",F=JSON.parse('{"title":"WebVirtCloud Installation Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud.md","filePath":"en/incomplete/webvirtcloud.md","lastUpdated":1773143516000}'),r={name:"en/incomplete/webvirtcloud.md"};function h(o,s,d,k,c,g){return e(),a("div",null,s[0]||(s[0]=[n('

WebVirtCloud Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

The original official deleted the project is no longer maintained, here can only be deployed with my personal fixes and changes to the code.

Rendering display

admin

user

1. Controller Installation

System Requirements

Minimum Requirements:

  • CPU: 1 core
  • Memory: 1 GB RAM
  • Storage: 10 GB free space
  • System: Debian11+, Ubuntu20.04+, Centos8+, AlmaLinux8+, RockyLinux8+

Default Login Information

  • Username: admin@spiritlhl.net
  • Password: admin

Panel Access

  • User Panel: https://192-168-0-114.nip.io
  • Admin Backend: https://192-168-0-114.nip.io/admin

Note: Replace 192.168.0.114 with your public IP to get the actual accessible address.

Installation Command

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh -o install_webvirt_cloud.sh \\
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/admin.DfyN1XBs.png",l="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",F=JSON.parse('{"title":"WebVirtCloud Installation Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud.md","filePath":"en/incomplete/webvirtcloud.md","lastUpdated":1773196139000}'),r={name:"en/incomplete/webvirtcloud.md"};function h(o,s,d,k,c,g){return e(),a("div",null,s[0]||(s[0]=[n('

WebVirtCloud Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

The original official deleted the project is no longer maintained, here can only be deployed with my personal fixes and changes to the code.

Rendering display

admin

user

1. Controller Installation

System Requirements

Minimum Requirements:

  • CPU: 1 core
  • Memory: 1 GB RAM
  • Storage: 10 GB free space
  • System: Debian11+, Ubuntu20.04+, Centos8+, AlmaLinux8+, RockyLinux8+

Default Login Information

  • Username: admin@spiritlhl.net
  • Password: admin

Panel Access

  • User Panel: https://192-168-0-114.nip.io
  • Admin Backend: https://192-168-0-114.nip.io/admin

Note: Replace 192.168.0.114 with your public IP to get the actual accessible address.

Installation Command

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh -o install_webvirt_cloud.sh \\
 && chmod +x install_webvirt_cloud.sh \\
 && bash install_webvirt_cloud.sh

TIP

The execution process may be stuck in the clone repository has not been moving, at this time, press ctrl + c to exit the implementation, re-execution of the installation script on the line, the Department of Docker installation is stuck in the stage of the build project.

2. Compute Node Installation

Important: Hypervisor and Controller cannot be installed on the same virtual machine, otherwise network conflicts will occur.

System Requirements

Recommended Configuration:

  • CPU: 2 cores
  • Memory: 4 GB RAM
  • Storage: 40 GB free space
  • System: AlmaLinux8+, RockyLinux8+

Additional Notes:

  • Higher configurations are recommended for actual use; the test environment is only sufficient for running 4 minimal virtual machines.
  • Servers with KVM nested virtualization support are recommended. If VM-x/AMD-V/Hyper-V is not enabled, it will automatically switch to QEMU using TCG emulation to set up virtual machines, though performance will be reduced.
  • The installation skips environment checks and uses binary files directly, so no dependencies need to be installed.

Environment Check

Check if the server supports KVM nested virtualization:

bash
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs

Select hardware individual test

Compute Node Installation Steps

  1. Download the installation script:

    bash
    curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_hypervisor.sh -o install_hypervisor.sh \\
     && chmod +x install_hypervisor.sh
  2. Execute installation (replace with your Controller IP):

    bash
    bash install_hypervisor.sh x.x.x.x

    Replace x.x.x.x with the actual IP address of your Controller.

  3. Node Management in Panel
    After execution, there will be prompts for information needed in the Controller panel.
    In the panel, the Hostname to be entered is the current compute node's IPv4 address, and you need to enter the Token to identify the node.

NetworkManager Version Issue

During installation, you may encounter the following error:

Connection 'eth0' (bed050e9-ff49-4665-8112-24ddf2a1cd3c) successfully deleted.
diff --git a/assets/en_incomplete_webvirtcloud.md.CMGt2znu.lean.js b/assets/en_incomplete_webvirtcloud.md.xtlpSx_X.lean.js
similarity index 89%
rename from assets/en_incomplete_webvirtcloud.md.CMGt2znu.lean.js
rename to assets/en_incomplete_webvirtcloud.md.xtlpSx_X.lean.js
index 6fdccb1095..838716b5b1 100644
--- a/assets/en_incomplete_webvirtcloud.md.CMGt2znu.lean.js
+++ b/assets/en_incomplete_webvirtcloud.md.xtlpSx_X.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/admin.DfyN1XBs.png",l="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",F=JSON.parse('{"title":"WebVirtCloud Installation Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud.md","filePath":"en/incomplete/webvirtcloud.md","lastUpdated":1773143516000}'),r={name:"en/incomplete/webvirtcloud.md"};function h(o,s,d,k,c,g){return e(),a("div",null,s[0]||(s[0]=[n("",104)]))}const m=i(r,[["render",h]]);export{F as __pageData,m as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/admin.DfyN1XBs.png",l="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",F=JSON.parse('{"title":"WebVirtCloud Installation Guide","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud.md","filePath":"en/incomplete/webvirtcloud.md","lastUpdated":1773196139000}'),r={name:"en/incomplete/webvirtcloud.md"};function h(o,s,d,k,c,g){return e(),a("div",null,s[0]||(s[0]=[n("",104)]))}const m=i(r,[["render",h]]);export{F as __pageData,m as default};
diff --git a/assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.js b/assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.js
similarity index 99%
rename from assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.js
rename to assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.js
index 656ba086c4..76530a2328 100644
--- a/assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.js
+++ b/assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.js
@@ -1,4 +1,4 @@
-import{_ as s,c as t,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/vcr1.NRLOOynQ.jpg",o="/assets/vcr2.DC9j-Ib5.jpg",l="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",p="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",c="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",g="/assets/vcr9.B4apCqgi.jpg",u="/assets/vcr10.D8t6cQ5v.jpg",m="/assets/vcr11.Cz1VMbIx.jpg",k="/assets/vcr12.BNQe5j_u.jpg",b="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",y="/assets/vcr14.Cjyr65Qp.jpg",f="/assets/resize.ppnxVOAW.jpg",E=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud_retspen.md","filePath":"en/incomplete/webvirtcloud_retspen.md","lastUpdated":1773143516000}'),_={name:"en/incomplete/webvirtcloud_retspen.md"};function w(F,e,C,B,z,x){return i(),t("div",null,e[0]||(e[0]=[a(`

WebVirtCloud Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

Origin Repository::https://github.com/oneclickvirt/webvirtcloud_retspen

Controller Node and Computer Node Installation

  • Supported Systems: Debian10+, Ubuntu18.04+, Centos8+, AlmaLinux8+, RockyLinux8+
  • Recommended system: Debian12+, Ubuntu22.04+.
  • Lower versions of the system will automatically compile the new version of python installation package before deployment, so it is recommended to use a new system without compiling directly installed!
bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud_retspen.sh -o install_webvirt_cloud_retspen.sh \\
+import{_ as s,c as t,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/vcr1.NRLOOynQ.jpg",o="/assets/vcr2.DC9j-Ib5.jpg",l="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",p="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",c="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",g="/assets/vcr9.B4apCqgi.jpg",u="/assets/vcr10.D8t6cQ5v.jpg",m="/assets/vcr11.Cz1VMbIx.jpg",k="/assets/vcr12.BNQe5j_u.jpg",b="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",y="/assets/vcr14.Cjyr65Qp.jpg",f="/assets/resize.ppnxVOAW.jpg",E=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud_retspen.md","filePath":"en/incomplete/webvirtcloud_retspen.md","lastUpdated":1773196139000}'),_={name:"en/incomplete/webvirtcloud_retspen.md"};function w(F,e,C,B,z,x){return i(),t("div",null,e[0]||(e[0]=[a(`

WebVirtCloud Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

Origin Repository::https://github.com/oneclickvirt/webvirtcloud_retspen

Controller Node and Computer Node Installation

  • Supported Systems: Debian10+, Ubuntu18.04+, Centos8+, AlmaLinux8+, RockyLinux8+
  • Recommended system: Debian12+, Ubuntu22.04+.
  • Lower versions of the system will automatically compile the new version of python installation package before deployment, so it is recommended to use a new system without compiling directly installed!
bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud_retspen.sh -o install_webvirt_cloud_retspen.sh \\
 && chmod +x install_webvirt_cloud_retspen.sh \\
 && bash install_webvirt_cloud_retspen.sh

After installation is complete, open the public IP address to access the login page.

The default login username and password are both admin. Make sure to change them after logging in.

Creating a Linux Virtual Machine

After entering the control panel and changing the admin password, you need to manually configure a compute node.

vcr1

Select the type as Local, and name it local.

vcr2

After creation, click the eye icon to enter the view.

vcr3

Under the Storage section, add a storage entry. Choose the type Dir and name it local. If you need to use an ISO for system boot, you’ll need to create a storage of type ISO. If not, just follow this guide and create only the Dir type.

vcr4

vcr5

After creation, download the appropriate qcow2 image for the system using the repository below:

https://github.com/oneclickvirt/pve_kvm_images/releases/tag/images

In the example, a Debian 12 qcow2 image is used:

shell
cd /var/lib/libvirt/images
 curl -sSLO https://github.com/oneclickvirt/pve_kvm_images/releases/download/images/debian12.qcow2
diff --git a/assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.lean.js b/assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.lean.js
similarity index 93%
rename from assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.lean.js
rename to assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.lean.js
index b83aa21d55..573f51f3dd 100644
--- a/assets/en_incomplete_webvirtcloud_retspen.md.3yqNohoy.lean.js
+++ b/assets/en_incomplete_webvirtcloud_retspen.md.Dv1f1cx6.lean.js
@@ -1 +1 @@
-import{_ as s,c as t,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/vcr1.NRLOOynQ.jpg",o="/assets/vcr2.DC9j-Ib5.jpg",l="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",p="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",c="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",g="/assets/vcr9.B4apCqgi.jpg",u="/assets/vcr10.D8t6cQ5v.jpg",m="/assets/vcr11.Cz1VMbIx.jpg",k="/assets/vcr12.BNQe5j_u.jpg",b="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",y="/assets/vcr14.Cjyr65Qp.jpg",f="/assets/resize.ppnxVOAW.jpg",E=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud_retspen.md","filePath":"en/incomplete/webvirtcloud_retspen.md","lastUpdated":1773143516000}'),_={name:"en/incomplete/webvirtcloud_retspen.md"};function w(F,e,C,B,z,x){return i(),t("div",null,e[0]||(e[0]=[a("",68)]))}const q=s(_,[["render",w]]);export{E as __pageData,q as default};
+import{_ as s,c as t,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const n="/assets/vcr1.NRLOOynQ.jpg",o="/assets/vcr2.DC9j-Ib5.jpg",l="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",p="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",c="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",g="/assets/vcr9.B4apCqgi.jpg",u="/assets/vcr10.D8t6cQ5v.jpg",m="/assets/vcr11.Cz1VMbIx.jpg",k="/assets/vcr12.BNQe5j_u.jpg",b="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",y="/assets/vcr14.Cjyr65Qp.jpg",f="/assets/resize.ppnxVOAW.jpg",E=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud_retspen.md","filePath":"en/incomplete/webvirtcloud_retspen.md","lastUpdated":1773196139000}'),_={name:"en/incomplete/webvirtcloud_retspen.md"};function w(F,e,C,B,z,x){return i(),t("div",null,e[0]||(e[0]=[a("",68)]))}const q=s(_,[["render",w]]);export{E as __pageData,q as default};
diff --git a/assets/en_incomplete_webvirtmgr.md.BqAX0-at.js b/assets/en_incomplete_webvirtmgr.md.BUYa6s-m.js
similarity index 98%
rename from assets/en_incomplete_webvirtmgr.md.BqAX0-at.js
rename to assets/en_incomplete_webvirtmgr.md.BUYa6s-m.js
index 8c7bcfbd30..e5226a736e 100644
--- a/assets/en_incomplete_webvirtmgr.md.BqAX0-at.js
+++ b/assets/en_incomplete_webvirtmgr.md.BUYa6s-m.js
@@ -1,3 +1,3 @@
-import{_ as e,c as i,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtmgr.md","filePath":"en/incomplete/webvirtmgr.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/webvirtmgr.md"};function l(r,t,o,p,h,d){return a(),i("div",null,t[0]||(t[0]=[s(`

WebVirtMgr Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

Origin Repository: https://github.com/retspen/webvirtmgr

Control nodes and compute nodes installed at the same time

  • Supported systems: Debian[8,9,10],Ubuntu[16.04,18.04,20.04]
  • The system will automatically compile python 2.7 installer and then deployed, there will be an error in the compilation process but do not pay attention to it, as long as the scripts are still running, it means that everything is fine!
bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \\
+import{_ as e,c as i,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtmgr.md","filePath":"en/incomplete/webvirtmgr.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/webvirtmgr.md"};function l(r,t,o,p,h,d){return a(),i("div",null,t[0]||(t[0]=[s(`

WebVirtMgr Installation Guide

hits

Repository: https://github.com/oneclickvirt/webvirtcloud

Origin Repository: https://github.com/retspen/webvirtmgr

Control nodes and compute nodes installed at the same time

  • Supported systems: Debian[8,9,10],Ubuntu[16.04,18.04,20.04]
  • The system will automatically compile python 2.7 installer and then deployed, there will be an error in the compilation process but do not pay attention to it, as long as the scripts are still running, it means that everything is fine!
bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \\
 && chmod +x install_webvirtmgr.sh \\
 && bash install_webvirtmgr.sh

Disadvantages

The origin project is no longer maintained and is not recommended at all.

`,9)]))}const g=e(n,[["render",l]]);export{m as __pageData,g as default}; diff --git a/assets/en_incomplete_webvirtmgr.md.BqAX0-at.lean.js b/assets/en_incomplete_webvirtmgr.md.BUYa6s-m.lean.js similarity index 86% rename from assets/en_incomplete_webvirtmgr.md.BqAX0-at.lean.js rename to assets/en_incomplete_webvirtmgr.md.BUYa6s-m.lean.js index 68410fdf98..5ebace42bd 100644 --- a/assets/en_incomplete_webvirtmgr.md.BqAX0-at.lean.js +++ b/assets/en_incomplete_webvirtmgr.md.BUYa6s-m.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtmgr.md","filePath":"en/incomplete/webvirtmgr.md","lastUpdated":1773143516000}'),n={name:"en/incomplete/webvirtmgr.md"};function l(r,t,o,p,h,d){return a(),i("div",null,t[0]||(t[0]=[s("",9)]))}const g=e(n,[["render",l]]);export{m as __pageData,g as default}; +import{_ as e,c as i,o as a,ag as s}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtmgr.md","filePath":"en/incomplete/webvirtmgr.md","lastUpdated":1773196139000}'),n={name:"en/incomplete/webvirtmgr.md"};function l(r,t,o,p,h,d){return a(),i("div",null,t[0]||(t[0]=[s("",9)]))}const g=e(n,[["render",l]]);export{m as __pageData,g as default}; diff --git a/assets/en_index.md.CgmjKWj5.js b/assets/en_index.md.xiERJy12.js similarity index 96% rename from assets/en_index.md.CgmjKWj5.js rename to assets/en_index.md.xiERJy12.js index 666f3d62d5..b2b6bcf064 100644 --- a/assets/en_index.md.CgmjKWj5.js +++ b/assets/en_index.md.xiERJy12.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"K'thun","titleTemplate":"One Click Virtualization","description":"","frontmatter":{"layout":"home","title":"K'thun","titleTemplate":"One Click Virtualization","tagline":"Open source, easy to use server virtualization project","hero":{"name":"One Click Virtualization","text":"Open source, easy to use server virtualization project","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Learn More →","link":"/en/guide/dashboard"}]},"features":[{"title":"One Click Use","details":"Supports one-click command installation and use, easy to create virtual machines or containers on X86_64 and ARM architecture servers"},{"title":"Based on mainstream systems development","details":"Based on long-term maintenance releases of Debian, Ubuntu, Centos, etc., there is always a way to virtualize containers or virtual machines, no matter what the system is."},{"title":"Port forwarding and IP assignment automation","details":"Self-contained internal and external port forwarding and automatic IP address allocation (including IPV6、IPV4), including TCP, UDP, VNC, RDP and other protocols, without manual management"},{"title":"Batch Virtualization","details":"Supports batch opening of containers or virtual machines using KVM, LXC, Docker virtualization"},{"title":"Multi-system and multi-environment support","details":"Open containers or virtual machines that support mainstream systems, including Linux, Windows, MacOS, Android as well as pure browser or desktop environments."},{"title":"Self-limiting abuse","details":"Some virtualized containers or VMs support the setting of masks and loading limits to avoid being used for abuse."}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1773143516000}`),n={name:"en/index.md"};function i(o,s,r,l,c,d){return a(),t("div")}const p=e(n,[["render",i]]);export{m as __pageData,p as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"K'thun","titleTemplate":"One Click Virtualization","description":"","frontmatter":{"layout":"home","title":"K'thun","titleTemplate":"One Click Virtualization","tagline":"Open source, easy to use server virtualization project","hero":{"name":"One Click Virtualization","text":"Open source, easy to use server virtualization project","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Learn More →","link":"/en/guide/dashboard"}]},"features":[{"title":"One Click Use","details":"Supports one-click command installation and use, easy to create virtual machines or containers on X86_64 and ARM architecture servers"},{"title":"Based on mainstream systems development","details":"Based on long-term maintenance releases of Debian, Ubuntu, Centos, etc., there is always a way to virtualize containers or virtual machines, no matter what the system is."},{"title":"Port forwarding and IP assignment automation","details":"Self-contained internal and external port forwarding and automatic IP address allocation (including IPV6、IPV4), including TCP, UDP, VNC, RDP and other protocols, without manual management"},{"title":"Batch Virtualization","details":"Supports batch opening of containers or virtual machines using KVM, LXC, Docker virtualization"},{"title":"Multi-system and multi-environment support","details":"Open containers or virtual machines that support mainstream systems, including Linux, Windows, MacOS, Android as well as pure browser or desktop environments."},{"title":"Self-limiting abuse","details":"Some virtualized containers or VMs support the setting of masks and loading limits to avoid being used for abuse."}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1773196139000}`),n={name:"en/index.md"};function i(o,s,r,l,c,d){return a(),t("div")}const p=e(n,[["render",i]]);export{m as __pageData,p as default}; diff --git a/assets/en_index.md.CgmjKWj5.lean.js b/assets/en_index.md.xiERJy12.lean.js similarity index 96% rename from assets/en_index.md.CgmjKWj5.lean.js rename to assets/en_index.md.xiERJy12.lean.js index 666f3d62d5..b2b6bcf064 100644 --- a/assets/en_index.md.CgmjKWj5.lean.js +++ b/assets/en_index.md.xiERJy12.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"K'thun","titleTemplate":"One Click Virtualization","description":"","frontmatter":{"layout":"home","title":"K'thun","titleTemplate":"One Click Virtualization","tagline":"Open source, easy to use server virtualization project","hero":{"name":"One Click Virtualization","text":"Open source, easy to use server virtualization project","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Learn More →","link":"/en/guide/dashboard"}]},"features":[{"title":"One Click Use","details":"Supports one-click command installation and use, easy to create virtual machines or containers on X86_64 and ARM architecture servers"},{"title":"Based on mainstream systems development","details":"Based on long-term maintenance releases of Debian, Ubuntu, Centos, etc., there is always a way to virtualize containers or virtual machines, no matter what the system is."},{"title":"Port forwarding and IP assignment automation","details":"Self-contained internal and external port forwarding and automatic IP address allocation (including IPV6、IPV4), including TCP, UDP, VNC, RDP and other protocols, without manual management"},{"title":"Batch Virtualization","details":"Supports batch opening of containers or virtual machines using KVM, LXC, Docker virtualization"},{"title":"Multi-system and multi-environment support","details":"Open containers or virtual machines that support mainstream systems, including Linux, Windows, MacOS, Android as well as pure browser or desktop environments."},{"title":"Self-limiting abuse","details":"Some virtualized containers or VMs support the setting of masks and loading limits to avoid being used for abuse."}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1773143516000}`),n={name:"en/index.md"};function i(o,s,r,l,c,d){return a(),t("div")}const p=e(n,[["render",i]]);export{m as __pageData,p as default}; +import{_ as e,c as t,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse(`{"title":"K'thun","titleTemplate":"One Click Virtualization","description":"","frontmatter":{"layout":"home","title":"K'thun","titleTemplate":"One Click Virtualization","tagline":"Open source, easy to use server virtualization project","hero":{"name":"One Click Virtualization","text":"Open source, easy to use server virtualization project","image":"https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"Learn More →","link":"/en/guide/dashboard"}]},"features":[{"title":"One Click Use","details":"Supports one-click command installation and use, easy to create virtual machines or containers on X86_64 and ARM architecture servers"},{"title":"Based on mainstream systems development","details":"Based on long-term maintenance releases of Debian, Ubuntu, Centos, etc., there is always a way to virtualize containers or virtual machines, no matter what the system is."},{"title":"Port forwarding and IP assignment automation","details":"Self-contained internal and external port forwarding and automatic IP address allocation (including IPV6、IPV4), including TCP, UDP, VNC, RDP and other protocols, without manual management"},{"title":"Batch Virtualization","details":"Supports batch opening of containers or virtual machines using KVM, LXC, Docker virtualization"},{"title":"Multi-system and multi-environment support","details":"Open containers or virtual machines that support mainstream systems, including Linux, Windows, MacOS, Android as well as pure browser or desktop environments."},{"title":"Self-limiting abuse","details":"Some virtualized containers or VMs support the setting of masks and loading limits to avoid being used for abuse."}]},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1773196139000}`),n={name:"en/index.md"};function i(o,s,r,l,c,d){return a(),t("div")}const p=e(n,[["render",i]]);export{m as __pageData,p as default}; diff --git a/assets/guide_block_block_docker.md.Bw_l0FCS.js b/assets/guide_block_block_docker.md.BA0mH0EK.js similarity index 90% rename from assets/guide_block_block_docker.md.Bw_l0FCS.js rename to assets/guide_block_block_docker.md.BA0mH0EK.js index f58c4b9a19..ff03707d3a 100644 --- a/assets/guide_block_block_docker.md.Bw_l0FCS.js +++ b/assets/guide_block_block_docker.md.BA0mH0EK.js @@ -1 +1 @@ -import{_ as o,c as t,o as r,j as a,a as c}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"待开发,敬请期待","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_docker.md","filePath":"guide/block/block_docker.md","lastUpdated":1773143516000}'),d={name:"guide/block/block_docker.md"};function l(s,e,n,i,k,p){return r(),t("div",null,e[0]||(e[0]=[a("h1",{id:"待开发-敬请期待",tabindex:"-1"},[c("待开发,敬请期待 "),a("a",{class:"header-anchor",href:"#待开发-敬请期待","aria-label":'Permalink to "待开发,敬请期待"'},"​")],-1)]))}const b=o(d,[["render",l]]);export{m as __pageData,b as default}; +import{_ as o,c as t,o as r,j as a,a as c}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"待开发,敬请期待","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_docker.md","filePath":"guide/block/block_docker.md","lastUpdated":1773196139000}'),d={name:"guide/block/block_docker.md"};function l(s,e,n,i,k,p){return r(),t("div",null,e[0]||(e[0]=[a("h1",{id:"待开发-敬请期待",tabindex:"-1"},[c("待开发,敬请期待 "),a("a",{class:"header-anchor",href:"#待开发-敬请期待","aria-label":'Permalink to "待开发,敬请期待"'},"​")],-1)]))}const b=o(d,[["render",l]]);export{m as __pageData,b as default}; diff --git a/assets/guide_block_block_docker.md.Bw_l0FCS.lean.js b/assets/guide_block_block_docker.md.BA0mH0EK.lean.js similarity index 90% rename from assets/guide_block_block_docker.md.Bw_l0FCS.lean.js rename to assets/guide_block_block_docker.md.BA0mH0EK.lean.js index f58c4b9a19..ff03707d3a 100644 --- a/assets/guide_block_block_docker.md.Bw_l0FCS.lean.js +++ b/assets/guide_block_block_docker.md.BA0mH0EK.lean.js @@ -1 +1 @@ -import{_ as o,c as t,o as r,j as a,a as c}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"待开发,敬请期待","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_docker.md","filePath":"guide/block/block_docker.md","lastUpdated":1773143516000}'),d={name:"guide/block/block_docker.md"};function l(s,e,n,i,k,p){return r(),t("div",null,e[0]||(e[0]=[a("h1",{id:"待开发-敬请期待",tabindex:"-1"},[c("待开发,敬请期待 "),a("a",{class:"header-anchor",href:"#待开发-敬请期待","aria-label":'Permalink to "待开发,敬请期待"'},"​")],-1)]))}const b=o(d,[["render",l]]);export{m as __pageData,b as default}; +import{_ as o,c as t,o as r,j as a,a as c}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"待开发,敬请期待","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_docker.md","filePath":"guide/block/block_docker.md","lastUpdated":1773196139000}'),d={name:"guide/block/block_docker.md"};function l(s,e,n,i,k,p){return r(),t("div",null,e[0]||(e[0]=[a("h1",{id:"待开发-敬请期待",tabindex:"-1"},[c("待开发,敬请期待 "),a("a",{class:"header-anchor",href:"#待开发-敬请期待","aria-label":'Permalink to "待开发,敬请期待"'},"​")],-1)]))}const b=o(d,[["render",l]]);export{m as __pageData,b as default}; diff --git a/assets/guide_block_block_incus.md.BYew2Lw9.js b/assets/guide_block_block_incus.md.BOKqlmwJ.js similarity index 99% rename from assets/guide_block_block_incus.md.BYew2Lw9.js rename to assets/guide_block_block_incus.md.BOKqlmwJ.js index 105ef4c47d..8b033fd82d 100644 --- a/assets/guide_block_block_incus.md.BYew2Lw9.js +++ b/assets/guide_block_block_incus.md.BOKqlmwJ.js @@ -1 +1 @@ -import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_incus.md","filePath":"guide/block/block_incus.md","lastUpdated":1773143516000}'),n={name:"guide/block/block_incus.md"};function t(h,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e('

通过shell脚本屏蔽滥用行为

屏蔽容易被滥用的端口的出入流量以屏蔽端口和屏蔽滥用工具包

  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事前预防

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

使用screen配置监控屏蔽某些进程的执行遇到某些进程的出现直接关闭容器

  • 如需停止监控可使用screen命令停止lxc_moniter这个名字的窗口并删除
  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事后停机

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',13)]))}const F=i(n,[["render",t]]);export{c as __pageData,F as default}; +import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_incus.md","filePath":"guide/block/block_incus.md","lastUpdated":1773196139000}'),n={name:"guide/block/block_incus.md"};function t(h,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e('

通过shell脚本屏蔽滥用行为

屏蔽容易被滥用的端口的出入流量以屏蔽端口和屏蔽滥用工具包

  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事前预防

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

使用screen配置监控屏蔽某些进程的执行遇到某些进程的出现直接关闭容器

  • 如需停止监控可使用screen命令停止lxc_moniter这个名字的窗口并删除
  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事后停机

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',13)]))}const F=i(n,[["render",t]]);export{c as __pageData,F as default}; diff --git a/assets/guide_block_block_incus.md.BYew2Lw9.lean.js b/assets/guide_block_block_incus.md.BOKqlmwJ.lean.js similarity index 87% rename from assets/guide_block_block_incus.md.BYew2Lw9.lean.js rename to assets/guide_block_block_incus.md.BOKqlmwJ.lean.js index e9d23ea8d9..ab31527ff2 100644 --- a/assets/guide_block_block_incus.md.BYew2Lw9.lean.js +++ b/assets/guide_block_block_incus.md.BOKqlmwJ.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_incus.md","filePath":"guide/block/block_incus.md","lastUpdated":1773143516000}'),n={name:"guide/block/block_incus.md"};function t(h,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e("",13)]))}const F=i(n,[["render",t]]);export{c as __pageData,F as default}; +import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_incus.md","filePath":"guide/block/block_incus.md","lastUpdated":1773196139000}'),n={name:"guide/block/block_incus.md"};function t(h,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e("",13)]))}const F=i(n,[["render",t]]);export{c as __pageData,F as default}; diff --git a/assets/guide_block_block_iptables.md.DOeN3AYE.js b/assets/guide_block_block_iptables.md.DpwSNujf.js similarity index 99% rename from assets/guide_block_block_iptables.md.DOeN3AYE.js rename to assets/guide_block_block_iptables.md.DpwSNujf.js index cda46ab145..f85b591314 100644 --- a/assets/guide_block_block_iptables.md.DOeN3AYE.js +++ b/assets/guide_block_block_iptables.md.DpwSNujf.js @@ -1,4 +1,4 @@ -import{_ as a,c as n,o as i,ag as p}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"通过iptables屏蔽滥用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_iptables.md","filePath":"guide/block/block_iptables.md","lastUpdated":1773143516000}'),l={name:"guide/block/block_iptables.md"};function e(t,s,h,r,k,d){return i(),n("div",null,s[0]||(s[0]=[p(`

通过iptables屏蔽滥用

iptables的基础使用说明

1. 启动 iptables

在大多数 Linux 发行版中,iptables 服务可以通过以下命令启动:

bash
sudo systemctl start iptables

2. 设置规则

在启动 iptables 后,可以设置相应的规则来屏蔽滥用流量。例如,以下命令将阻止来自特定IPV4地址的流量:

bash
sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

3. 查询规则

设置完规则后,可以使用以下命令查看当前的 iptables 规则:

bash
sudo iptables -L

这将列出所有输入、输出和转发的规则。

4. 停止 iptables

如果需要停止 iptables 服务,可以使用以下命令:

bash
sudo systemctl stop iptables

5. 保存规则

为了确保在重启后规则依然生效,可以保存当前的规则:

bash
sudo iptables-save | sudo tee /etc/iptables/rules.v4

6. 恢复规则

在需要恢复规则时,可以使用以下命令:

bash
sudo iptables-restore < /etc/iptables/rules.v4

7. 其他常用命令

  • 列出规则(详细信息)

    bash
    sudo iptables -L -v
  • 删除特定规则

    bash
    sudo iptables -D INPUT -s 192.168.1.100 -j DROP
  • 清空所有规则

    bash
    sudo iptables -F

在宿主机上屏蔽滥用行为

屏蔽挖矿行为

strings=(
+import{_ as a,c as n,o as i,ag as p}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"通过iptables屏蔽滥用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_iptables.md","filePath":"guide/block/block_iptables.md","lastUpdated":1773196139000}'),l={name:"guide/block/block_iptables.md"};function e(t,s,h,r,k,d){return i(),n("div",null,s[0]||(s[0]=[p(`

通过iptables屏蔽滥用

iptables的基础使用说明

1. 启动 iptables

在大多数 Linux 发行版中,iptables 服务可以通过以下命令启动:

bash
sudo systemctl start iptables

2. 设置规则

在启动 iptables 后,可以设置相应的规则来屏蔽滥用流量。例如,以下命令将阻止来自特定IPV4地址的流量:

bash
sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

3. 查询规则

设置完规则后,可以使用以下命令查看当前的 iptables 规则:

bash
sudo iptables -L

这将列出所有输入、输出和转发的规则。

4. 停止 iptables

如果需要停止 iptables 服务,可以使用以下命令:

bash
sudo systemctl stop iptables

5. 保存规则

为了确保在重启后规则依然生效,可以保存当前的规则:

bash
sudo iptables-save | sudo tee /etc/iptables/rules.v4

6. 恢复规则

在需要恢复规则时,可以使用以下命令:

bash
sudo iptables-restore < /etc/iptables/rules.v4

7. 其他常用命令

  • 列出规则(详细信息)

    bash
    sudo iptables -L -v
  • 删除特定规则

    bash
    sudo iptables -D INPUT -s 192.168.1.100 -j DROP
  • 清空所有规则

    bash
    sudo iptables -F

在宿主机上屏蔽滥用行为

屏蔽挖矿行为

strings=(
     "ethermine.com"
     "ethermine.org"
     "antpool.one"
diff --git a/assets/guide_block_block_iptables.md.DOeN3AYE.lean.js b/assets/guide_block_block_iptables.md.DpwSNujf.lean.js
similarity index 87%
rename from assets/guide_block_block_iptables.md.DOeN3AYE.lean.js
rename to assets/guide_block_block_iptables.md.DpwSNujf.lean.js
index a0ec66deca..64d483f413 100644
--- a/assets/guide_block_block_iptables.md.DOeN3AYE.lean.js
+++ b/assets/guide_block_block_iptables.md.DpwSNujf.lean.js
@@ -1 +1 @@
-import{_ as a,c as n,o as i,ag as p}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"通过iptables屏蔽滥用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_iptables.md","filePath":"guide/block/block_iptables.md","lastUpdated":1773143516000}'),l={name:"guide/block/block_iptables.md"};function e(t,s,h,r,k,d){return i(),n("div",null,s[0]||(s[0]=[p("",37)]))}const c=a(l,[["render",e]]);export{u as __pageData,c as default};
+import{_ as a,c as n,o as i,ag as p}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"通过iptables屏蔽滥用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_iptables.md","filePath":"guide/block/block_iptables.md","lastUpdated":1773196139000}'),l={name:"guide/block/block_iptables.md"};function e(t,s,h,r,k,d){return i(),n("div",null,s[0]||(s[0]=[p("",37)]))}const c=a(l,[["render",e]]);export{u as __pageData,c as default};
diff --git a/assets/guide_block_block_lxd.md.CZpzVayR.js b/assets/guide_block_block_lxd.md.GsBSbKni.js
similarity index 99%
rename from assets/guide_block_block_lxd.md.CZpzVayR.js
rename to assets/guide_block_block_lxd.md.GsBSbKni.js
index 239efd19de..750eceaf95 100644
--- a/assets/guide_block_block_lxd.md.CZpzVayR.js
+++ b/assets/guide_block_block_lxd.md.GsBSbKni.js
@@ -1 +1 @@
-import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_lxd.md","filePath":"guide/block/block_lxd.md","lastUpdated":1773143516000}'),t={name:"guide/block/block_lxd.md"};function h(n,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e('

通过shell脚本屏蔽滥用行为

屏蔽容易被滥用的端口的出入流量以屏蔽端口和屏蔽滥用工具包

  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事前预防

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

使用screen配置监控屏蔽某些进程的执行遇到某些进程的出现直接关闭容器

  • 如需停止监控可使用screen命令停止lxc_moniter这个名字的窗口并删除
  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事后停机

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',13)]))}const F=i(t,[["render",h]]);export{c as __pageData,F as default}; +import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_lxd.md","filePath":"guide/block/block_lxd.md","lastUpdated":1773196139000}'),t={name:"guide/block/block_lxd.md"};function h(n,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e('

通过shell脚本屏蔽滥用行为

屏蔽容易被滥用的端口的出入流量以屏蔽端口和屏蔽滥用工具包

  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事前预防

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/rules.sh -o rules.sh && chmod +x rules.sh && bash rules.sh

使用screen配置监控屏蔽某些进程的执行遇到某些进程的出现直接关闭容器

  • 如需停止监控可使用screen命令停止lxc_moniter这个名字的窗口并删除
  • (非必须,该脚本仅仅是为了防止容器滥用方便,不装的也没问题)
  • 事后停机

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_monitor.sh -o build_monitor.sh && chmod +x build_monitor.sh && bash build_monitor.sh
',13)]))}const F=i(t,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/guide_block_block_lxd.md.CZpzVayR.lean.js b/assets/guide_block_block_lxd.md.GsBSbKni.lean.js similarity index 86% rename from assets/guide_block_block_lxd.md.CZpzVayR.lean.js rename to assets/guide_block_block_lxd.md.GsBSbKni.lean.js index 2b3c253803..23febc2c11 100644 --- a/assets/guide_block_block_lxd.md.CZpzVayR.lean.js +++ b/assets/guide_block_block_lxd.md.GsBSbKni.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_lxd.md","filePath":"guide/block/block_lxd.md","lastUpdated":1773143516000}'),t={name:"guide/block/block_lxd.md"};function h(n,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e("",13)]))}const F=i(t,[["render",h]]);export{c as __pageData,F as default}; +import{_ as i,c as a,o as l,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"通过shell脚本屏蔽滥用行为","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_lxd.md","filePath":"guide/block/block_lxd.md","lastUpdated":1773196139000}'),t={name:"guide/block/block_lxd.md"};function h(n,s,p,r,k,d){return l(),a("div",null,s[0]||(s[0]=[e("",13)]))}const F=i(t,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/guide_block_block_pve.md.DHzr8lJe.js b/assets/guide_block_block_pve.md.DWtr9ooe.js similarity index 97% rename from assets/guide_block_block_pve.md.DHzr8lJe.js rename to assets/guide_block_block_pve.md.DWtr9ooe.js index fb40448e52..500c4fb280 100644 --- a/assets/guide_block_block_pve.md.DHzr8lJe.js +++ b/assets/guide_block_block_pve.md.DWtr9ooe.js @@ -1,4 +1,4 @@ -import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const x=JSON.parse('{"title":"通过设置防火墙限制虚拟机使用的IP避免盗用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_pve.md","filePath":"guide/block/block_pve.md","lastUpdated":1773143516000}'),n={name:"guide/block/block_pve.md"};function l(p,s,r,o,c,d){return i(),e("div",null,s[0]||(s[0]=[t(`

通过设置防火墙限制虚拟机使用的IP避免盗用

在PVE的宿主机下创建以下文件

shell
/etc/pve/firewall/<VMID>.fw
+import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const x=JSON.parse('{"title":"通过设置防火墙限制虚拟机使用的IP避免盗用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_pve.md","filePath":"guide/block/block_pve.md","lastUpdated":1773196139000}'),n={name:"guide/block/block_pve.md"};function l(p,s,r,o,c,d){return i(),e("div",null,s[0]||(s[0]=[t(`

通过设置防火墙限制虚拟机使用的IP避免盗用

在PVE的宿主机下创建以下文件

shell
/etc/pve/firewall/<VMID>.fw
 
 [IPSET ipfilter-<net0>]
 xxx.xxx.xxx.xxx

<VMID>替换为虚拟机的VMID数字,<net0>替换为网络设备中对应的别名(一般不用修改,除非你限制的IPV6),xxx.xxx.xxx.xxx替换为公网IP地址,注意此IP对应前面的网络设备。

这里的意思是net0只能使用xxx.xxx.xxx.xxx这个IP,如果使用其他的IP数据将会被丢弃,从而达到限制虚拟机只能使用此IP的目的。

这里可以有多个IP,一旦启用此规则该VM就无法使用除此之外的任何IP,如果你没有写IPv6地址则代表该VM无法使用IPv6地址。

TIP

本设置仅推荐在开设非NAT全端口映射的独立IP的虚拟机时使用,否则可能导致奇奇怪怪的问题造成服务器没网。

该方法不适合开设任何NAT虚拟机/容器的PVE上使用。

`,8)]))}const k=a(n,[["render",l]]);export{x as __pageData,k as default}; diff --git a/assets/guide_block_block_pve.md.DHzr8lJe.lean.js b/assets/guide_block_block_pve.md.DWtr9ooe.lean.js similarity index 87% rename from assets/guide_block_block_pve.md.DHzr8lJe.lean.js rename to assets/guide_block_block_pve.md.DWtr9ooe.lean.js index db90a9229e..a944c55309 100644 --- a/assets/guide_block_block_pve.md.DHzr8lJe.lean.js +++ b/assets/guide_block_block_pve.md.DWtr9ooe.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const x=JSON.parse('{"title":"通过设置防火墙限制虚拟机使用的IP避免盗用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_pve.md","filePath":"guide/block/block_pve.md","lastUpdated":1773143516000}'),n={name:"guide/block/block_pve.md"};function l(p,s,r,o,c,d){return i(),e("div",null,s[0]||(s[0]=[t("",8)]))}const k=a(n,[["render",l]]);export{x as __pageData,k as default}; +import{_ as a,c as e,o as i,ag as t}from"./chunks/framework.QPV3Ar9-.js";const x=JSON.parse('{"title":"通过设置防火墙限制虚拟机使用的IP避免盗用","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/block/block_pve.md","filePath":"guide/block/block_pve.md","lastUpdated":1773196139000}'),n={name:"guide/block/block_pve.md"};function l(p,s,r,o,c,d){return i(),e("div",null,s[0]||(s[0]=[t("",8)]))}const k=a(n,[["render",l]]);export{x as __pageData,k as default}; diff --git a/assets/guide_containerd_containerd_build.md.BBB7iFk6.js b/assets/guide_containerd_containerd_build.md.C5WetK9G.js similarity index 99% rename from assets/guide_containerd_containerd_build.md.BBB7iFk6.js rename to assets/guide_containerd_containerd_build.md.C5WetK9G.js index 5d6917fb7a..ae46ceb24b 100644 --- a/assets/guide_containerd_containerd_build.md.BBB7iFk6.js +++ b/assets/guide_containerd_containerd_build.md.C5WetK9G.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_build.md","filePath":"guide/containerd/containerd_build.md","lastUpdated":1773143516000}'),t={name:"guide/containerd/containerd_build.md"};function l(h,s,p,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个 containerd 容器,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPV6 地址(需安装时宿主机已有公网 IPV6 且安装脚本已配置 containerd-ipv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_build.md","filePath":"guide/containerd/containerd_build.md","lastUpdated":1773196139000}'),t={name:"guide/containerd/containerd_build.md"};function l(h,s,p,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个 containerd 容器,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPV6 地址(需安装时宿主机已有公网 IPV6 且安装脚本已配置 containerd-ipv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
 chmod +x onecontainerd.sh

国内

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/onecontainerd.sh
 chmod +x onecontainerd.sh

示例

运行支持的变量如下

bash
./onecontainerd.sh <name> <cpu> <memory_mb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system] [disk_gb]

目前 system 仅支持选择:

  • debian
  • ubuntu
  • alpine
  • almalinux
  • rockylinux
  • openeuler

默认不填则是 debian

shell
./onecontainerd.sh ct1 1 512 MyPassword 25000 34975 35000 n debian 0

以下为开设的示例容器的信息:

属性
容器名字ct1
SSH 登录的用户名root
SSH 登录的密码MyPassword
CPU 核数1
内存大小512MB
SSH 端口25000
内外网映射端口一致的区间34975 到 35000
系统debian
是否绑定独立的 IPV6 地址N
硬盘大小不限制

相关操作

查看所有容器

shell
nerdctl ps -a

进入容器

shell
nerdctl exec -it ct1 bash

进入 Alpine 容器

shell
nerdctl exec -it ct1 sh

要退出容器就执行 exit 退出。

删除示例

shell
nerdctl rm -f ct1

查看容器日志

shell
nerdctl logs ct1

批量开设

  • 批量多次运行继承配置生成
  • 自动递增容器名(ct1, ct2, ...)、SSH 端口、公网端口
  • 容器信息记录到 ctlog 文件
  • 生成多个时为避免 SSH 连接中断建议在 screen 中执行
  • 支持 x86_64 和 ARM64 架构的服务器

运行

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/containerd/main/scripts/create_containerd.sh
 chmod +x create_containerd.sh
diff --git a/assets/guide_containerd_containerd_build.md.BBB7iFk6.lean.js b/assets/guide_containerd_containerd_build.md.C5WetK9G.lean.js
similarity index 87%
rename from assets/guide_containerd_containerd_build.md.BBB7iFk6.lean.js
rename to assets/guide_containerd_containerd_build.md.C5WetK9G.lean.js
index 5066c6db17..93c9e64a29 100644
--- a/assets/guide_containerd_containerd_build.md.BBB7iFk6.lean.js
+++ b/assets/guide_containerd_containerd_build.md.C5WetK9G.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_build.md","filePath":"guide/containerd/containerd_build.md","lastUpdated":1773143516000}'),t={name:"guide/containerd/containerd_build.md"};function l(h,s,p,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",47)]))}const F=i(t,[["render",l]]);export{o as __pageData,F as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_build.md","filePath":"guide/containerd/containerd_build.md","lastUpdated":1773196139000}'),t={name:"guide/containerd/containerd_build.md"};function l(h,s,p,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",47)]))}const F=i(t,[["render",l]]);export{o as __pageData,F as default};
diff --git a/assets/guide_containerd_containerd_install.md.w3pTXhU5.js b/assets/guide_containerd_containerd_install.md.D1BopDXI.js
similarity index 99%
rename from assets/guide_containerd_containerd_install.md.w3pTXhU5.js
rename to assets/guide_containerd_containerd_install.md.D1BopDXI.js
index 86c3e55661..9346990c6e 100644
--- a/assets/guide_containerd_containerd_install.md.w3pTXhU5.js
+++ b/assets/guide_containerd_containerd_install.md.D1BopDXI.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_install.md","filePath":"guide/containerd/containerd_install.md","lastUpdated":1773143516000}'),t={name:"guide/containerd/containerd_install.md"};function l(p,s,h,d,r,c){return n(),a("div",null,s[0]||(s[0]=[e('

前言

安装 containerd 环境,包含 containerd + runc + nerdctl + CNI + buildkitd 全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 安装 containerd + runc + nerdctl + CNI + buildkitd(通过 nerdctl-full bundle)
  • 自动配置 CNI 网络(containerd-net:172.20.0.0/16)并设置 iptables NAT 规则
  • 检测公网 IPV6 地址,若存在则自动创建 containerd-ipv6 CNI 网络并启动 NDP Responder
  • 安装 DNS 保活服务(check-dns.service),持续检测 DNS 可用性
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

TIP

安装完成后建议执行 nerdctl ps -a 验证 containerd 环境是否正常运行

卸载 containerd 环境

一键卸载 containerd 全套环境,包括所有容器、镜像、CNI 网络、systemd 服务、nerdctl/containerd 二进制文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有容器、镜像、CNI 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const u=i(t,[["render",l]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_install.md","filePath":"guide/containerd/containerd_install.md","lastUpdated":1773196139000}'),t={name:"guide/containerd/containerd_install.md"};function l(p,s,h,d,r,c){return n(),a("div",null,s[0]||(s[0]=[e('

前言

安装 containerd 环境,包含 containerd + runc + nerdctl + CNI + buildkitd 全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 安装 containerd + runc + nerdctl + CNI + buildkitd(通过 nerdctl-full bundle)
  • 自动配置 CNI 网络(containerd-net:172.20.0.0/16)并设置 iptables NAT 规则
  • 检测公网 IPV6 地址,若存在则自动创建 containerd-ipv6 CNI 网络并启动 NDP Responder
  • 安装 DNS 保活服务(check-dns.service),持续检测 DNS 可用性
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

TIP

安装完成后建议执行 nerdctl ps -a 验证 containerd 环境是否正常运行

卸载 containerd 环境

一键卸载 containerd 全套环境,包括所有容器、镜像、CNI 网络、systemd 服务、nerdctl/containerd 二进制文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有容器、镜像、CNI 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const u=i(t,[["render",l]]);export{o as __pageData,u as default}; diff --git a/assets/guide_containerd_containerd_install.md.w3pTXhU5.lean.js b/assets/guide_containerd_containerd_install.md.D1BopDXI.lean.js similarity index 87% rename from assets/guide_containerd_containerd_install.md.w3pTXhU5.lean.js rename to assets/guide_containerd_containerd_install.md.D1BopDXI.lean.js index 9e5beb911f..7d4803fb72 100644 --- a/assets/guide_containerd_containerd_install.md.w3pTXhU5.lean.js +++ b/assets/guide_containerd_containerd_install.md.D1BopDXI.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_install.md","filePath":"guide/containerd/containerd_install.md","lastUpdated":1773143516000}'),t={name:"guide/containerd/containerd_install.md"};function l(p,s,h,d,r,c){return n(),a("div",null,s[0]||(s[0]=[e("",24)]))}const u=i(t,[["render",l]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_install.md","filePath":"guide/containerd/containerd_install.md","lastUpdated":1773196139000}'),t={name:"guide/containerd/containerd_install.md"};function l(p,s,h,d,r,c){return n(),a("div",null,s[0]||(s[0]=[e("",24)]))}const u=i(t,[["render",l]]);export{o as __pageData,u as default}; diff --git a/assets/guide_containerd_containerd_precheck.md.BUByUHwF.js b/assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.js similarity index 98% rename from assets/guide_containerd_containerd_precheck.md.BUByUHwF.js rename to assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.js index b9f12cb8fe..d58323c870 100644 --- a/assets/guide_containerd_containerd_precheck.md.BUByUHwF.js +++ b/assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,ag as d}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_precheck.md","filePath":"guide/containerd/containerd_precheck.md","lastUpdated":1773143516000}'),i={name:"guide/containerd/containerd_precheck.md"};function n(l,t,o,c,s,h){return r(),a("div",null,t[0]||(t[0]=[d('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,需要宿主机本身已有公网IPV6地址,安装脚本会自动检测并配置

WARNING

containerd 方案不支持 KVM/QEMU 虚拟机,仅支持 Linux 容器(LXC),适用于无 KVM 硬件虚拟化支持的环境。

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/containerd

项目特点

基于 containerd + nerdctl 运行时,通过批量或单独开设 NAT 服务器

  • 使用 nerdctl-full 安装 containerd + runc + nerdctl + CNI + buildkitd 全套组件
  • 使用本仓库自编译的基础镜像(存储在 GitHub Releases),优先离线加载,无法获取时回退到官方镜像
  • 每个容器自带 1 个外网 SSH 端口,25 个内外网一致端口,可选择是否绑定独立 IPV6 地址
  • 默认创建非特权容器,支持 lxcfs 挂载(若宿主机安装了 lxcfs)
  • 支持磁盘限制参数(需 xfs/btrfs snapshotter 支持 storage-opt)
  • 支持国内 CDN 镜像加速

支持的系统

系统amd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

配置要求

  • 宿主机系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 架构:x86_64(amd64)或 ARM64
  • 内核需支持 overlay 文件系统
  • 网络能连接 Github 的 raw 界面即可
  • 空闲硬盘有 3G 以上即可
  • 不需要 KVM 硬件支持
',12)]))}const b=e(i,[["render",n]]);export{p as __pageData,b as default}; +import{_ as e,c as a,o as r,ag as d}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_precheck.md","filePath":"guide/containerd/containerd_precheck.md","lastUpdated":1773196139000}'),i={name:"guide/containerd/containerd_precheck.md"};function n(l,t,o,c,s,h){return r(),a("div",null,t[0]||(t[0]=[d('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,需要宿主机本身已有公网IPV6地址,安装脚本会自动检测并配置

WARNING

containerd 方案不支持 KVM/QEMU 虚拟机,仅支持 Linux 容器(LXC),适用于无 KVM 硬件虚拟化支持的环境。

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/containerd

项目特点

基于 containerd + nerdctl 运行时,通过批量或单独开设 NAT 服务器

  • 使用 nerdctl-full 安装 containerd + runc + nerdctl + CNI + buildkitd 全套组件
  • 使用本仓库自编译的基础镜像(存储在 GitHub Releases),优先离线加载,无法获取时回退到官方镜像
  • 每个容器自带 1 个外网 SSH 端口,25 个内外网一致端口,可选择是否绑定独立 IPV6 地址
  • 默认创建非特权容器,支持 lxcfs 挂载(若宿主机安装了 lxcfs)
  • 支持磁盘限制参数(需 xfs/btrfs snapshotter 支持 storage-opt)
  • 支持国内 CDN 镜像加速

支持的系统

系统amd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

配置要求

  • 宿主机系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 架构:x86_64(amd64)或 ARM64
  • 内核需支持 overlay 文件系统
  • 网络能连接 Github 的 raw 界面即可
  • 空闲硬盘有 3G 以上即可
  • 不需要 KVM 硬件支持
',12)]))}const b=e(i,[["render",n]]);export{p as __pageData,b as default}; diff --git a/assets/guide_containerd_containerd_precheck.md.BUByUHwF.lean.js b/assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.lean.js similarity index 87% rename from assets/guide_containerd_containerd_precheck.md.BUByUHwF.lean.js rename to assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.lean.js index 940125fb45..e332722897 100644 --- a/assets/guide_containerd_containerd_precheck.md.BUByUHwF.lean.js +++ b/assets/guide_containerd_containerd_precheck.md.BP6RE0Ux.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,ag as d}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_precheck.md","filePath":"guide/containerd/containerd_precheck.md","lastUpdated":1773143516000}'),i={name:"guide/containerd/containerd_precheck.md"};function n(l,t,o,c,s,h){return r(),a("div",null,t[0]||(t[0]=[d("",12)]))}const b=e(i,[["render",n]]);export{p as __pageData,b as default}; +import{_ as e,c as a,o as r,ag as d}from"./chunks/framework.QPV3Ar9-.js";const p=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_precheck.md","filePath":"guide/containerd/containerd_precheck.md","lastUpdated":1773196139000}'),i={name:"guide/containerd/containerd_precheck.md"};function n(l,t,o,c,s,h){return r(),a("div",null,t[0]||(t[0]=[d("",12)]))}const b=e(i,[["render",n]]);export{p as __pageData,b as default}; diff --git a/assets/guide_containerd_containerd_qa.md.FSRAjNyu.js b/assets/guide_containerd_containerd_qa.md.CmAotbAi.js similarity index 99% rename from assets/guide_containerd_containerd_qa.md.FSRAjNyu.js rename to assets/guide_containerd_containerd_qa.md.CmAotbAi.js index f8a9896816..319dbe2a88 100644 --- a/assets/guide_containerd_containerd_qa.md.FSRAjNyu.js +++ b/assets/guide_containerd_containerd_qa.md.CmAotbAi.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_qa.md","filePath":"guide/containerd/containerd_qa.md","lastUpdated":1773143516000}'),l={name:"guide/containerd/containerd_qa.md"};function t(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

常见问题答疑

nerdctl: command not found

containerd 环境未正确安装或 /usr/local/bin 不在 PATH 中

解决方法:

shell
export PATH="/usr/local/bin:$PATH"
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_qa.md","filePath":"guide/containerd/containerd_qa.md","lastUpdated":1773196139000}'),l={name:"guide/containerd/containerd_qa.md"};function t(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e(`

常见问题答疑

nerdctl: command not found

containerd 环境未正确安装或 /usr/local/bin 不在 PATH 中

解决方法:

shell
export PATH="/usr/local/bin:$PATH"
 echo 'export PATH="/usr/local/bin:$PATH"' >> /etc/profile
 source /etc/profile

如果仍然没有,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

containerd 服务未启动

shell
systemctl status containerd
 systemctl restart containerd

查看日志:

shell
journalctl -u containerd -f

容器无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.20

如果没有,手动添加:

shell
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 ! -d 172.20.0.0/16 -j MASQUERADE
diff --git a/assets/guide_containerd_containerd_qa.md.FSRAjNyu.lean.js b/assets/guide_containerd_containerd_qa.md.CmAotbAi.lean.js
similarity index 87%
rename from assets/guide_containerd_containerd_qa.md.FSRAjNyu.lean.js
rename to assets/guide_containerd_containerd_qa.md.CmAotbAi.lean.js
index 8b3218f934..35e14c9ea8 100644
--- a/assets/guide_containerd_containerd_qa.md.FSRAjNyu.lean.js
+++ b/assets/guide_containerd_containerd_qa.md.CmAotbAi.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_qa.md","filePath":"guide/containerd/containerd_qa.md","lastUpdated":1773143516000}'),l={name:"guide/containerd/containerd_qa.md"};function t(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",45)]))}const F=i(l,[["render",t]]);export{o as __pageData,F as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/containerd/containerd_qa.md","filePath":"guide/containerd/containerd_qa.md","lastUpdated":1773196139000}'),l={name:"guide/containerd/containerd_qa.md"};function t(h,s,p,r,d,k){return n(),a("div",null,s[0]||(s[0]=[e("",45)]))}const F=i(l,[["render",t]]);export{o as __pageData,F as default};
diff --git a/assets/guide_containerd_containerd_thanks.md.BHthFbxP.js b/assets/guide_containerd_containerd_thanks.md.CcSlhUIr.js
similarity index 96%
rename from assets/guide_containerd_containerd_thanks.md.BHthFbxP.js
rename to assets/guide_containerd_containerd_thanks.md.CcSlhUIr.js
index e1851174bb..5d7feb3bfd 100644
--- a/assets/guide_containerd_containerd_thanks.md.BHthFbxP.js
+++ b/assets/guide_containerd_containerd_thanks.md.CcSlhUIr.js
@@ -1 +1 @@
-import{_ as r,c as e,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/containerd/containerd_thanks.md","filePath":"guide/containerd/containerd_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/containerd/containerd_thanks.md"};function i(c,t,p,h,s,d){return n(),e("div",null,t[0]||(t[0]=[a('

致谢

https://github.com/containerd/nerdctl

https://github.com/containerd/containerd

https://github.com/opencontainers/runc

https://github.com/containernetworking/cni

https://github.com/moby/buildkit

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

',9)]))}const _=r(o,[["render",i]]);export{u as __pageData,_ as default}; +import{_ as r,c as e,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/containerd/containerd_thanks.md","filePath":"guide/containerd/containerd_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/containerd/containerd_thanks.md"};function i(c,t,p,h,s,d){return n(),e("div",null,t[0]||(t[0]=[a('

致谢

https://github.com/containerd/nerdctl

https://github.com/containerd/containerd

https://github.com/opencontainers/runc

https://github.com/containernetworking/cni

https://github.com/moby/buildkit

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

',9)]))}const _=r(o,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/guide_containerd_containerd_thanks.md.BHthFbxP.lean.js b/assets/guide_containerd_containerd_thanks.md.CcSlhUIr.lean.js similarity index 86% rename from assets/guide_containerd_containerd_thanks.md.BHthFbxP.lean.js rename to assets/guide_containerd_containerd_thanks.md.CcSlhUIr.lean.js index fb918351b2..99e6034d97 100644 --- a/assets/guide_containerd_containerd_thanks.md.BHthFbxP.lean.js +++ b/assets/guide_containerd_containerd_thanks.md.CcSlhUIr.lean.js @@ -1 +1 @@ -import{_ as r,c as e,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/containerd/containerd_thanks.md","filePath":"guide/containerd/containerd_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/containerd/containerd_thanks.md"};function i(c,t,p,h,s,d){return n(),e("div",null,t[0]||(t[0]=[a("",9)]))}const _=r(o,[["render",i]]);export{u as __pageData,_ as default}; +import{_ as r,c as e,o as n,ag as a}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/containerd/containerd_thanks.md","filePath":"guide/containerd/containerd_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/containerd/containerd_thanks.md"};function i(c,t,p,h,s,d){return n(),e("div",null,t[0]||(t[0]=[a("",9)]))}const _=r(o,[["render",i]]);export{u as __pageData,_ as default}; diff --git a/assets/guide_dashboard.md.CnK_Ubha.js b/assets/guide_dashboard.md.CGRdCkvf.js similarity index 98% rename from assets/guide_dashboard.md.CnK_Ubha.js rename to assets/guide_dashboard.md.CGRdCkvf.js index 16833954bd..52c80be7d9 100644 --- a/assets/guide_dashboard.md.CnK_Ubha.js +++ b/assets/guide_dashboard.md.CGRdCkvf.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as r}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/dashboard.md","filePath":"guide/dashboard.md","lastUpdated":1773143516000}'),l={name:"guide/dashboard.md"};function o(n,t,s,c,h,p){return i(),a("div",null,t[0]||(t[0]=[r('

准备工作

需要虚拟化出服务器,你需要:

  1. 一台可以连接公网的服务器( VPS 或 Dedicated Server),最好能完美访问 Github 的 RAW 页面,部分项目部分组件可能未使用 CDN 加速

TIP

如果您位于中国大陆,访问 Github 有困难,请注意配套脚本和项目是否有说明已使用 CDN 加速

  1. 本地可以稳定连接SSH,如果不能稳定连接,请使用screen命令创建窗口后,在窗口内执行命令

TIP

不会用screen命令的,自行查找相关教程学习,或者用tmux替代也行

  1. 确保服务器的系统和硬件满足对应项目的要求,详见对应项目说明

本文档将以VPS作为范例,且该VPS纯净,无原生环境问题,如有必要请重装系统保证初始环境的纯净

WARNING

PVE项目可能造成宿主机出现问题,如果你不会看Bug和修复系统,那么不建议你在生产环境中使用,使用PVE相关脚本请确保宿主机随时可重装系统

项目仓库

欢迎Star和Fork,所有资源均开源,无非开源部分,转载以及使用请写上来源于本站,谢谢

OneClickVirt

https://github.com/oneclickvirt/oneclickvirt

PVE

https://github.com/oneclickvirt/pve

Hits

Incus

https://github.com/oneclickvirt/incus

Hits

Docker

https://github.com/oneclickvirt/docker

Hits

LXD

https://github.com/oneclickvirt/lxd

Hits

Containerd

https://github.com/oneclickvirt/containerd

Hits

Podman

https://github.com/oneclickvirt/podman

Hits

QEMU

https://github.com/oneclickvirt/qemu

Hits

KubeVirt

https://github.com/oneclickvirt/kubevirt

Hits

',37)]))}const b=e(l,[["render",o]]);export{m as __pageData,b as default}; +import{_ as e,c as a,o as i,ag as r}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/dashboard.md","filePath":"guide/dashboard.md","lastUpdated":1773196139000}'),l={name:"guide/dashboard.md"};function o(n,t,s,c,h,p){return i(),a("div",null,t[0]||(t[0]=[r('

准备工作

需要虚拟化出服务器,你需要:

  1. 一台可以连接公网的服务器( VPS 或 Dedicated Server),最好能完美访问 Github 的 RAW 页面,部分项目部分组件可能未使用 CDN 加速

TIP

如果您位于中国大陆,访问 Github 有困难,请注意配套脚本和项目是否有说明已使用 CDN 加速

  1. 本地可以稳定连接SSH,如果不能稳定连接,请使用screen命令创建窗口后,在窗口内执行命令

TIP

不会用screen命令的,自行查找相关教程学习,或者用tmux替代也行

  1. 确保服务器的系统和硬件满足对应项目的要求,详见对应项目说明

本文档将以VPS作为范例,且该VPS纯净,无原生环境问题,如有必要请重装系统保证初始环境的纯净

WARNING

PVE项目可能造成宿主机出现问题,如果你不会看Bug和修复系统,那么不建议你在生产环境中使用,使用PVE相关脚本请确保宿主机随时可重装系统

项目仓库

欢迎Star和Fork,所有资源均开源,无非开源部分,转载以及使用请写上来源于本站,谢谢

OneClickVirt

https://github.com/oneclickvirt/oneclickvirt

PVE

https://github.com/oneclickvirt/pve

Hits

Incus

https://github.com/oneclickvirt/incus

Hits

Docker

https://github.com/oneclickvirt/docker

Hits

LXD

https://github.com/oneclickvirt/lxd

Hits

Containerd

https://github.com/oneclickvirt/containerd

Hits

Podman

https://github.com/oneclickvirt/podman

Hits

QEMU

https://github.com/oneclickvirt/qemu

Hits

KubeVirt

https://github.com/oneclickvirt/kubevirt

Hits

',37)]))}const b=e(l,[["render",o]]);export{m as __pageData,b as default}; diff --git a/assets/guide_dashboard.md.CnK_Ubha.lean.js b/assets/guide_dashboard.md.CGRdCkvf.lean.js similarity index 70% rename from assets/guide_dashboard.md.CnK_Ubha.lean.js rename to assets/guide_dashboard.md.CGRdCkvf.lean.js index 73f7f42ee6..b8f77e1922 100644 --- a/assets/guide_dashboard.md.CnK_Ubha.lean.js +++ b/assets/guide_dashboard.md.CGRdCkvf.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as r}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/dashboard.md","filePath":"guide/dashboard.md","lastUpdated":1773143516000}'),l={name:"guide/dashboard.md"};function o(n,t,s,c,h,p){return i(),a("div",null,t[0]||(t[0]=[r("",37)]))}const b=e(l,[["render",o]]);export{m as __pageData,b as default}; +import{_ as e,c as a,o as i,ag as r}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/dashboard.md","filePath":"guide/dashboard.md","lastUpdated":1773196139000}'),l={name:"guide/dashboard.md"};function o(n,t,s,c,h,p){return i(),a("div",null,t[0]||(t[0]=[r("",37)]))}const b=e(l,[["render",o]]);export{m as __pageData,b as default}; diff --git a/assets/guide_dashboardq.md.CjAOFN8_.js b/assets/guide_dashboardq.md.Bx38O9vC.js similarity index 96% rename from assets/guide_dashboardq.md.CjAOFN8_.js rename to assets/guide_dashboardq.md.Bx38O9vC.js index 61fcf74d2a..847015fa9f 100644 --- a/assets/guide_dashboardq.md.CjAOFN8_.js +++ b/assets/guide_dashboardq.md.Bx38O9vC.js @@ -1 +1 @@ -import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dashboardq.md","filePath":"guide/dashboardq.md","lastUpdated":1773143516000}'),n={name:"guide/dashboardq.md"};function r(d,a,l,o,c,h){return t(),s("div",null,a[0]||(a[0]=[i('

Give me a cup of coffee.

https://ko-fi.com/spiritlhl

WeChat

WeChat

USDT-TRC20

bash
TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B

USDT-Polygon/Matic

bash
0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6
',8)]))}const u=e(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dashboardq.md","filePath":"guide/dashboardq.md","lastUpdated":1773196139000}'),n={name:"guide/dashboardq.md"};function r(d,a,l,o,c,h){return t(),s("div",null,a[0]||(a[0]=[i('

Give me a cup of coffee.

https://ko-fi.com/spiritlhl

WeChat

WeChat

USDT-TRC20

bash
TNqjaPYAmDsm9pbpLY79pixE8z1ce3Zj1B

USDT-Polygon/Matic

bash
0xb81b44cb00f9e6e084f85e5da604ec479e7ffab6
',8)]))}const u=e(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/guide_dashboardq.md.CjAOFN8_.lean.js b/assets/guide_dashboardq.md.Bx38O9vC.lean.js similarity index 85% rename from assets/guide_dashboardq.md.CjAOFN8_.lean.js rename to assets/guide_dashboardq.md.Bx38O9vC.lean.js index abb3aed715..c436b72abe 100644 --- a/assets/guide_dashboardq.md.CjAOFN8_.lean.js +++ b/assets/guide_dashboardq.md.Bx38O9vC.lean.js @@ -1 +1 @@ -import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dashboardq.md","filePath":"guide/dashboardq.md","lastUpdated":1773143516000}'),n={name:"guide/dashboardq.md"};function r(d,a,l,o,c,h){return t(),s("div",null,a[0]||(a[0]=[i("",8)]))}const u=e(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as e,c as s,o as t,ag as i}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/wechat.BhfskdFa.jpg",m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dashboardq.md","filePath":"guide/dashboardq.md","lastUpdated":1773196139000}'),n={name:"guide/dashboardq.md"};function r(d,a,l,o,c,h){return t(),s("div",null,a[0]||(a[0]=[i("",8)]))}const u=e(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/guide_docker_docker_android.md.CDefl5Ss.js b/assets/guide_docker_docker_android.md.EZ9A4zxL.js similarity index 99% rename from assets/guide_docker_docker_android.md.CDefl5Ss.js rename to assets/guide_docker_docker_android.md.EZ9A4zxL.js index 2b680a6624..edc71152df 100644 --- a/assets/guide_docker_docker_android.md.CDefl5Ss.js +++ b/assets/guide_docker_docker_android.md.EZ9A4zxL.js @@ -1,4 +1,4 @@ -import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"在Docker中开设Android虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_android.md","filePath":"guide/docker/docker_android.md","lastUpdated":1773143516000}'),p={name:"guide/docker/docker_android.md"};function r(t,s,l,d,o,h){return e(),i("div",null,s[0]||(s[0]=[n(`

在Docker中开设Android虚拟机

一键开设

  • 自定义安卓版本
  • 自动创建带校验的web网站
  • 自动进行nginx安装和反向代理的配置,可选择是否绑定域名,默认回车不绑定使用80端口
  • 无需考虑宿主机是否支持嵌套虚拟化
  • 支持x86_64和ARM架构

宿主机的配置至少要有1核2G内存15G硬盘,否则开设可能会导致宿主机卡死

宿主机推荐 Ubuntu 系统,Debian 系统可能导致安卓屏幕白屏

安卓版本越新占用越大,以上的配置要求是最低版本安卓的配置要求 (个人测试到 12.0.0-latest 的tag可用,更高版本映射白屏了,自己测试哪个能用吧)

如果开设后,过了5分钟浏览器网页的登录验证还是一直失败,那么请查询安卓容器的日志,大概率安卓容器崩溃了,建议更换更低的安卓系统版本的容器进行安装

开设

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

命令执行后按照提示输入即可,注意选择版本输入的是序号,对应选项的数字序号,安装完毕后打开本机IPV4+80端口可登录

如果需要查询生成的安卓信息和web登录信息,执行cat /root/android_info可查询信息

默认的用户名 onea

默认密码 oneclick

远程的桌面点击H264 Converter跳转就是了

暂时只支持生成一个安卓容器,勿要重复生成,如需替换版本请执行后续命令删除后再次开设

暂时只支持开设后一直使用,不可重启服务器,重启后可能无法自重启映射成功,自测

删除

  • 删除容器
  • 删除容器对应镜像
  • 删除配置文件
docker rm -f android
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"在Docker中开设Android虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_android.md","filePath":"guide/docker/docker_android.md","lastUpdated":1773196139000}'),p={name:"guide/docker/docker_android.md"};function r(t,s,l,d,o,h){return e(),i("div",null,s[0]||(s[0]=[n(`

在Docker中开设Android虚拟机

一键开设

  • 自定义安卓版本
  • 自动创建带校验的web网站
  • 自动进行nginx安装和反向代理的配置,可选择是否绑定域名,默认回车不绑定使用80端口
  • 无需考虑宿主机是否支持嵌套虚拟化
  • 支持x86_64和ARM架构

宿主机的配置至少要有1核2G内存15G硬盘,否则开设可能会导致宿主机卡死

宿主机推荐 Ubuntu 系统,Debian 系统可能导致安卓屏幕白屏

安卓版本越新占用越大,以上的配置要求是最低版本安卓的配置要求 (个人测试到 12.0.0-latest 的tag可用,更高版本映射白屏了,自己测试哪个能用吧)

如果开设后,过了5分钟浏览器网页的登录验证还是一直失败,那么请查询安卓容器的日志,大概率安卓容器崩溃了,建议更换更低的安卓系统版本的容器进行安装

开设

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh

命令执行后按照提示输入即可,注意选择版本输入的是序号,对应选项的数字序号,安装完毕后打开本机IPV4+80端口可登录

如果需要查询生成的安卓信息和web登录信息,执行cat /root/android_info可查询信息

默认的用户名 onea

默认密码 oneclick

远程的桌面点击H264 Converter跳转就是了

暂时只支持生成一个安卓容器,勿要重复生成,如需替换版本请执行后续命令删除后再次开设

暂时只支持开设后一直使用,不可重启服务器,重启后可能无法自重启映射成功,自测

删除

  • 删除容器
  • 删除容器对应镜像
  • 删除配置文件
docker rm -f android
 docker rmi $(docker images | grep "redroid" | awk '{print $3}')
 rm -rf /etc/nginx/sites-enabled/reverse-proxy
 rm -rf /etc/nginx/sites-available/reverse-proxy
diff --git a/assets/guide_docker_docker_android.md.CDefl5Ss.lean.js b/assets/guide_docker_docker_android.md.EZ9A4zxL.lean.js
similarity index 87%
rename from assets/guide_docker_docker_android.md.CDefl5Ss.lean.js
rename to assets/guide_docker_docker_android.md.EZ9A4zxL.lean.js
index 469a660fcc..81403149bf 100644
--- a/assets/guide_docker_docker_android.md.CDefl5Ss.lean.js
+++ b/assets/guide_docker_docker_android.md.EZ9A4zxL.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"在Docker中开设Android虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_android.md","filePath":"guide/docker/docker_android.md","lastUpdated":1773143516000}'),p={name:"guide/docker/docker_android.md"};function r(t,s,l,d,o,h){return e(),i("div",null,s[0]||(s[0]=[n("",25)]))}const g=a(p,[["render",r]]);export{k as __pageData,g as default};
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"在Docker中开设Android虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_android.md","filePath":"guide/docker/docker_android.md","lastUpdated":1773196139000}'),p={name:"guide/docker/docker_android.md"};function r(t,s,l,d,o,h){return e(),i("div",null,s[0]||(s[0]=[n("",25)]))}const g=a(p,[["render",r]]);export{k as __pageData,g as default};
diff --git a/assets/guide_docker_docker_build.md.ChL_h0pq.js b/assets/guide_docker_docker_build.md.BqBxdm8D.js
similarity index 99%
rename from assets/guide_docker_docker_build.md.ChL_h0pq.js
rename to assets/guide_docker_docker_build.md.BqBxdm8D.js
index 9b79d0ee1a..93b6fd557d 100644
--- a/assets/guide_docker_docker_build.md.ChL_h0pq.js
+++ b/assets/guide_docker_docker_build.md.BqBxdm8D.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_build.md","filePath":"guide/docker/docker_build.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_build.md"};function l(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个docker,这里有判断为国际服务器还是国内服务器,如果在国内服务器上开设,容器内的包管理源自动替换为清华源
  • 可配置绑定独立的IPV6地址,但需要先前使用本套脚本的环境安装命令安装的docker,且需要宿主机至少绑定了/112的IPV6子网
  • 支持x86_64和ARM架构的服务器

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

示例

运行支持的变量如下

bash
./onedocker.sh name cpu memory password sshport startport endport <independent_ipv6> <system> <disk>

目前system仅支持选择

  • alpine
  • debian
  • ubuntu
  • almalinux
  • rockylinux
  • openeuler

默认不填则是debian

硬盘大小仅在前面Docker安装时选择了支持限制硬盘大小的选项,这块才可填写数值设置硬盘大小,默认不填时不限制

shell
./onedocker.sh test 1 512 123456 25000 34975 35000 N debian 5

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码123456
CPU核数1
内存大小512MB
SSH端口25000
内外网映射端口一致的区间34975到35000
系统debian
是否绑定独立的IPV6地址N
硬盘大小5G

相关操作

删除示例

shell
docker rm -f test
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_build.md","filePath":"guide/docker/docker_build.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_build.md"};function l(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个docker,这里有判断为国际服务器还是国内服务器,如果在国内服务器上开设,容器内的包管理源自动替换为清华源
  • 可配置绑定独立的IPV6地址,但需要先前使用本套脚本的环境安装命令安装的docker,且需要宿主机至少绑定了/112的IPV6子网
  • 支持x86_64和ARM架构的服务器

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

示例

运行支持的变量如下

bash
./onedocker.sh name cpu memory password sshport startport endport <independent_ipv6> <system> <disk>

目前system仅支持选择

  • alpine
  • debian
  • ubuntu
  • almalinux
  • rockylinux
  • openeuler

默认不填则是debian

硬盘大小仅在前面Docker安装时选择了支持限制硬盘大小的选项,这块才可填写数值设置硬盘大小,默认不填时不限制

shell
./onedocker.sh test 1 512 123456 25000 34975 35000 N debian 5

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码123456
CPU核数1
内存大小512MB
SSH端口25000
内外网映射端口一致的区间34975到35000
系统debian
是否绑定独立的IPV6地址N
硬盘大小5G

相关操作

删除示例

shell
docker rm -f test
 rm -rf test
 ls

进入示例

shell
docker exec -it test /bin/bash

要退出容器就执行exit退出。

查询已开设的信息

shell
cat 容器名字

输出格式

容器名字 SSH端口 登陆的root密码 核数 内存 外网端口起 外网端口止

docker的ipv6地址只能在容器内自己查询,在docker的配置中是不存在的

批量开设

  • 批量多次运行继承配置生成
  • 生成多个时为避免SSH连接中断建议在screen中执行
  • 支持x86_64和ARM架构的服务器

运行

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/create_docker.sh -o create_docker.sh && chmod +x create_docker.sh && bash create_docker.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh

查询批量开设的信息

shell
cat dclog

输出格式

容器名字 SSH端口 登陆的root密码 核数 内存 外网端口起 外网端口止 硬盘大小

一行一个容器对应的信息,docker的ipv6地址只能在容器内自己查询,在docker的配置中是不存在的

卸载所有docker容器和镜像

以下命令卸载会忽略ndpresponder,以防止IPV6的配置失效

shell
docker ps -a --format '{{.Names}}' | grep -vE '^ndpresponder' | xargs -r docker rm -f
 docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' | grep -v 'ndpresponder' | awk '{print $2}' | xargs -r docker rmi
diff --git a/assets/guide_docker_docker_build.md.ChL_h0pq.lean.js b/assets/guide_docker_docker_build.md.BqBxdm8D.lean.js
similarity index 86%
rename from assets/guide_docker_docker_build.md.ChL_h0pq.lean.js
rename to assets/guide_docker_docker_build.md.BqBxdm8D.lean.js
index b16a6bcbfd..805e26fb1f 100644
--- a/assets/guide_docker_docker_build.md.ChL_h0pq.lean.js
+++ b/assets/guide_docker_docker_build.md.BqBxdm8D.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_build.md","filePath":"guide/docker/docker_build.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_build.md"};function l(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e("",56)]))}const o=i(t,[["render",l]]);export{F as __pageData,o as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_build.md","filePath":"guide/docker/docker_build.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_build.md"};function l(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[e("",56)]))}const o=i(t,[["render",l]]);export{F as __pageData,o as default};
diff --git a/assets/guide_docker_docker_custom.md.5HfdwPhH.js b/assets/guide_docker_docker_custom.md.CO01yPMv.js
similarity index 99%
rename from assets/guide_docker_docker_custom.md.5HfdwPhH.js
rename to assets/guide_docker_docker_custom.md.CO01yPMv.js
index 06b9d24168..7837cb6fe7 100644
--- a/assets/guide_docker_docker_custom.md.5HfdwPhH.js
+++ b/assets/guide_docker_docker_custom.md.CO01yPMv.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"使用Docker一键安装某些容器的脚本","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_custom.md","filePath":"guide/docker/docker_custom.md","lastUpdated":1773143516000}'),l={name:"guide/docker/docker_custom.md"};function p(t,s,h,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n(`

使用Docker一键安装某些容器的脚本

每个容器都有对应的配置要求,自行查看,内存不够的用https://github.com/spiritLHLS/addswap

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

开设虚拟内存补足也行

注意,以下脚本使用前务必使用本套教程中的环境安装脚本进行前期环境安装

一键开设Firefox浏览器的容器

  • 已设置崩溃自启
  • 已设置带中文字体
  • 自带web的校验,可自设置密码
  • 可自定义容器最大的内存占用
  • 可选是否开启VNC端口,默认不开启
  • 无需考虑是否支持嵌套虚拟化和服务器的架构
  • 不支持声音映射,无论是WEB端还是VNC端都无法传输声音

宿主机需要至少1核2G内存5G硬盘,开设的容器大小将占用起码1G硬盘

开设

如果未设置自定义密码,开设后默认的密码是oneclick

默认的web端口是3003,开设后打开本机IPV4:端口即可

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onefirefox.sh -o onefirefox.sh && chmod +x onefirefox.sh && bash onefirefox.sh

删除

修改以下端口号3003为你实际的端口号,然后执行命令回车两次即可删除容器、配置文件、对应镜像

shell
PORT="3003"
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"使用Docker一键安装某些容器的脚本","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_custom.md","filePath":"guide/docker/docker_custom.md","lastUpdated":1773196139000}'),l={name:"guide/docker/docker_custom.md"};function p(t,s,h,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n(`

使用Docker一键安装某些容器的脚本

每个容器都有对应的配置要求,自行查看,内存不够的用https://github.com/spiritLHLS/addswap

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

开设虚拟内存补足也行

注意,以下脚本使用前务必使用本套教程中的环境安装脚本进行前期环境安装

一键开设Firefox浏览器的容器

  • 已设置崩溃自启
  • 已设置带中文字体
  • 自带web的校验,可自设置密码
  • 可自定义容器最大的内存占用
  • 可选是否开启VNC端口,默认不开启
  • 无需考虑是否支持嵌套虚拟化和服务器的架构
  • 不支持声音映射,无论是WEB端还是VNC端都无法传输声音

宿主机需要至少1核2G内存5G硬盘,开设的容器大小将占用起码1G硬盘

开设

如果未设置自定义密码,开设后默认的密码是oneclick

默认的web端口是3003,开设后打开本机IPV4:端口即可

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onefirefox.sh -o onefirefox.sh && chmod +x onefirefox.sh && bash onefirefox.sh

删除

修改以下端口号3003为你实际的端口号,然后执行命令回车两次即可删除容器、配置文件、对应镜像

shell
PORT="3003"
 docker stop firefox_\${PORT}
 docker rm -f firefox_\${PORT}
 rm -rf /usr/local/bin/firefox_\${PORT}
diff --git a/assets/guide_docker_docker_custom.md.5HfdwPhH.lean.js b/assets/guide_docker_docker_custom.md.CO01yPMv.lean.js
similarity index 87%
rename from assets/guide_docker_docker_custom.md.5HfdwPhH.lean.js
rename to assets/guide_docker_docker_custom.md.CO01yPMv.lean.js
index 51c8febac3..e988d8810f 100644
--- a/assets/guide_docker_docker_custom.md.5HfdwPhH.lean.js
+++ b/assets/guide_docker_docker_custom.md.CO01yPMv.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"使用Docker一键安装某些容器的脚本","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_custom.md","filePath":"guide/docker/docker_custom.md","lastUpdated":1773143516000}'),l={name:"guide/docker/docker_custom.md"};function p(t,s,h,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n("",71)]))}const F=i(l,[["render",p]]);export{c as __pageData,F as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"使用Docker一键安装某些容器的脚本","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_custom.md","filePath":"guide/docker/docker_custom.md","lastUpdated":1773196139000}'),l={name:"guide/docker/docker_custom.md"};function p(t,s,h,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n("",71)]))}const F=i(l,[["render",p]]);export{c as __pageData,F as default};
diff --git a/assets/guide_docker_docker_install.md.nRTEdMox.js b/assets/guide_docker_docker_install.md.CyPwvW4o.js
similarity index 99%
rename from assets/guide_docker_docker_install.md.nRTEdMox.js
rename to assets/guide_docker_docker_install.md.CyPwvW4o.js
index e77bbf409b..99cdc7f80c 100644
--- a/assets/guide_docker_docker_install.md.nRTEdMox.js
+++ b/assets/guide_docker_docker_install.md.CyPwvW4o.js
@@ -1,2 +1,2 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_install.md","filePath":"guide/docker/docker_install.md","lastUpdated":1773143516000}'),l={name:"guide/docker/docker_install.md"};function n(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

前言

支持开设 Docker 虚拟化的各系统,含 Linux、Android、Windows 系统

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存

TIP

内存开点swap免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 检测系统环境,安装对应组件
  • 安装docker和docker-compose,这里有判断为国际服务器还是国内服务器,自动安装对应源的docker
  • 下载默认需要的一些配置脚本,设置默认的网络配置
  • 检测如果存在IPV6地址,检测其是否大于或等于/112,如果符合条件,则配置docker的ipv6的网络
  • 如果上述条件都符合,创建ndpresponder的docker和radvd,使得IPV6的分配支持ndp广播和自动分配
  • 支持x86_64和ARM架构的服务器
  • 安装过程中会要求你输入一些选项,选择Docker安装路径,选择Docker安装是否可限制硬盘

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

bash dockerinstall.sh

TIP

环境安装过程中可能要求你重启服务器后再次执行脚本,详见脚本运行后的说明

检测Docker是否支持限制容器硬盘大小

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

或者指定不同的存储限制大小(单位:MB),默认测试500MB限制的容器是否限制成功

shell
# 1GB限制
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_install.md","filePath":"guide/docker/docker_install.md","lastUpdated":1773196139000}'),l={name:"guide/docker/docker_install.md"};function n(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t(`

前言

支持开设 Docker 虚拟化的各系统,含 Linux、Android、Windows 系统

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存

TIP

内存开点swap免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu, Debian, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 检测系统环境,安装对应组件
  • 安装docker和docker-compose,这里有判断为国际服务器还是国内服务器,自动安装对应源的docker
  • 下载默认需要的一些配置脚本,设置默认的网络配置
  • 检测如果存在IPV6地址,检测其是否大于或等于/112,如果符合条件,则配置docker的ipv6的网络
  • 如果上述条件都符合,创建ndpresponder的docker和radvd,使得IPV6的分配支持ndp广播和自动分配
  • 支持x86_64和ARM架构的服务器
  • 安装过程中会要求你输入一些选项,选择Docker安装路径,选择Docker安装是否可限制硬盘

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh

bash dockerinstall.sh

TIP

环境安装过程中可能要求你重启服务器后再次执行脚本,详见脚本运行后的说明

检测Docker是否支持限制容器硬盘大小

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/disk_test.sh -o disk_test.sh && chmod +x disk_test.sh && bash disk_test.sh

或者指定不同的存储限制大小(单位:MB),默认测试500MB限制的容器是否限制成功

shell
# 1GB限制
 bash disk_test.sh 1000

卸载 Docker 环境

一键卸载 Docker 全套环境,包括所有容器、镜像、网络、systemd 服务、二进制文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。薐删内容包括所有容器、镜像、网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

`,34)]))}const F=i(l,[["render",n]]);export{o as __pageData,F as default}; diff --git a/assets/guide_docker_docker_install.md.nRTEdMox.lean.js b/assets/guide_docker_docker_install.md.CyPwvW4o.lean.js similarity index 86% rename from assets/guide_docker_docker_install.md.nRTEdMox.lean.js rename to assets/guide_docker_docker_install.md.CyPwvW4o.lean.js index ce2b6d6951..8bb801d966 100644 --- a/assets/guide_docker_docker_install.md.nRTEdMox.lean.js +++ b/assets/guide_docker_docker_install.md.CyPwvW4o.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_install.md","filePath":"guide/docker/docker_install.md","lastUpdated":1773143516000}'),l={name:"guide/docker/docker_install.md"};function n(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t("",34)]))}const F=i(l,[["render",n]]);export{o as __pageData,F as default}; +import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_install.md","filePath":"guide/docker/docker_install.md","lastUpdated":1773196139000}'),l={name:"guide/docker/docker_install.md"};function n(h,s,p,k,d,r){return e(),a("div",null,s[0]||(s[0]=[t("",34)]))}const F=i(l,[["render",n]]);export{o as __pageData,F as default}; diff --git a/assets/guide_docker_docker_macos.md.DJkCeuY4.js b/assets/guide_docker_docker_macos.md.AoixV4mD.js similarity index 95% rename from assets/guide_docker_docker_macos.md.DJkCeuY4.js rename to assets/guide_docker_docker_macos.md.AoixV4mD.js index 604fef1aa0..d1d7f335a5 100644 --- a/assets/guide_docker_docker_macos.md.DJkCeuY4.js +++ b/assets/guide_docker_docker_macos.md.AoixV4mD.js @@ -1 +1 @@ -import{_ as a,c as o,o as r,ag as t}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"在Docker中开设Macos虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_macos.md","filePath":"guide/docker/docker_macos.md","lastUpdated":1773143516000}'),c={name:"guide/docker/docker_macos.md"};function s(d,e,i,n,k,h){return r(),o("div",null,e[0]||(e[0]=[t('

在Docker中开设Macos虚拟机

通过dockur开设

原始项目

https://github.com/dockur/macos

通过OSX开设

原始项目

https://github.com/sickcodes/Docker-OSX

',7)]))}const p=a(c,[["render",s]]);export{_ as __pageData,p as default}; +import{_ as a,c as o,o as r,ag as t}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"在Docker中开设Macos虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_macos.md","filePath":"guide/docker/docker_macos.md","lastUpdated":1773196139000}'),c={name:"guide/docker/docker_macos.md"};function s(d,e,i,n,k,h){return r(),o("div",null,e[0]||(e[0]=[t('

在Docker中开设Macos虚拟机

通过dockur开设

原始项目

https://github.com/dockur/macos

通过OSX开设

原始项目

https://github.com/sickcodes/Docker-OSX

',7)]))}const p=a(c,[["render",s]]);export{_ as __pageData,p as default}; diff --git a/assets/guide_docker_docker_macos.md.DJkCeuY4.lean.js b/assets/guide_docker_docker_macos.md.AoixV4mD.lean.js similarity index 87% rename from assets/guide_docker_docker_macos.md.DJkCeuY4.lean.js rename to assets/guide_docker_docker_macos.md.AoixV4mD.lean.js index 2e6dab14c7..fe07a52b38 100644 --- a/assets/guide_docker_docker_macos.md.DJkCeuY4.lean.js +++ b/assets/guide_docker_docker_macos.md.AoixV4mD.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as r,ag as t}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"在Docker中开设Macos虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_macos.md","filePath":"guide/docker/docker_macos.md","lastUpdated":1773143516000}'),c={name:"guide/docker/docker_macos.md"};function s(d,e,i,n,k,h){return r(),o("div",null,e[0]||(e[0]=[t("",7)]))}const p=a(c,[["render",s]]);export{_ as __pageData,p as default}; +import{_ as a,c as o,o as r,ag as t}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"在Docker中开设Macos虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_macos.md","filePath":"guide/docker/docker_macos.md","lastUpdated":1773196139000}'),c={name:"guide/docker/docker_macos.md"};function s(d,e,i,n,k,h){return r(),o("div",null,e[0]||(e[0]=[t("",7)]))}const p=a(c,[["render",s]]);export{_ as __pageData,p as default}; diff --git a/assets/guide_docker_docker_precheck.md.uJ-SRlqA.js b/assets/guide_docker_docker_precheck.md.E6lOY-ou.js similarity index 97% rename from assets/guide_docker_docker_precheck.md.uJ-SRlqA.js rename to assets/guide_docker_docker_precheck.md.E6lOY-ou.js index ca7dbbdd29..07bd625b4e 100644 --- a/assets/guide_docker_docker_precheck.md.uJ-SRlqA.js +++ b/assets/guide_docker_docker_precheck.md.E6lOY-ou.js @@ -1 +1 @@ -import{_ as r,c as o,o as a,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_precheck.md","filePath":"guide/docker/docker_precheck.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_precheck.md"};function d(p,e,i,n,s,l){return a(),o("div",null,e[0]||(e[0]=[c('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

WARNING

如果宿主机带IPV6网络的话,安装会改变宿主机的网络结构,请保证宿主机随时可重置系统,且运行前无重要数据在宿主机上

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/docker

项目特点

通过docker批量或单独开设NAT服务器(Bulk or individual NAT server provisioning via docker)

默认使用debian系统可选alpine系统,每个容器自带1个外网ssh端口,25个内外网一致端口,可选择是否绑定IPV6地址

默认创建的是非特权容器,且不挂载与宿主机的docker的守护进程之间的通信,所以宿主机创建的docker虚拟化的NAT服务器内无法再嵌套虚拟化docker

默认安装并启用lxcfs,使得在容器内的查询资源时CPU和内存使用的是配置的视图而不是宿主机的视图

默认可选择是否共享宿主机的硬盘,在Docker安装的时候可选择是否安装为可限制硬盘大小的环境

配置要求

系统可安装docker即可用,网络能连接Github的raw界面就能用,硬件配置只要不拉跨就行,空闲硬盘有3G就行

(如果需要绑定IPV6地址,那么请保证使用本套脚本的环境预设脚本进行环境安装,需要它自动预设部分设置)

如果硬件资源只是好了一点,需要限制更多东西并需要限制硬盘大小,可使用incus分区的脚本批量开LXC虚拟化的容器

如果硬件非常好资源很多,可使用PVE分区的脚本批量开KVM虚拟化的虚拟机

推荐在开设NAT服务器前先增加部分SWAP虚拟内存,避免突发的内存占用导致宿主机卡死

',17)]))}const _=r(t,[["render",d]]);export{h as __pageData,_ as default}; +import{_ as r,c as o,o as a,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_precheck.md","filePath":"guide/docker/docker_precheck.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_precheck.md"};function d(p,e,i,n,s,l){return a(),o("div",null,e[0]||(e[0]=[c('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

WARNING

如果宿主机带IPV6网络的话,安装会改变宿主机的网络结构,请保证宿主机随时可重置系统,且运行前无重要数据在宿主机上

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/docker

项目特点

通过docker批量或单独开设NAT服务器(Bulk or individual NAT server provisioning via docker)

默认使用debian系统可选alpine系统,每个容器自带1个外网ssh端口,25个内外网一致端口,可选择是否绑定IPV6地址

默认创建的是非特权容器,且不挂载与宿主机的docker的守护进程之间的通信,所以宿主机创建的docker虚拟化的NAT服务器内无法再嵌套虚拟化docker

默认安装并启用lxcfs,使得在容器内的查询资源时CPU和内存使用的是配置的视图而不是宿主机的视图

默认可选择是否共享宿主机的硬盘,在Docker安装的时候可选择是否安装为可限制硬盘大小的环境

配置要求

系统可安装docker即可用,网络能连接Github的raw界面就能用,硬件配置只要不拉跨就行,空闲硬盘有3G就行

(如果需要绑定IPV6地址,那么请保证使用本套脚本的环境预设脚本进行环境安装,需要它自动预设部分设置)

如果硬件资源只是好了一点,需要限制更多东西并需要限制硬盘大小,可使用incus分区的脚本批量开LXC虚拟化的容器

如果硬件非常好资源很多,可使用PVE分区的脚本批量开KVM虚拟化的虚拟机

推荐在开设NAT服务器前先增加部分SWAP虚拟内存,避免突发的内存占用导致宿主机卡死

',17)]))}const _=r(t,[["render",d]]);export{h as __pageData,_ as default}; diff --git a/assets/guide_docker_docker_precheck.md.uJ-SRlqA.lean.js b/assets/guide_docker_docker_precheck.md.E6lOY-ou.lean.js similarity index 86% rename from assets/guide_docker_docker_precheck.md.uJ-SRlqA.lean.js rename to assets/guide_docker_docker_precheck.md.E6lOY-ou.lean.js index 75041a9e31..d027e0ff93 100644 --- a/assets/guide_docker_docker_precheck.md.uJ-SRlqA.lean.js +++ b/assets/guide_docker_docker_precheck.md.E6lOY-ou.lean.js @@ -1 +1 @@ -import{_ as r,c as o,o as a,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_precheck.md","filePath":"guide/docker/docker_precheck.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_precheck.md"};function d(p,e,i,n,s,l){return a(),o("div",null,e[0]||(e[0]=[c("",17)]))}const _=r(t,[["render",d]]);export{h as __pageData,_ as default}; +import{_ as r,c as o,o as a,ag as c}from"./chunks/framework.QPV3Ar9-.js";const h=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_precheck.md","filePath":"guide/docker/docker_precheck.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_precheck.md"};function d(p,e,i,n,s,l){return a(),o("div",null,e[0]||(e[0]=[c("",17)]))}const _=r(t,[["render",d]]);export{h as __pageData,_ as default}; diff --git a/assets/guide_docker_docker_qa.md.UX7_kDAI.js b/assets/guide_docker_docker_qa.md.CTh6v0OH.js similarity index 99% rename from assets/guide_docker_docker_qa.md.UX7_kDAI.js rename to assets/guide_docker_docker_qa.md.CTh6v0OH.js index 8781c100b5..a12ad72cc7 100644 --- a/assets/guide_docker_docker_qa.md.UX7_kDAI.js +++ b/assets/guide_docker_docker_qa.md.CTh6v0OH.js @@ -1 +1 @@ -import{_ as s,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_qa.md","filePath":"guide/docker/docker_qa.md","lastUpdated":1773143516000}'),p={name:"guide/docker/docker_qa.md"};function t(d,e,l,r,c,o){return i(),a("div",null,e[0]||(e[0]=[n('

解惑

常见的一些docker命令

查询某个容器的实时占用

docker stats 容器名字

进入某个容器

docker exec -it 容器名字 /bin/bash

清理 Docker 缓存,清理未使用的资源,包括镜像、容器、网络等

docker system prune -a

卸载所有docker的镜像和容器

docker rm -f $(docker ps -aq); docker rmi $(docker images -aq)

查看对应容器日志

docker logs 容器名字或ID

查看docker整体的disk占用

docker system df

查看所有容器

docker ps -a

查看所有镜像

docker images

删除某个特定容器

docker rm -f 容器名字或ID

删除某个特定镜像

docker rmi 镜像名字或ID

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

',28)]))}const b=s(p,[["render",t]]);export{u as __pageData,b as default}; +import{_ as s,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_qa.md","filePath":"guide/docker/docker_qa.md","lastUpdated":1773196139000}'),p={name:"guide/docker/docker_qa.md"};function t(d,e,l,r,c,o){return i(),a("div",null,e[0]||(e[0]=[n('

解惑

常见的一些docker命令

查询某个容器的实时占用

docker stats 容器名字

进入某个容器

docker exec -it 容器名字 /bin/bash

清理 Docker 缓存,清理未使用的资源,包括镜像、容器、网络等

docker system prune -a

卸载所有docker的镜像和容器

docker rm -f $(docker ps -aq); docker rmi $(docker images -aq)

查看对应容器日志

docker logs 容器名字或ID

查看docker整体的disk占用

docker system df

查看所有容器

docker ps -a

查看所有镜像

docker images

删除某个特定容器

docker rm -f 容器名字或ID

删除某个特定镜像

docker rmi 镜像名字或ID

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

',28)]))}const b=s(p,[["render",t]]);export{u as __pageData,b as default}; diff --git a/assets/guide_docker_docker_qa.md.UX7_kDAI.lean.js b/assets/guide_docker_docker_qa.md.CTh6v0OH.lean.js similarity index 86% rename from assets/guide_docker_docker_qa.md.UX7_kDAI.lean.js rename to assets/guide_docker_docker_qa.md.CTh6v0OH.lean.js index 4f2f02b887..04ab7dd914 100644 --- a/assets/guide_docker_docker_qa.md.UX7_kDAI.lean.js +++ b/assets/guide_docker_docker_qa.md.CTh6v0OH.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_qa.md","filePath":"guide/docker/docker_qa.md","lastUpdated":1773143516000}'),p={name:"guide/docker/docker_qa.md"};function t(d,e,l,r,c,o){return i(),a("div",null,e[0]||(e[0]=[n("",28)]))}const b=s(p,[["render",t]]);export{u as __pageData,b as default}; +import{_ as s,c as a,o as i,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_qa.md","filePath":"guide/docker/docker_qa.md","lastUpdated":1773196139000}'),p={name:"guide/docker/docker_qa.md"};function t(d,e,l,r,c,o){return i(),a("div",null,e[0]||(e[0]=[n("",28)]))}const b=s(p,[["render",t]]);export{u as __pageData,b as default}; diff --git a/assets/guide_docker_docker_thanks.md.BSuLBr32.js b/assets/guide_docker_docker_thanks.md.DvIicQOI.js similarity index 98% rename from assets/guide_docker_docker_thanks.md.BSuLBr32.js rename to assets/guide_docker_docker_thanks.md.DvIicQOI.js index 41ec879be8..e3c626f979 100644 --- a/assets/guide_docker_docker_thanks.md.BSuLBr32.js +++ b/assets/guide_docker_docker_thanks.md.DvIicQOI.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/docker/docker_thanks.md","filePath":"guide/docker/docker_thanks.md","lastUpdated":1773143516000}'),n={name:"guide/docker/docker_thanks.md"};function p(h,r,c,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o('

致谢

https://hub.docker.com/_/debian

https://hub.docker.com/r/redroid/redroid

https://github.com/NetrisTV/ws-scrcpy

https://guacamole.apache.org/doc/gug/introduction.html

https://blog.imoeq.com/oracle-arm-run-android-by-docker

https://blog.imoeq.com/scrcpy-run-a-android-web-page

https://github.com/NetrisTV/ws-scrcpy

https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/

https://releases.hashicorp.com/vagrant/

https://github.com/hashicorp/vagrant/

https://app.vagrantup.com/peru

https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1

https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4

https://github.com/jlesage/docker-firefox

https://github.com/linuxserver/docker-webtop

https://github.com/rustdesk/rustdesk

https://github.com/yoursunny/ndpresponder

https://github.com/linuxserver/docker-chromium

https://github.com/SuperManito/LinuxMirrors

感谢 @Ella-Alinda 和 @CoiaPrant 提供的Docker指导

',21)]))}const d=e(n,[["render",p]]);export{g as __pageData,d as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/docker/docker_thanks.md","filePath":"guide/docker/docker_thanks.md","lastUpdated":1773196139000}'),n={name:"guide/docker/docker_thanks.md"};function p(h,r,c,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o('

致谢

https://hub.docker.com/_/debian

https://hub.docker.com/r/redroid/redroid

https://github.com/NetrisTV/ws-scrcpy

https://guacamole.apache.org/doc/gug/introduction.html

https://blog.imoeq.com/oracle-arm-run-android-by-docker

https://blog.imoeq.com/scrcpy-run-a-android-web-page

https://github.com/NetrisTV/ws-scrcpy

https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/

https://releases.hashicorp.com/vagrant/

https://github.com/hashicorp/vagrant/

https://app.vagrantup.com/peru

https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1

https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4

https://github.com/jlesage/docker-firefox

https://github.com/linuxserver/docker-webtop

https://github.com/rustdesk/rustdesk

https://github.com/yoursunny/ndpresponder

https://github.com/linuxserver/docker-chromium

https://github.com/SuperManito/LinuxMirrors

感谢 @Ella-Alinda 和 @CoiaPrant 提供的Docker指导

',21)]))}const d=e(n,[["render",p]]);export{g as __pageData,d as default}; diff --git a/assets/guide_docker_docker_thanks.md.BSuLBr32.lean.js b/assets/guide_docker_docker_thanks.md.DvIicQOI.lean.js similarity index 85% rename from assets/guide_docker_docker_thanks.md.BSuLBr32.lean.js rename to assets/guide_docker_docker_thanks.md.DvIicQOI.lean.js index 704bc09745..69029cd337 100644 --- a/assets/guide_docker_docker_thanks.md.BSuLBr32.lean.js +++ b/assets/guide_docker_docker_thanks.md.DvIicQOI.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/docker/docker_thanks.md","filePath":"guide/docker/docker_thanks.md","lastUpdated":1773143516000}'),n={name:"guide/docker/docker_thanks.md"};function p(h,r,c,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o("",21)]))}const d=e(n,[["render",p]]);export{g as __pageData,d as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/docker/docker_thanks.md","filePath":"guide/docker/docker_thanks.md","lastUpdated":1773196139000}'),n={name:"guide/docker/docker_thanks.md"};function p(h,r,c,i,s,l){return a(),t("div",null,r[0]||(r[0]=[o("",21)]))}const d=e(n,[["render",p]]);export{g as __pageData,d as default}; diff --git a/assets/guide_docker_docker_windows.md.ho0xYayV.js b/assets/guide_docker_docker_windows.md.DVhNvzRP.js similarity index 99% rename from assets/guide_docker_docker_windows.md.ho0xYayV.js rename to assets/guide_docker_docker_windows.md.DVhNvzRP.js index dbd855cebe..c21b2b6dc3 100644 --- a/assets/guide_docker_docker_windows.md.ho0xYayV.js +++ b/assets/guide_docker_docker_windows.md.DVhNvzRP.js @@ -1,4 +1,4 @@ -import{_ as a,c as i,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在Docker中开设Windows系统虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_windows.md","filePath":"guide/docker/docker_windows.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_windows.md"};function p(l,s,r,h,d,o){return n(),i("div",null,s[0]||(s[0]=[e(`

在Docker中开设Windows系统虚拟机

一键开设(通过vagrant)

  • 共享宿主机所有资源(CPU、内存、硬盘),基于docker所以只占用系统的大小,适合多开
  • 共享IP,做了docker的NAT映射,可选择是否映射到外网或仅内网
  • 设置的win系统默认最多占用为1核2G内存50G硬盘,实际占用看使用情况
  • 无需iptables进行NAT映射,删除容器时自动删除了端口的映射,方便维护
  • 需要考虑宿主机是否支持嵌套虚拟化,暂时只支持X86_64架构的系统

宿主机需要支持嵌套虚拟化,且暂时只支持X86_64架构的系统,否则不可开设

执行

egrep -c '(vmx|svm)' /proc/cpuinfo

结果需要大于或等于1,不能为0

然后需要先设置docker切换使用v1版cgroup启动

sed -i 's/GRUB_CMDLINE_LINUX="\\(.*\\)"/GRUB_CMDLINE_LINUX="\\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
+import{_ as a,c as i,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在Docker中开设Windows系统虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_windows.md","filePath":"guide/docker/docker_windows.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_windows.md"};function p(l,s,r,h,d,o){return n(),i("div",null,s[0]||(s[0]=[e(`

在Docker中开设Windows系统虚拟机

一键开设(通过vagrant)

  • 共享宿主机所有资源(CPU、内存、硬盘),基于docker所以只占用系统的大小,适合多开
  • 共享IP,做了docker的NAT映射,可选择是否映射到外网或仅内网
  • 设置的win系统默认最多占用为1核2G内存50G硬盘,实际占用看使用情况
  • 无需iptables进行NAT映射,删除容器时自动删除了端口的映射,方便维护
  • 需要考虑宿主机是否支持嵌套虚拟化,暂时只支持X86_64架构的系统

宿主机需要支持嵌套虚拟化,且暂时只支持X86_64架构的系统,否则不可开设

执行

egrep -c '(vmx|svm)' /proc/cpuinfo

结果需要大于或等于1,不能为0

然后需要先设置docker切换使用v1版cgroup启动

sed -i 's/GRUB_CMDLINE_LINUX="\\(.*\\)"/GRUB_CMDLINE_LINUX="\\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
 update-grub
 ls

如果执行都无报错,执行reboot重启系统以使得设置生效

支持的镜像

使用的自建的镜像:https://hub.docker.com/r/spiritlhl/wds

镜像名字镜像大小
1020G
202217.5G
201917G

创建出的容器大小会比镜像大小大一丢丢,但不多

下载脚本

curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewindows.sh -o onewindows.sh && chmod +x onewindows.sh

使用方法

开设前务必在screen窗口中执行,避免SSH长期链接造成掉线卡死

./onewindows.sh 容器名字 系统版本 RDP的端口 是否为外网映射(留空则默认是N,可选Y)

开设前需要确认宿主机至少有镜像大小的两倍大小加10G硬盘的大小,因为docker在创建容器时得先将镜像拉到本地再创建

创建过程中,硬盘占用峰值为宿主机系统+镜像大小+容器大小

比如开设容器名字为test,占用最低的Windows 2019系统的容器,映射外网RDP端口为13389,设置为外网映射(映射到你的服务器外网IPV4地址)

./onewindows.sh test 2019 13389 Y

开设后默认的用户名是Administratorvagrant

默认的密码是vagrant

如果你选择开设映射的外网端口,务必登录后修改对应账户的密码(两个账户都可能有,自行尝试),否则可能被人爆破滥用

删除

需要删除对应镜像和容器,先执行docker ps -adocker images查询镜像是spiritlhl/wds的ID,然后对应使用

docker rm -f 容器的ID
 docker rmi 镜像的ID

删除后可开设别的版本的windows容器

(在宿主机上使用Docker安装Windows系统,好像绕过了某些商家不允许DD成Win系统的TOS限制)

手动开设(通过 Dockur 项目)

本项目支持在宿主机不支持嵌套虚拟化的情况下,使用 QEMU 进行虚拟机创建。

原始项目地址

注意事项:

  • 原始项目仅为启动器,不包含 Windows 镜像;

  • 使用时需下载镜像文件,在境内网络环境下首次启动容器需约 4 小时(含镜像下载和安装);

  • 默认要求宿主机具备以下最低硬件资源(可通过修改脚本进行调整):

    • CPU:至少 4 核
    • 内存:至少 4G
    • 硬盘:至少 64G

如需魔改启动脚本以减少资源占用或调整其他参数,可参考以下文章:

对于 x86_64 架构用户

提供一个已魔改的启动器(单文件版本),方便自行构建 Windows 镜像。该版本将系统文件和镜像直接写入 Docker 写入层中,无需额外挂载镜像文件

下载链接: https://github.com/oneclickvirt/docker/releases/download/amd64_builder/builder.tar

导入 Docker 镜像:

bash
docker load -i builder.tar

使用自定义 Windows ISO 镜像启动容器

首先从以下地址下载 Windows ISO 镜像: https://github.com/ILLKX/Windows

启动容器示例命令:

bash
docker run -it -d \\
diff --git a/assets/guide_docker_docker_windows.md.ho0xYayV.lean.js b/assets/guide_docker_docker_windows.md.DVhNvzRP.lean.js
similarity index 75%
rename from assets/guide_docker_docker_windows.md.ho0xYayV.lean.js
rename to assets/guide_docker_docker_windows.md.DVhNvzRP.lean.js
index 5133b50903..af4b1ff137 100644
--- a/assets/guide_docker_docker_windows.md.ho0xYayV.lean.js
+++ b/assets/guide_docker_docker_windows.md.DVhNvzRP.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在Docker中开设Windows系统虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_windows.md","filePath":"guide/docker/docker_windows.md","lastUpdated":1773143516000}'),t={name:"guide/docker/docker_windows.md"};function p(l,s,r,h,d,o){return n(),i("div",null,s[0]||(s[0]=[e("",58)]))}const u=a(t,[["render",p]]);export{c as __pageData,u as default};
+import{_ as a,c as i,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在Docker中开设Windows系统虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_windows.md","filePath":"guide/docker/docker_windows.md","lastUpdated":1773196139000}'),t={name:"guide/docker/docker_windows.md"};function p(l,s,r,h,d,o){return n(),i("div",null,s[0]||(s[0]=[e("",58)]))}const u=a(t,[["render",p]]);export{c as __pageData,u as default};
diff --git a/assets/guide_incus_incus_custom.md.BKTJVy5m.js b/assets/guide_incus_incus_custom.md.DPN5W2S7.js
similarity index 99%
rename from assets/guide_incus_incus_custom.md.BKTJVy5m.js
rename to assets/guide_incus_incus_custom.md.DPN5W2S7.js
index 1a273c9626..72d3303ca9 100644
--- a/assets/guide_incus_incus_custom.md.BKTJVy5m.js
+++ b/assets/guide_incus_incus_custom.md.DPN5W2S7.js
@@ -1,4 +1,4 @@
-import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",_="/assets/lxd19.B9_MB265.png",C="/assets/lxd20.rK3P3TT8.png",x="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_custom.md","filePath":"guide/incus/incus_custom.md","lastUpdated":1773143516000}'),F={name:"guide/incus/incus_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p(`

自定义

给incus启用官方的web面板进行控制

先查看 incus论坛活跃用户分享的第三方教程

不懂的部分见 给机房的Ubuntu22.04安装LXD共享GPU资源-配置web 部分的内容

添加自定义的镜像源

https://incusimages.spiritlhl.net/

本镜像源是本人通过每日修补得到的,每日会进行更新,具体进行了什么修补在 https://github.com/oneclickvirt/incus_images 可见详细说明。

shell
incus remote remove spiritlhl
+import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",_="/assets/lxd19.B9_MB265.png",C="/assets/lxd20.rK3P3TT8.png",x="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_custom.md","filePath":"guide/incus/incus_custom.md","lastUpdated":1773196139000}'),F={name:"guide/incus/incus_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p(`

自定义

给incus启用官方的web面板进行控制

先查看 incus论坛活跃用户分享的第三方教程

不懂的部分见 给机房的Ubuntu22.04安装LXD共享GPU资源-配置web 部分的内容

添加自定义的镜像源

https://incusimages.spiritlhl.net/

本镜像源是本人通过每日修补得到的,每日会进行更新,具体进行了什么修补在 https://github.com/oneclickvirt/incus_images 可见详细说明。

shell
incus remote remove spiritlhl
 incus remote add spiritlhl https://incusimages.spiritlhl.net --protocol simplestreams --public
 incus image list spiritlhl:debian

给宿主机附加免费的IPV6地址段

有的机器本身没有IPV6的/64子网,这里给出一个方法免费附加IPV6的子网。

这里是使用6in4方法解决宿主机本身没有IPV6地址的问题。

TIP

本页面的操作务必在原始系统上操作,保证未使用本项目的其他脚本安装环境(除了PVE,PVE需要先安装好),否则可能导致环境冲突

以下是2023年目前还在运行的免费提供IPV6子网的平台

支持的平台对应需要的安装包协议通道/子网数量
tunnelbroker.netifupdown 或 ifupdown2v4tunnel 或 sit3✖/64 或 5✖/64
tunnelbroker.chifupdown 或 ifupdown2v4tunnel 或 sit3✖/64
ip4market.ruifupdown 或 ifupdown2v4tunnel 或 sit1✖/64
netassist.uaifupdown 或 ifupdown2v4tunnel 或 sit1✖/64
https://github.com/oneclickvirt/6in4ifupdown2sit、gre、ipip自定义

免费的平台只解决IPV6有没有的问题,不提供优质的IPV6带宽。

如需优质的带宽,请自建隧道,当ifupdown和ifupdown2都可时,先尝试ifupdown是否可安装成功,否则就安装ifupdown2.

安装完毕后,安装了哪个包后面就选择哪个包进行格式转换。

初始环境修改

执行

touch /etc/cloud/cloud-init.disabled

关闭cloud-init的自动化覆写先,然后查看本机使用什么管理网络,执行

systemctl is-active systemd-networkd

systemctl is-active networking

看看属于哪种情况,如果是前者active,后者inactive,你需要重装/DD一个不是这样配置的系统,或者切换本机使用ifupdown/ifupdown2管理网络

# 是否需要禁用原网络管理自行评判
 # systemctl stop systemd-networkd
diff --git a/assets/guide_incus_incus_custom.md.BKTJVy5m.lean.js b/assets/guide_incus_incus_custom.md.DPN5W2S7.lean.js
similarity index 94%
rename from assets/guide_incus_incus_custom.md.BKTJVy5m.lean.js
rename to assets/guide_incus_incus_custom.md.DPN5W2S7.lean.js
index 9dbd7bf894..20faaf0002 100644
--- a/assets/guide_incus_incus_custom.md.BKTJVy5m.lean.js
+++ b/assets/guide_incus_incus_custom.md.DPN5W2S7.lean.js
@@ -1 +1 @@
-import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",_="/assets/lxd19.B9_MB265.png",C="/assets/lxd20.rK3P3TT8.png",x="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_custom.md","filePath":"guide/incus/incus_custom.md","lastUpdated":1773143516000}'),F={name:"guide/incus/incus_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p("",202)]))}const S=a(F,[["render",V]]);export{D as __pageData,S as default};
+import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",f="/assets/lxd16.CgeIdYJ2.png",w="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",_="/assets/lxd19.B9_MB265.png",C="/assets/lxd20.rK3P3TT8.png",x="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_custom.md","filePath":"guide/incus/incus_custom.md","lastUpdated":1773196139000}'),F={name:"guide/incus/incus_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p("",202)]))}const S=a(F,[["render",V]]);export{D as __pageData,S as default};
diff --git a/assets/guide_incus_incus_extra_config.md.C-guQNJz.js b/assets/guide_incus_incus_extra_config.md.CGOZO1FW.js
similarity index 99%
rename from assets/guide_incus_incus_extra_config.md.C-guQNJz.js
rename to assets/guide_incus_incus_extra_config.md.CGOZO1FW.js
index 5b3e2e6dcc..9067a71d71 100644
--- a/assets/guide_incus_incus_extra_config.md.C-guQNJz.js
+++ b/assets/guide_incus_incus_extra_config.md.CGOZO1FW.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"其他自定义配置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_extra_config.md","filePath":"guide/incus/incus_extra_config.md","lastUpdated":1773143516000}'),l={name:"guide/incus/incus_extra_config.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

其他自定义配置

TIP

以下的配置安装会加重宿主机的负担,非必要不要安装

自动配置IPV6地址

  • (非必须,不使用的也没问题)
  • 该脚本仅适用于宿主机有给IPV6子网且是至少/112的,且宿主机绑定了子网的第一个IP宿主机的IPV6地址或IPV6的gateway
  • 自动为incus创建的LXC容器配置IPV6地址
  • 已集成到buildct.sh中可使用变量控制且无需事先下载,该脚本可不手动使用,在使用buildct.sh时配置Y开启即可

下载脚本

国际

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

自动为容器配置IPV6映射地址(默认不使用iptables进行映射)

bash
bash build_ipv6_network.sh 容器名称

映射完毕会打印信息

示例(给test容器自动配置IPV6地址,配置完成会写入一个test_v6的文件信息)

bash
bash build_ipv6_network.sh test

PS:增加ipv6处理过程中可选择是否使用ip6tables进行映射,默认不使用ip6tables方式进行映射而使用新增网络设备的方式进行映射

使用ip6tables进行映射

bash
bash build_ipv6_network.sh 容器名称 Y

若使用了ip6tables进行映射,则删除所有IPV6已映射的规则可用:

bash
ip6tables -t nat -F PREROUTING
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"其他自定义配置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_extra_config.md","filePath":"guide/incus/incus_extra_config.md","lastUpdated":1773196139000}'),l={name:"guide/incus/incus_extra_config.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

其他自定义配置

TIP

以下的配置安装会加重宿主机的负担,非必要不要安装

自动配置IPV6地址

  • (非必须,不使用的也没问题)
  • 该脚本仅适用于宿主机有给IPV6子网且是至少/112的,且宿主机绑定了子网的第一个IP宿主机的IPV6地址或IPV6的gateway
  • 自动为incus创建的LXC容器配置IPV6地址
  • 已集成到buildct.sh中可使用变量控制且无需事先下载,该脚本可不手动使用,在使用buildct.sh时配置Y开启即可

下载脚本

国际

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

自动为容器配置IPV6映射地址(默认不使用iptables进行映射)

bash
bash build_ipv6_network.sh 容器名称

映射完毕会打印信息

示例(给test容器自动配置IPV6地址,配置完成会写入一个test_v6的文件信息)

bash
bash build_ipv6_network.sh test

PS:增加ipv6处理过程中可选择是否使用ip6tables进行映射,默认不使用ip6tables方式进行映射而使用新增网络设备的方式进行映射

使用ip6tables进行映射

bash
bash build_ipv6_network.sh 容器名称 Y

若使用了ip6tables进行映射,则删除所有IPV6已映射的规则可用:

bash
ip6tables -t nat -F PREROUTING
 ip6tables-legacy -t nat -F PREROUTING
 ip6tables-save > /etc/iptables/rules.v6
 netfilter-persistent save
diff --git a/assets/guide_incus_incus_extra_config.md.C-guQNJz.lean.js b/assets/guide_incus_incus_extra_config.md.CGOZO1FW.lean.js
similarity index 87%
rename from assets/guide_incus_incus_extra_config.md.C-guQNJz.lean.js
rename to assets/guide_incus_incus_extra_config.md.CGOZO1FW.lean.js
index f483f9b13d..1a2d96687e 100644
--- a/assets/guide_incus_incus_extra_config.md.C-guQNJz.lean.js
+++ b/assets/guide_incus_incus_extra_config.md.CGOZO1FW.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"其他自定义配置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_extra_config.md","filePath":"guide/incus/incus_extra_config.md","lastUpdated":1773143516000}'),l={name:"guide/incus/incus_extra_config.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",37)]))}const g=i(l,[["render",p]]);export{F as __pageData,g as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"其他自定义配置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_extra_config.md","filePath":"guide/incus/incus_extra_config.md","lastUpdated":1773196139000}'),l={name:"guide/incus/incus_extra_config.md"};function p(t,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",37)]))}const g=i(l,[["render",p]]);export{F as __pageData,g as default};
diff --git a/assets/guide_incus_incus_install.md.DRLe1k5O.js b/assets/guide_incus_incus_install.md.xPa31B31.js
similarity index 99%
rename from assets/guide_incus_incus_install.md.DRLe1k5O.js
rename to assets/guide_incus_incus_install.md.xPa31B31.js
index b3abac8154..93b7574344 100644
--- a/assets/guide_incus_incus_install.md.DRLe1k5O.js
+++ b/assets/guide_incus_incus_install.md.xPa31B31.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_install.md","filePath":"guide/incus/incus_install.md","lastUpdated":1773143516000}'),p={name:"guide/incus/incus_install.md"};function l(t,s,h,r,d,c){return n(),a("div",null,s[0]||(s[0]=[e(`

Incus

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间。

当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用。

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Incus主体安装

WARNING

如果是全新的服务器,务必保证curl命令可用且update无问题再执行本脚本。

  • 环境要求:Ubuntu 20+(不推荐Incus请使用LXD), Debian 11+(推荐), RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 安装过程中会提示输入存储池创建路径以及大小,你所有要开的虚拟机或容器最终占用的空间是在存储池中
  • 环境安装过程后需要重启服务器以加载一些默认配置
  • 默认启用lxcfs相关配置,使得容器内查询容器信息变更为容器本身的信息而不是宿主机信息
  • 实测本安装程序在物理机器或非物理机器上都可使用

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

shell
bash incus_install.sh

初始化配置的例子:

如果不需要指定非系统盘的路径做默认存储池,那么选择是否自定义存储池路径时直接回车或输入n即可,不需要指定路径。

如果需要指定非系统盘的路径做默认的存储池,那么需要选择y,然后输入对应的路径(你挂载的盘的实际的绝对路径)。

如果对应的盘除去已占用空间还有18G硬盘空余,想要开设15G的存储池,按照命令行的提示则输入15

TIP

执行过程中可能会要求手动重启加载存储类型到内核中,安装完毕执行到最后会自动进行服务器重启,首次完整安装完毕后的自动重启最多大概耗时400~500秒,请耐心等待

WARNING

如果你需要在一台服务器上开启超过200个INCUS容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

卸载 Incus 环境

一键卸载 Incus 全套环境,包括所有容器、虚拟机、镜像、存储池、网络配置、systemd 服务、软件包及相关配置文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

手动安装(备选)

不推荐,只是为了一些奇葩环境一键脚本跑不动的时候进行安装,或则你想要了解最基础的Incus安装流程。

关闭防火墙

bash
apt update
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_install.md","filePath":"guide/incus/incus_install.md","lastUpdated":1773196139000}'),p={name:"guide/incus/incus_install.md"};function l(t,s,h,r,d,c){return n(),a("div",null,s[0]||(s[0]=[e(`

Incus

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间。

当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用。

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

Incus主体安装

WARNING

如果是全新的服务器,务必保证curl命令可用且update无问题再执行本脚本。

  • 环境要求:Ubuntu 20+(不推荐Incus请使用LXD), Debian 11+(推荐), RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 安装过程中会提示输入存储池创建路径以及大小,你所有要开的虚拟机或容器最终占用的空间是在存储池中
  • 环境安装过程后需要重启服务器以加载一些默认配置
  • 默认启用lxcfs相关配置,使得容器内查询容器信息变更为容器本身的信息而不是宿主机信息
  • 实测本安装程序在物理机器或非物理机器上都可使用

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/incus_install.sh -o incus_install.sh && chmod +x incus_install.sh && bash incus_install.sh

shell
bash incus_install.sh

初始化配置的例子:

如果不需要指定非系统盘的路径做默认存储池,那么选择是否自定义存储池路径时直接回车或输入n即可,不需要指定路径。

如果需要指定非系统盘的路径做默认的存储池,那么需要选择y,然后输入对应的路径(你挂载的盘的实际的绝对路径)。

如果对应的盘除去已占用空间还有18G硬盘空余,想要开设15G的存储池,按照命令行的提示则输入15

TIP

执行过程中可能会要求手动重启加载存储类型到内核中,安装完毕执行到最后会自动进行服务器重启,首次完整安装完毕后的自动重启最多大概耗时400~500秒,请耐心等待

WARNING

如果你需要在一台服务器上开启超过200个INCUS容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

卸载 Incus 环境

一键卸载 Incus 全套环境,包括所有容器、虚拟机、镜像、存储池、网络配置、systemd 服务、软件包及相关配置文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/uninstall_incus.sh)

手动安装(备选)

不推荐,只是为了一些奇葩环境一键脚本跑不动的时候进行安装,或则你想要了解最基础的Incus安装流程。

关闭防火墙

bash
apt update
 apt install curl wget sudo dos2unix ufw jq -y
 ufw disable

开设虚拟内存SWAP

内存看你开多少服务器,这里如果要开8个,换算需要2G内存,实际内存如果是512MB内存,还需要开1.5G,保守点开2G虚拟内存即可

执行下面命令,输入1,再输入2048,代表开2G虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

安装incus

下述命令直接通过zabbly源进行安装

sudo -i
 mkdir -p /etc/apt/keyrings/
diff --git a/assets/guide_incus_incus_install.md.DRLe1k5O.lean.js b/assets/guide_incus_incus_install.md.xPa31B31.lean.js
similarity index 86%
rename from assets/guide_incus_incus_install.md.DRLe1k5O.lean.js
rename to assets/guide_incus_incus_install.md.xPa31B31.lean.js
index 0d90ef0e3f..26ece489f9 100644
--- a/assets/guide_incus_incus_install.md.DRLe1k5O.lean.js
+++ b/assets/guide_incus_incus_install.md.xPa31B31.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_install.md","filePath":"guide/incus/incus_install.md","lastUpdated":1773143516000}'),p={name:"guide/incus/incus_install.md"};function l(t,s,h,r,d,c){return n(),a("div",null,s[0]||(s[0]=[e("",54)]))}const o=i(p,[["render",l]]);export{u as __pageData,o as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"Incus","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_install.md","filePath":"guide/incus/incus_install.md","lastUpdated":1773196139000}'),p={name:"guide/incus/incus_install.md"};function l(t,s,h,r,d,c){return n(),a("div",null,s[0]||(s[0]=[e("",54)]))}const o=i(p,[["render",l]]);export{u as __pageData,o as default};
diff --git a/assets/guide_incus_incus_lxc.md.CnovMFmy.js b/assets/guide_incus_incus_lxc.md.C1aMQc5M.js
similarity index 99%
rename from assets/guide_incus_incus_lxc.md.CnovMFmy.js
rename to assets/guide_incus_incus_lxc.md.C1aMQc5M.js
index a2d91ef864..e0585b7ac4 100644
--- a/assets/guide_incus_incus_lxc.md.CnovMFmy.js
+++ b/assets/guide_incus_incus_lxc.md.C1aMQc5M.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"在 Incus 中运行 LXC 容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_lxc.md","filePath":"guide/incus/incus_lxc.md","lastUpdated":1773143516000}'),e={name:"guide/incus/incus_lxc.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

在 Incus 中运行 LXC 容器

开设LXC容器可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的容器系统有三重筛选,优先级:自编译官方opsmaru
  • 自编译镜像完整的支持系统的列表:x86_64_all_images.txtarm64_all_images.txt

单独生成一个NAT容器

  • 只生成一个NAT容器,可自定义限制所有内容

下载脚本

下载开机脚本是非必须的,如果你使用过一键安装incus的命令,自动已下载对应的开机脚本,不需要重复下载该脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

使用方法

./buildct.sh 容器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义容器的系统,不填写留空时默认使用debian11,注意传入参数为系统名字+版本号

示例

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小2G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian11
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian11

需要进入容器内部则执行

incus exec test /bin/bash

退出则输入exit回车即可

需要查看信息则执行

shell
cat 容器名字

比如查询示例的信息就是

shell
cat test

如果已通过以上方法生成过容器,还需要批量生成容器,可使用自定义批量生成版本的脚本,但注意先删除测试容器再进行批量生成容器

删除测试容器

shell
incus stop test
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"在 Incus 中运行 LXC 容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_lxc.md","filePath":"guide/incus/incus_lxc.md","lastUpdated":1773196139000}'),e={name:"guide/incus/incus_lxc.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

在 Incus 中运行 LXC 容器

开设LXC容器可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的容器系统有三重筛选,优先级:自编译官方opsmaru
  • 自编译镜像完整的支持系统的列表:x86_64_all_images.txtarm64_all_images.txt

单独生成一个NAT容器

  • 只生成一个NAT容器,可自定义限制所有内容

下载脚本

下载开机脚本是非必须的,如果你使用过一键安装incus的命令,自动已下载对应的开机脚本,不需要重复下载该脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

使用方法

./buildct.sh 容器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义容器的系统,不填写留空时默认使用debian11,注意传入参数为系统名字+版本号

示例

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小2G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian11
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian11

需要进入容器内部则执行

incus exec test /bin/bash

退出则输入exit回车即可

需要查看信息则执行

shell
cat 容器名字

比如查询示例的信息就是

shell
cat test

如果已通过以上方法生成过容器,还需要批量生成容器,可使用自定义批量生成版本的脚本,但注意先删除测试容器再进行批量生成容器

删除测试容器

shell
incus stop test
 incus delete test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/guide_incus_incus_lxc.md.CnovMFmy.lean.js b/assets/guide_incus_incus_lxc.md.C1aMQc5M.lean.js
similarity index 86%
rename from assets/guide_incus_incus_lxc.md.CnovMFmy.lean.js
rename to assets/guide_incus_incus_lxc.md.C1aMQc5M.lean.js
index a273abe49e..96e3b5d36d 100644
--- a/assets/guide_incus_incus_lxc.md.CnovMFmy.lean.js
+++ b/assets/guide_incus_incus_lxc.md.C1aMQc5M.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"在 Incus 中运行 LXC 容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_lxc.md","filePath":"guide/incus/incus_lxc.md","lastUpdated":1773143516000}'),e={name:"guide/incus/incus_lxc.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",95)]))}const o=i(e,[["render",t]]);export{F as __pageData,o as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"在 Incus 中运行 LXC 容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_lxc.md","filePath":"guide/incus/incus_lxc.md","lastUpdated":1773196139000}'),e={name:"guide/incus/incus_lxc.md"};function t(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",95)]))}const o=i(e,[["render",t]]);export{F as __pageData,o as default};
diff --git a/assets/guide_incus_incus_precheck.md.6zgZie2y.js b/assets/guide_incus_incus_precheck.md.B6rEsaLc.js
similarity index 98%
rename from assets/guide_incus_incus_precheck.md.6zgZie2y.js
rename to assets/guide_incus_incus_precheck.md.B6rEsaLc.js
index b5b7c3f6e8..5eac84e0f0 100644
--- a/assets/guide_incus_incus_precheck.md.6zgZie2y.js
+++ b/assets/guide_incus_incus_precheck.md.B6rEsaLc.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_precheck.md","filePath":"guide/incus/incus_precheck.md","lastUpdated":1773143516000}'),r={name:"guide/incus/incus_precheck.md"};function n(l,e,c,p,o,d){return t(),a("div",null,e[0]||(e[0]=[s('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/incus

要求

硬件要求:

  • 系统:Ubuntu 20+, Debian 11+, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 虚拟化:推荐KVM、VMWARE虚拟化
  • CPU:内核数最好大于或等于2,否则可能出现内核空转切片循环导致占用100%
  • 内存:内存至少512MB
  • 硬盘:硬盘(系统盘)至少10G
  • 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接Github的raw页面就行

PS: 如果硬件非常好资源很多,可使用PVE批量开KVM虚拟化的虚拟机 跳转

PS: 如果硬件资源更烂,虚拟化不支持,可使用docker版本的,适配面更广 跳转

项目特点

  • 本套脚本开发使用的Ubuntu24Debian12,别的长期维护版本应该也没问题,某个存储类型无法使用时自动切换(优先级: btrfs > lvm > zfs > ceph > dir )

  • 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致

  • 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统

  • 已设置默认启用lxcfs,使得在容器内的查询资源时使用的是配置的视图而不是宿主机的视图

  • 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机

  • 已支持一键为LXC容器配置IPV6地址(前提是宿主机有IPV6子网,无IPV6地址则不配置),自动适配子网大小

  • 已增加各种第三方镜像源,如果官方镜像丢失时,将使用镜像源下载容器镜像(含自修复镜像)

  • 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用fdisk -ldf查看

  • 挂载其他盘的详看 其他说明

  • 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置

检测环境

使用后续脚本的务必执行本命令检测宿主机是否符合要求

国际

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)

国内

bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)
',17)]))}const b=i(r,[["render",n]]);export{u as __pageData,b as default}; +import{_ as i,c as a,o as t,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_precheck.md","filePath":"guide/incus/incus_precheck.md","lastUpdated":1773196139000}'),r={name:"guide/incus/incus_precheck.md"};function n(l,e,c,p,o,d){return t(),a("div",null,e[0]||(e[0]=[s('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看incus模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/incus

要求

硬件要求:

  • 系统:Ubuntu 20+, Debian 11+, RockyLinux 9+, AlmaLinux 9+, Centos 9+, Alpine(自行安装bash后), Arch
  • 虚拟化:推荐KVM、VMWARE虚拟化
  • CPU:内核数最好大于或等于2,否则可能出现内核空转切片循环导致占用100%
  • 内存:内存至少512MB
  • 硬盘:硬盘(系统盘)至少10G
  • 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接Github的raw页面就行

PS: 如果硬件非常好资源很多,可使用PVE批量开KVM虚拟化的虚拟机 跳转

PS: 如果硬件资源更烂,虚拟化不支持,可使用docker版本的,适配面更广 跳转

项目特点

  • 本套脚本开发使用的Ubuntu24Debian12,别的长期维护版本应该也没问题,某个存储类型无法使用时自动切换(优先级: btrfs > lvm > zfs > ceph > dir )

  • 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致

  • 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统

  • 已设置默认启用lxcfs,使得在容器内的查询资源时使用的是配置的视图而不是宿主机的视图

  • 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机

  • 已支持一键为LXC容器配置IPV6地址(前提是宿主机有IPV6子网,无IPV6地址则不配置),自动适配子网大小

  • 已增加各种第三方镜像源,如果官方镜像丢失时,将使用镜像源下载容器镜像(含自修复镜像)

  • 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用fdisk -ldf查看

  • 挂载其他盘的详看 其他说明

  • 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置

检测环境

使用后续脚本的务必执行本命令检测宿主机是否符合要求

国际

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)

国内

bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/pre_check.sh)
',17)]))}const b=i(r,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/guide_incus_incus_precheck.md.6zgZie2y.lean.js b/assets/guide_incus_incus_precheck.md.B6rEsaLc.lean.js similarity index 86% rename from assets/guide_incus_incus_precheck.md.6zgZie2y.lean.js rename to assets/guide_incus_incus_precheck.md.B6rEsaLc.lean.js index 4640def376..5a1f342395 100644 --- a/assets/guide_incus_incus_precheck.md.6zgZie2y.lean.js +++ b/assets/guide_incus_incus_precheck.md.B6rEsaLc.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_precheck.md","filePath":"guide/incus/incus_precheck.md","lastUpdated":1773143516000}'),r={name:"guide/incus/incus_precheck.md"};function n(l,e,c,p,o,d){return t(),a("div",null,e[0]||(e[0]=[s("",17)]))}const b=i(r,[["render",n]]);export{u as __pageData,b as default}; +import{_ as i,c as a,o as t,ag as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_precheck.md","filePath":"guide/incus/incus_precheck.md","lastUpdated":1773196139000}'),r={name:"guide/incus/incus_precheck.md"};function n(l,e,c,p,o,d){return t(),a("div",null,e[0]||(e[0]=[s("",17)]))}const b=i(r,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/guide_incus_incus_qa.md.SgCP8EiY.js b/assets/guide_incus_incus_qa.md.BrsdtkVw.js similarity index 99% rename from assets/guide_incus_incus_qa.md.SgCP8EiY.js rename to assets/guide_incus_incus_qa.md.BrsdtkVw.js index 8b9bc6bd01..49ab0650f2 100644 --- a/assets/guide_incus_incus_qa.md.SgCP8EiY.js +++ b/assets/guide_incus_incus_qa.md.BrsdtkVw.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qa.md","filePath":"guide/incus/incus_qa.md","lastUpdated":1773143516000}'),t={name:"guide/incus/incus_qa.md"};function p(l,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[n('

解惑

开设centos7发现报错CGroupV1不支持

启用CGroup V1:要在Ubuntu系统上启用CGroup V1,需要编辑内核启动参数。

请注意,在更改内核启动参数之前,请务必备份重要的数据和设置,以防止意外的问题。

编辑/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT中的参数末尾加上systemd.unified_cgroup_hierarchy=0,如

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

保存文件并运行以下命令更新GRUB引导。

bash
sudo update-grub

重启系统,使更改生效

如果上述更改仍旧不支持开设centos7,那么请使用别的宿主机系统尝试

需要Incus和Docker兼容同时存在

如果不做处理,docker会覆写iptables设置导致Incus无网络链接

需要安装一个定时任务定时检测和修复这个问题

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Incus在单核的宿主机上长期使用后CPU占用过高

这个CPU占用过高系Incus原生问题,暂时没有解决方式,且仅在单核宿主机上可复现,多核宿主机不必理会

需要安装一个定时任务定时检测和修复这个问题,每5分钟检测一遍占用看看是否需要重启Incus后端

  • 下载

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart.sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart.sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh
  • 安装
bash
bash incus_fixed_restart.sh install

会复制到 /usr/local/bin/incus_fixed_restart.sh 并写入 cron 每分钟执行。

  • 卸载
bash
bash incus_fixed_restart.sh uninstall

会删除 cron 任务、脚本文件、日志文件和计数文件。

  • 正常运行(由 cron 调用)
bash
/usr/local/bin/incus_fixed_restart.sh

目前已验证可开带独立IPV6地址容器的VPS商家

kuroit 中的 美国凤凰城 regular

datalix 中的 德国AMD 促销款

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

',42)]))}const u=i(t,[["render",p]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qa.md","filePath":"guide/incus/incus_qa.md","lastUpdated":1773196139000}'),t={name:"guide/incus/incus_qa.md"};function p(l,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[n('

解惑

开设centos7发现报错CGroupV1不支持

启用CGroup V1:要在Ubuntu系统上启用CGroup V1,需要编辑内核启动参数。

请注意,在更改内核启动参数之前,请务必备份重要的数据和设置,以防止意外的问题。

编辑/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT中的参数末尾加上systemd.unified_cgroup_hierarchy=0,如

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

保存文件并运行以下命令更新GRUB引导。

bash
sudo update-grub

重启系统,使更改生效

如果上述更改仍旧不支持开设centos7,那么请使用别的宿主机系统尝试

需要Incus和Docker兼容同时存在

如果不做处理,docker会覆写iptables设置导致Incus无网络链接

需要安装一个定时任务定时检测和修复这个问题

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Incus在单核的宿主机上长期使用后CPU占用过高

这个CPU占用过高系Incus原生问题,暂时没有解决方式,且仅在单核宿主机上可复现,多核宿主机不必理会

需要安装一个定时任务定时检测和修复这个问题,每5分钟检测一遍占用看看是否需要重启Incus后端

  • 下载

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart.sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/incus_fixed_restart.sh -o incus_fixed_restart.sh && chmod +x incus_fixed_restart.sh && bash incus_fixed_restart.sh
  • 安装
bash
bash incus_fixed_restart.sh install

会复制到 /usr/local/bin/incus_fixed_restart.sh 并写入 cron 每分钟执行。

  • 卸载
bash
bash incus_fixed_restart.sh uninstall

会删除 cron 任务、脚本文件、日志文件和计数文件。

  • 正常运行(由 cron 调用)
bash
/usr/local/bin/incus_fixed_restart.sh

目前已验证可开带独立IPV6地址容器的VPS商家

kuroit 中的 美国凤凰城 regular

datalix 中的 德国AMD 促销款

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

',42)]))}const u=i(t,[["render",p]]);export{o as __pageData,u as default}; diff --git a/assets/guide_incus_incus_qa.md.SgCP8EiY.lean.js b/assets/guide_incus_incus_qa.md.BrsdtkVw.lean.js similarity index 85% rename from assets/guide_incus_incus_qa.md.SgCP8EiY.lean.js rename to assets/guide_incus_incus_qa.md.BrsdtkVw.lean.js index 4da35f40a8..35c36be5ea 100644 --- a/assets/guide_incus_incus_qa.md.SgCP8EiY.lean.js +++ b/assets/guide_incus_incus_qa.md.BrsdtkVw.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qa.md","filePath":"guide/incus/incus_qa.md","lastUpdated":1773143516000}'),t={name:"guide/incus/incus_qa.md"};function p(l,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[n("",42)]))}const u=i(t,[["render",p]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qa.md","filePath":"guide/incus/incus_qa.md","lastUpdated":1773196139000}'),t={name:"guide/incus/incus_qa.md"};function p(l,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[n("",42)]))}const u=i(t,[["render",p]]);export{o as __pageData,u as default}; diff --git a/assets/guide_incus_incus_qemu.md.Zk6vuIbj.js b/assets/guide_incus_incus_qemu.md.Du2aF86Q.js similarity index 99% rename from assets/guide_incus_incus_qemu.md.Zk6vuIbj.js rename to assets/guide_incus_incus_qemu.md.Du2aF86Q.js index fa15bed840..b76b1cd8cf 100644 --- a/assets/guide_incus_incus_qemu.md.Zk6vuIbj.js +++ b/assets/guide_incus_incus_qemu.md.Du2aF86Q.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qemu.md","filePath":"guide/incus/incus_qemu.md","lastUpdated":1773143516000}'),n={name:"guide/incus/incus_qemu.md"};function l(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t(`

在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机

开设QEMU虚拟机可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的虚拟机系统仅使用 自编译 的镜像,非自编译镜像缺少依赖和设置不可使用
  • 自编译镜像完整的支持系统的列表:kvm_images

单独生成一个NAT服务器

  • 只生成一个NAT服务器,可自定义限制所有内容

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

使用方法

./buildvm.sh 服务器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义服务器的系统,不填写留空时默认使用debian13,注意传入参数为系统名字+版本号

除了alpine系统,其他系统的硬盘大小必须大于6G,否则系统起不来,无法初始化和使用,开设的中途阶段就会崩溃。

示例

以下为开设的示例服务器的信息:

属性
服务器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小10G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

需要进入虚拟机内部则执行

shell
incus console test

退出则先按住Ctrl再按a,松开后,再按q

需要查看信息则执行

shell
cat 服务器名字

比如查询示例的信息就是

shell
cat test

删除测试服务器

shell
incus stop -f test
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qemu.md","filePath":"guide/incus/incus_qemu.md","lastUpdated":1773196139000}'),n={name:"guide/incus/incus_qemu.md"};function l(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t(`

在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机

开设QEMU虚拟机可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的虚拟机系统仅使用 自编译 的镜像,非自编译镜像缺少依赖和设置不可使用
  • 自编译镜像完整的支持系统的列表:kvm_images

单独生成一个NAT服务器

  • 只生成一个NAT服务器,可自定义限制所有内容

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

使用方法

./buildvm.sh 服务器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义服务器的系统,不填写留空时默认使用debian13,注意传入参数为系统名字+版本号

除了alpine系统,其他系统的硬盘大小必须大于6G,否则系统起不来,无法初始化和使用,开设的中途阶段就会崩溃。

示例

以下为开设的示例服务器的信息:

属性
服务器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小10G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

需要进入虚拟机内部则执行

shell
incus console test

退出则先按住Ctrl再按a,松开后,再按q

需要查看信息则执行

shell
cat 服务器名字

比如查询示例的信息就是

shell
cat test

删除测试服务器

shell
incus stop -f test
 incus delete -f test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/guide_incus_incus_qemu.md.Zk6vuIbj.lean.js b/assets/guide_incus_incus_qemu.md.Du2aF86Q.lean.js
similarity index 87%
rename from assets/guide_incus_incus_qemu.md.Zk6vuIbj.lean.js
rename to assets/guide_incus_incus_qemu.md.Du2aF86Q.lean.js
index 4f011064d9..f49e542101 100644
--- a/assets/guide_incus_incus_qemu.md.Zk6vuIbj.lean.js
+++ b/assets/guide_incus_incus_qemu.md.Du2aF86Q.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qemu.md","filePath":"guide/incus/incus_qemu.md","lastUpdated":1773143516000}'),n={name:"guide/incus/incus_qemu.md"};function l(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t("",31)]))}const u=i(n,[["render",l]]);export{o as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"在 Incus 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_qemu.md","filePath":"guide/incus/incus_qemu.md","lastUpdated":1773196139000}'),n={name:"guide/incus/incus_qemu.md"};function l(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t("",31)]))}const u=i(n,[["render",l]]);export{o as __pageData,u as default};
diff --git a/assets/guide_incus_incus_thanks.md.C--T4-TC.js b/assets/guide_incus_incus_thanks.md.C-evMVCv.js
similarity index 97%
rename from assets/guide_incus_incus_thanks.md.C--T4-TC.js
rename to assets/guide_incus_incus_thanks.md.C-evMVCv.js
index 0981ec3014..649dec4f36 100644
--- a/assets/guide_incus_incus_thanks.md.C--T4-TC.js
+++ b/assets/guide_incus_incus_thanks.md.C-evMVCv.js
@@ -1 +1 @@
-import{_ as r,c as e,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/incus/incus_thanks.md","filePath":"guide/incus/incus_thanks.md","lastUpdated":1773143516000}'),a={name:"guide/incus/incus_thanks.md"};function o(i,t,c,p,u,l){return n(),e("div",null,t[0]||(t[0]=[s('

致谢

https://github.com/lxc/lxd

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://github.com/zabbly/incus

',10)]))}const g=r(a,[["render",o]]);export{d as __pageData,g as default}; +import{_ as r,c as e,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/incus/incus_thanks.md","filePath":"guide/incus/incus_thanks.md","lastUpdated":1773196139000}'),a={name:"guide/incus/incus_thanks.md"};function o(i,t,c,p,u,l){return n(),e("div",null,t[0]||(t[0]=[s('

致谢

https://github.com/lxc/lxd

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://github.com/zabbly/incus

',10)]))}const g=r(a,[["render",o]]);export{d as __pageData,g as default}; diff --git a/assets/guide_incus_incus_thanks.md.C--T4-TC.lean.js b/assets/guide_incus_incus_thanks.md.C-evMVCv.lean.js similarity index 85% rename from assets/guide_incus_incus_thanks.md.C--T4-TC.lean.js rename to assets/guide_incus_incus_thanks.md.C-evMVCv.lean.js index 8c94cd56a9..e2853ac1e5 100644 --- a/assets/guide_incus_incus_thanks.md.C--T4-TC.lean.js +++ b/assets/guide_incus_incus_thanks.md.C-evMVCv.lean.js @@ -1 +1 @@ -import{_ as r,c as e,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/incus/incus_thanks.md","filePath":"guide/incus/incus_thanks.md","lastUpdated":1773143516000}'),a={name:"guide/incus/incus_thanks.md"};function o(i,t,c,p,u,l){return n(),e("div",null,t[0]||(t[0]=[s("",10)]))}const g=r(a,[["render",o]]);export{d as __pageData,g as default}; +import{_ as r,c as e,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/incus/incus_thanks.md","filePath":"guide/incus/incus_thanks.md","lastUpdated":1773196139000}'),a={name:"guide/incus/incus_thanks.md"};function o(i,t,c,p,u,l){return n(),e("div",null,t[0]||(t[0]=[s("",10)]))}const g=r(a,[["render",o]]);export{d as __pageData,g as default}; diff --git a/assets/guide_incus_incus_windows.md.B7vl6lFF.js b/assets/guide_incus_incus_windows.md.BVMq770l.js similarity index 99% rename from assets/guide_incus_incus_windows.md.B7vl6lFF.js rename to assets/guide_incus_incus_windows.md.BVMq770l.js index 55928850c9..998e20d7dc 100644 --- a/assets/guide_incus_incus_windows.md.B7vl6lFF.js +++ b/assets/guide_incus_incus_windows.md.BVMq770l.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/win1.BYIcp55m.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",r="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",c="/assets/win7.xhBfJRvu.jpg",F="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"在 Incus 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_windows.md","filePath":"guide/incus/incus_windows.md","lastUpdated":1773143516000}'),o={name:"guide/incus/incus_windows.md"};function g(u,s,b,y,C,m){return n(),a("div",null,s[0]||(s[0]=[e(`

在 Incus 中运行 Windows 虚拟机

检查 Incus 驱动

确保 incus info 输出中含有 qemu,否则无法创建 VM:

shell
incus info | grep -i driver:

若显示只有 lxc,则incus的驱动不支持开设虚拟机,不需要看后续的教程了。

准备环境和修补镜像

/root 目录下按顺序执行以下命令:

shell
apt update
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/win1.BYIcp55m.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",r="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",c="/assets/win7.xhBfJRvu.jpg",F="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"在 Incus 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_windows.md","filePath":"guide/incus/incus_windows.md","lastUpdated":1773196139000}'),o={name:"guide/incus/incus_windows.md"};function g(u,s,b,y,C,m){return n(),a("div",null,s[0]||(s[0]=[e(`

在 Incus 中运行 Windows 虚拟机

检查 Incus 驱动

确保 incus info 输出中含有 qemu,否则无法创建 VM:

shell
incus info | grep -i driver:

若显示只有 lxc,则incus的驱动不支持开设虚拟机,不需要看后续的教程了。

准备环境和修补镜像

/root 目录下按顺序执行以下命令:

shell
apt update
 apt install -y snapd libguestfs-tools wimtools rsync libhivex-bin libwin-hivex-perl genisoimage || apt install -y mkisofs
 snap install distrobuilder --classic
 # 重启加载一些配置
diff --git a/assets/guide_incus_incus_windows.md.B7vl6lFF.lean.js b/assets/guide_incus_incus_windows.md.BVMq770l.lean.js
similarity index 91%
rename from assets/guide_incus_incus_windows.md.B7vl6lFF.lean.js
rename to assets/guide_incus_incus_windows.md.BVMq770l.lean.js
index 99ceac1282..59ba7d4835 100644
--- a/assets/guide_incus_incus_windows.md.B7vl6lFF.lean.js
+++ b/assets/guide_incus_incus_windows.md.BVMq770l.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/win1.BYIcp55m.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",r="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",c="/assets/win7.xhBfJRvu.jpg",F="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"在 Incus 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_windows.md","filePath":"guide/incus/incus_windows.md","lastUpdated":1773143516000}'),o={name:"guide/incus/incus_windows.md"};function g(u,s,b,y,C,m){return n(),a("div",null,s[0]||(s[0]=[e("",68)]))}const E=i(o,[["render",g]]);export{v as __pageData,E as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/win1.BYIcp55m.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",r="/assets/win4.DwKt_Ood.jpg",d="/assets/win5.BSQ3T_9y.jpg",c="/assets/win7.xhBfJRvu.jpg",F="/assets/win6.B-575Zc1.jpg",v=JSON.parse('{"title":"在 Incus 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/incus/incus_windows.md","filePath":"guide/incus/incus_windows.md","lastUpdated":1773196139000}'),o={name:"guide/incus/incus_windows.md"};function g(u,s,b,y,C,m){return n(),a("div",null,s[0]||(s[0]=[e("",68)]))}const E=i(o,[["render",g]]);export{v as __pageData,E as default};
diff --git a/assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.js b/assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.js
similarity index 99%
rename from assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.js
rename to assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.js
index 7945f9d9db..4676bca36d 100644
--- a/assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.js
+++ b/assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.js
@@ -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":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_build.md","filePath":"guide/kubevirt/kubevirt_build.md","lastUpdated":1773143516000}'),t={name:"guide/kubevirt/kubevirt_build.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一台 KVM 虚拟机(通过 KubeVirt VirtualMachine 资源),自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPv6 地址(需宿主机已有公网 IPv6 且安装脚本已配置 IPv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onekubevirt.sh
+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"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_build.md","filePath":"guide/kubevirt/kubevirt_build.md","lastUpdated":1773196139000}'),t={name:"guide/kubevirt/kubevirt_build.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一台 KVM 虚拟机(通过 KubeVirt VirtualMachine 资源),自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPv6 地址(需宿主机已有公网 IPv6 且安装脚本已配置 IPv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onekubevirt.sh
 chmod +x onekubevirt.sh

国内

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onekubevirt.sh
 chmod +x onekubevirt.sh

示例

运行支持的变量如下

bash
./onekubevirt.sh <name> <cpu> <memory_mb> <disk_gb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system]

目前 system 仅支持选择:

  • debian
  • ubuntu

默认不填则是 debian

shell
./onekubevirt.sh vm1 1 1024 10 MyPassword 25000 34975 35000 n debian

以下为开设的示例虚拟机的信息:

属性
虚拟机名字vm1
SSH 登录的用户名root
SSH 登录的密码MyPassword
CPU 核数1
内存大小1024MB
硬盘大小10GB
SSH 端口25000
内外网映射端口一致的区间34975 到 35000
系统debian
是否绑定独立的 IPv6 地址N

相关操作

查看所有虚拟机

shell
kubectl get vmi -n default

查看虚拟机状态

shell
kubectl get vm vm1 -n default

启动虚拟机

shell
virtctl start vm1 -n default

停止虚拟机

shell
virtctl stop vm1 -n default

通过 SSH 连接虚拟机控制台

shell
virtctl console vm1 -n default

要退出控制台请按 Ctrl + ]

删除示例

shell
kubectl delete vm vm1 -n default
 kubectl delete pvc vm1-pvc -n default

批量开设

  • 批量多次运行继承配置生成
  • 自动递增虚拟机名(vm1, vm2, ...)、SSH 端口、公网端口
  • 虚拟机信息记录到 vmlog 文件
  • 生成多个时为避免 SSH 连接中断建议在 screen 中执行
  • 支持 x86_64 和 ARM64 架构的服务器

运行

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/create_kubevirt.sh
diff --git a/assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.lean.js b/assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.lean.js
similarity index 86%
rename from assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.lean.js
rename to assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.lean.js
index ce78c87ccc..36341f1081 100644
--- a/assets/guide_kubevirt_kubevirt_build.md.Bdgxm7oG.lean.js
+++ b/assets/guide_kubevirt_kubevirt_build.md.BSqBtHl_.lean.js
@@ -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"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_build.md","filePath":"guide/kubevirt/kubevirt_build.md","lastUpdated":1773143516000}'),t={name:"guide/kubevirt/kubevirt_build.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};
+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"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_build.md","filePath":"guide/kubevirt/kubevirt_build.md","lastUpdated":1773196139000}'),t={name:"guide/kubevirt/kubevirt_build.md"};function l(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.js b/assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.js
similarity index 99%
rename from assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.js
rename to assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.js
index 6be5bd4d53..511401969a 100644
--- a/assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.js
+++ b/assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_install.md","filePath":"guide/kubevirt/kubevirt_install.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_install.md"};function n(p,s,h,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t('

前言

安装 KubeVirt 环境,包含 k3s + KubeVirt + 网络配置 + 端口转发全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Debian 11+、Ubuntu 20.04+
  • 自动安装 k3s(轻量级 Kubernetes)
  • 自动部署 KubeVirt operator 和 CDI(Containerized Data Importer)
  • 自动配置网络插件(Flannel)和端口转发
  • 自动检测公网 IPv6 地址并配置 IPv6 网络(如存在)
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

TIP

安装完成后建议执行 kubectl get pods -n kubevirt 验证 KubeVirt 环境是否正常运行,所有 Pod 应处于 Running 状态。

WARNING

k3s + KubeVirt 安装时间较长(通常 5~15 分钟),请在 screen 或 tmux 中执行,避免 SSH 断开导致安装失败。

卸载 KubeVirt 环境

一键卸载全套环境,包括所有虚拟机、k3s、KubeVirt 及辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有虚拟机、镜像、k3s 及 KubeVirt 全部组件。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',25)]))}const u=i(l,[["render",n]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_install.md","filePath":"guide/kubevirt/kubevirt_install.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_install.md"};function n(p,s,h,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t('

前言

安装 KubeVirt 环境,包含 k3s + KubeVirt + 网络配置 + 端口转发全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Debian 11+、Ubuntu 20.04+
  • 自动安装 k3s(轻量级 Kubernetes)
  • 自动部署 KubeVirt operator 和 CDI(Containerized Data Importer)
  • 自动配置网络插件(Flannel)和端口转发
  • 自动检测公网 IPv6 地址并配置 IPv6 网络(如存在)
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

TIP

安装完成后建议执行 kubectl get pods -n kubevirt 验证 KubeVirt 环境是否正常运行,所有 Pod 应处于 Running 状态。

WARNING

k3s + KubeVirt 安装时间较长(通常 5~15 分钟),请在 screen 或 tmux 中执行,避免 SSH 断开导致安装失败。

卸载 KubeVirt 环境

一键卸载全套环境,包括所有虚拟机、k3s、KubeVirt 及辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有虚拟机、镜像、k3s 及 KubeVirt 全部组件。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',25)]))}const u=i(l,[["render",n]]);export{o as __pageData,u as default}; diff --git a/assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.lean.js b/assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.lean.js similarity index 86% rename from assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.lean.js rename to assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.lean.js index e81bbfc92f..b26e22965e 100644 --- a/assets/guide_kubevirt_kubevirt_install.md.BA2o9jN4.lean.js +++ b/assets/guide_kubevirt_kubevirt_install.md.G3ek-P-s.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_install.md","filePath":"guide/kubevirt/kubevirt_install.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_install.md"};function n(p,s,h,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t("",25)]))}const u=i(l,[["render",n]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_install.md","filePath":"guide/kubevirt/kubevirt_install.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_install.md"};function n(p,s,h,r,d,k){return e(),a("div",null,s[0]||(s[0]=[t("",25)]))}const u=i(l,[["render",n]]);export{o as __pageData,u as default}; diff --git a/assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.js b/assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.js similarity index 98% rename from assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.js rename to assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.js index 83c1663182..17d0f5ea13 100644 --- a/assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.js +++ b/assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_precheck.md","filePath":"guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_precheck.md"};function s(d,t,n,c,o,p){return a(),i("div",null,t[0]||(t[0]=[r('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/kubevirt

项目特点

基于 KubeVirt 在 Kubernetes 集群(k3s)上一键部署并管理 KVM 虚拟机,通过批量或单独开设 KVM 虚拟机

  • 一键部署 k3s + KubeVirt 全套环境
  • 基于 KubeVirt CRD,在 Kubernetes 环境中管理虚拟机
  • 每台虚拟机自带独立 SSH 端口及端口映射
  • 支持 IPv4/IPv6 自动分配与端口转发
  • 支持批量开设,信息自动记录至日志文件
  • 支持 X86_64 和 ARM64 架构
  • 支持国内 CDN 镜像加速

支持的系统(宿主机)

系统amd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

配置要求

  • 宿主机节点需支持 KVM 硬件虚拟化(/dev/kvm 可用)
  • 内核版本:≥ 4.15
  • 架构:x86_64(amd64)或 ARM64
  • 内存:至少 4GB 可用内存(含 k3s + KubeVirt 自身占用)
  • 存储:至少 20GB 可用磁盘空间
  • 系统:Debian 11+、Ubuntu 20.04+

WARNING

使用本项目前请确保宿主机支持 KVM 虚拟化,可通过以下命令检测:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

输出大于 0 即支持 KVM 虚拟化。也可执行 ls /dev/kvm 确认设备文件存在。

TIP

本项目会自动部署 k3s,无需提前准备 Kubernetes 集群。

推荐在开设虚拟机前先增加部分 SWAP 虚拟内存,避免突发的内存占用导致宿主机卡死

',13)]))}const b=e(l,[["render",s]]);export{u as __pageData,b as default}; +import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_precheck.md","filePath":"guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_precheck.md"};function s(d,t,n,c,o,p){return a(),i("div",null,t[0]||(t[0]=[r('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/kubevirt

项目特点

基于 KubeVirt 在 Kubernetes 集群(k3s)上一键部署并管理 KVM 虚拟机,通过批量或单独开设 KVM 虚拟机

  • 一键部署 k3s + KubeVirt 全套环境
  • 基于 KubeVirt CRD,在 Kubernetes 环境中管理虚拟机
  • 每台虚拟机自带独立 SSH 端口及端口映射
  • 支持 IPv4/IPv6 自动分配与端口转发
  • 支持批量开设,信息自动记录至日志文件
  • 支持 X86_64 和 ARM64 架构
  • 支持国内 CDN 镜像加速

支持的系统(宿主机)

系统amd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

配置要求

  • 宿主机节点需支持 KVM 硬件虚拟化(/dev/kvm 可用)
  • 内核版本:≥ 4.15
  • 架构:x86_64(amd64)或 ARM64
  • 内存:至少 4GB 可用内存(含 k3s + KubeVirt 自身占用)
  • 存储:至少 20GB 可用磁盘空间
  • 系统:Debian 11+、Ubuntu 20.04+

WARNING

使用本项目前请确保宿主机支持 KVM 虚拟化,可通过以下命令检测:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

输出大于 0 即支持 KVM 虚拟化。也可执行 ls /dev/kvm 确认设备文件存在。

TIP

本项目会自动部署 k3s,无需提前准备 Kubernetes 集群。

推荐在开设虚拟机前先增加部分 SWAP 虚拟内存,避免突发的内存占用导致宿主机卡死

',13)]))}const b=e(l,[["render",s]]);export{u as __pageData,b as default}; diff --git a/assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.lean.js b/assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.lean.js similarity index 87% rename from assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.lean.js rename to assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.lean.js index 62039fe3b6..7691e2c02e 100644 --- a/assets/guide_kubevirt_kubevirt_precheck.md.nvH94L54.lean.js +++ b/assets/guide_kubevirt_kubevirt_precheck.md.BoHiN-XG.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_precheck.md","filePath":"guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_precheck.md"};function s(d,t,n,c,o,p){return a(),i("div",null,t[0]||(t[0]=[r("",13)]))}const b=e(l,[["render",s]]);export{u as __pageData,b as default}; +import{_ as e,c as i,o as a,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_precheck.md","filePath":"guide/kubevirt/kubevirt_precheck.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_precheck.md"};function s(d,t,n,c,o,p){return a(),i("div",null,t[0]||(t[0]=[r("",13)]))}const b=e(l,[["render",s]]);export{u as __pageData,b as default}; diff --git a/assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.js b/assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.js similarity index 99% rename from assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.js rename to assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.js index ab6c962449..b6bf554436 100644 --- a/assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.js +++ b/assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_qa.md","filePath":"guide/kubevirt/kubevirt_qa.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_qa.md"};function t(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

常见问题答疑

kubectl: command not found

k3s 环境未正确安装,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

KubeVirt Pod 未就绪

查看 KubeVirt 命名空间下的所有 Pod 状态:

shell
kubectl get pods -n kubevirt

若有 Pod 处于 PendingCrashLoopBackOff 状态,查看详细信息:

shell
kubectl describe pod <pod-name> -n kubevirt
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_qa.md","filePath":"guide/kubevirt/kubevirt_qa.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_qa.md"};function t(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n(`

常见问题答疑

kubectl: command not found

k3s 环境未正确安装,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

KubeVirt Pod 未就绪

查看 KubeVirt 命名空间下的所有 Pod 状态:

shell
kubectl get pods -n kubevirt

若有 Pod 处于 PendingCrashLoopBackOff 状态,查看详细信息:

shell
kubectl describe pod <pod-name> -n kubevirt
 kubectl logs <pod-name> -n kubevirt

常见原因:

  • 宿主机不支持 KVM(检查 /dev/kvm 是否存在)
  • 内存不足(k3s + KubeVirt 至少需要 4GB 可用内存)

虚拟机无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep flannel

如果没有,检查 Flannel 网络插件是否正常运行:

shell
kubectl get pods -n kube-system | grep flannel

虚拟机 IPv6 未生效

  1. 确认宿主机有公网 IPv6 地址
  2. 检查是否配置了 IPv6 相关资源:
shell
kubectl get svc -n default | grep ipv6

KVM 不可用

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
 ls /dev/kvm

若在 VPS 上无法使用 KVM,可能是宿主机不支持嵌套虚拟化(Nested Virtualization),请联系 VPS 提供商确认。

虚拟机一直处于 Pending 状态

查看虚拟机实例详情:

shell
kubectl describe vmi vm1 -n default

常见原因:

  • CDI(Containerized Data Importer)未完成磁盘镜像导入,等待 DataVolume 就绪:
shell
kubectl get dv -n default
  • 宿主机资源不足(CPU/内存/存储)

如何查看 SSH 登录信息

查看 vmlog 文件获取批量开设时的信息:

shell
cat vmlog

如何完全重置 KubeVirt 环境

先卸载,再重新安装:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/kubevirtuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/kubevirtuninstall.sh)
diff --git a/assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.lean.js b/assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.lean.js
similarity index 86%
rename from assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.lean.js
rename to assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.lean.js
index a09232079b..aa7c6800e4 100644
--- a/assets/guide_kubevirt_kubevirt_qa.md.B12VmdOW.lean.js
+++ b/assets/guide_kubevirt_kubevirt_qa.md.C-xjgPnF.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_qa.md","filePath":"guide/kubevirt/kubevirt_qa.md","lastUpdated":1773143516000}'),l={name:"guide/kubevirt/kubevirt_qa.md"};function t(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n("",47)]))}const u=i(l,[["render",t]]);export{o as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/kubevirt/kubevirt_qa.md","filePath":"guide/kubevirt/kubevirt_qa.md","lastUpdated":1773196139000}'),l={name:"guide/kubevirt/kubevirt_qa.md"};function t(h,s,p,k,r,d){return e(),a("div",null,s[0]||(s[0]=[n("",47)]))}const u=i(l,[["render",t]]);export{o as __pageData,u as default};
diff --git a/assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.js b/assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.js
similarity index 95%
rename from assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.js
rename to assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.js
index 1c300c9cd5..37646ea295 100644
--- a/assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.js
+++ b/assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.js
@@ -1 +1 @@
-import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/kubevirt/kubevirt_thanks.md","filePath":"guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773143516000}'),n={name:"guide/kubevirt/kubevirt_thanks.md"};function o(s,t,p,h,u,b){return a(),r("div",null,t[0]||(t[0]=[i('

致谢

https://github.com/kubevirt/kubevirt

https://github.com/kubevirt/containerized-data-importer

https://github.com/k3s-io/k3s

https://github.com/flannel-io/flannel

https://github.com/qemu/qemu

https://github.com/spiritLHLS/addswap

https://kubernetes.io/

',8)]))}const _=e(n,[["render",o]]);export{k as __pageData,_ as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/kubevirt/kubevirt_thanks.md","filePath":"guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773196139000}'),n={name:"guide/kubevirt/kubevirt_thanks.md"};function o(s,t,p,h,u,b){return a(),r("div",null,t[0]||(t[0]=[i('

致谢

https://github.com/kubevirt/kubevirt

https://github.com/kubevirt/containerized-data-importer

https://github.com/k3s-io/k3s

https://github.com/flannel-io/flannel

https://github.com/qemu/qemu

https://github.com/spiritLHLS/addswap

https://kubernetes.io/

',8)]))}const _=e(n,[["render",o]]);export{k as __pageData,_ as default}; diff --git a/assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.lean.js b/assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.lean.js similarity index 86% rename from assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.lean.js rename to assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.lean.js index 281c8910bf..1cf285ea83 100644 --- a/assets/guide_kubevirt_kubevirt_thanks.md.Dfj0jwV7.lean.js +++ b/assets/guide_kubevirt_kubevirt_thanks.md.DsK8MbDG.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/kubevirt/kubevirt_thanks.md","filePath":"guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773143516000}'),n={name:"guide/kubevirt/kubevirt_thanks.md"};function o(s,t,p,h,u,b){return a(),r("div",null,t[0]||(t[0]=[i("",8)]))}const _=e(n,[["render",o]]);export{k as __pageData,_ as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/kubevirt/kubevirt_thanks.md","filePath":"guide/kubevirt/kubevirt_thanks.md","lastUpdated":1773196139000}'),n={name:"guide/kubevirt/kubevirt_thanks.md"};function o(s,t,p,h,u,b){return a(),r("div",null,t[0]||(t[0]=[i("",8)]))}const _=e(n,[["render",o]]);export{k as __pageData,_ as default}; diff --git a/assets/guide_lxd_lxd_custom.md.Bp44plbh.js b/assets/guide_lxd_lxd_custom.md.D4TaiVky.js similarity index 99% rename from assets/guide_lxd_lxd_custom.md.Bp44plbh.js rename to assets/guide_lxd_lxd_custom.md.D4TaiVky.js index 03950e5f46..19f09c7cf6 100644 --- a/assets/guide_lxd_lxd_custom.md.Bp44plbh.js +++ b/assets/guide_lxd_lxd_custom.md.D4TaiVky.js @@ -1,4 +1,4 @@ -import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",w="/assets/lxd16.CgeIdYJ2.png",f="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",x="/assets/lxd19.B9_MB265.png",_="/assets/lxd20.rK3P3TT8.png",C="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_custom.md","filePath":"guide/lxd/lxd_custom.md","lastUpdated":1773143516000}'),F={name:"guide/lxd/lxd_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p(`

自定义

给lxd启用官方的web面板

给机房的Ubuntu22.04安装LXD共享GPU资源-配置web 部分的内容

添加自定义的镜像源

https://lxdimages.spiritlhl.net/

本镜像源是本人通过每日修补得到的,每日会进行更新,具体进行了什么修补在 https://github.com/oneclickvirt/lxd_images 可见详细说明。

shell
lxc remote remove spiritlhl
+import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",w="/assets/lxd16.CgeIdYJ2.png",f="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",x="/assets/lxd19.B9_MB265.png",_="/assets/lxd20.rK3P3TT8.png",C="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_custom.md","filePath":"guide/lxd/lxd_custom.md","lastUpdated":1773196139000}'),F={name:"guide/lxd/lxd_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p(`

自定义

给lxd启用官方的web面板

给机房的Ubuntu22.04安装LXD共享GPU资源-配置web 部分的内容

添加自定义的镜像源

https://lxdimages.spiritlhl.net/

本镜像源是本人通过每日修补得到的,每日会进行更新,具体进行了什么修补在 https://github.com/oneclickvirt/lxd_images 可见详细说明。

shell
lxc remote remove spiritlhl
 lxc remote add spiritlhl https://lxdimages.spiritlhl.net --protocol simplestreams --public
 lxc image list spiritlhl:debian

给宿主机附加免费的IPV6地址段

有的机器本身没有IPV6的/64子网,这里给出一个方法免费附加IPV6的子网。

这里是使用6in4方法解决宿主机本身没有IPV6地址的问题。

TIP

本页面的操作务必在原始系统上操作,保证未使用本项目的其他脚本安装环境(除了PVE,PVE需要先安装好),否则可能导致环境冲突

以下是2023年目前还在运行的免费提供IPV6子网的平台

支持的平台对应需要的安装包协议通道/子网数量
tunnelbroker.netifupdown 或 ifupdown2v4tunnel 或 sit3✖/64 或 5✖/64
tunnelbroker.chifupdown 或 ifupdown2v4tunnel 或 sit3✖/64
ip4market.ruifupdown 或 ifupdown2v4tunnel 或 sit1✖/64
netassist.uaifupdown 或 ifupdown2v4tunnel 或 sit1✖/64
https://github.com/oneclickvirt/6in4ifupdown2sit、gre、ipip自定义

免费的平台只解决IPV6有没有的问题,不提供优质的IPV6带宽。

如需优质的带宽,请自建隧道,当ifupdown和ifupdown2都可时,先尝试ifupdown是否可安装成功,否则就安装ifupdown2.

安装完毕后,安装了哪个包后面就选择哪个包进行格式转换。

初始环境修改

执行

touch /etc/cloud/cloud-init.disabled

关闭cloud-init的自动化覆写先,然后查看本机使用什么管理网络,执行

systemctl is-active systemd-networkd

systemctl is-active networking

看看属于哪种情况,如果是前者active,后者inactive,你需要重装/DD一个不是这样配置的系统,或者切换本机使用ifupdown/ifupdown2管理网络

# 是否需要禁用原网络管理自行评判
 # systemctl stop systemd-networkd
diff --git a/assets/guide_lxd_lxd_custom.md.Bp44plbh.lean.js b/assets/guide_lxd_lxd_custom.md.D4TaiVky.lean.js
similarity index 94%
rename from assets/guide_lxd_lxd_custom.md.Bp44plbh.lean.js
rename to assets/guide_lxd_lxd_custom.md.D4TaiVky.lean.js
index 17b2fbc1a5..1e57014459 100644
--- a/assets/guide_lxd_lxd_custom.md.Bp44plbh.lean.js
+++ b/assets/guide_lxd_lxd_custom.md.D4TaiVky.lean.js
@@ -1 +1 @@
-import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",w="/assets/lxd16.CgeIdYJ2.png",f="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",x="/assets/lxd19.B9_MB265.png",_="/assets/lxd20.rK3P3TT8.png",C="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_custom.md","filePath":"guide/lxd/lxd_custom.md","lastUpdated":1773143516000}'),F={name:"guide/lxd/lxd_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p("",201)]))}const S=a(F,[["render",V]]);export{D as __pageData,S as default};
+import{_ as a,c as n,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const i="/assets/lxd1.CbGLa5s4.png",l="/assets/lxd2.C4eWfnaM.png",t="/assets/lxd3.tQBNiKQo.png",r="/assets/lxd4.CSfRHLxz.png",d="/assets/lxd5.WUJi0qzd.png",c="/assets/lxd6.Cnds779U.png",o="/assets/lxd7.EJ0s1ls2.png",u="/assets/lxd8.DAOueoww.png",b="/assets/lxd9.Dgmw4lpJ.png",h="/assets/lxd10.BjQ0l1K7.png",m="/assets/lxd11.D6E5sVW2.png",g="/assets/lxd12.B9udKIzn.png",v="/assets/lxd13.Dwv7xBpz.png",k="/assets/lxd14.Whdz6cP-.png",y="/assets/lxd15.BjW7LbDr.png",w="/assets/lxd16.CgeIdYJ2.png",f="/assets/lxd17.CWPY1pea.png",P="/assets/lxd18.DqnpcYcL.png",x="/assets/lxd19.B9_MB265.png",_="/assets/lxd20.rK3P3TT8.png",C="/assets/lxd21.w-R0l00Y.png",I="/assets/lxd22.45M-VX6J.png",q="/assets/lxd23.CLaVW0qk.png",D=JSON.parse('{"title":"自定义","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_custom.md","filePath":"guide/lxd/lxd_custom.md","lastUpdated":1773196139000}'),F={name:"guide/lxd/lxd_custom.md"};function V(E,s,z,B,W,A){return e(),n("div",null,s[0]||(s[0]=[p("",201)]))}const S=a(F,[["render",V]]);export{D as __pageData,S as default};
diff --git a/assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.js b/assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.js
similarity index 99%
rename from assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.js
rename to assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.js
index 6be3d6e50e..6f427ea285 100644
--- a/assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.js
+++ b/assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.js
@@ -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":"其他自定义配置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_extra_config.md","filePath":"guide/lxd/lxd_extra_config.md","lastUpdated":1773143516000}'),l={name:"guide/lxd/lxd_extra_config.md"};function t(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

其他自定义配置

TIP

以下的配置安装会加重宿主机的负担,非必要不要安装

自动配置IPV6地址

  • (非必须,不使用的也没问题)
  • 该脚本仅适用于宿主机有给IPV6子网且是至少/112的,且宿主机绑定了子网的第一个IP宿主机的IPV6地址或IPV6的gateway
  • 自动为LXD创建的LXC容器配置IPV6地址
  • 已集成到buildct.sh中可使用变量控制且无需事先下载,该脚本可不手动使用,在使用buildct.sh时配置Y开启即可

下载脚本

国际

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

自动为容器配置IPV6映射地址(默认不使用iptables进行映射)

bash
bash build_ipv6_network.sh 容器名称

映射完毕会打印信息

示例(给test容器自动配置IPV6地址,配置完成会写入一个test_v6的文件信息)

bash
bash build_ipv6_network.sh test

PS:增加ipv6处理过程中可选择是否使用ip6tables进行映射,默认不使用ip6tables方式进行映射而使用新增网络设备的方式进行映射

使用ip6tables进行映射

bash
bash build_ipv6_network.sh 容器名称 Y

若使用了ip6tables进行映射,则删除所有IPV6已映射的规则可用:

bash
ip6tables -t nat -F PREROUTING
+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"},"headers":[],"relativePath":"guide/lxd/lxd_extra_config.md","filePath":"guide/lxd/lxd_extra_config.md","lastUpdated":1773196139000}'),l={name:"guide/lxd/lxd_extra_config.md"};function t(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

其他自定义配置

TIP

以下的配置安装会加重宿主机的负担,非必要不要安装

自动配置IPV6地址

  • (非必须,不使用的也没问题)
  • 该脚本仅适用于宿主机有给IPV6子网且是至少/112的,且宿主机绑定了子网的第一个IP宿主机的IPV6地址或IPV6的gateway
  • 自动为LXD创建的LXC容器配置IPV6地址
  • 已集成到buildct.sh中可使用变量控制且无需事先下载,该脚本可不手动使用,在使用buildct.sh时配置Y开启即可

下载脚本

国际

bash
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o build_ipv6_network.sh && chmod +x build_ipv6_network.sh

自动为容器配置IPV6映射地址(默认不使用iptables进行映射)

bash
bash build_ipv6_network.sh 容器名称

映射完毕会打印信息

示例(给test容器自动配置IPV6地址,配置完成会写入一个test_v6的文件信息)

bash
bash build_ipv6_network.sh test

PS:增加ipv6处理过程中可选择是否使用ip6tables进行映射,默认不使用ip6tables方式进行映射而使用新增网络设备的方式进行映射

使用ip6tables进行映射

bash
bash build_ipv6_network.sh 容器名称 Y

若使用了ip6tables进行映射,则删除所有IPV6已映射的规则可用:

bash
ip6tables -t nat -F PREROUTING
 ip6tables-legacy -t nat -F PREROUTING
 ip6tables-save > /etc/iptables/rules.v6
 netfilter-persistent save
diff --git a/assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.lean.js b/assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.lean.js
similarity index 86%
rename from assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.lean.js
rename to assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.lean.js
index f887a17962..c170e32fa2 100644
--- a/assets/guide_lxd_lxd_extra_config.md.D_nRHZTY.lean.js
+++ b/assets/guide_lxd_lxd_extra_config.md.B_jHLwRP.lean.js
@@ -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"},"headers":[],"relativePath":"guide/lxd/lxd_extra_config.md","filePath":"guide/lxd/lxd_extra_config.md","lastUpdated":1773143516000}'),l={name:"guide/lxd/lxd_extra_config.md"};function t(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",37)]))}const o=i(l,[["render",t]]);export{c as __pageData,o as default};
+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"},"headers":[],"relativePath":"guide/lxd/lxd_extra_config.md","filePath":"guide/lxd/lxd_extra_config.md","lastUpdated":1773196139000}'),l={name:"guide/lxd/lxd_extra_config.md"};function t(p,s,h,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",37)]))}const o=i(l,[["render",t]]);export{c as __pageData,o as default};
diff --git a/assets/guide_lxd_lxd_install.md.jTqXfX-p.js b/assets/guide_lxd_lxd_install.md.C5ukyXX7.js
similarity index 99%
rename from assets/guide_lxd_lxd_install.md.jTqXfX-p.js
rename to assets/guide_lxd_lxd_install.md.C5ukyXX7.js
index 167077afa8..f487f60176 100644
--- a/assets/guide_lxd_lxd_install.md.jTqXfX-p.js
+++ b/assets/guide_lxd_lxd_install.md.C5ukyXX7.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as l,ag as t}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/lxdd1.CVTAIewh.png",n="/assets/lxdd2.C_mYE7sL.png",e="/assets/lxdd3.DZ2Na5-t.png",h="/assets/lxdd4.CO1I1FPh.png",d="/assets/lxdd0.QoEngFSd.png",m=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_install.md","filePath":"guide/lxd/lxd_install.md","lastUpdated":1773143516000}'),r={name:"guide/lxd/lxd_install.md"};function k(c,s,o,F,g,u){return l(),a("div",null,s[0]||(s[0]=[t('

LXD

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看LXD模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间。

当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用。

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

LXD主体安装

WARNING

如果是全新的服务器,务必保证apt updateapt install curl都无问题再执行本脚本。

  • 环境要求:Ubuntu 18+(推荐),Debian 8+(更推荐Incus)
  • 安装过程中会提示输入存储池创建路径以及大小,你所有要开的虚拟机或容器最终占用的空间是在存储池中
  • 环境安装过程后需要重启服务器以加载一些默认配置
  • 默认启用lxd的lxcfs相关配置,使得容器内查询容器信息变更为容器本身的信息而不是宿主机信息
  • 实测本安装程序在物理机器或非物理机器上都可使用

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

shell
bash lxdinstall.sh

初始化配置的例子:

如果不需要指定非系统盘的路径做默认存储池,那么选择是否自定义存储池路径时直接回车或输入n即可,不需要指定路径。

如果需要指定非系统盘的路径做默认的存储池,那么需要选择y,然后输入对应的路径(你挂载的盘的实际的绝对路径)。

如果对应的盘除去已占用空间还有18G硬盘空余,想要开设15G的存储池,按照命令行的提示则输入15

WARNING

如果你需要在一台服务器上开启超过200个LXD容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

安装WEB控制面板

自定义 教程中有关于官方面板怎么启用的教程,但这里不选择使用官方的面板,因为官方面板为了安全性,牺牲了很多用户体验,这块使用

https://github.com/turtle0x1/LxdMosaic

的第三方面板

shell
sudo snap install lxdmosaic

直接进行一键安装,然后打开当前宿主机的https://<公网IP地址>/,强制访问,就能进入设置页面

lxd

lxd

lxd

这块如果你需要设置网站名字可以改改

lxd

聊胜于无只能说,没有RBAC权限控制进行分用户隔离

手动安装(备选)

不推荐,只是为了一些奇葩环境一键脚本跑不动的时候进行安装,或则你想要了解最基础的LXD安装流程。

关闭防火墙

bash
apt update
+import{_ as i,c as a,o as l,ag as t}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/lxdd1.CVTAIewh.png",n="/assets/lxdd2.C_mYE7sL.png",e="/assets/lxdd3.DZ2Na5-t.png",h="/assets/lxdd4.CO1I1FPh.png",d="/assets/lxdd0.QoEngFSd.png",m=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_install.md","filePath":"guide/lxd/lxd_install.md","lastUpdated":1773196139000}'),r={name:"guide/lxd/lxd_install.md"};function k(c,s,o,F,g,u){return l(),a("div",null,s[0]||(s[0]=[t('

LXD

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看LXD模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间。

当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用。

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

LXD主体安装

WARNING

如果是全新的服务器,务必保证apt updateapt install curl都无问题再执行本脚本。

  • 环境要求:Ubuntu 18+(推荐),Debian 8+(更推荐Incus)
  • 安装过程中会提示输入存储池创建路径以及大小,你所有要开的虚拟机或容器最终占用的空间是在存储池中
  • 环境安装过程后需要重启服务器以加载一些默认配置
  • 默认启用lxd的lxcfs相关配置,使得容器内查询容器信息变更为容器本身的信息而不是宿主机信息
  • 实测本安装程序在物理机器或非物理机器上都可使用

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/lxdinstall.sh -o lxdinstall.sh && chmod +x lxdinstall.sh && bash lxdinstall.sh

shell
bash lxdinstall.sh

初始化配置的例子:

如果不需要指定非系统盘的路径做默认存储池,那么选择是否自定义存储池路径时直接回车或输入n即可,不需要指定路径。

如果需要指定非系统盘的路径做默认的存储池,那么需要选择y,然后输入对应的路径(你挂载的盘的实际的绝对路径)。

如果对应的盘除去已占用空间还有18G硬盘空余,想要开设15G的存储池,按照命令行的提示则输入15

WARNING

如果你需要在一台服务器上开启超过200个LXD容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

安装WEB控制面板

自定义 教程中有关于官方面板怎么启用的教程,但这里不选择使用官方的面板,因为官方面板为了安全性,牺牲了很多用户体验,这块使用

https://github.com/turtle0x1/LxdMosaic

的第三方面板

shell
sudo snap install lxdmosaic

直接进行一键安装,然后打开当前宿主机的https://<公网IP地址>/,强制访问,就能进入设置页面

lxd

lxd

lxd

这块如果你需要设置网站名字可以改改

lxd

聊胜于无只能说,没有RBAC权限控制进行分用户隔离

手动安装(备选)

不推荐,只是为了一些奇葩环境一键脚本跑不动的时候进行安装,或则你想要了解最基础的LXD安装流程。

关闭防火墙

bash
apt update
 apt install curl wget sudo dos2unix ufw jq -y
 ufw disable

开设虚拟内存SWAP

内存看你开多少服务器,这里如果要开8个,换算需要2G内存,实际内存如果是512MB内存,还需要开1.5G,保守点开2G虚拟内存即可

执行下面命令,输入1,再输入2048,代表开2G虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

安装LXD

执行下述命令进行安装和初始化

apt install snapd -y
 snap install lxd
diff --git a/assets/guide_lxd_lxd_install.md.jTqXfX-p.lean.js b/assets/guide_lxd_lxd_install.md.C5ukyXX7.lean.js
similarity index 89%
rename from assets/guide_lxd_lxd_install.md.jTqXfX-p.lean.js
rename to assets/guide_lxd_lxd_install.md.C5ukyXX7.lean.js
index 55d601edf8..1f28edc868 100644
--- a/assets/guide_lxd_lxd_install.md.jTqXfX-p.lean.js
+++ b/assets/guide_lxd_lxd_install.md.C5ukyXX7.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as l,ag as t}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/lxdd1.CVTAIewh.png",n="/assets/lxdd2.C_mYE7sL.png",e="/assets/lxdd3.DZ2Na5-t.png",h="/assets/lxdd4.CO1I1FPh.png",d="/assets/lxdd0.QoEngFSd.png",m=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_install.md","filePath":"guide/lxd/lxd_install.md","lastUpdated":1773143516000}'),r={name:"guide/lxd/lxd_install.md"};function k(c,s,o,F,g,u){return l(),a("div",null,s[0]||(s[0]=[t("",67)]))}const y=i(r,[["render",k]]);export{m as __pageData,y as default};
+import{_ as i,c as a,o as l,ag as t}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/lxdd1.CVTAIewh.png",n="/assets/lxdd2.C_mYE7sL.png",e="/assets/lxdd3.DZ2Na5-t.png",h="/assets/lxdd4.CO1I1FPh.png",d="/assets/lxdd0.QoEngFSd.png",m=JSON.parse('{"title":"LXD","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_install.md","filePath":"guide/lxd/lxd_install.md","lastUpdated":1773196139000}'),r={name:"guide/lxd/lxd_install.md"};function k(c,s,o,F,g,u){return l(),a("div",null,s[0]||(s[0]=[t("",67)]))}const y=i(r,[["render",k]]);export{m as __pageData,y as default};
diff --git a/assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.js b/assets/guide_lxd_lxd_lxc.md.DS1dMATW.js
similarity index 99%
rename from assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.js
rename to assets/guide_lxd_lxd_lxc.md.DS1dMATW.js
index 14a708f00a..41d85ede7f 100644
--- a/assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.js
+++ b/assets/guide_lxd_lxd_lxc.md.DS1dMATW.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC虚拟化","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_lxc.md","filePath":"guide/lxd/lxd_lxc.md","lastUpdated":1773143516000}'),t={name:"guide/lxd/lxd_lxc.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

LXC虚拟化

单独生成一个NAT容器

  • 只生成一个NAT容器,可自定义限制所有内容

下载开机脚本是非必须的,如果你使用过一键安装LXD的命令,自动已下载对应的开机脚本,不需要重复下载该脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

使用方法

./buildct.sh 容器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义容器的系统,不填写留空时默认使用debian12,注意传入参数为系统名字+版本号,如:

  • debian12,debian13
  • ubuntu22,ubuntu24
  • centos8,centos9 (实际都是Stream版本)
  • alpine3.16,alpine3.17,alpine3.18,alpine3.19
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的容器系统有三重筛选,优先级:自编译官方opsmaru
  • 自编译镜像完整的支持系统的列表:x86_64_all_images.txtarm64_all_images.txt

示例

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小2G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian13

需要进入容器内部则执行

lxc exec test /bin/bash

退出则输入exit回车即可

需要查看信息则执行

shell
cat 容器名字

比如查询示例的信息就是

shell
cat test

如果已通过以上方法生成过容器,还需要批量生成容器,可使用自定义批量生成版本的脚本,但注意先删除测试容器再进行批量生成容器

删除测试容器

shell
lxc stop test
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC虚拟化","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_lxc.md","filePath":"guide/lxd/lxd_lxc.md","lastUpdated":1773196139000}'),t={name:"guide/lxd/lxd_lxc.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l(`

LXC虚拟化

单独生成一个NAT容器

  • 只生成一个NAT容器,可自定义限制所有内容

下载开机脚本是非必须的,如果你使用过一键安装LXD的命令,自动已下载对应的开机脚本,不需要重复下载该脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh && dos2unix buildct.sh

使用方法

./buildct.sh 容器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义容器的系统,不填写留空时默认使用debian12,注意传入参数为系统名字+版本号,如:

  • debian12,debian13
  • ubuntu22,ubuntu24
  • centos8,centos9 (实际都是Stream版本)
  • alpine3.16,alpine3.17,alpine3.18,alpine3.19
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的容器系统有三重筛选,优先级:自编译官方opsmaru
  • 自编译镜像完整的支持系统的列表:x86_64_all_images.txtarm64_all_images.txt

示例

以下为开设的示例容器的信息:

属性
容器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小2G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
./buildct.sh test 1 256 2 20001 20002 20025 500 500 N debian13

需要进入容器内部则执行

lxc exec test /bin/bash

退出则输入exit回车即可

需要查看信息则执行

shell
cat 容器名字

比如查询示例的信息就是

shell
cat test

如果已通过以上方法生成过容器,还需要批量生成容器,可使用自定义批量生成版本的脚本,但注意先删除测试容器再进行批量生成容器

删除测试容器

shell
lxc stop test
 lxc delete test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.lean.js b/assets/guide_lxd_lxd_lxc.md.DS1dMATW.lean.js
similarity index 85%
rename from assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.lean.js
rename to assets/guide_lxd_lxd_lxc.md.DS1dMATW.lean.js
index 4c67261ba5..77aa192dd4 100644
--- a/assets/guide_lxd_lxd_lxc.md.BHCd5Mp8.lean.js
+++ b/assets/guide_lxd_lxd_lxc.md.DS1dMATW.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC虚拟化","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_lxc.md","filePath":"guide/lxd/lxd_lxc.md","lastUpdated":1773143516000}'),t={name:"guide/lxd/lxd_lxc.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",92)]))}const o=i(t,[["render",e]]);export{c as __pageData,o as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"LXC虚拟化","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_lxc.md","filePath":"guide/lxd/lxd_lxc.md","lastUpdated":1773196139000}'),t={name:"guide/lxd/lxd_lxc.md"};function e(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[l("",92)]))}const o=i(t,[["render",e]]);export{c as __pageData,o as default};
diff --git a/assets/guide_lxd_lxd_precheck.md.icBQHtjb.js b/assets/guide_lxd_lxd_precheck.md.BIrpkuj5.js
similarity index 98%
rename from assets/guide_lxd_lxd_precheck.md.icBQHtjb.js
rename to assets/guide_lxd_lxd_precheck.md.BIrpkuj5.js
index ed2fada4d3..579ae2f671 100644
--- a/assets/guide_lxd_lxd_precheck.md.icBQHtjb.js
+++ b/assets/guide_lxd_lxd_precheck.md.BIrpkuj5.js
@@ -1 +1 @@
-import{_ as a,c as t,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_precheck.md","filePath":"guide/lxd/lxd_precheck.md","lastUpdated":1773143516000}'),r={name:"guide/lxd/lxd_precheck.md"};function s(n,e,p,c,o,d){return i(),t("div",null,e[0]||(e[0]=[l('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看LXD模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/lxd

要求

硬件要求:

  • 系统:Ubuntu 18+(推荐),Debian 8+(更推荐Incus)
  • 虚拟化:推荐KVM、VMWARE虚拟化
  • 内存:内存至少512MB
  • 硬盘:硬盘(系统盘)至少10G
  • 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接公共网络

PS: 如果硬件非常好资源很多,可使用PVE批量开KVM虚拟化的虚拟机 跳转

PS: 如果硬件资源更烂,虚拟化不支持,可使用docker版本的,适配面更广 跳转

项目特点

  • 本套脚本开发使用的Ubuntu,Ubuntu别的长期维护版本应该也没问题,某个存储类型无法使用时自动切换

  • 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致

  • 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统

  • 已设置默认启用lxcfs,使得在容器内的查询资源时使用的是配置的视图而不是宿主机的视图

  • 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机

  • 已支持一键为LXC容器配置IPV6地址(前提是宿主机有IPV6子网,无IPV6地址则不配置),自动适配子网大小

  • 已增加清华镜像源,如果官方镜像丢失时,将使用镜像源下载容器镜像

  • 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用fdisk -ldf查看

  • 挂载其他盘的详看 其他说明

  • 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置

检测环境

使用后续脚本的务必执行本命令检测宿主机是否符合要求

国际

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)

国内

bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)
',17)]))}const b=a(r,[["render",s]]);export{u as __pageData,b as default}; +import{_ as a,c as t,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_precheck.md","filePath":"guide/lxd/lxd_precheck.md","lastUpdated":1773196139000}'),r={name:"guide/lxd/lxd_precheck.md"};function s(n,e,p,c,o,d){return i(),t("div",null,e[0]||(e[0]=[l('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,那么请先查看LXD模块中的自定义分区中的给宿主机附加免费的IPV6地址段的内容,给宿主机附加上IPV6子网后再进行环境安装

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/lxd

要求

硬件要求:

  • 系统:Ubuntu 18+(推荐),Debian 8+(更推荐Incus)
  • 虚拟化:推荐KVM、VMWARE虚拟化
  • 内存:内存至少512MB
  • 硬盘:硬盘(系统盘)至少10G
  • 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接公共网络

PS: 如果硬件非常好资源很多,可使用PVE批量开KVM虚拟化的虚拟机 跳转

PS: 如果硬件资源更烂,虚拟化不支持,可使用docker版本的,适配面更广 跳转

项目特点

  • 本套脚本开发使用的Ubuntu,Ubuntu别的长期维护版本应该也没问题,某个存储类型无法使用时自动切换

  • 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致

  • 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统

  • 已设置默认启用lxcfs,使得在容器内的查询资源时使用的是配置的视图而不是宿主机的视图

  • 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机

  • 已支持一键为LXC容器配置IPV6地址(前提是宿主机有IPV6子网,无IPV6地址则不配置),自动适配子网大小

  • 已增加清华镜像源,如果官方镜像丢失时,将使用镜像源下载容器镜像

  • 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用fdisk -ldf查看

  • 挂载其他盘的详看 其他说明

  • 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置

检测环境

使用后续脚本的务必执行本命令检测宿主机是否符合要求

国际

bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)

国内

bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/pre_check.sh)
',17)]))}const b=a(r,[["render",s]]);export{u as __pageData,b as default}; diff --git a/assets/guide_lxd_lxd_precheck.md.icBQHtjb.lean.js b/assets/guide_lxd_lxd_precheck.md.BIrpkuj5.lean.js similarity index 86% rename from assets/guide_lxd_lxd_precheck.md.icBQHtjb.lean.js rename to assets/guide_lxd_lxd_precheck.md.BIrpkuj5.lean.js index d47d27db24..4e216f63b6 100644 --- a/assets/guide_lxd_lxd_precheck.md.icBQHtjb.lean.js +++ b/assets/guide_lxd_lxd_precheck.md.BIrpkuj5.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_precheck.md","filePath":"guide/lxd/lxd_precheck.md","lastUpdated":1773143516000}'),r={name:"guide/lxd/lxd_precheck.md"};function s(n,e,p,c,o,d){return i(),t("div",null,e[0]||(e[0]=[l("",17)]))}const b=a(r,[["render",s]]);export{u as __pageData,b as default}; +import{_ as a,c as t,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_precheck.md","filePath":"guide/lxd/lxd_precheck.md","lastUpdated":1773196139000}'),r={name:"guide/lxd/lxd_precheck.md"};function s(n,e,p,c,o,d){return i(),t("div",null,e[0]||(e[0]=[l("",17)]))}const b=a(r,[["render",s]]);export{u as __pageData,b as default}; diff --git a/assets/guide_lxd_lxd_qa.md.DX81exQ3.js b/assets/guide_lxd_lxd_qa.md.25zbM29D.js similarity index 99% rename from assets/guide_lxd_lxd_qa.md.DX81exQ3.js rename to assets/guide_lxd_lxd_qa.md.25zbM29D.js index 176201b88d..48587b2809 100644 --- a/assets/guide_lxd_lxd_qa.md.DX81exQ3.js +++ b/assets/guide_lxd_lxd_qa.md.25zbM29D.js @@ -1,2 +1,2 @@ -import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qa.md","filePath":"guide/lxd/lxd_qa.md","lastUpdated":1773143516000}'),t={name:"guide/lxd/lxd_qa.md"};function p(l,s,h,r,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

解惑

LXD安装后lxc命令显示找不到

! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qa.md","filePath":"guide/lxd/lxd_qa.md","lastUpdated":1773196139000}'),t={name:"guide/lxd/lxd_qa.md"};function p(l,s,h,r,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

解惑

LXD安装后lxc命令显示找不到

! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
 export PATH=$PATH:/snap/bin

执行这个命令后尝试

lxc -h

看看lxc命令是否已修复

开设centos7发现报错CGroupV1不支持

启用CGroup V1:要在Ubuntu系统上启用CGroup V1,需要编辑内核启动参数。

请注意,在更改内核启动参数之前,请务必备份重要的数据和设置,以防止意外的问题。

编辑/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT中的参数末尾加上systemd.unified_cgroup_hierarchy=0,如

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

保存文件并运行以下命令更新GRUB引导。

bash
sudo update-grub

重启系统,使更改生效

如果上述更改仍旧不支持开设centos7,那么请使用别的宿主机系统尝试

需要LXD和Docker兼容同时存在

如果不做处理,docker会覆写iptables设置导致LXD无网络链接

需要安装一个定时任务定时检测和修复这个问题

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

目前已验证可开带独立IPV6地址容器的VPS商家

kuroit 中的 美国凤凰城 regular

datalix 中的 德国AMD 促销

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

`,31)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/guide_lxd_lxd_qa.md.DX81exQ3.lean.js b/assets/guide_lxd_lxd_qa.md.25zbM29D.lean.js similarity index 85% rename from assets/guide_lxd_lxd_qa.md.DX81exQ3.lean.js rename to assets/guide_lxd_lxd_qa.md.25zbM29D.lean.js index fe9a3243fc..11094bdff1 100644 --- a/assets/guide_lxd_lxd_qa.md.DX81exQ3.lean.js +++ b/assets/guide_lxd_lxd_qa.md.25zbM29D.lean.js @@ -1 +1 @@ -import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qa.md","filePath":"guide/lxd/lxd_qa.md","lastUpdated":1773143516000}'),t={name:"guide/lxd/lxd_qa.md"};function p(l,s,h,r,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",31)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; +import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qa.md","filePath":"guide/lxd/lxd_qa.md","lastUpdated":1773196139000}'),t={name:"guide/lxd/lxd_qa.md"};function p(l,s,h,r,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",31)]))}const u=a(t,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/guide_lxd_lxd_qemu.md.CrHtdnIe.js b/assets/guide_lxd_lxd_qemu.md.DTwNzEss.js similarity index 99% rename from assets/guide_lxd_lxd_qemu.md.CrHtdnIe.js rename to assets/guide_lxd_lxd_qemu.md.DTwNzEss.js index f10511ab8e..419addd797 100644 --- a/assets/guide_lxd_lxd_qemu.md.CrHtdnIe.js +++ b/assets/guide_lxd_lxd_qemu.md.DTwNzEss.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qemu.md","filePath":"guide/lxd/lxd_qemu.md","lastUpdated":1773143516000}'),l={name:"guide/lxd/lxd_qemu.md"};function n(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t(`

在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机

开设QEMU虚拟机可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的虚拟机系统仅使用 自编译 的镜像,非自编译镜像缺少依赖和设置不可使用
  • 自编译镜像完整的支持系统的列表:kvm_images

单独生成一个NAT服务器

  • 只生成一个NAT服务器,可自定义限制所有内容

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

使用方法

./buildvm.sh 服务器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义服务器的系统,不填写留空时默认使用debian13,注意传入参数为系统名字+版本号

除了alpine系统,其他系统的硬盘大小必须大于6G,否则系统起不来,无法初始化和使用,开设的中途阶段就会崩溃。

示例

以下为开设的示例服务器的信息:

属性
服务器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小10G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

需要进入虚拟机内部则执行

shell
lxc console test

退出则先按住Ctrl再按a,松开后,再按q

需要查看信息则执行

shell
cat 服务器名字

比如查询示例的信息就是

shell
cat test

删除测试服务器

shell
lxc stop -f test
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qemu.md","filePath":"guide/lxd/lxd_qemu.md","lastUpdated":1773196139000}'),l={name:"guide/lxd/lxd_qemu.md"};function n(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t(`

在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机

开设QEMU虚拟机可使用的镜像

这里展示一部分可使用的系统参数供你参考:

  • debian10,debian11,debian12, debian13
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • openwrt21,openwrt22,fedora37,fedora38,fedora39
  • rockylinux8,rockylinux9,oralce8,oracle9
  • oralce7,centos7 (都需要在GRUB中启用CGroupV1否则无法启动,详细介绍见常见问题答疑)
  • kali,archlinux
  • 注意都是小写字母+数字的组合或仅小写字母,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 开不起来的可能是硬盘或内存不够大或者本身就不适配宿主机,自行尝试查看开不起来的报错
  • 目前使用的虚拟机系统仅使用 自编译 的镜像,非自编译镜像缺少依赖和设置不可使用
  • 自编译镜像完整的支持系统的列表:kvm_images

单独生成一个NAT服务器

  • 只生成一个NAT服务器,可自定义限制所有内容

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh && dos2unix buildvm.sh

使用方法

./buildvm.sh 服务器名称 CPU核数 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

CPU核数需要小于或等于宿主机的核数,内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义服务器的系统,不填写留空时默认使用debian13,注意传入参数为系统名字+版本号

除了alpine系统,其他系统的硬盘大小必须大于6G,否则系统起不来,无法初始化和使用,开设的中途阶段就会崩溃。

示例

以下为开设的示例服务器的信息:

属性
服务器名字test
SSH登录的用户名root
SSH登录的密码随机生成
CPU核数1
内存大小256MB
磁盘大小10G
内外网映射端口一致的区间20002到20025
上传带宽500Mbit
下载带宽500Mbit
自动设置外网IPV6地址N
系统debian13
shell
./buildvm.sh test 1 512 10 20001 20002 20025 500 500 N debian13

需要进入虚拟机内部则执行

shell
lxc console test

退出则先按住Ctrl再按a,松开后,再按q

需要查看信息则执行

shell
cat 服务器名字

比如查询示例的信息就是

shell
cat test

删除测试服务器

shell
lxc stop -f test
 lxc delete -f test
 rm -rf test
 rm -rf test_v6
diff --git a/assets/guide_lxd_lxd_qemu.md.CrHtdnIe.lean.js b/assets/guide_lxd_lxd_qemu.md.DTwNzEss.lean.js
similarity index 87%
rename from assets/guide_lxd_lxd_qemu.md.CrHtdnIe.lean.js
rename to assets/guide_lxd_lxd_qemu.md.DTwNzEss.lean.js
index 79066ea719..2ba9fbb24d 100644
--- a/assets/guide_lxd_lxd_qemu.md.CrHtdnIe.lean.js
+++ b/assets/guide_lxd_lxd_qemu.md.DTwNzEss.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qemu.md","filePath":"guide/lxd/lxd_qemu.md","lastUpdated":1773143516000}'),l={name:"guide/lxd/lxd_qemu.md"};function n(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t("",31)]))}const u=i(l,[["render",n]]);export{c as __pageData,u as default};
+import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"在 LXD 中运行 QEMU 虚拟化的 Linux 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_qemu.md","filePath":"guide/lxd/lxd_qemu.md","lastUpdated":1773196139000}'),l={name:"guide/lxd/lxd_qemu.md"};function n(h,s,p,d,r,k){return e(),a("div",null,s[0]||(s[0]=[t("",31)]))}const u=i(l,[["render",n]]);export{c as __pageData,u as default};
diff --git a/assets/guide_lxd_lxd_thanks.md.BiGn2HlE.js b/assets/guide_lxd_lxd_thanks.md.CNqLGcSA.js
similarity index 97%
rename from assets/guide_lxd_lxd_thanks.md.BiGn2HlE.js
rename to assets/guide_lxd_lxd_thanks.md.CNqLGcSA.js
index b4933c3cce..34cc035f87 100644
--- a/assets/guide_lxd_lxd_thanks.md.BiGn2HlE.js
+++ b/assets/guide_lxd_lxd_thanks.md.CNqLGcSA.js
@@ -1 +1 @@
-import{_ as r,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/lxd/lxd_thanks.md","filePath":"guide/lxd/lxd_thanks.md","lastUpdated":1773143516000}'),s={name:"guide/lxd/lxd_thanks.md"};function o(i,t,l,p,c,d){return a(),e("div",null,t[0]||(t[0]=[n('

致谢

https://github.com/lxc/lxd

https://lxdware.com/

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://images.opsmaru.dev/

感谢 @Ella-Alinda @fscarmen 提供的指导

',12)]))}const f=r(s,[["render",o]]);export{u as __pageData,f as default}; +import{_ as r,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/lxd/lxd_thanks.md","filePath":"guide/lxd/lxd_thanks.md","lastUpdated":1773196139000}'),s={name:"guide/lxd/lxd_thanks.md"};function o(i,t,l,p,c,d){return a(),e("div",null,t[0]||(t[0]=[n('

致谢

https://github.com/lxc/lxd

https://lxdware.com/

https://discuss.linuxcontainers.org/

https://discuss.linuxcontainers.org/t/how-to-run-docker-inside-lxc-container/13017/4

https://discuss.linuxcontainers.org/t/error-seccomp-notify-not-supported-on-container-start/15038/3

https://discuss.linuxcontainers.org/t/how-do-i-assign-a-public-ipv6-address-to-a-lxc-container/6028

https://github.com/turtle0x1/LxdMosaic

https://openzfs.github.io/openzfs-docs/Getting Started/Debian/index.html

https://github.com/SuperManito/LinuxMirrors

https://images.opsmaru.dev/

感谢 @Ella-Alinda @fscarmen 提供的指导

',12)]))}const f=r(s,[["render",o]]);export{u as __pageData,f as default}; diff --git a/assets/guide_lxd_lxd_thanks.md.BiGn2HlE.lean.js b/assets/guide_lxd_lxd_thanks.md.CNqLGcSA.lean.js similarity index 85% rename from assets/guide_lxd_lxd_thanks.md.BiGn2HlE.lean.js rename to assets/guide_lxd_lxd_thanks.md.CNqLGcSA.lean.js index 462ea32870..5ce580b05a 100644 --- a/assets/guide_lxd_lxd_thanks.md.BiGn2HlE.lean.js +++ b/assets/guide_lxd_lxd_thanks.md.CNqLGcSA.lean.js @@ -1 +1 @@ -import{_ as r,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/lxd/lxd_thanks.md","filePath":"guide/lxd/lxd_thanks.md","lastUpdated":1773143516000}'),s={name:"guide/lxd/lxd_thanks.md"};function o(i,t,l,p,c,d){return a(),e("div",null,t[0]||(t[0]=[n("",12)]))}const f=r(s,[["render",o]]);export{u as __pageData,f as default}; +import{_ as r,c as e,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/lxd/lxd_thanks.md","filePath":"guide/lxd/lxd_thanks.md","lastUpdated":1773196139000}'),s={name:"guide/lxd/lxd_thanks.md"};function o(i,t,l,p,c,d){return a(),e("div",null,t[0]||(t[0]=[n("",12)]))}const f=r(s,[["render",o]]);export{u as __pageData,f as default}; diff --git a/assets/guide_lxd_lxd_windows.md.B_lHFvNt.js b/assets/guide_lxd_lxd_windows.md.tyliFAGv.js similarity index 99% rename from assets/guide_lxd_lxd_windows.md.B_lHFvNt.js rename to assets/guide_lxd_lxd_windows.md.tyliFAGv.js index bd5383359d..d59a285684 100644 --- a/assets/guide_lxd_lxd_windows.md.B_lHFvNt.js +++ b/assets/guide_lxd_lxd_windows.md.tyliFAGv.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/win1.CJKAoRm5.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",d="/assets/win4.DwKt_Ood.jpg",r="/assets/win5.C8qmMo1u.jpg",F="/assets/win7.CI43Ul0V.jpg",o="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"在 LXD 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_windows.md","filePath":"guide/lxd/lxd_windows.md","lastUpdated":1773143516000}'),c={name:"guide/lxd/lxd_windows.md"};function g(C,s,y,m,u,b){return n(),a("div",null,s[0]||(s[0]=[l(`

在 LXD 中运行 Windows 虚拟机

检查 lxd 驱动

确保lxc info输出中含有qemu,否则无法创建VM:

shell
lxc info | grep -i driver:

若显示只有lxc,则lxd的驱动不支持开设虚拟机,不需要看后续的教程了。

准备环境和修补镜像

/root目录下按顺序执行以下命令:

shell
apt update
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/win1.CJKAoRm5.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",d="/assets/win4.DwKt_Ood.jpg",r="/assets/win5.C8qmMo1u.jpg",F="/assets/win7.CI43Ul0V.jpg",o="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"在 LXD 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_windows.md","filePath":"guide/lxd/lxd_windows.md","lastUpdated":1773196139000}'),c={name:"guide/lxd/lxd_windows.md"};function g(C,s,y,m,u,b){return n(),a("div",null,s[0]||(s[0]=[l(`

在 LXD 中运行 Windows 虚拟机

检查 lxd 驱动

确保lxc info输出中含有qemu,否则无法创建VM:

shell
lxc info | grep -i driver:

若显示只有lxc,则lxd的驱动不支持开设虚拟机,不需要看后续的教程了。

准备环境和修补镜像

/root目录下按顺序执行以下命令:

shell
apt update
 apt install -y snapd libguestfs-tools wimtools rsync libhivex-bin libwin-hivex-perl genisoimage || apt install -y mkisofs
 snap install lxd-imagebuilder --classic --edge
 # 重启加载一些配置
diff --git a/assets/guide_lxd_lxd_windows.md.B_lHFvNt.lean.js b/assets/guide_lxd_lxd_windows.md.tyliFAGv.lean.js
similarity index 83%
rename from assets/guide_lxd_lxd_windows.md.B_lHFvNt.lean.js
rename to assets/guide_lxd_lxd_windows.md.tyliFAGv.lean.js
index 6e01eb0bb7..8c2388486b 100644
--- a/assets/guide_lxd_lxd_windows.md.B_lHFvNt.lean.js
+++ b/assets/guide_lxd_lxd_windows.md.tyliFAGv.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/win1.CJKAoRm5.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",d="/assets/win4.DwKt_Ood.jpg",r="/assets/win5.C8qmMo1u.jpg",F="/assets/win7.CI43Ul0V.jpg",o="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"在 LXD 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_windows.md","filePath":"guide/lxd/lxd_windows.md","lastUpdated":1773143516000}'),c={name:"guide/lxd/lxd_windows.md"};function g(C,s,y,m,u,b){return n(),a("div",null,s[0]||(s[0]=[l("",67)]))}const E=i(c,[["render",g]]);export{v as __pageData,E as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/win1.CJKAoRm5.png",p="/assets/win2.BNn7RQzT.jpg",t="/assets/win3.BgsODJcQ.jpg",h="/assets/wintj.tP8uDOfH.jpg",k="/assets/wincf.B_Jc2M1G.jpg",d="/assets/win4.DwKt_Ood.jpg",r="/assets/win5.C8qmMo1u.jpg",F="/assets/win7.CI43Ul0V.jpg",o="/assets/win6.Cx0KdzQb.jpg",v=JSON.parse('{"title":"在 LXD 中运行 Windows 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/lxd/lxd_windows.md","filePath":"guide/lxd/lxd_windows.md","lastUpdated":1773196139000}'),c={name:"guide/lxd/lxd_windows.md"};function g(C,s,y,m,u,b){return n(),a("div",null,s[0]||(s[0]=[l("",67)]))}const E=i(c,[["render",g]]);export{v as __pageData,E as default};
diff --git a/assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.js b/assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.js
similarity index 99%
rename from assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.js
rename to assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.js
index 39d9a08cfd..5cb676e1c5 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/proxy.Dm-mUL3T.png",p="/assets/init.CCPKl32d.png",t="/assets/init_success.DAbHwjWK.png",h="/assets/home.BlmfOIEU.png",u=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_install.md","filePath":"guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773143516000}'),r={name:"guide/oneclickvirt/oneclickvirt_install.md"};function d(k,s,c,o,F,g){return n(),a("div",null,s[0]||(s[0]=[e('

OneClickVirt

区分面板端和受控端,受控端需要提前安装好对应虚拟化的环境,可使用一键虚拟化中别的虚拟化的主体安装进行环境安装,主控端实际就是一个面板,没有虚拟化环境需求。

受控端

对应本说明别的虚拟环境的主体安装脚本可以进行环境安装,这里不过多赘述,四大主流的虚拟化技术的主体安装本教程都有对应的安装命令进行安装,自行查阅。

如有条件务必使用脚本进行对应的环境安装,否则可能出现预设不一致等奇奇怪怪的问题,没有技术力不要手动安装环境,一切通过脚本。

受控端只需要安装好虚拟化环境即可,不必额外安装agent进行控制,只要确保SSH能登录即可(SSH登录地址可公网可内网,连通性无问题即可)。

WARNING

纳管的节点要求宿主机网卡直接绑定待映射IP地址如公网IP。不支持通过类似阿里云 VPC 的端口映射、NAT 转发等方式提供待映射IP的宿主机。使用全端口 NAT 或端口转发方式提供待映射IP的宿主机,无法作为节点机器。(简单的说,云服务器有公网IP地址,那么这个IP地址必须是绑定在网卡上的,不能网卡只有内网IP没公网IP,然后流量走内网IP再转公网IP)

面板端

硬件上需要至少1G空闲内存和2G空闲硬盘,通过下面任一方式安装完成即可。

安装方式适用场景优点缺点
前后端分离部署高性能,占用最小性能最佳、灵活配置配置复杂,需配置反向代理
一体化部署本地有无公网IPV4地址皆可部署简单、无需反向代理性能较差
Docker部署(预构建镜像)快速部署,占用较大一键安装、数据持久化需要Docker环境,下载镜像较大
DockerCompose部署适合源码更新维护高度自定义需要Docker环境,编译耗时长
Dockerfile自编译适合源码更新维护高度自定义需要Docker环境,编译耗时长

通过预编译二进制文件安装

这里区分两种方式:

  • 前后端分离部署(后端前端分开编译出对应文件进行部署),性能更好
  • 一体化部署(前后端合二为一只需要部署一个文件),性能较差

前后端分离部署

Linux
下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh
环境安装

有交互地安装环境

./install.sh env

无交互地安装环境

noninteractive=true ./install.sh env
本体安装
./install.sh install

安装目录: /opt/oneclickvirt

安装成功后,需要手动启动服务:

shell
systemctl start oneclickvirt

其他使用方法:

停止服务:

shell
systemctl stop oneclickvirt

开机自启:

shell
systemctl enable oneclickvirt

查看状态:

shell
systemctl status oneclickvirt

查看日志:

shell
journalctl -u oneclickvirt -f

重启服务:

shell
systemctl restart oneclickvirt
升级前后端
./install.sh upgrade

除了配置文件,后端和前端文件都会升级

升级过程中会提示是否需要自定义前端文件路径,若选择不自定义,则默认解压到/opt/oneclickvirt/web/

这个设置主要是为了适配1panel不可自定义前端文件路径的问题,1panel的文件路径类似/opt/1panel/www/sites/beta/index/web,其中beta是你设置的网站的名字

部署前端

前面安装脚本会将静态文件解压到(未自定义时)

shell
cd /opt/oneclickvirt/web/

这个路径下

使用nginxcaddy以这个路径建立静态网站即可,是否需要域名绑定自行选择

静态文件部署完毕后,需要反代后端地址给前端使用,这里具体以OpenResty为例:

需要反代路径/api到后端的http://127.0.0.1:8888地址上,如果你使用的的是1panel,那么就只需要填写这些即可,默认的后端域名使用默认的$host不需要修改。

如果你使用的是nginxcaddy,请参考下方的代理源码自行修改进行代理

shell
location /api {
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/proxy.Dm-mUL3T.png",p="/assets/init.CCPKl32d.png",t="/assets/init_success.DAbHwjWK.png",h="/assets/home.BlmfOIEU.png",u=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_install.md","filePath":"guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773196139000}'),r={name:"guide/oneclickvirt/oneclickvirt_install.md"};function d(k,s,c,o,F,g){return n(),a("div",null,s[0]||(s[0]=[e('

OneClickVirt

区分面板端和受控端,受控端需要提前安装好对应虚拟化的环境,可使用一键虚拟化中别的虚拟化的主体安装进行环境安装,主控端实际就是一个面板,没有虚拟化环境需求。

受控端

对应本说明别的虚拟环境的主体安装脚本可以进行环境安装,这里不过多赘述,四大主流的虚拟化技术的主体安装本教程都有对应的安装命令进行安装,自行查阅。

如有条件务必使用脚本进行对应的环境安装,否则可能出现预设不一致等奇奇怪怪的问题,没有技术力不要手动安装环境,一切通过脚本。

受控端只需要安装好虚拟化环境即可,不必额外安装agent进行控制,只要确保SSH能登录即可(SSH登录地址可公网可内网,连通性无问题即可)。

WARNING

纳管的节点要求宿主机网卡直接绑定待映射IP地址如公网IP。不支持通过类似阿里云 VPC 的端口映射、NAT 转发等方式提供待映射IP的宿主机。使用全端口 NAT 或端口转发方式提供待映射IP的宿主机,无法作为节点机器。(简单的说,云服务器有公网IP地址,那么这个IP地址必须是绑定在网卡上的,不能网卡只有内网IP没公网IP,然后流量走内网IP再转公网IP)

面板端

硬件上需要至少1G空闲内存和2G空闲硬盘,通过下面任一方式安装完成即可。

安装方式适用场景优点缺点
前后端分离部署高性能,占用最小性能最佳、灵活配置配置复杂,需配置反向代理
一体化部署本地有无公网IPV4地址皆可部署简单、无需反向代理性能较差
Docker部署(预构建镜像)快速部署,占用较大一键安装、数据持久化需要Docker环境,下载镜像较大
DockerCompose部署适合源码更新维护高度自定义需要Docker环境,编译耗时长
Dockerfile自编译适合源码更新维护高度自定义需要Docker环境,编译耗时长

通过预编译二进制文件安装

这里区分两种方式:

  • 前后端分离部署(后端前端分开编译出对应文件进行部署),性能更好
  • 一体化部署(前后端合二为一只需要部署一个文件),性能较差

前后端分离部署

Linux
下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/install.sh -o install.sh && chmod +x install.sh
环境安装

有交互地安装环境

./install.sh env

无交互地安装环境

noninteractive=true ./install.sh env
本体安装
./install.sh install

安装目录: /opt/oneclickvirt

安装成功后,需要手动启动服务:

shell
systemctl start oneclickvirt

其他使用方法:

停止服务:

shell
systemctl stop oneclickvirt

开机自启:

shell
systemctl enable oneclickvirt

查看状态:

shell
systemctl status oneclickvirt

查看日志:

shell
journalctl -u oneclickvirt -f

重启服务:

shell
systemctl restart oneclickvirt
升级前后端
./install.sh upgrade

除了配置文件,后端和前端文件都会升级

升级过程中会提示是否需要自定义前端文件路径,若选择不自定义,则默认解压到/opt/oneclickvirt/web/

这个设置主要是为了适配1panel不可自定义前端文件路径的问题,1panel的文件路径类似/opt/1panel/www/sites/beta/index/web,其中beta是你设置的网站的名字

部署前端

前面安装脚本会将静态文件解压到(未自定义时)

shell
cd /opt/oneclickvirt/web/

这个路径下

使用nginxcaddy以这个路径建立静态网站即可,是否需要域名绑定自行选择

静态文件部署完毕后,需要反代后端地址给前端使用,这里具体以OpenResty为例:

需要反代路径/api到后端的http://127.0.0.1:8888地址上,如果你使用的的是1panel,那么就只需要填写这些即可,默认的后端域名使用默认的$host不需要修改。

如果你使用的是nginxcaddy,请参考下方的代理源码自行修改进行代理

shell
location /api {
     proxy_pass http://127.0.0.1:8888; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
@@ -26,7 +26,7 @@ import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l
     proxy_buffering off;
     add_header X-Cache $upstream_cache_status;
     add_header Cache-Control no-cache;
-}
Windows

查看

https://github.com/oneclickvirt/oneclickvirt/releases/latest

下载最新的对应架构的压缩文件,解压后挂起执行。

执行的二进制文件的同级目录下,下载

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/server/config.yaml

文件,这是后续需要使用的配置文件。

下载web-dist.zip文件后,解压并使用对应的程序建立静态网站,类似Linux那样设置好反向代理即可。

一体化部署

这里不再区分前后端的概念,从

https://github.com/oneclickvirt/oneclickvirt/releases/latest

中找到带allinone标签的压缩包进行下载,注意区分amd64arm64架构,以及对应的系统。

Linux中使用tar -zxvf命令解压tar.gz压缩包,Windows中使用对应解压工具解压zip压缩包,将其中的二进制文件复制粘贴到你需要部署项目的位置。

最好移动到一个专门的文件夹中,因为运行过程中将产生结构化的日志文件。

(以下说明将以amd64架构的linux系统的文件进行示例)

Linux中赋予文件可执行权限,如

shell
chmod 777 server-allinone-linux-amd64

然后下载

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

文件到同一个文件夹中。

Linux中,使用screentmuxnohup命令挂起执行二进制文件即可,如

shell
./server-allinone-linux-amd64

然后打开对应的IP地址的8888端口即可看到前端进行使用了,如

http://你的IP地址:8888

如果你是Windows系统,那么需要使用管理员权限启动exe文件,同时确保启动前exe文件同一个文件夹中存在config.yaml配置文件,否则启动将出现白屏或不通的情况。至于怎么挂起执行,自行探索吧,直接挂着cmd界面运行也行。

一体化部署的模式适合本机没有公网IP的情况,你的IP地址可以是localhost或者127.0.0.1,也可以是对应的公网IPV4地址,具体部署环境下自测。

通过Docker安装

TIP

由于启动的时候连带数据库一起启动,所以容器刚启动的时候不要立即操作,需要至少等待12秒。

可使用的镜像tag可在

https://hub.docker.com/r/spiritlhl/oneclickvirt

https://github.com/oneclickvirt/oneclickvirt/pkgs/container/oneclickvirt

中查询

预构建镜像

镜像标签说明

镜像标签说明适用场景
spiritlhl/oneclickvirt:latest一体化版本(内置数据库)最新版快速部署
spiritlhl/oneclickvirt:20260310一体化版本特定日期版本需要固定版本
spiritlhl/oneclickvirt:no-db独立数据库版本最新版不内置数据库
spiritlhl/oneclickvirt:no-db-20260310独立数据库版本特定日期不内置数据库

所有镜像均支持 linux/amd64linux/arm64 架构。

全新部署

使用已构建好的amd64arm64镜像,会自动根据当前系统架构下载对应版本:

不配置域名:

bash
docker run -d \\
+}
Windows

查看

https://github.com/oneclickvirt/oneclickvirt/releases/latest

下载最新的对应架构的压缩文件,解压后挂起执行。

执行的二进制文件的同级目录下,下载

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/server/config.yaml

文件,这是后续需要使用的配置文件。

下载web-dist.zip文件后,解压并使用对应的程序建立静态网站,类似Linux那样设置好反向代理即可。

一体化部署

这里不再区分前后端的概念,从

https://github.com/oneclickvirt/oneclickvirt/releases/latest

中找到带allinone标签的压缩包进行下载,注意区分amd64arm64架构,以及对应的系统。

Linux中使用tar -zxvf命令解压tar.gz压缩包,Windows中使用对应解压工具解压zip压缩包,将其中的二进制文件复制粘贴到你需要部署项目的位置。

最好移动到一个专门的文件夹中,因为运行过程中将产生结构化的日志文件。

(以下说明将以amd64架构的linux系统的文件进行示例)

Linux中赋予文件可执行权限,如

shell
chmod 777 server-allinone-linux-amd64

然后下载

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

文件到同一个文件夹中。

Linux中,使用screentmuxnohup命令挂起执行二进制文件即可,如

shell
./server-allinone-linux-amd64

然后打开对应的IP地址的8888端口即可看到前端进行使用了,如

http://你的IP地址:8888

如果你是Windows系统,那么需要使用管理员权限启动exe文件,同时确保启动前exe文件同一个文件夹中存在config.yaml配置文件,否则启动将出现白屏或不通的情况。至于怎么挂起执行,自行探索吧,直接挂着cmd界面运行也行。

一体化部署的模式适合本机没有公网IP的情况,你的IP地址可以是localhost或者127.0.0.1,也可以是对应的公网IPV4地址,具体部署环境下自测。

通过Docker安装

TIP

由于启动的时候连带数据库一起启动,所以容器刚启动的时候不要立即操作,需要至少等待12秒。

可使用的镜像tag可在

https://hub.docker.com/r/spiritlhl/oneclickvirt

https://github.com/oneclickvirt/oneclickvirt/pkgs/container/oneclickvirt

中查询

预构建镜像

镜像标签说明

镜像标签说明适用场景
spiritlhl/oneclickvirt:latest一体化版本(内置数据库)最新版快速部署
spiritlhl/oneclickvirt:20260311一体化版本特定日期版本需要固定版本
spiritlhl/oneclickvirt:no-db独立数据库版本最新版不内置数据库
spiritlhl/oneclickvirt:no-db-20260311独立数据库版本特定日期不内置数据库

所有镜像均支持 linux/amd64linux/arm64 架构。

全新部署

使用已构建好的amd64arm64镜像,会自动根据当前系统架构下载对应版本:

不配置域名:

bash
docker run -d \\
   --name oneclickvirt \\
   -p 80:80 \\
   -v oneclickvirt-data:/var/lib/mysql \\
diff --git a/assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.lean.js b/assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.lean.js
similarity index 80%
rename from assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.lean.js
rename to assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.lean.js
index e639271f76..bfc7a3167e 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_install.md.D_m-YgD6.lean.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_install.md.44jfWHtR.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/proxy.Dm-mUL3T.png",p="/assets/init.CCPKl32d.png",t="/assets/init_success.DAbHwjWK.png",h="/assets/home.BlmfOIEU.png",u=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_install.md","filePath":"guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773143516000}'),r={name:"guide/oneclickvirt/oneclickvirt_install.md"};function d(k,s,c,o,F,g){return n(),a("div",null,s[0]||(s[0]=[e("",158)]))}const m=i(r,[["render",d]]);export{u as __pageData,m as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/proxy.Dm-mUL3T.png",p="/assets/init.CCPKl32d.png",t="/assets/init_success.DAbHwjWK.png",h="/assets/home.BlmfOIEU.png",u=JSON.parse('{"title":"OneClickVirt","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_install.md","filePath":"guide/oneclickvirt/oneclickvirt_install.md","lastUpdated":1773196139000}'),r={name:"guide/oneclickvirt/oneclickvirt_install.md"};function d(k,s,c,o,F,g){return n(),a("div",null,s[0]||(s[0]=[e("",158)]))}const m=i(r,[["render",d]]);export{u as __pageData,m as default};
diff --git a/assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.js b/assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.js
similarity index 98%
rename from assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.js
rename to assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.js
index 16e8129696..cbc9e7f6c0 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.js
@@ -1,4 +1,4 @@
-import{_ as a,c as i,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const P=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773143516000}'),p={name:"guide/oneclickvirt/oneclickvirt_precheck.md"};function l(c,e,r,t,o,d){return n(),i("div",null,e[0]||(e[0]=[s(`

前言

这是一个用于对接主流虚拟化技术的控制面板,补足虚拟化技术本身不支持的用户管理、流量监控、NAT端口映射以及自定义系统镜像等内容。

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/oneclickvirt

WARNING

这是一个处于早期开发的项目,可能有各种BUG和不稳定之处,若使用则自行斟酌风险,更新会比较频繁,如若使用不了不要强行使用。

环境需求

支持的架构:amd64或arm64

支持的系统:Linux、Windows、或者自行编译的任何架构的系统

只要有公网就行,部署的机器不必有独立的公网IP地址,这只是一个虚拟化的控制面板,有端口显示前端就行,甚至开发的一个重要原因是我需要无公网IPV4地址管理一堆虚拟化环境。

本控制面板无特殊的环境依赖需求,需要一键部署的可使用包含数据库的一体化Docker镜像或者分容器的docker-compose部署。

前端静态文件通过nginxcaddyOpenResty之一部署,非源码部署且非Docker部署的需要进行API路径反代到后端端口。

WARNING

纳管的节点要求宿主机网卡直接绑定待映射IP地址如公网IP。不支持通过类似阿里云 VPC 的端口映射、NAT 转发等方式提供待映射IP的宿主机。使用全端口 NAT 或端口转发方式提供待映射IP的宿主机,无法作为节点机器。(简单的说,云服务器有公网IP地址,那么这个IP地址必须是绑定在网卡上的,不能网卡只有内网IP没公网IP,然后流量走内网IP再转公网IP)

平台特点

  • 语言国际化,前端支持中英双语切换显示,默认使用中文显示,可切换默认的系统语言

  • 对接Provider: 支持 ProxmoxVE、Incus、Docker、LXD、Podman、Containerd 6大主流虚拟化平台,更多平台敬请期待

  • 灵活实例类型: 支持自动创建虚拟机(VM)和容器(Container),通过抽象化设计提供统一的虚拟化资源管理体验

  • 自带镜像种子数据:无需自行查找对应平台的镜像,所有平台均自带自编译的镜像加载,支持统一管理或自行添加镜像下载地址

  • 自动NAT端口映射: 支持IPv4/IPv6的自动端口映射,映射的IP支持非公网IP,支持多种网络类型:

NAT IPv4
+import{_ as a,c as i,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const P=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773196139000}'),p={name:"guide/oneclickvirt/oneclickvirt_precheck.md"};function l(c,e,r,t,o,d){return n(),i("div",null,e[0]||(e[0]=[s(`

前言

这是一个用于对接主流虚拟化技术的控制面板,补足虚拟化技术本身不支持的用户管理、流量监控、NAT端口映射以及自定义系统镜像等内容。

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/oneclickvirt

WARNING

这是一个处于早期开发的项目,可能有各种BUG和不稳定之处,若使用则自行斟酌风险,更新会比较频繁,如若使用不了不要强行使用。

环境需求

支持的架构:amd64或arm64

支持的系统:Linux、Windows、或者自行编译的任何架构的系统

只要有公网就行,部署的机器不必有独立的公网IP地址,这只是一个虚拟化的控制面板,有端口显示前端就行,甚至开发的一个重要原因是我需要无公网IPV4地址管理一堆虚拟化环境。

本控制面板无特殊的环境依赖需求,需要一键部署的可使用包含数据库的一体化Docker镜像或者分容器的docker-compose部署。

前端静态文件通过nginxcaddyOpenResty之一部署,非源码部署且非Docker部署的需要进行API路径反代到后端端口。

WARNING

纳管的节点要求宿主机网卡直接绑定待映射IP地址如公网IP。不支持通过类似阿里云 VPC 的端口映射、NAT 转发等方式提供待映射IP的宿主机。使用全端口 NAT 或端口转发方式提供待映射IP的宿主机,无法作为节点机器。(简单的说,云服务器有公网IP地址,那么这个IP地址必须是绑定在网卡上的,不能网卡只有内网IP没公网IP,然后流量走内网IP再转公网IP)

平台特点

  • 语言国际化,前端支持中英双语切换显示,默认使用中文显示,可切换默认的系统语言

  • 对接Provider: 支持 ProxmoxVE、Incus、Docker、LXD、Podman、Containerd 6大主流虚拟化平台,更多平台敬请期待

  • 灵活实例类型: 支持自动创建虚拟机(VM)和容器(Container),通过抽象化设计提供统一的虚拟化资源管理体验

  • 自带镜像种子数据:无需自行查找对应平台的镜像,所有平台均自带自编译的镜像加载,支持统一管理或自行添加镜像下载地址

  • 自动NAT端口映射: 支持IPv4/IPv6的自动端口映射,映射的IP支持非公网IP,支持多种网络类型:

NAT IPv4
 NAT IPv4 + 独立IPv6
 独立IPv4
 独立IPv4 + IPv6
diff --git a/assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.lean.js b/assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.lean.js
similarity index 87%
rename from assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.lean.js
rename to assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.lean.js
index 541aef4657..f2d0c60ea2 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_precheck.md.CTq-enZw.lean.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_precheck.md.BP-DIQUL.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const P=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773143516000}'),p={name:"guide/oneclickvirt/oneclickvirt_precheck.md"};function l(c,e,r,t,o,d){return n(),i("div",null,e[0]||(e[0]=[s("",15)]))}const v=a(p,[["render",l]]);export{P as __pageData,v as default};
+import{_ as a,c as i,o as n,ag as s}from"./chunks/framework.QPV3Ar9-.js";const P=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_precheck.md","filePath":"guide/oneclickvirt/oneclickvirt_precheck.md","lastUpdated":1773196139000}'),p={name:"guide/oneclickvirt/oneclickvirt_precheck.md"};function l(c,e,r,t,o,d){return n(),i("div",null,e[0]||(e[0]=[s("",15)]))}const v=a(p,[["render",l]]);export{P as __pageData,v as default};
diff --git a/assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.js b/assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.js
similarity index 99%
rename from assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.js
rename to assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.js
index 321f9d7c82..15938a4a55 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/iofailed.BIGD2fYy.png",F=JSON.parse('{"title":"如有问题请反馈对应仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_qa.md","filePath":"guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773143516000}'),p={name:"guide/oneclickvirt/oneclickvirt_qa.md"};function t(h,s,r,k,d,c){return e(),a("div",null,s[0]||(s[0]=[n(`

如有问题请反馈对应仓库

忘记了管理员密码怎么办

需要通过数据库操作强行更改密码

  1. 生成密码哈希
bash
# 使用 Python 生成(将 NewPassword123! 替换为您的新密码)
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/iofailed.BIGD2fYy.png",F=JSON.parse('{"title":"如有问题请反馈对应仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_qa.md","filePath":"guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773196139000}'),p={name:"guide/oneclickvirt/oneclickvirt_qa.md"};function t(h,s,r,k,d,c){return e(),a("div",null,s[0]||(s[0]=[n(`

如有问题请反馈对应仓库

忘记了管理员密码怎么办

需要通过数据库操作强行更改密码

  1. 生成密码哈希
bash
# 使用 Python 生成(将 NewPassword123! 替换为您的新密码)
 python3 -c "import bcrypt; print(bcrypt.hashpw(b'NewPassword123!', bcrypt.gensalt()).decode('utf-8'))"

输出示例:$2b$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  1. 进入数据库

Docker 部署(一体化版本):

bash
docker exec -it oneclickvirt mysql -u root oneclickvirt

独立数据库部署:

bash
mysql -h 127.0.0.1 -P 3306 -u root -p oneclickvirt
  1. 更新密码
sql
-- 查看管理员账户
 SELECT id, username, user_type FROM users WHERE user_type = 'admin';
 
diff --git a/assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.lean.js b/assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.lean.js
similarity index 88%
rename from assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.lean.js
rename to assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.lean.js
index 04044d5640..c14a51c806 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_qa.md.BjWTkein.lean.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_qa.md.IuA3vvE3.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/iofailed.BIGD2fYy.png",F=JSON.parse('{"title":"如有问题请反馈对应仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_qa.md","filePath":"guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773143516000}'),p={name:"guide/oneclickvirt/oneclickvirt_qa.md"};function t(h,s,r,k,d,c){return e(),a("div",null,s[0]||(s[0]=[n("",61)]))}const g=i(p,[["render",t]]);export{F as __pageData,g as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/iofailed.BIGD2fYy.png",F=JSON.parse('{"title":"如有问题请反馈对应仓库","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_qa.md","filePath":"guide/oneclickvirt/oneclickvirt_qa.md","lastUpdated":1773196139000}'),p={name:"guide/oneclickvirt/oneclickvirt_qa.md"};function t(h,s,r,k,d,c){return e(),a("div",null,s[0]||(s[0]=[n("",61)]))}const g=i(p,[["render",t]]);export{F as __pageData,g as default};
diff --git a/assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.js b/assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.js
similarity index 94%
rename from assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.js
rename to assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.js
index 00cdf8c9cf..832f54d554 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.js
@@ -1 +1 @@
-import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773143516000}'),s={name:"guide/oneclickvirt/oneclickvirt_thanks.md"};function c(n,e,i,l,p,m){return o(),r("div",null,e[0]||(e[0]=[a('

致谢

感谢以下平台提供测试可用的服务器

https://console.zmto.com/

https://fossvps.org/

https://community.ibm.com/zsystems/form/l1cc-oss-vm-request/

',5)]))}const f=t(s,[["render",c]]);export{d as __pageData,f as default}; +import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773196139000}'),s={name:"guide/oneclickvirt/oneclickvirt_thanks.md"};function c(n,e,i,l,p,m){return o(),r("div",null,e[0]||(e[0]=[a('

致谢

感谢以下平台提供测试可用的服务器

https://console.zmto.com/

https://fossvps.org/

https://community.ibm.com/zsystems/form/l1cc-oss-vm-request/

',5)]))}const f=t(s,[["render",c]]);export{d as __pageData,f as default}; diff --git a/assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.lean.js b/assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.lean.js similarity index 87% rename from assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.lean.js rename to assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.lean.js index e99a6a3870..f87b841f4c 100644 --- a/assets/guide_oneclickvirt_oneclickvirt_thanks.md.CkjQijGJ.lean.js +++ b/assets/guide_oneclickvirt_oneclickvirt_thanks.md.BuaYmBUR.lean.js @@ -1 +1 @@ -import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773143516000}'),s={name:"guide/oneclickvirt/oneclickvirt_thanks.md"};function c(n,e,i,l,p,m){return o(),r("div",null,e[0]||(e[0]=[a("",5)]))}const f=t(s,[["render",c]]);export{d as __pageData,f as default}; +import{_ as t,c as r,o,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_thanks.md","filePath":"guide/oneclickvirt/oneclickvirt_thanks.md","lastUpdated":1773196139000}'),s={name:"guide/oneclickvirt/oneclickvirt_thanks.md"};function c(n,e,i,l,p,m){return o(),r("div",null,e[0]||(e[0]=[a("",5)]))}const f=t(s,[["render",c]]);export{d as __pageData,f as default}; diff --git a/assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.js b/assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.js similarity index 99% rename from assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.js rename to assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.js index 992feb7e5e..fe31bafad3 100644 --- a/assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.js +++ b/assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/resetuserpassword.CqOxip2E.png",p="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",t="/assets/edituser.5rScwK1u.png",h="/assets/switch.yK08dswR.png",r="/assets/base.DRc_UdCb.png",k="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",o="/assets/setvirt.DKwPSHcD.png",E="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",y="/assets/ipt1.BWlPVFUI.png",m="/assets/ipt2.BZjM3d2a.png",b="/assets/bw1.Cf2N9DNJ.png",u="/assets/bw2.DJ4v_edl.png",F="/assets/bw3.D087jBmd.png",C="/assets/cz.CpDm16A7.png",x="/assets/pcz.Bf32qIMb.png",B="/assets/level.ClT-FQGb.png",q="/assets/setmore1.C4F--yVn.png",D="/assets/setmore2.DbU1hlgY.png",A="/assets/autoapi1.DUEk35Fd.png",f="/assets/autoapi2.YWfGcqPd.png",_="/assets/autoapi3.PO1KiLU6.png",v="/assets/hardwareconfig.qww9PB2d.png",P="/assets/autoapi4.BMm_5qST.png",z="/assets/autoapi45.D3Ei-57N.png",M="/assets/images.CshFq7yK.png",w="/assets/userlevel.Dff1Ev4j.png",I="/assets/usercontrol.VCrXBaGX.png",G=JSON.parse('{"title":"使用说明","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_usage.md","filePath":"guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773143516000}'),S={name:"guide/oneclickvirt/oneclickvirt_usage.md"};function T(V,s,N,L,U,H){return n(),a("div",null,s[0]||(s[0]=[l('

使用说明

这里将详细说明本面板的使用方式,如有问题请加群求助管理员:https://t.me/oneclickvirt

用户管理

登录进入管理员界面后,打开用户管理页面后,必须点击重置密码,以确保admin账户的密码为强密码,确保不会被恶意爆破。如果初始化的时候,你使用了自行定义的密码,那么不重置密码也可以。

重置密码会自动生成强密码,仅展示一次,务必复制保存好,避免遗忘。

如果需要更改用户的类型,就需要点击对应用户进行编辑,编辑的弹窗支持更改用户类型。

管理员可以点击右上角头像,下拉栏目中有切换管理员和普通用户视图的按钮,如果需要测试任何功能,可以直接使用管理员用户测试。(普通用户没有这个视图切换按钮)

纳管节点

首先,需要确保要纳管的节点已经安装了四大虚拟化技术的其中之一。

部署了本面板的机器上ping对应的节点的IP,最好延迟在300ms以内且丢包率不要太高,否则可能出现无法连接导致控制中遗漏命令执行的情况。

以下是设置节点的设置步骤,必填和必需的步骤必须要走,非必填非必需的步骤走不走看你需求。

基本信息(必填)

服务器名称最好仅英文+数字,不要用特殊字符,最好控制在6个字符以内,后续开设容器或虚拟机的时候,会自动带上这个服务器名称前缀。

服务器类型选择你实际安装了的虚拟化技术名称,docker默认只能开设容器,其他虚拟化技术可开设虚拟机。

SSH地址填写节点的公网IPV4地址或内网SSH链接地址,这个地址将被用作SSH连接和API连接。

NAT端口映射优先使用端口IP进行映射,如果不提供具体的端口IP,将使用SSH地址的IP进行映射,都不需要是公网IPV4地址。

端口框填写SSH连接节点的端口。

描述可备注当前节点的一些信息,仅管理员可见。

状态默认为启用状态,允许后面的健康检测后,被普通用户申请领取开设实例。

架构是节点本身的架构,目前支持纳管amd64架构和arm64架构的节点,自己对应选取。

(暂时不支持纳管的节点本身已经有实例,暂未开发同步纳管实例的功能)

连接配置(必填)

用户名推荐使用root用户,因为后面自动配置api的时候需要对应下载一些依赖,非root用户看你访问问题。

密码就是SSH登录用的密码,当然如果你不使用密码,使用密钥登录也是可以的。

SSH超时配置是设计测试连通性和优化容错率的,也可以用来检测连通性。

前面信息填写完毕后,点击测试,会出现对应的提示值,点击应用即可,当然不进行应用也行,容错率更高一些行。

这里的延迟部署ping的延迟,是实际在对应的节点上执行命令的延迟,所以一般会在2s左右或以上,这是正常的延迟。

这么设计是为了适配一些与面板机器连通性极差的节点,这些参数的数值增加意味着更高的容错率。

执行超时时间一般不需要进行修改,除非你的节点本身性能特别弱,执行命令耗时很久。

位置信息(可选)

直接输入具体国家进行点击勾选,大部分国家都已经有预设了,有对应的旗帜图标。

设置位置后,普通用户的申请领取界面将可以看到对应的旗帜和地区,还有自动匹配的所在大洲。

可选填对应的城市,不填写也行,不影响使用。

实例类型和数量限制(必填)

对于docker类型的节点,只能开设容器,其他虚拟化类型都支持开设容器和虚拟机(前提是节点本身支持,不支持的强行开设任务会自动失败)。

如果不需要开设虚拟机,务必取消虚拟机的勾选。

数量限制如果保持默认的参数0,意味着不进行节点层面的这个类型的实例数量限制。

对于容器类型,建议按照以下公式设置数量

节点空闲存储盘大小 / 将分发的实例的最小硬盘大小 = 实例最大数量

对于虚拟机类型,则

节点空闲内存大小(含虚拟内存) / 将分发的实例的最小内存大小 = 实例数量

这样计算的原因在于,容器一般不限制总的CPU数量和内存大小,但限制硬盘大小,虚拟机一般内存才是开设数量的瓶颈。

如果你需要超开,那么以上计算规则得到的数值可适当增大,并配置下面的配置。

资源超配置(可选)

超配置资源含义是是否要进行对应资源的严格限制,取消限制意味着不进行检查强行开设,可能导致开设任务失败。

默认容器类型不限制CPU和内存预分配的总量,但限制预分配的硬盘总量,以达到最优化的资源共享和最大化的实例数量,一般不需要进行修改。

默认虚拟机类型限制所有资源,预分配的资源总量最大值不超过实际资源大小。

对于ProxmoxVE,还有一个开设的硬盘所在存储池名字可以设置,如果是多盘的pve,需要设置开设在哪个存储池上。

其他类型的虚拟化环境在安装过程中有询问具体存储池开设位置了,所以就不需要设置了。

总的来说,如果需要限制哪种资源不被超开,那么就点击限制,限制后将无法超开对应资源,不限制则可超开对应资源。

这里限制的是该节点上此类实例的总资源占用,用于计算可用资源和限制实例创建。

不推荐进行修改,除非你知道这块的设置在干什么。

IP映射配置(可选)

一般不需要进行修改,这里可以设置每个实例的端口映射数量、区间、网络配置方式、端口映射方式。

默认开设带NAT映射公网IPV4端口的实例,映射的IP的优先级是:端口IP > SSH连接时的IP(如果端口IP未设置时使用)

如果节点本身有一段IPV6子网大于等于/80大小的,那么选择网络配置更改,可开设带公网独立IPV6地址的实例。

极端一点,也可以开设仅独立IPV6地址的实例,自行选择吧。

不推荐对映射方式进行修改,除非你知道这块的设置在干什么,默认的配置已经是最好的配置了。

带宽流量配置(必填)

字面意思,设置节点开设出的实例的最大带宽和以自然月计算的可用流量总量,默认不自动启用流量监控和流量统计。

启动流量监控会有对应的内存负担,因为需要缓存流量统计数据,哪怕本项目极致优化后,还是会随着带宽的增大而增大,内存不够用的不要开启流量统计。

启用了流量统计的话,要注意统计模式,默认的统计模式是最普适的,如果你本地的性能足够好(主要是内存够多),可选择更高的采集频率和采集数量,如果性能非常差,建议选择最后一档。当然也支持自定义参数,但不推荐新手修改,预设的模式足矣。

如果启用了流量统计,那么需要注意等级分配的带宽不要过大,监控将动态按照分配的带宽进行配置文件生成进行监控,带宽越大监控占用的内存越大。

级别实例带宽plugin_pipe_sizesql_cache_entries基础占用突发占用
≤50 Mbps2 MB325~8 MB8~12 MB
中低51~100 Mbps10 MB6410~15 MB15~30 MB
101~200 Mbps25 MB12815~20 MB30~50 MB
中高201~500 Mbps50 MB25620~30 MB50~80 MB
501~1000 Mbps128 MB51230~50 MB80~150 MB
超高1001~2000 Mbps256 MB76850~80 MB150~300 MB
极高>2000 Mbps512 MB102480~120 MB300~600 MB

流量统计的误差10G大概会偏差0.1G左右,已自动处理NAT映射以及带IPV6独立IP的情况,无需手动管理了。

但如果是之前有启用了流量统计,后续需要关闭并卸载监控了,那么需要在下面这个地方先对应删除了监控再关闭流量统计,这样才能确保完全卸载,否则还是会在后台统计。

只有启用了流量控制之后,这块才会出现流量监控管理的按钮,进入之后可见三个按钮,主要用于手动同步监控的情况,一般来说不是实例开设了一些之后再启用流量监控的情况无需手动管理,有需求的直接点击检测流量监控即可,会批量检测当前实例下的所有实例的监控情况。

等级限制(必填)

这块预设了5个等级,用户申请领取的时候,将经过这个限制筛选配置。

在实际实例开设过程中,节点层面的等级限制 将与 全局的用户等级的资源限制 互相比对,取其中的最小值作为用户在当前节点可用的资源限制。

这样设置是为了特殊化当前节点对应等级的用户可开设的实例的配置限制,避免有时候全局限制不适用当前节点,全局限制在系统配置中可设置,一般用于用户整个账户层面的使用资源限制。

高级设置(可选)

过期时间:

防止用户继续操作已经过期的节点,过期节点将自动冻结,此时对应的实例将不允许任何操作,但不会自动删除,如果冻结了节点请及时清理删除节点。

任务并发控制:

默认单线程串联执行,同一时刻,只会存在一个增删改的任务(对应实例的开设删除重置操作)。

可以更改为多线程并发执行,同一时刻可以存在多个增删改任务,只有并发执行时,并发数量的设置才有意义。

串联执行适合节点本身性能弱或平台用户数量少的情况,并发操作适合节点本身性能强或用户数量多的情况,请自行选择模式。

个人推荐使用默认设置,并发执行可能存在未完全测试出来的边界条件,可能有BUG。

任务轮询设置:

控制是否启用任务执行,以及任务执行轮询检查状态的间隔,一般保持默认即可。

操作执行规则:

节点操作模式支持 仅API,仅SSH,自动切换 ,默认使用自动切换模式,一般来说没必要修改,除非有特殊需求。

如果需要启用API操作模式,需要在设置保存节点成功后,在外面点击自动配置API按钮,将执行后台任务自动对接虚拟化平台的API,无需人工配置。等待一段时间大概15~20秒后,应该已经配置成功,点击按钮可见配置历史任务及对应的日志。配置成功后,再点击健康检测,确保API状态为绿色在线状态,就配置启用API成功了。

硬件配置(可选)

仅lxd和incus下支持设置默认的实例参数配置,一般使用默认的就行了,除非你需要手动限制某些特殊的硬件资源,否则一般不需要修改。

如果你需要设置CPU占用的最大百分比等内容,这里的设置可以满足你的需求。

健康检测(必选)

点击操作按钮

保存节点后,点击健康检测完成后,普通用户才能看到对应的服务器,才能进行申请开设,若未进行健康检测,用户无法申请开设领取。

健康检测后会显示对应的类型的连接状态是否在线,会自动检测整机的实际资源总量,这个资源总量就是前面设置的不超配开设的资源总量限制。

API是否可用不影响具体使用,自动配置API是非必需的

系统镜像

默认种子数据会录入所有虚拟化环境可用的镜像,默认仅启用alpine和debian镜像,避免用户可用镜像过多。

如果需要任何系统任何虚拟化环境任何架构对应的镜像,请自行搜索后进行启用,否则用户选择不了对应的镜像。

暂时不支持自定义镜像地址,目前前端录入的功能是不可用的,不要手动录入镜像。

系统配置

一般的选项这里不多赘述了,有必要特殊说明的就两个配置。

用户等级配置(必填)

这里限制的是普通用户等级对应的总的账户可用的资源总量。

在对应节点开设实例的时候,这个全局配置将和节点本身的等级配置共同筛选同时符合条件的配置提供给用户选择。

实例权限配置(必填)

这里可用控制用户敏感操作所需的最低等级,可以控制 实例创建、实例删除、实例重置系统 所需的最低用户等级。

配置文件

默认的系统配置已经足够轻度使用了,如果需要高级自定义则需要修改配置文件,或初始化后在管理员界面进行修改。

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

这里是完整的初始化的配置文件,下面将讲解具体的配置项目:

auth 认证配置

yaml
auth:
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/resetuserpassword.CqOxip2E.png",p="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",t="/assets/edituser.5rScwK1u.png",h="/assets/switch.yK08dswR.png",r="/assets/base.DRc_UdCb.png",k="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",o="/assets/setvirt.DKwPSHcD.png",E="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",y="/assets/ipt1.BWlPVFUI.png",m="/assets/ipt2.BZjM3d2a.png",b="/assets/bw1.Cf2N9DNJ.png",u="/assets/bw2.DJ4v_edl.png",F="/assets/bw3.D087jBmd.png",C="/assets/cz.CpDm16A7.png",x="/assets/pcz.Bf32qIMb.png",B="/assets/level.ClT-FQGb.png",q="/assets/setmore1.C4F--yVn.png",D="/assets/setmore2.DbU1hlgY.png",A="/assets/autoapi1.DUEk35Fd.png",f="/assets/autoapi2.YWfGcqPd.png",_="/assets/autoapi3.PO1KiLU6.png",v="/assets/hardwareconfig.qww9PB2d.png",P="/assets/autoapi4.BMm_5qST.png",z="/assets/autoapi45.D3Ei-57N.png",M="/assets/images.CshFq7yK.png",w="/assets/userlevel.Dff1Ev4j.png",I="/assets/usercontrol.VCrXBaGX.png",G=JSON.parse('{"title":"使用说明","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_usage.md","filePath":"guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773196139000}'),S={name:"guide/oneclickvirt/oneclickvirt_usage.md"};function T(V,s,N,L,U,H){return n(),a("div",null,s[0]||(s[0]=[l('

使用说明

这里将详细说明本面板的使用方式,如有问题请加群求助管理员:https://t.me/oneclickvirt

用户管理

登录进入管理员界面后,打开用户管理页面后,必须点击重置密码,以确保admin账户的密码为强密码,确保不会被恶意爆破。如果初始化的时候,你使用了自行定义的密码,那么不重置密码也可以。

重置密码会自动生成强密码,仅展示一次,务必复制保存好,避免遗忘。

如果需要更改用户的类型,就需要点击对应用户进行编辑,编辑的弹窗支持更改用户类型。

管理员可以点击右上角头像,下拉栏目中有切换管理员和普通用户视图的按钮,如果需要测试任何功能,可以直接使用管理员用户测试。(普通用户没有这个视图切换按钮)

纳管节点

首先,需要确保要纳管的节点已经安装了四大虚拟化技术的其中之一。

部署了本面板的机器上ping对应的节点的IP,最好延迟在300ms以内且丢包率不要太高,否则可能出现无法连接导致控制中遗漏命令执行的情况。

以下是设置节点的设置步骤,必填和必需的步骤必须要走,非必填非必需的步骤走不走看你需求。

基本信息(必填)

服务器名称最好仅英文+数字,不要用特殊字符,最好控制在6个字符以内,后续开设容器或虚拟机的时候,会自动带上这个服务器名称前缀。

服务器类型选择你实际安装了的虚拟化技术名称,docker默认只能开设容器,其他虚拟化技术可开设虚拟机。

SSH地址填写节点的公网IPV4地址或内网SSH链接地址,这个地址将被用作SSH连接和API连接。

NAT端口映射优先使用端口IP进行映射,如果不提供具体的端口IP,将使用SSH地址的IP进行映射,都不需要是公网IPV4地址。

端口框填写SSH连接节点的端口。

描述可备注当前节点的一些信息,仅管理员可见。

状态默认为启用状态,允许后面的健康检测后,被普通用户申请领取开设实例。

架构是节点本身的架构,目前支持纳管amd64架构和arm64架构的节点,自己对应选取。

(暂时不支持纳管的节点本身已经有实例,暂未开发同步纳管实例的功能)

连接配置(必填)

用户名推荐使用root用户,因为后面自动配置api的时候需要对应下载一些依赖,非root用户看你访问问题。

密码就是SSH登录用的密码,当然如果你不使用密码,使用密钥登录也是可以的。

SSH超时配置是设计测试连通性和优化容错率的,也可以用来检测连通性。

前面信息填写完毕后,点击测试,会出现对应的提示值,点击应用即可,当然不进行应用也行,容错率更高一些行。

这里的延迟部署ping的延迟,是实际在对应的节点上执行命令的延迟,所以一般会在2s左右或以上,这是正常的延迟。

这么设计是为了适配一些与面板机器连通性极差的节点,这些参数的数值增加意味着更高的容错率。

执行超时时间一般不需要进行修改,除非你的节点本身性能特别弱,执行命令耗时很久。

位置信息(可选)

直接输入具体国家进行点击勾选,大部分国家都已经有预设了,有对应的旗帜图标。

设置位置后,普通用户的申请领取界面将可以看到对应的旗帜和地区,还有自动匹配的所在大洲。

可选填对应的城市,不填写也行,不影响使用。

实例类型和数量限制(必填)

对于docker类型的节点,只能开设容器,其他虚拟化类型都支持开设容器和虚拟机(前提是节点本身支持,不支持的强行开设任务会自动失败)。

如果不需要开设虚拟机,务必取消虚拟机的勾选。

数量限制如果保持默认的参数0,意味着不进行节点层面的这个类型的实例数量限制。

对于容器类型,建议按照以下公式设置数量

节点空闲存储盘大小 / 将分发的实例的最小硬盘大小 = 实例最大数量

对于虚拟机类型,则

节点空闲内存大小(含虚拟内存) / 将分发的实例的最小内存大小 = 实例数量

这样计算的原因在于,容器一般不限制总的CPU数量和内存大小,但限制硬盘大小,虚拟机一般内存才是开设数量的瓶颈。

如果你需要超开,那么以上计算规则得到的数值可适当增大,并配置下面的配置。

资源超配置(可选)

超配置资源含义是是否要进行对应资源的严格限制,取消限制意味着不进行检查强行开设,可能导致开设任务失败。

默认容器类型不限制CPU和内存预分配的总量,但限制预分配的硬盘总量,以达到最优化的资源共享和最大化的实例数量,一般不需要进行修改。

默认虚拟机类型限制所有资源,预分配的资源总量最大值不超过实际资源大小。

对于ProxmoxVE,还有一个开设的硬盘所在存储池名字可以设置,如果是多盘的pve,需要设置开设在哪个存储池上。

其他类型的虚拟化环境在安装过程中有询问具体存储池开设位置了,所以就不需要设置了。

总的来说,如果需要限制哪种资源不被超开,那么就点击限制,限制后将无法超开对应资源,不限制则可超开对应资源。

这里限制的是该节点上此类实例的总资源占用,用于计算可用资源和限制实例创建。

不推荐进行修改,除非你知道这块的设置在干什么。

IP映射配置(可选)

一般不需要进行修改,这里可以设置每个实例的端口映射数量、区间、网络配置方式、端口映射方式。

默认开设带NAT映射公网IPV4端口的实例,映射的IP的优先级是:端口IP > SSH连接时的IP(如果端口IP未设置时使用)

如果节点本身有一段IPV6子网大于等于/80大小的,那么选择网络配置更改,可开设带公网独立IPV6地址的实例。

极端一点,也可以开设仅独立IPV6地址的实例,自行选择吧。

不推荐对映射方式进行修改,除非你知道这块的设置在干什么,默认的配置已经是最好的配置了。

带宽流量配置(必填)

字面意思,设置节点开设出的实例的最大带宽和以自然月计算的可用流量总量,默认不自动启用流量监控和流量统计。

启动流量监控会有对应的内存负担,因为需要缓存流量统计数据,哪怕本项目极致优化后,还是会随着带宽的增大而增大,内存不够用的不要开启流量统计。

启用了流量统计的话,要注意统计模式,默认的统计模式是最普适的,如果你本地的性能足够好(主要是内存够多),可选择更高的采集频率和采集数量,如果性能非常差,建议选择最后一档。当然也支持自定义参数,但不推荐新手修改,预设的模式足矣。

如果启用了流量统计,那么需要注意等级分配的带宽不要过大,监控将动态按照分配的带宽进行配置文件生成进行监控,带宽越大监控占用的内存越大。

级别实例带宽plugin_pipe_sizesql_cache_entries基础占用突发占用
≤50 Mbps2 MB325~8 MB8~12 MB
中低51~100 Mbps10 MB6410~15 MB15~30 MB
101~200 Mbps25 MB12815~20 MB30~50 MB
中高201~500 Mbps50 MB25620~30 MB50~80 MB
501~1000 Mbps128 MB51230~50 MB80~150 MB
超高1001~2000 Mbps256 MB76850~80 MB150~300 MB
极高>2000 Mbps512 MB102480~120 MB300~600 MB

流量统计的误差10G大概会偏差0.1G左右,已自动处理NAT映射以及带IPV6独立IP的情况,无需手动管理了。

但如果是之前有启用了流量统计,后续需要关闭并卸载监控了,那么需要在下面这个地方先对应删除了监控再关闭流量统计,这样才能确保完全卸载,否则还是会在后台统计。

只有启用了流量控制之后,这块才会出现流量监控管理的按钮,进入之后可见三个按钮,主要用于手动同步监控的情况,一般来说不是实例开设了一些之后再启用流量监控的情况无需手动管理,有需求的直接点击检测流量监控即可,会批量检测当前实例下的所有实例的监控情况。

等级限制(必填)

这块预设了5个等级,用户申请领取的时候,将经过这个限制筛选配置。

在实际实例开设过程中,节点层面的等级限制 将与 全局的用户等级的资源限制 互相比对,取其中的最小值作为用户在当前节点可用的资源限制。

这样设置是为了特殊化当前节点对应等级的用户可开设的实例的配置限制,避免有时候全局限制不适用当前节点,全局限制在系统配置中可设置,一般用于用户整个账户层面的使用资源限制。

高级设置(可选)

过期时间:

防止用户继续操作已经过期的节点,过期节点将自动冻结,此时对应的实例将不允许任何操作,但不会自动删除,如果冻结了节点请及时清理删除节点。

任务并发控制:

默认单线程串联执行,同一时刻,只会存在一个增删改的任务(对应实例的开设删除重置操作)。

可以更改为多线程并发执行,同一时刻可以存在多个增删改任务,只有并发执行时,并发数量的设置才有意义。

串联执行适合节点本身性能弱或平台用户数量少的情况,并发操作适合节点本身性能强或用户数量多的情况,请自行选择模式。

个人推荐使用默认设置,并发执行可能存在未完全测试出来的边界条件,可能有BUG。

任务轮询设置:

控制是否启用任务执行,以及任务执行轮询检查状态的间隔,一般保持默认即可。

操作执行规则:

节点操作模式支持 仅API,仅SSH,自动切换 ,默认使用自动切换模式,一般来说没必要修改,除非有特殊需求。

如果需要启用API操作模式,需要在设置保存节点成功后,在外面点击自动配置API按钮,将执行后台任务自动对接虚拟化平台的API,无需人工配置。等待一段时间大概15~20秒后,应该已经配置成功,点击按钮可见配置历史任务及对应的日志。配置成功后,再点击健康检测,确保API状态为绿色在线状态,就配置启用API成功了。

硬件配置(可选)

仅lxd和incus下支持设置默认的实例参数配置,一般使用默认的就行了,除非你需要手动限制某些特殊的硬件资源,否则一般不需要修改。

如果你需要设置CPU占用的最大百分比等内容,这里的设置可以满足你的需求。

健康检测(必选)

点击操作按钮

保存节点后,点击健康检测完成后,普通用户才能看到对应的服务器,才能进行申请开设,若未进行健康检测,用户无法申请开设领取。

健康检测后会显示对应的类型的连接状态是否在线,会自动检测整机的实际资源总量,这个资源总量就是前面设置的不超配开设的资源总量限制。

API是否可用不影响具体使用,自动配置API是非必需的

系统镜像

默认种子数据会录入所有虚拟化环境可用的镜像,默认仅启用alpine和debian镜像,避免用户可用镜像过多。

如果需要任何系统任何虚拟化环境任何架构对应的镜像,请自行搜索后进行启用,否则用户选择不了对应的镜像。

暂时不支持自定义镜像地址,目前前端录入的功能是不可用的,不要手动录入镜像。

系统配置

一般的选项这里不多赘述了,有必要特殊说明的就两个配置。

用户等级配置(必填)

这里限制的是普通用户等级对应的总的账户可用的资源总量。

在对应节点开设实例的时候,这个全局配置将和节点本身的等级配置共同筛选同时符合条件的配置提供给用户选择。

实例权限配置(必填)

这里可用控制用户敏感操作所需的最低等级,可以控制 实例创建、实例删除、实例重置系统 所需的最低用户等级。

配置文件

默认的系统配置已经足够轻度使用了,如果需要高级自定义则需要修改配置文件,或初始化后在管理员界面进行修改。

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

这里是完整的初始化的配置文件,下面将讲解具体的配置项目:

auth 认证配置

yaml
auth:
     email-password: ""
     email-smtp-host: ""
     email-smtp-port: "3306"
diff --git a/assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.lean.js b/assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.lean.js
similarity index 95%
rename from assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.lean.js
rename to assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.lean.js
index db944e81d5..66b0595ad6 100644
--- a/assets/guide_oneclickvirt_oneclickvirt_usage.md.CA65urzE.lean.js
+++ b/assets/guide_oneclickvirt_oneclickvirt_usage.md.DZ3-tk1n.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/resetuserpassword.CqOxip2E.png",p="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",t="/assets/edituser.5rScwK1u.png",h="/assets/switch.yK08dswR.png",r="/assets/base.DRc_UdCb.png",k="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",o="/assets/setvirt.DKwPSHcD.png",E="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",y="/assets/ipt1.BWlPVFUI.png",m="/assets/ipt2.BZjM3d2a.png",b="/assets/bw1.Cf2N9DNJ.png",u="/assets/bw2.DJ4v_edl.png",F="/assets/bw3.D087jBmd.png",C="/assets/cz.CpDm16A7.png",x="/assets/pcz.Bf32qIMb.png",B="/assets/level.ClT-FQGb.png",q="/assets/setmore1.C4F--yVn.png",D="/assets/setmore2.DbU1hlgY.png",A="/assets/autoapi1.DUEk35Fd.png",f="/assets/autoapi2.YWfGcqPd.png",_="/assets/autoapi3.PO1KiLU6.png",v="/assets/hardwareconfig.qww9PB2d.png",P="/assets/autoapi4.BMm_5qST.png",z="/assets/autoapi45.D3Ei-57N.png",M="/assets/images.CshFq7yK.png",w="/assets/userlevel.Dff1Ev4j.png",I="/assets/usercontrol.VCrXBaGX.png",G=JSON.parse('{"title":"使用说明","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_usage.md","filePath":"guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773143516000}'),S={name:"guide/oneclickvirt/oneclickvirt_usage.md"};function T(V,s,N,L,U,H){return n(),a("div",null,s[0]||(s[0]=[l("",171)]))}const j=i(S,[["render",T]]);export{G as __pageData,j as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const e="/assets/resetuserpassword.CqOxip2E.png",p="/assets/resetuserpasswordsuccess.CjuVQ7LX.png",t="/assets/edituser.5rScwK1u.png",h="/assets/switch.yK08dswR.png",r="/assets/base.DRc_UdCb.png",k="/assets/connect.kms2GR51.png",d="/assets/sshtest.Rm3Bh8MC.png",c="/assets/location.Cr-hgeDL.png",o="/assets/setvirt.DKwPSHcD.png",E="/assets/setct.D56FUfb8.png",g="/assets/setvm.BFPcFZ8j.png",y="/assets/ipt1.BWlPVFUI.png",m="/assets/ipt2.BZjM3d2a.png",b="/assets/bw1.Cf2N9DNJ.png",u="/assets/bw2.DJ4v_edl.png",F="/assets/bw3.D087jBmd.png",C="/assets/cz.CpDm16A7.png",x="/assets/pcz.Bf32qIMb.png",B="/assets/level.ClT-FQGb.png",q="/assets/setmore1.C4F--yVn.png",D="/assets/setmore2.DbU1hlgY.png",A="/assets/autoapi1.DUEk35Fd.png",f="/assets/autoapi2.YWfGcqPd.png",_="/assets/autoapi3.PO1KiLU6.png",v="/assets/hardwareconfig.qww9PB2d.png",P="/assets/autoapi4.BMm_5qST.png",z="/assets/autoapi45.D3Ei-57N.png",M="/assets/images.CshFq7yK.png",w="/assets/userlevel.Dff1Ev4j.png",I="/assets/usercontrol.VCrXBaGX.png",G=JSON.parse('{"title":"使用说明","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/oneclickvirt/oneclickvirt_usage.md","filePath":"guide/oneclickvirt/oneclickvirt_usage.md","lastUpdated":1773196139000}'),S={name:"guide/oneclickvirt/oneclickvirt_usage.md"};function T(V,s,N,L,U,H){return n(),a("div",null,s[0]||(s[0]=[l("",171)]))}const j=i(S,[["render",T]]);export{G as __pageData,j as default};
diff --git a/assets/guide_podman_podman_build.md.BIDlzCzV.js b/assets/guide_podman_podman_build.md.CvMJ7lqn.js
similarity index 99%
rename from assets/guide_podman_podman_build.md.BIDlzCzV.js
rename to assets/guide_podman_podman_build.md.CvMJ7lqn.js
index 3b64dbe44d..d30774317b 100644
--- a/assets/guide_podman_podman_build.md.BIDlzCzV.js
+++ b/assets/guide_podman_podman_build.md.CvMJ7lqn.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_build.md","filePath":"guide/podman/podman_build.md","lastUpdated":1773143516000}'),t={name:"guide/podman/podman_build.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个 Podman 容器,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPV6 地址(需安装时宿主机已有公网 IPV6 且安装脚本已配置 podman-ipv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_build.md","filePath":"guide/podman/podman_build.md","lastUpdated":1773196139000}'),t={name:"guide/podman/podman_build.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一个 Podman 容器,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPV6 地址(需安装时宿主机已有公网 IPV6 且安装脚本已配置 podman-ipv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
 chmod +x onepodman.sh

国内

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/onepodman.sh
 chmod +x onepodman.sh

示例

运行支持的变量如下

bash
./onepodman.sh <name> <cpu> <memory_mb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system] [disk_gb]

目前 system 仅支持选择:

  • debian
  • ubuntu
  • alpine
  • almalinux
  • rockylinux
  • openeuler

默认不填则是 debian

shell
./onepodman.sh ct1 1 512 MyPassword 25000 34975 35000 n debian 0

以下为开设的示例容器的信息:

属性
容器名字ct1
SSH 登录的用户名root
SSH 登录的密码MyPassword
CPU 核数1
内存大小512MB
SSH 端口25000
内外网映射端口一致的区间34975 到 35000
系统debian
是否绑定独立的 IPV6 地址N
硬盘大小不限制

相关操作

查看所有容器

shell
podman ps -a

进入容器

shell
podman exec -it ct1 bash

进入 Alpine 容器

shell
podman exec -it ct1 sh

要退出容器就执行 exit 退出。

删除示例

shell
podman rm -f ct1

查看容器日志

shell
podman logs ct1

批量开设

  • 批量多次运行继承配置生成
  • 自动递增容器名(ct1, ct2, ...)、SSH 端口、公网端口
  • 容器信息记录到 ctlog 文件
  • 生成多个时为避免 SSH 连接中断建议在 screen 中执行
  • 支持 x86_64 和 ARM64 架构的服务器

运行

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/podman/main/scripts/create_podman.sh
 chmod +x create_podman.sh
diff --git a/assets/guide_podman_podman_build.md.BIDlzCzV.lean.js b/assets/guide_podman_podman_build.md.CvMJ7lqn.lean.js
similarity index 86%
rename from assets/guide_podman_podman_build.md.BIDlzCzV.lean.js
rename to assets/guide_podman_podman_build.md.CvMJ7lqn.lean.js
index 3b9e683c1e..6549755904 100644
--- a/assets/guide_podman_podman_build.md.BIDlzCzV.lean.js
+++ b/assets/guide_podman_podman_build.md.CvMJ7lqn.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_build.md","filePath":"guide/podman/podman_build.md","lastUpdated":1773143516000}'),t={name:"guide/podman/podman_build.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}const o=i(t,[["render",l]]);export{F as __pageData,o as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_build.md","filePath":"guide/podman/podman_build.md","lastUpdated":1773196139000}'),t={name:"guide/podman/podman_build.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",49)]))}const o=i(t,[["render",l]]);export{F as __pageData,o as default};
diff --git a/assets/guide_podman_podman_install.md.B47eckhB.js b/assets/guide_podman_podman_install.md.Ct4FbZdf.js
similarity index 99%
rename from assets/guide_podman_podman_install.md.B47eckhB.js
rename to assets/guide_podman_podman_install.md.Ct4FbZdf.js
index 103dcfadb1..ea53e8ad46 100644
--- a/assets/guide_podman_podman_install.md.B47eckhB.js
+++ b/assets/guide_podman_podman_install.md.Ct4FbZdf.js
@@ -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"},"headers":[],"relativePath":"guide/podman/podman_install.md","filePath":"guide/podman/podman_install.md","lastUpdated":1773143516000}'),l={name:"guide/podman/podman_install.md"};function t(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e('

前言

安装 Podman 环境,包含 podman + 网络配置 + DNS 保活服务全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 通过各发行版官方软件包安装 Podman(daemonless 架构,无需 Docker daemon)
  • 自动配置 Podman 网络(podman-net:172.21.0.0/16)
  • 检测公网 IPv6 地址,若存在则自动创建 podman-ipv6 网络并启动 NDP Responder
  • 安装 DNS 保活服务(check-dns-podman.service),持续检测 DNS 可用性
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

TIP

安装完成后建议执行 podman ps -a 验证 Podman 环境是否正常运行

卸载 Podman 环境

一键卸载 Podman 全套环境,包括所有容器、镜像、网络、辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有容器、镜像、Podman 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const m=i(l,[["render",t]]);export{c as __pageData,m as default}; +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"},"headers":[],"relativePath":"guide/podman/podman_install.md","filePath":"guide/podman/podman_install.md","lastUpdated":1773196139000}'),l={name:"guide/podman/podman_install.md"};function t(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e('

前言

安装 Podman 环境,包含 podman + 网络配置 + DNS 保活服务全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 通过各发行版官方软件包安装 Podman(daemonless 架构,无需 Docker daemon)
  • 自动配置 Podman 网络(podman-net:172.21.0.0/16)
  • 检测公网 IPv6 地址,若存在则自动创建 podman-ipv6 网络并启动 NDP Responder
  • 安装 DNS 保活服务(check-dns-podman.service),持续检测 DNS 可用性
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

TIP

安装完成后建议执行 podman ps -a 验证 Podman 环境是否正常运行

卸载 Podman 环境

一键卸载 Podman 全套环境,包括所有容器、镜像、网络、辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有容器、镜像、Podman 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const m=i(l,[["render",t]]);export{c as __pageData,m as default}; diff --git a/assets/guide_podman_podman_install.md.B47eckhB.lean.js b/assets/guide_podman_podman_install.md.Ct4FbZdf.lean.js similarity index 86% rename from assets/guide_podman_podman_install.md.B47eckhB.lean.js rename to assets/guide_podman_podman_install.md.Ct4FbZdf.lean.js index 59310e704c..60a2f9245a 100644 --- a/assets/guide_podman_podman_install.md.B47eckhB.lean.js +++ b/assets/guide_podman_podman_install.md.Ct4FbZdf.lean.js @@ -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"},"headers":[],"relativePath":"guide/podman/podman_install.md","filePath":"guide/podman/podman_install.md","lastUpdated":1773143516000}'),l={name:"guide/podman/podman_install.md"};function t(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",24)]))}const m=i(l,[["render",t]]);export{c as __pageData,m as default}; +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"},"headers":[],"relativePath":"guide/podman/podman_install.md","filePath":"guide/podman/podman_install.md","lastUpdated":1773196139000}'),l={name:"guide/podman/podman_install.md"};function t(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",24)]))}const m=i(l,[["render",t]]);export{c as __pageData,m as default}; diff --git a/assets/guide_podman_podman_precheck.md.BVLG5yoH.js b/assets/guide_podman_podman_precheck.md.lwJB6a8k.js similarity index 98% rename from assets/guide_podman_podman_precheck.md.BVLG5yoH.js rename to assets/guide_podman_podman_precheck.md.lwJB6a8k.js index 9b937a496d..3482a0aadc 100644 --- a/assets/guide_podman_podman_precheck.md.BVLG5yoH.js +++ b/assets/guide_podman_podman_precheck.md.lwJB6a8k.js @@ -1 +1 @@ -import{_ as a,c as e,o as d,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_precheck.md","filePath":"guide/podman/podman_precheck.md","lastUpdated":1773143516000}'),l={name:"guide/podman/podman_precheck.md"};function i(o,t,n,c,s,p){return d(),e("div",null,t[0]||(t[0]=[r('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,需要宿主机本身已有公网IPV6地址,安装脚本会自动检测并配置

WARNING

Podman 方案不支持 KVM/QEMU 虚拟机,仅支持 Linux 容器(LXC),适用于无 KVM 硬件虚拟化支持的环境。

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/podman

项目特点

基于 Podman(daemonless 架构)运行时,通过批量或单独开设 NAT 服务器

  • 使用各发行版官方软件包安装 Podman(无守护进程,daemonless 架构)
  • 使用本仓库自编译的基础镜像(存储在 GitHub Releases),优先离线加载,无法获取时回退到 ghcr.io 镜像
  • 每个容器自带 1 个外网 SSH 端口,25 个内外网一致端口,可选择是否绑定独立 IPV6 地址
  • 支持 lxcfs 挂载(若宿主机安装了 lxcfs),提供容器内真实 /proc 视图
  • 原生支持 rootless(本方案使用 root 运行以简化网络配置)
  • 支持国内 CDN 镜像加速

支持的系统

系统amd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

配置要求

  • 宿主机系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 架构:x86_64(amd64)或 ARM64
  • 内核需支持 overlay 文件系统
  • 网络能连接 Github 的 raw 界面即可
  • 空闲硬盘有 3G 以上即可
  • 不需要 KVM 硬件支持
',12)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; +import{_ as a,c as e,o as d,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_precheck.md","filePath":"guide/podman/podman_precheck.md","lastUpdated":1773196139000}'),l={name:"guide/podman/podman_precheck.md"};function i(o,t,n,c,s,p){return d(),e("div",null,t[0]||(t[0]=[r('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址,需要宿主机本身已有公网IPV6地址,安装脚本会自动检测并配置

WARNING

Podman 方案不支持 KVM/QEMU 虚拟机,仅支持 Linux 容器(LXC),适用于无 KVM 硬件虚拟化支持的环境。

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/podman

项目特点

基于 Podman(daemonless 架构)运行时,通过批量或单独开设 NAT 服务器

  • 使用各发行版官方软件包安装 Podman(无守护进程,daemonless 架构)
  • 使用本仓库自编译的基础镜像(存储在 GitHub Releases),优先离线加载,无法获取时回退到 ghcr.io 镜像
  • 每个容器自带 1 个外网 SSH 端口,25 个内外网一致端口,可选择是否绑定独立 IPV6 地址
  • 支持 lxcfs 挂载(若宿主机安装了 lxcfs),提供容器内真实 /proc 视图
  • 原生支持 rootless(本方案使用 root 运行以简化网络配置)
  • 支持国内 CDN 镜像加速

支持的系统

系统amd64arm64
Ubuntu 22.04
Debian 12
Alpine latest
AlmaLinux 9
RockyLinux 9
OpenEuler 22.03

配置要求

  • 宿主机系统:Ubuntu、Debian、RockyLinux 9+、AlmaLinux 9+、CentOS 9+、Alpine、Arch
  • 架构:x86_64(amd64)或 ARM64
  • 内核需支持 overlay 文件系统
  • 网络能连接 Github 的 raw 界面即可
  • 空闲硬盘有 3G 以上即可
  • 不需要 KVM 硬件支持
',12)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/guide_podman_podman_precheck.md.BVLG5yoH.lean.js b/assets/guide_podman_podman_precheck.md.lwJB6a8k.lean.js similarity index 86% rename from assets/guide_podman_podman_precheck.md.BVLG5yoH.lean.js rename to assets/guide_podman_podman_precheck.md.lwJB6a8k.lean.js index bb1bf19721..da1eb7eb94 100644 --- a/assets/guide_podman_podman_precheck.md.BVLG5yoH.lean.js +++ b/assets/guide_podman_podman_precheck.md.lwJB6a8k.lean.js @@ -1 +1 @@ -import{_ as a,c as e,o as d,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_precheck.md","filePath":"guide/podman/podman_precheck.md","lastUpdated":1773143516000}'),l={name:"guide/podman/podman_precheck.md"};function i(o,t,n,c,s,p){return d(),e("div",null,t[0]||(t[0]=[r("",12)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; +import{_ as a,c as e,o as d,ag as r}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_precheck.md","filePath":"guide/podman/podman_precheck.md","lastUpdated":1773196139000}'),l={name:"guide/podman/podman_precheck.md"};function i(o,t,n,c,s,p){return d(),e("div",null,t[0]||(t[0]=[r("",12)]))}const m=a(l,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/guide_podman_podman_qa.md.BEnef7c3.js b/assets/guide_podman_podman_qa.md.BeGT7Y2H.js similarity index 99% rename from assets/guide_podman_podman_qa.md.BEnef7c3.js rename to assets/guide_podman_podman_qa.md.BeGT7Y2H.js index 35916fcdec..f24bba925c 100644 --- a/assets/guide_podman_podman_qa.md.BEnef7c3.js +++ b/assets/guide_podman_podman_qa.md.BeGT7Y2H.js @@ -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":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_qa.md","filePath":"guide/podman/podman_qa.md","lastUpdated":1773143516000}'),t={name:"guide/podman/podman_qa.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

常见问题答疑

podman: command not found

Podman 环境未正确安装,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

容器无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.21

如果没有,手动添加:

shell
iptables -t nat -A POSTROUTING -s 172.21.0.0/16 ! -d 172.21.0.0/16 -j MASQUERADE
+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"},"headers":[],"relativePath":"guide/podman/podman_qa.md","filePath":"guide/podman/podman_qa.md","lastUpdated":1773196139000}'),t={name:"guide/podman/podman_qa.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e(`

常见问题答疑

podman: command not found

Podman 环境未正确安装,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

容器无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep 172.21

如果没有,手动添加:

shell
iptables -t nat -A POSTROUTING -s 172.21.0.0/16 ! -d 172.21.0.0/16 -j MASQUERADE
 iptables -A FORWARD -s 172.21.0.0/16 -j ACCEPT
 iptables -A FORWARD -d 172.21.0.0/16 -j ACCEPT

容器 IPv6 未生效

  1. 确认宿主机有公网 IPv6 地址
  2. 检查 podman-ipv6 网络是否存在:
shell
podman network ls | grep ipv6
  1. 检查 ndpresponder 容器是否运行:
shell
podman ps | grep ndpresponder

Podman 与 Docker 命令对比

功能Docker 命令Podman 命令
查看容器docker ps -apodman ps -a
进入容器docker exec -itpodman exec -it
删除容器docker rm -fpodman rm -f
查看镜像docker imagespodman images
删除镜像docker rmipodman rmi
查看日志docker logspodman logs

镜像拉取失败

优先通过 GitHub Releases 下载离线 tar 包,无法访问时回退到 ghcr.io:

shell
ghcr.io/oneclickvirt/podman:<os>-amd64
 ghcr.io/oneclickvirt/podman:<os>-arm64
diff --git a/assets/guide_podman_podman_qa.md.BEnef7c3.lean.js b/assets/guide_podman_podman_qa.md.BeGT7Y2H.lean.js
similarity index 86%
rename from assets/guide_podman_podman_qa.md.BEnef7c3.lean.js
rename to assets/guide_podman_podman_qa.md.BeGT7Y2H.lean.js
index f5b0ead518..e959bee9eb 100644
--- a/assets/guide_podman_podman_qa.md.BEnef7c3.lean.js
+++ b/assets/guide_podman_podman_qa.md.BeGT7Y2H.lean.js
@@ -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"},"headers":[],"relativePath":"guide/podman/podman_qa.md","filePath":"guide/podman/podman_qa.md","lastUpdated":1773143516000}'),t={name:"guide/podman/podman_qa.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",43)]))}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.QPV3Ar9-.js";const c=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/podman/podman_qa.md","filePath":"guide/podman/podman_qa.md","lastUpdated":1773196139000}'),t={name:"guide/podman/podman_qa.md"};function l(p,s,h,d,r,k){return n(),a("div",null,s[0]||(s[0]=[e("",43)]))}const F=i(t,[["render",l]]);export{c as __pageData,F as default};
diff --git a/assets/guide_podman_podman_thanks.md.B-gbTOst.js b/assets/guide_podman_podman_thanks.md.iL9FxamW.js
similarity index 96%
rename from assets/guide_podman_podman_thanks.md.B-gbTOst.js
rename to assets/guide_podman_podman_thanks.md.iL9FxamW.js
index 80d3e952dd..e3f70bd1de 100644
--- a/assets/guide_podman_podman_thanks.md.B-gbTOst.js
+++ b/assets/guide_podman_podman_thanks.md.iL9FxamW.js
@@ -1 +1 @@
-import{_ as e,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/podman/podman_thanks.md","filePath":"guide/podman/podman_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/podman/podman_thanks.md"};function s(p,t,i,h,c,l){return a(),r("div",null,t[0]||(t[0]=[n('

致谢

https://github.com/containers/podman

https://github.com/containers/buildah

https://github.com/containers/netavark

https://github.com/containers/crun

https://github.com/opencontainers/runc

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/

',10)]))}const b=e(o,[["render",s]]);export{d as __pageData,b as default}; +import{_ as e,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/podman/podman_thanks.md","filePath":"guide/podman/podman_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/podman/podman_thanks.md"};function s(p,t,i,h,c,l){return a(),r("div",null,t[0]||(t[0]=[n('

致谢

https://github.com/containers/podman

https://github.com/containers/buildah

https://github.com/containers/netavark

https://github.com/containers/crun

https://github.com/opencontainers/runc

https://github.com/yoursunny/ndpresponder

https://github.com/lxc/lxcfs

https://github.com/SuperManito/LinuxMirrors

https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/

',10)]))}const b=e(o,[["render",s]]);export{d as __pageData,b as default}; diff --git a/assets/guide_podman_podman_thanks.md.B-gbTOst.lean.js b/assets/guide_podman_podman_thanks.md.iL9FxamW.lean.js similarity index 85% rename from assets/guide_podman_podman_thanks.md.B-gbTOst.lean.js rename to assets/guide_podman_podman_thanks.md.iL9FxamW.lean.js index 19345af52e..1fc0eab7ef 100644 --- a/assets/guide_podman_podman_thanks.md.B-gbTOst.lean.js +++ b/assets/guide_podman_podman_thanks.md.iL9FxamW.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/podman/podman_thanks.md","filePath":"guide/podman/podman_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/podman/podman_thanks.md"};function s(p,t,i,h,c,l){return a(),r("div",null,t[0]||(t[0]=[n("",10)]))}const b=e(o,[["render",s]]);export{d as __pageData,b as default}; +import{_ as e,c as r,o as a,ag as n}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/podman/podman_thanks.md","filePath":"guide/podman/podman_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/podman/podman_thanks.md"};function s(p,t,i,h,c,l){return a(),r("div",null,t[0]||(t[0]=[n("",10)]))}const b=e(o,[["render",s]]);export{d as __pageData,b as default}; diff --git a/assets/guide_pve_images_readme.md.Dj3OB9Mq.lean.js b/assets/guide_pve_images_readme.md.dgTV2Ek6.js similarity index 72% rename from assets/guide_pve_images_readme.md.Dj3OB9Mq.lean.js rename to assets/guide_pve_images_readme.md.dgTV2Ek6.js index 3fcafc4194..0e1e1b755f 100644 --- a/assets/guide_pve_images_readme.md.Dj3OB9Mq.lean.js +++ b/assets/guide_pve_images_readme.md.dgTV2Ek6.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/images/readme.md","filePath":"guide/pve/images/readme.md","lastUpdated":1773143516000}'),d={name:"guide/pve/images/readme.md"};function o(n,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",o]]);export{u as __pageData,_ as default}; +import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/images/readme.md","filePath":"guide/pve/images/readme.md","lastUpdated":1773196139000}'),d={name:"guide/pve/images/readme.md"};function o(n,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",o]]);export{u as __pageData,_ as default}; diff --git a/assets/guide_pve_images_readme.md.Dj3OB9Mq.js b/assets/guide_pve_images_readme.md.dgTV2Ek6.lean.js similarity index 72% rename from assets/guide_pve_images_readme.md.Dj3OB9Mq.js rename to assets/guide_pve_images_readme.md.dgTV2Ek6.lean.js index 3fcafc4194..0e1e1b755f 100644 --- a/assets/guide_pve_images_readme.md.Dj3OB9Mq.js +++ b/assets/guide_pve_images_readme.md.dgTV2Ek6.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/images/readme.md","filePath":"guide/pve/images/readme.md","lastUpdated":1773143516000}'),d={name:"guide/pve/images/readme.md"};function o(n,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",o]]);export{u as __pageData,_ as default}; +import{_ as a,c as t,o as r,j as s}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/images/readme.md","filePath":"guide/pve/images/readme.md","lastUpdated":1773196139000}'),d={name:"guide/pve/images/readme.md"};function o(n,e,i,m,p,c){return r(),t("div",null,e[0]||(e[0]=[s("p",null,"暂存图片",-1)]))}const _=a(d,[["render",o]]);export{u as __pageData,_ as default}; diff --git a/assets/guide_pve_pve_android.md.CD1jfhZE.js b/assets/guide_pve_pve_android.md.C-edHnyl.js similarity index 99% rename from assets/guide_pve_pve_android.md.CD1jfhZE.js rename to assets/guide_pve_pve_android.md.C-edHnyl.js index 4656f25a99..6e9971832c 100644 --- a/assets/guide_pve_pve_android.md.CD1jfhZE.js +++ b/assets/guide_pve_pve_android.md.C-edHnyl.js @@ -1 +1 @@ -import{_ as a,c as o,o as p,ag as e}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/a1.DvgNELwZ.png",c="/assets/a2.BQniQEw_.png",i="/assets/a3.DHUpjnAe.png",d="/assets/a4.BtVJtyBL.png",r="/assets/a5.CamDlEuL.png",n="/assets/a6.auUigeOH.png",l="/assets/a7.3_Is3HF1.png",g="/assets/a8.CkyIulFy.png",m="/assets/a9.Dg58RrTs.png",_="/assets/a10.CPK2ZJEJ.png",h="/assets/a11.Bq6vmveu.png",b="/assets/a12.bStrZLWw.png",y="/assets/a13.DRz8WTJR.png",z="/assets/a14.D56M6gMb.png",u="/assets/a15.CtjmUhal.png",f="/assets/a16.BL0_sgNg.png",x="/assets/a17.B9keXK9k.png",k="/assets/a18.Bu92JFv5.png",B="/assets/a19.DZjr60Xs.png",C="/assets/a20.CesdkIR_.png",I="/assets/a21.BO8sy8n4.png",O="/assets/a22.COjD9r-B.png",P="/assets/a23.BxEEAckp.png",F="/assets/a24.BrCKYLHX.png",q="/assets/a25.CUB6zoiS.png",v="/assets/a26.zvaFRs59.png",D="/assets/ar.Dy_5EjFU.png",A="/assets/a27.QkS9Cjl7.png",w="/assets/a31.BiCzGFMR.png",G="/assets/a32.54sdf1AZ.png",K="/assets/a33.QYBAXO71.png",V="/assets/a34.BBqAz_kr.png",U="/assets/a35.B8NF_iJX.png",E="/assets/a36.CPvsggxV.png",S="/assets/a37.DJRI7pv9.png",j="/assets/a38.BhfuTk-3.png",N="/assets/a39.BNtfZ4xd.png",R="/assets/a40.DTfyEQe2.png",T="/assets/a41.Cb6MjiUm.png",L="/assets/a42.Du63tHI8.png",M="/assets/a43.Cxy9Fqxr.png",H="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Q="/assets/b2.BnvPQMj3.png",X="/assets/b3.DPn2dzFl.png",Z="/assets/b4.JBQupWN9.png",Y="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ss="/assets/b7.5Fkbt05C.png",as="/assets/b8.BXlK1Dnb.png",os="/assets/b9.CaK5eLKm.png",ps="/assets/b10.DGHfd73s.png",es="/assets/b11.DKZjwgY8.png",ts="/assets/b12.BISDj2Ri.png",cs="/assets/b13.WGr5jMeK.png",is="/assets/b14.BqBpvoFk.png",ds="/assets/b15.Cd3Rj7ju.png",rs="/assets/b16.BR7AHi1X.png",ns="/assets/b17.Cn1C4e1e.png",ls="/assets/b18.ElAa2UCQ.png",gs="/assets/b19.BwC-oHOW.png",ms="/assets/b20.Dj-0rOwy.png",_s="/assets/b21.CYRPkSXE.png",hs="/assets/b22.BH7kRZ3Z.png",bs="/assets/b23.JVX-KOL7.png",ys="/assets/b24.a2fv8lkf.png",zs="/assets/b25.BJrNgkiA.png",us="/assets/b26.5bTO5HK5.png",fs="/assets/b27.BSRz6moE.png",xs="/assets/b28.WNjJaEPB.png",ks="/assets/b29.Bs69Ykqp.png",Bs="/assets/b30.B96bh_Ou.png",Cs="/assets/b31.BBIAIScF.png",Is="/assets/b32.8G5Xy9mr.png",Os="/assets/b33.RYxcR7vu.png",Ps="/assets/b34.Dw6MyLex.png",Fs="/assets/b35.DUCPsVIG.png",qs="/assets/b36.7aKaNaLh.png",vs="/assets/b37.B5CHAJzN.png",Ds="/assets/br.CyzpZwsx.png",As="/assets/b38.Pnnij22W.png",ws="/assets/b39.ajiHDdbx.png",Gs="/assets/b40.B6FTkFUT.png",Ks="/assets/b41.DcCdod5l.png",Vs="/assets/b42.CT1JvTLX.png",Us="/assets/b43.HthhPs5o.png",Es="/assets/b44.C9NeP-UC.png",Ss="/assets/b45.BWxBBH-l.png",js="/assets/b46.B6Ds58im.png",Qs=JSON.parse('{"title":"Android 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_android.md","filePath":"guide/pve/pve_android.md","lastUpdated":1773143516000}'),Ns={name:"guide/pve/pve_android.md"};function Rs(Ts,s,Ls,Ms,Hs,Js){return p(),o("div",null,s[0]||(s[0]=[e('

Android 虚拟机

安卓系统镜像下载

Android系统版本9及以前的镜像下载地址:

国际

https://www.fosshub.com/Android-x86.html

https://sourceforge.net/projects/android-x86/files/

国内

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/

Android系统版本10及以后的新镜像下载地址:

https://blissos.org/index.html#download

https://sourceforge.net/projects/blissos-x86/files/Official/

虚拟机开设

以安卓版本9及以前的镜像开设Android虚拟机

本指南以

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/71931/android-x86_64-9.0-rc2.iso

作为示例进行演示

1

模板设置

开设VMID为100的虚拟机选择对应的存储盘

2

选择安卓镜像,然后Type选择LinuxVersion选择含2.6版本的选项

3

Graphic card选择Vmware compatible,其他选项选择默认如图所示

4

磁盘格式选择SATA,具体需要分配多大的磁盘自选,推荐至少30G

5

CPU数量至少2核

如果你的宿主机支持嵌套虚拟化,CPU的类型请选择host(经验证无问题)

如果你的宿主机不支持嵌套虚拟化,CPU的类型请选择qemu64,同时在模板设置成功后,需要在Options中点击KVM hardware virtualization取消勾选后再启动虚拟机(不保证后面系统初始化无问题)

6

内存至少4G内存,填写至少4096

7

绑定的网桥选择vmbr1Model选择VirtIO (paravirtualized),取消Firewall的勾选

8

后续点击continue按钮后,模板成功创建出来,需要手动点击启动并进入VNC界面

9

系统安装

进入引导后,选择Installation开头的选项

10

然后需要创建分区写入,这块如果选择不了的话按键盘按钮c,就能选中了

11

选择不使用GPT格式

12

显示空白盘后,选择New

13

选择分区类型Primary

14

然后会提示划分多大的空间,默认回车就行,使用全部的空间

15

然后是选择Flags,移动到Bootable后,按回车,直到Flags下方显示Boot

16

然后移动到Write,回车,进行写入

17

这时候会让你确认是否继续,输入yes后回车继续

18

一段进度条跑过后,回到了最初的菜单,选择Quit退出菜单,一切准备就绪了

19

然后这时候回到了UI界面,使用前面初始化好的盘,选择OK按钮回车

20

文件系统按方向键选择ext4类型,选择OK按钮回车

21

确认进行格式化,选择Yes按钮回车

22

确认GRUB引导安装,选择OK按钮回车

23

确认文件系统可读写,选择OK按钮回车

24

跑了一段时间进度条后,显示安装成功,此时选择Reboot,选择OK按钮回车

25

然后一段时间后进入安卓LOGO界面

26

镜像移除

然后会进入一段黑屏,大概3~5分钟后仍然黑屏的话,宿主机执行qm stop 100,然后开始移除镜像文件

移除已经按照完毕的ISO文件,在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]

ar

然后宿主机再执行qm start 100,然后应该就会进入安卓系统的初始化界面了

系统初始化

初始化界面选择语言,然后点击确定按钮

27

此时回尝试连接WIFI,由于本项目安装的PVE是完全的静态网络配置,直接跳过,稍后再进行设置

31

点击下一步按钮确认设置时间

32

点击取消屏幕保护,确认仍然跳过

33

然后一段时间黑屏后,会出现主屏幕应用的选择,如果等待3~5分钟这个界面仍然没有出现,那么像之前那样重启虚拟机,再进入VNC应该就会显示了

选择Quickstep

34

网络设置

进入桌面,此时需要开始设置网络,左上角点击设置图标

35

出现下拉框,点击按住下拉

36

点击齿轮按钮

37

进入网络和互联网设置

38

左键双击WIFI

39

修改目前识别到的VirtWIFI,右键点击出现选择框后,点击修改网络

40

出现高级选项,点击打开隐藏的选项

41

如图进行对应的网络设置

IP地址 172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

子网掩码 24

默认网关 172.16.1.1

DNS 8.8.8.8144.144.144.144

然后点击保存按钮

42

此时出来后可能仍然未应用设置,点击关闭WIFI后,再启用WIFI,应该就会显示已连接

43

然后退出到主界面,点击谷歌浏览器,尝试打开一个网页

44

可以看到打开本指南的网址无问题,证明网络已联通

45

以安卓版本10及以后的新镜像开设Android虚拟机

本指南以

https://psychz.dl.sourceforge.net/project/blissos-x86/Official/BlissOS15/Gapps/Generic/Bliss-v15.9.2-x86_64-OFFICIAL-gapps-20241012.iso?viasf=1

作为示例进行演示

1

模板设置

宿主机需要先执行以下命令安装图形环境依赖

shell
apt install libgl1 libegl1 -y

然后开始创建虚拟机,点击右上角的Create VM按钮,填写VMIDNameResource Pool

2

选择安卓镜像,然后Type选择LinuxVersion选择含2.6版本的选项

3

如果宿主机本身携带有GPU,那么Graphic card选择VirGL GPU

如果宿主机本身不携带GPU,那么Graphic card选择VirtIOVmware compatible

Machine选择q35BIOS选择OVMF (UEFI)启动,EFI Storage选择local

4

磁盘格式选择SATA,具体需要分配多大的磁盘自选,推荐至少30G

5

CPU数量至少2核

如果你的宿主机支持嵌套虚拟化,CPU的类型请选择host(经验证无问题)

如果你的宿主机不支持嵌套虚拟化,CPU的类型请选择qemu64,同时在模板设置成功后,需要在Options中点击KVM hardware virtualization取消勾选后再启动虚拟机(不保证后面系统初始化无问题)

6

内存至少4G内存,填写至少4096

7

绑定的网桥选择vmbr1Model选择VirtIO (paravirtualized),取消Firewall的勾选

8

后续点击continue按钮后,模板成功创建出来,需要手动点击启动并进入VNC界面。

系统安装

进入引导后,选择Installation结尾的选项

9

然后需要创建分区写入,这块如果选择不了的话按键盘按钮c,就能选中了。

10

选择不使用GPT格式,依然使用cfdisk格式。

11

显示格式选择框,选择gpt

12

显示空白盘后,选择New

13

因为要划分EFI分区,这个盘需要修改大小,不能使用默认大小,数字改成1就行,分配1G硬盘,然后按回车。

14

然后回到了菜单栏,按方向键选择Type,然后回车,给分区选择格式类型

15

按方向键选择第一个选项EFI System,然后回车

16

此时回到菜单栏,页面上半部分就能看到具体的分区大小和格式

17

然后按下方向键,选择下一行空白的分区

18

菜单栏选择New,然后回车

19

这块需要填写分区大小,此时对照右上角选中的空白分区大小一致即可,然后回车。

20

回到菜单栏,选择Write,回车,写入分区。

21

会提示你输入yes进行确认,输入后回车。

22

然后一段进度条跑过,应该会回到菜单栏,选择Quit退出菜单,一切准备就绪了

23

然后这时候回到了UI界面,使用前面初始化好的1GB大小的盘,选择OK按钮回车。

24

文件系统按方向键选择fat32类型,选择OK按钮回车

25

确认不修改名字,选择OK按钮回车

26

确认进行格式化,选择Yes按钮回车

27

然后回到最初的UI栏,选择第二块不是1GB大小的分区,选择OK按钮回车

28

文件系统按方向键选择ext4类型,选择OK按钮回车

29

确认不修改名字,选择OK按钮回车

30

确认进行格式化,选择Yes按钮回车

31

默认不使用额外空间更新,选择No按钮回车

32

确认GRUB2 EFI BootLoader,选择OK按钮回车

33

跑了一段时间进度条后,显示安装成功,此时选择Reboot,选择OK按钮回车。

34

系统初始化

然后一段时间后进入LOGO界面。

35

再过一段时间,应该就会进入初始的安卓界面了,能看到弹窗和时间,按住左键上划

36

会出现主屏幕应用的选择,选择Quickstep

如果等待3~5分钟这个界面仍然没有出现,那么就重启虚拟机,再进入VNC应该就会显示了

37

镜像移除

出现了安卓的界面后,宿主机执行qm stop 100,然后开始移除镜像文件。

移除已经按照完毕的ISO文件,在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]

br

然后宿主机再执行qm start 100,然后应该就会进入系统的初始界面了。

网络设置

进入桌面,此时需要开始设置网络,图示位置按住左键,上划

38

弹出一堆应用,在里面找到那个叫做Bliss Ethernet Manager的应用,点击并打开

39

IP Assignment点击打开,选择Static类型,点击OK按钮确认

40

IP Address点击打开,填入172.16.1.xxx/24(xxx我写的100,因为这里我的虚拟机VMID是100方便区分),点击OK按钮确认

41

Gateway Address点击打开,填入172.16.1.1,点击OK按钮确认

42

DNS Address点击打开,填入8.8.8.8,点击OK按钮确认

43

然后在应用界面中,点击Interface UpRefresh,然后键盘按exit键退出程序

44

主界面中打开浏览器,验证网络是否畅通

45

可以看到打开本指南无问题,网络畅通

46

',228)]))}const Xs=a(Ns,[["render",Rs]]);export{Qs as __pageData,Xs as default}; +import{_ as a,c as o,o as p,ag as e}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/a1.DvgNELwZ.png",c="/assets/a2.BQniQEw_.png",i="/assets/a3.DHUpjnAe.png",d="/assets/a4.BtVJtyBL.png",r="/assets/a5.CamDlEuL.png",n="/assets/a6.auUigeOH.png",l="/assets/a7.3_Is3HF1.png",g="/assets/a8.CkyIulFy.png",m="/assets/a9.Dg58RrTs.png",_="/assets/a10.CPK2ZJEJ.png",h="/assets/a11.Bq6vmveu.png",b="/assets/a12.bStrZLWw.png",y="/assets/a13.DRz8WTJR.png",z="/assets/a14.D56M6gMb.png",u="/assets/a15.CtjmUhal.png",f="/assets/a16.BL0_sgNg.png",x="/assets/a17.B9keXK9k.png",k="/assets/a18.Bu92JFv5.png",B="/assets/a19.DZjr60Xs.png",C="/assets/a20.CesdkIR_.png",I="/assets/a21.BO8sy8n4.png",O="/assets/a22.COjD9r-B.png",P="/assets/a23.BxEEAckp.png",F="/assets/a24.BrCKYLHX.png",q="/assets/a25.CUB6zoiS.png",v="/assets/a26.zvaFRs59.png",D="/assets/ar.Dy_5EjFU.png",A="/assets/a27.QkS9Cjl7.png",w="/assets/a31.BiCzGFMR.png",G="/assets/a32.54sdf1AZ.png",K="/assets/a33.QYBAXO71.png",V="/assets/a34.BBqAz_kr.png",U="/assets/a35.B8NF_iJX.png",E="/assets/a36.CPvsggxV.png",S="/assets/a37.DJRI7pv9.png",j="/assets/a38.BhfuTk-3.png",N="/assets/a39.BNtfZ4xd.png",R="/assets/a40.DTfyEQe2.png",T="/assets/a41.Cb6MjiUm.png",L="/assets/a42.Du63tHI8.png",M="/assets/a43.Cxy9Fqxr.png",H="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Q="/assets/b2.BnvPQMj3.png",X="/assets/b3.DPn2dzFl.png",Z="/assets/b4.JBQupWN9.png",Y="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ss="/assets/b7.5Fkbt05C.png",as="/assets/b8.BXlK1Dnb.png",os="/assets/b9.CaK5eLKm.png",ps="/assets/b10.DGHfd73s.png",es="/assets/b11.DKZjwgY8.png",ts="/assets/b12.BISDj2Ri.png",cs="/assets/b13.WGr5jMeK.png",is="/assets/b14.BqBpvoFk.png",ds="/assets/b15.Cd3Rj7ju.png",rs="/assets/b16.BR7AHi1X.png",ns="/assets/b17.Cn1C4e1e.png",ls="/assets/b18.ElAa2UCQ.png",gs="/assets/b19.BwC-oHOW.png",ms="/assets/b20.Dj-0rOwy.png",_s="/assets/b21.CYRPkSXE.png",hs="/assets/b22.BH7kRZ3Z.png",bs="/assets/b23.JVX-KOL7.png",ys="/assets/b24.a2fv8lkf.png",zs="/assets/b25.BJrNgkiA.png",us="/assets/b26.5bTO5HK5.png",fs="/assets/b27.BSRz6moE.png",xs="/assets/b28.WNjJaEPB.png",ks="/assets/b29.Bs69Ykqp.png",Bs="/assets/b30.B96bh_Ou.png",Cs="/assets/b31.BBIAIScF.png",Is="/assets/b32.8G5Xy9mr.png",Os="/assets/b33.RYxcR7vu.png",Ps="/assets/b34.Dw6MyLex.png",Fs="/assets/b35.DUCPsVIG.png",qs="/assets/b36.7aKaNaLh.png",vs="/assets/b37.B5CHAJzN.png",Ds="/assets/br.CyzpZwsx.png",As="/assets/b38.Pnnij22W.png",ws="/assets/b39.ajiHDdbx.png",Gs="/assets/b40.B6FTkFUT.png",Ks="/assets/b41.DcCdod5l.png",Vs="/assets/b42.CT1JvTLX.png",Us="/assets/b43.HthhPs5o.png",Es="/assets/b44.C9NeP-UC.png",Ss="/assets/b45.BWxBBH-l.png",js="/assets/b46.B6Ds58im.png",Qs=JSON.parse('{"title":"Android 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_android.md","filePath":"guide/pve/pve_android.md","lastUpdated":1773196139000}'),Ns={name:"guide/pve/pve_android.md"};function Rs(Ts,s,Ls,Ms,Hs,Js){return p(),o("div",null,s[0]||(s[0]=[e('

Android 虚拟机

安卓系统镜像下载

Android系统版本9及以前的镜像下载地址:

国际

https://www.fosshub.com/Android-x86.html

https://sourceforge.net/projects/android-x86/files/

国内

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/

Android系统版本10及以后的新镜像下载地址:

https://blissos.org/index.html#download

https://sourceforge.net/projects/blissos-x86/files/Official/

虚拟机开设

以安卓版本9及以前的镜像开设Android虚拟机

本指南以

https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/71931/android-x86_64-9.0-rc2.iso

作为示例进行演示

1

模板设置

开设VMID为100的虚拟机选择对应的存储盘

2

选择安卓镜像,然后Type选择LinuxVersion选择含2.6版本的选项

3

Graphic card选择Vmware compatible,其他选项选择默认如图所示

4

磁盘格式选择SATA,具体需要分配多大的磁盘自选,推荐至少30G

5

CPU数量至少2核

如果你的宿主机支持嵌套虚拟化,CPU的类型请选择host(经验证无问题)

如果你的宿主机不支持嵌套虚拟化,CPU的类型请选择qemu64,同时在模板设置成功后,需要在Options中点击KVM hardware virtualization取消勾选后再启动虚拟机(不保证后面系统初始化无问题)

6

内存至少4G内存,填写至少4096

7

绑定的网桥选择vmbr1Model选择VirtIO (paravirtualized),取消Firewall的勾选

8

后续点击continue按钮后,模板成功创建出来,需要手动点击启动并进入VNC界面

9

系统安装

进入引导后,选择Installation开头的选项

10

然后需要创建分区写入,这块如果选择不了的话按键盘按钮c,就能选中了

11

选择不使用GPT格式

12

显示空白盘后,选择New

13

选择分区类型Primary

14

然后会提示划分多大的空间,默认回车就行,使用全部的空间

15

然后是选择Flags,移动到Bootable后,按回车,直到Flags下方显示Boot

16

然后移动到Write,回车,进行写入

17

这时候会让你确认是否继续,输入yes后回车继续

18

一段进度条跑过后,回到了最初的菜单,选择Quit退出菜单,一切准备就绪了

19

然后这时候回到了UI界面,使用前面初始化好的盘,选择OK按钮回车

20

文件系统按方向键选择ext4类型,选择OK按钮回车

21

确认进行格式化,选择Yes按钮回车

22

确认GRUB引导安装,选择OK按钮回车

23

确认文件系统可读写,选择OK按钮回车

24

跑了一段时间进度条后,显示安装成功,此时选择Reboot,选择OK按钮回车

25

然后一段时间后进入安卓LOGO界面

26

镜像移除

然后会进入一段黑屏,大概3~5分钟后仍然黑屏的话,宿主机执行qm stop 100,然后开始移除镜像文件

移除已经按照完毕的ISO文件,在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]

ar

然后宿主机再执行qm start 100,然后应该就会进入安卓系统的初始化界面了

系统初始化

初始化界面选择语言,然后点击确定按钮

27

此时回尝试连接WIFI,由于本项目安装的PVE是完全的静态网络配置,直接跳过,稍后再进行设置

31

点击下一步按钮确认设置时间

32

点击取消屏幕保护,确认仍然跳过

33

然后一段时间黑屏后,会出现主屏幕应用的选择,如果等待3~5分钟这个界面仍然没有出现,那么像之前那样重启虚拟机,再进入VNC应该就会显示了

选择Quickstep

34

网络设置

进入桌面,此时需要开始设置网络,左上角点击设置图标

35

出现下拉框,点击按住下拉

36

点击齿轮按钮

37

进入网络和互联网设置

38

左键双击WIFI

39

修改目前识别到的VirtWIFI,右键点击出现选择框后,点击修改网络

40

出现高级选项,点击打开隐藏的选项

41

如图进行对应的网络设置

IP地址 172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

子网掩码 24

默认网关 172.16.1.1

DNS 8.8.8.8144.144.144.144

然后点击保存按钮

42

此时出来后可能仍然未应用设置,点击关闭WIFI后,再启用WIFI,应该就会显示已连接

43

然后退出到主界面,点击谷歌浏览器,尝试打开一个网页

44

可以看到打开本指南的网址无问题,证明网络已联通

45

以安卓版本10及以后的新镜像开设Android虚拟机

本指南以

https://psychz.dl.sourceforge.net/project/blissos-x86/Official/BlissOS15/Gapps/Generic/Bliss-v15.9.2-x86_64-OFFICIAL-gapps-20241012.iso?viasf=1

作为示例进行演示

1

模板设置

宿主机需要先执行以下命令安装图形环境依赖

shell
apt install libgl1 libegl1 -y

然后开始创建虚拟机,点击右上角的Create VM按钮,填写VMIDNameResource Pool

2

选择安卓镜像,然后Type选择LinuxVersion选择含2.6版本的选项

3

如果宿主机本身携带有GPU,那么Graphic card选择VirGL GPU

如果宿主机本身不携带GPU,那么Graphic card选择VirtIOVmware compatible

Machine选择q35BIOS选择OVMF (UEFI)启动,EFI Storage选择local

4

磁盘格式选择SATA,具体需要分配多大的磁盘自选,推荐至少30G

5

CPU数量至少2核

如果你的宿主机支持嵌套虚拟化,CPU的类型请选择host(经验证无问题)

如果你的宿主机不支持嵌套虚拟化,CPU的类型请选择qemu64,同时在模板设置成功后,需要在Options中点击KVM hardware virtualization取消勾选后再启动虚拟机(不保证后面系统初始化无问题)

6

内存至少4G内存,填写至少4096

7

绑定的网桥选择vmbr1Model选择VirtIO (paravirtualized),取消Firewall的勾选

8

后续点击continue按钮后,模板成功创建出来,需要手动点击启动并进入VNC界面。

系统安装

进入引导后,选择Installation结尾的选项

9

然后需要创建分区写入,这块如果选择不了的话按键盘按钮c,就能选中了。

10

选择不使用GPT格式,依然使用cfdisk格式。

11

显示格式选择框,选择gpt

12

显示空白盘后,选择New

13

因为要划分EFI分区,这个盘需要修改大小,不能使用默认大小,数字改成1就行,分配1G硬盘,然后按回车。

14

然后回到了菜单栏,按方向键选择Type,然后回车,给分区选择格式类型

15

按方向键选择第一个选项EFI System,然后回车

16

此时回到菜单栏,页面上半部分就能看到具体的分区大小和格式

17

然后按下方向键,选择下一行空白的分区

18

菜单栏选择New,然后回车

19

这块需要填写分区大小,此时对照右上角选中的空白分区大小一致即可,然后回车。

20

回到菜单栏,选择Write,回车,写入分区。

21

会提示你输入yes进行确认,输入后回车。

22

然后一段进度条跑过,应该会回到菜单栏,选择Quit退出菜单,一切准备就绪了

23

然后这时候回到了UI界面,使用前面初始化好的1GB大小的盘,选择OK按钮回车。

24

文件系统按方向键选择fat32类型,选择OK按钮回车

25

确认不修改名字,选择OK按钮回车

26

确认进行格式化,选择Yes按钮回车

27

然后回到最初的UI栏,选择第二块不是1GB大小的分区,选择OK按钮回车

28

文件系统按方向键选择ext4类型,选择OK按钮回车

29

确认不修改名字,选择OK按钮回车

30

确认进行格式化,选择Yes按钮回车

31

默认不使用额外空间更新,选择No按钮回车

32

确认GRUB2 EFI BootLoader,选择OK按钮回车

33

跑了一段时间进度条后,显示安装成功,此时选择Reboot,选择OK按钮回车。

34

系统初始化

然后一段时间后进入LOGO界面。

35

再过一段时间,应该就会进入初始的安卓界面了,能看到弹窗和时间,按住左键上划

36

会出现主屏幕应用的选择,选择Quickstep

如果等待3~5分钟这个界面仍然没有出现,那么就重启虚拟机,再进入VNC应该就会显示了

37

镜像移除

出现了安卓的界面后,宿主机执行qm stop 100,然后开始移除镜像文件。

移除已经按照完毕的ISO文件,在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]

br

然后宿主机再执行qm start 100,然后应该就会进入系统的初始界面了。

网络设置

进入桌面,此时需要开始设置网络,图示位置按住左键,上划

38

弹出一堆应用,在里面找到那个叫做Bliss Ethernet Manager的应用,点击并打开

39

IP Assignment点击打开,选择Static类型,点击OK按钮确认

40

IP Address点击打开,填入172.16.1.xxx/24(xxx我写的100,因为这里我的虚拟机VMID是100方便区分),点击OK按钮确认

41

Gateway Address点击打开,填入172.16.1.1,点击OK按钮确认

42

DNS Address点击打开,填入8.8.8.8,点击OK按钮确认

43

然后在应用界面中,点击Interface UpRefresh,然后键盘按exit键退出程序

44

主界面中打开浏览器,验证网络是否畅通

45

可以看到打开本指南无问题,网络畅通

46

',228)]))}const Xs=a(Ns,[["render",Rs]]);export{Qs as __pageData,Xs as default}; diff --git a/assets/guide_pve_pve_android.md.CD1jfhZE.lean.js b/assets/guide_pve_pve_android.md.C-edHnyl.lean.js similarity index 97% rename from assets/guide_pve_pve_android.md.CD1jfhZE.lean.js rename to assets/guide_pve_pve_android.md.C-edHnyl.lean.js index 8939ad3ad3..a12c335ad2 100644 --- a/assets/guide_pve_pve_android.md.CD1jfhZE.lean.js +++ b/assets/guide_pve_pve_android.md.C-edHnyl.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as p,ag as e}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/a1.DvgNELwZ.png",c="/assets/a2.BQniQEw_.png",i="/assets/a3.DHUpjnAe.png",d="/assets/a4.BtVJtyBL.png",r="/assets/a5.CamDlEuL.png",n="/assets/a6.auUigeOH.png",l="/assets/a7.3_Is3HF1.png",g="/assets/a8.CkyIulFy.png",m="/assets/a9.Dg58RrTs.png",_="/assets/a10.CPK2ZJEJ.png",h="/assets/a11.Bq6vmveu.png",b="/assets/a12.bStrZLWw.png",y="/assets/a13.DRz8WTJR.png",z="/assets/a14.D56M6gMb.png",u="/assets/a15.CtjmUhal.png",f="/assets/a16.BL0_sgNg.png",x="/assets/a17.B9keXK9k.png",k="/assets/a18.Bu92JFv5.png",B="/assets/a19.DZjr60Xs.png",C="/assets/a20.CesdkIR_.png",I="/assets/a21.BO8sy8n4.png",O="/assets/a22.COjD9r-B.png",P="/assets/a23.BxEEAckp.png",F="/assets/a24.BrCKYLHX.png",q="/assets/a25.CUB6zoiS.png",v="/assets/a26.zvaFRs59.png",D="/assets/ar.Dy_5EjFU.png",A="/assets/a27.QkS9Cjl7.png",w="/assets/a31.BiCzGFMR.png",G="/assets/a32.54sdf1AZ.png",K="/assets/a33.QYBAXO71.png",V="/assets/a34.BBqAz_kr.png",U="/assets/a35.B8NF_iJX.png",E="/assets/a36.CPvsggxV.png",S="/assets/a37.DJRI7pv9.png",j="/assets/a38.BhfuTk-3.png",N="/assets/a39.BNtfZ4xd.png",R="/assets/a40.DTfyEQe2.png",T="/assets/a41.Cb6MjiUm.png",L="/assets/a42.Du63tHI8.png",M="/assets/a43.Cxy9Fqxr.png",H="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Q="/assets/b2.BnvPQMj3.png",X="/assets/b3.DPn2dzFl.png",Z="/assets/b4.JBQupWN9.png",Y="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ss="/assets/b7.5Fkbt05C.png",as="/assets/b8.BXlK1Dnb.png",os="/assets/b9.CaK5eLKm.png",ps="/assets/b10.DGHfd73s.png",es="/assets/b11.DKZjwgY8.png",ts="/assets/b12.BISDj2Ri.png",cs="/assets/b13.WGr5jMeK.png",is="/assets/b14.BqBpvoFk.png",ds="/assets/b15.Cd3Rj7ju.png",rs="/assets/b16.BR7AHi1X.png",ns="/assets/b17.Cn1C4e1e.png",ls="/assets/b18.ElAa2UCQ.png",gs="/assets/b19.BwC-oHOW.png",ms="/assets/b20.Dj-0rOwy.png",_s="/assets/b21.CYRPkSXE.png",hs="/assets/b22.BH7kRZ3Z.png",bs="/assets/b23.JVX-KOL7.png",ys="/assets/b24.a2fv8lkf.png",zs="/assets/b25.BJrNgkiA.png",us="/assets/b26.5bTO5HK5.png",fs="/assets/b27.BSRz6moE.png",xs="/assets/b28.WNjJaEPB.png",ks="/assets/b29.Bs69Ykqp.png",Bs="/assets/b30.B96bh_Ou.png",Cs="/assets/b31.BBIAIScF.png",Is="/assets/b32.8G5Xy9mr.png",Os="/assets/b33.RYxcR7vu.png",Ps="/assets/b34.Dw6MyLex.png",Fs="/assets/b35.DUCPsVIG.png",qs="/assets/b36.7aKaNaLh.png",vs="/assets/b37.B5CHAJzN.png",Ds="/assets/br.CyzpZwsx.png",As="/assets/b38.Pnnij22W.png",ws="/assets/b39.ajiHDdbx.png",Gs="/assets/b40.B6FTkFUT.png",Ks="/assets/b41.DcCdod5l.png",Vs="/assets/b42.CT1JvTLX.png",Us="/assets/b43.HthhPs5o.png",Es="/assets/b44.C9NeP-UC.png",Ss="/assets/b45.BWxBBH-l.png",js="/assets/b46.B6Ds58im.png",Qs=JSON.parse('{"title":"Android 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_android.md","filePath":"guide/pve/pve_android.md","lastUpdated":1773143516000}'),Ns={name:"guide/pve/pve_android.md"};function Rs(Ts,s,Ls,Ms,Hs,Js){return p(),o("div",null,s[0]||(s[0]=[e("",228)]))}const Xs=a(Ns,[["render",Rs]]);export{Qs as __pageData,Xs as default}; +import{_ as a,c as o,o as p,ag as e}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/a1.DvgNELwZ.png",c="/assets/a2.BQniQEw_.png",i="/assets/a3.DHUpjnAe.png",d="/assets/a4.BtVJtyBL.png",r="/assets/a5.CamDlEuL.png",n="/assets/a6.auUigeOH.png",l="/assets/a7.3_Is3HF1.png",g="/assets/a8.CkyIulFy.png",m="/assets/a9.Dg58RrTs.png",_="/assets/a10.CPK2ZJEJ.png",h="/assets/a11.Bq6vmveu.png",b="/assets/a12.bStrZLWw.png",y="/assets/a13.DRz8WTJR.png",z="/assets/a14.D56M6gMb.png",u="/assets/a15.CtjmUhal.png",f="/assets/a16.BL0_sgNg.png",x="/assets/a17.B9keXK9k.png",k="/assets/a18.Bu92JFv5.png",B="/assets/a19.DZjr60Xs.png",C="/assets/a20.CesdkIR_.png",I="/assets/a21.BO8sy8n4.png",O="/assets/a22.COjD9r-B.png",P="/assets/a23.BxEEAckp.png",F="/assets/a24.BrCKYLHX.png",q="/assets/a25.CUB6zoiS.png",v="/assets/a26.zvaFRs59.png",D="/assets/ar.Dy_5EjFU.png",A="/assets/a27.QkS9Cjl7.png",w="/assets/a31.BiCzGFMR.png",G="/assets/a32.54sdf1AZ.png",K="/assets/a33.QYBAXO71.png",V="/assets/a34.BBqAz_kr.png",U="/assets/a35.B8NF_iJX.png",E="/assets/a36.CPvsggxV.png",S="/assets/a37.DJRI7pv9.png",j="/assets/a38.BhfuTk-3.png",N="/assets/a39.BNtfZ4xd.png",R="/assets/a40.DTfyEQe2.png",T="/assets/a41.Cb6MjiUm.png",L="/assets/a42.Du63tHI8.png",M="/assets/a43.Cxy9Fqxr.png",H="/assets/a44.Dhcgau_f.png",J="/assets/a45.DQgcLv5f.png",W="/assets/b1.CSqggjTM.png",Q="/assets/b2.BnvPQMj3.png",X="/assets/b3.DPn2dzFl.png",Z="/assets/b4.JBQupWN9.png",Y="/assets/b5.DeuT9J-4.png",$="/assets/b6.cZYHMwJ8.png",ss="/assets/b7.5Fkbt05C.png",as="/assets/b8.BXlK1Dnb.png",os="/assets/b9.CaK5eLKm.png",ps="/assets/b10.DGHfd73s.png",es="/assets/b11.DKZjwgY8.png",ts="/assets/b12.BISDj2Ri.png",cs="/assets/b13.WGr5jMeK.png",is="/assets/b14.BqBpvoFk.png",ds="/assets/b15.Cd3Rj7ju.png",rs="/assets/b16.BR7AHi1X.png",ns="/assets/b17.Cn1C4e1e.png",ls="/assets/b18.ElAa2UCQ.png",gs="/assets/b19.BwC-oHOW.png",ms="/assets/b20.Dj-0rOwy.png",_s="/assets/b21.CYRPkSXE.png",hs="/assets/b22.BH7kRZ3Z.png",bs="/assets/b23.JVX-KOL7.png",ys="/assets/b24.a2fv8lkf.png",zs="/assets/b25.BJrNgkiA.png",us="/assets/b26.5bTO5HK5.png",fs="/assets/b27.BSRz6moE.png",xs="/assets/b28.WNjJaEPB.png",ks="/assets/b29.Bs69Ykqp.png",Bs="/assets/b30.B96bh_Ou.png",Cs="/assets/b31.BBIAIScF.png",Is="/assets/b32.8G5Xy9mr.png",Os="/assets/b33.RYxcR7vu.png",Ps="/assets/b34.Dw6MyLex.png",Fs="/assets/b35.DUCPsVIG.png",qs="/assets/b36.7aKaNaLh.png",vs="/assets/b37.B5CHAJzN.png",Ds="/assets/br.CyzpZwsx.png",As="/assets/b38.Pnnij22W.png",ws="/assets/b39.ajiHDdbx.png",Gs="/assets/b40.B6FTkFUT.png",Ks="/assets/b41.DcCdod5l.png",Vs="/assets/b42.CT1JvTLX.png",Us="/assets/b43.HthhPs5o.png",Es="/assets/b44.C9NeP-UC.png",Ss="/assets/b45.BWxBBH-l.png",js="/assets/b46.B6Ds58im.png",Qs=JSON.parse('{"title":"Android 虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_android.md","filePath":"guide/pve/pve_android.md","lastUpdated":1773196139000}'),Ns={name:"guide/pve/pve_android.md"};function Rs(Ts,s,Ls,Ms,Hs,Js){return p(),o("div",null,s[0]||(s[0]=[e("",228)]))}const Xs=a(Ns,[["render",Rs]]);export{Qs as __pageData,Xs as default}; diff --git a/assets/guide_pve_pve_custom.md.BzHWVQ2I.js b/assets/guide_pve_pve_custom.md.BepCeh9c.js similarity index 99% rename from assets/guide_pve_pve_custom.md.BzHWVQ2I.js rename to assets/guide_pve_pve_custom.md.BepCeh9c.js index f0a15206e5..56304b675c 100644 --- a/assets/guide_pve_pve_custom.md.BzHWVQ2I.js +++ b/assets/guide_pve_pve_custom.md.BepCeh9c.js @@ -1,4 +1,4 @@ -import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"自定义分区","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_custom.md","filePath":"guide/pve/pve_custom.md","lastUpdated":1773143516000}'),p={name:"guide/pve/pve_custom.md"};function l(t,s,r,h,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

自定义分区

在非Debian系统上安装 Proxmox VE 7

本机硬件配置的最低要求同先前正常安装的要求一致

需要先安装docker

curl -sSL https://get.docker.com/ | sh
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"自定义分区","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_custom.md","filePath":"guide/pve/pve_custom.md","lastUpdated":1773196139000}'),p={name:"guide/pve/pve_custom.md"};function l(t,s,r,h,d,c){return e(),i("div",null,s[0]||(s[0]=[n(`

自定义分区

在非Debian系统上安装 Proxmox VE 7

本机硬件配置的最低要求同先前正常安装的要求一致

需要先安装docker

curl -sSL https://get.docker.com/ | sh
 curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
 chmod +x /usr/local/bin/docker-compose
 docker-compose --version

然后使用uname -m查询架构,使用对应架构的命令

开设出的PVE面板信息为:

登录用户名和密码都是root,登录后务必使用web的SSH更改密码以免被爆破

用宿主机SSH时务必登录对应https://IPV4地址:8006在web面板上使用SSH,不要使用宿主机的22端口操控PVE

因为web面板上的SSH是在Docker内的,所以不支持后续的一键配置,请自行配置网关等进行使用

X86架构

bash
docker run -idt --network host \\
diff --git a/assets/guide_pve_pve_custom.md.BzHWVQ2I.lean.js b/assets/guide_pve_pve_custom.md.BepCeh9c.lean.js
similarity index 86%
rename from assets/guide_pve_pve_custom.md.BzHWVQ2I.lean.js
rename to assets/guide_pve_pve_custom.md.BepCeh9c.lean.js
index 1d2c727515..ad2af93dec 100644
--- a/assets/guide_pve_pve_custom.md.BzHWVQ2I.lean.js
+++ b/assets/guide_pve_pve_custom.md.BepCeh9c.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"自定义分区","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_custom.md","filePath":"guide/pve/pve_custom.md","lastUpdated":1773143516000}'),p={name:"guide/pve/pve_custom.md"};function l(t,s,r,h,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",64)]))}const b=a(p,[["render",l]]);export{k as __pageData,b as default};
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"自定义分区","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_custom.md","filePath":"guide/pve/pve_custom.md","lastUpdated":1773196139000}'),p={name:"guide/pve/pve_custom.md"};function l(t,s,r,h,d,c){return e(),i("div",null,s[0]||(s[0]=[n("",64)]))}const b=a(p,[["render",l]]);export{k as __pageData,b as default};
diff --git a/assets/guide_pve_pve_install.md.B-fInh-4.js b/assets/guide_pve_pve_install.md.BT-mRFVW.js
similarity index 99%
rename from assets/guide_pve_pve_install.md.B-fInh-4.js
rename to assets/guide_pve_pve_install.md.BT-mRFVW.js
index 3243918de2..dd914ce197 100644
--- a/assets/guide_pve_pve_install.md.B-fInh-4.js
+++ b/assets/guide_pve_pve_install.md.BT-mRFVW.js
@@ -1,2 +1,2 @@
-import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"PVE主体安装","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_install.md","filePath":"guide/pve/pve_install.md","lastUpdated":1773143516000}'),l={name:"guide/pve/pve_install.md"};function p(n,s,h,r,d,c){return a(),e("div",null,s[0]||(s[0]=[t(`

PVE主体安装

安装过程中遇到选项不会选的可无脑按回车,本项目所有脚本内置国内外IP自动判断,使用的是不同的安装源与配置文件,有使用CDN加速镜像下载

TIP

低配置的宿主机,建议所有内容安装完毕后,查看自定义分区的内容,进行内存调优,减少内存占用。

在非物理机器上进行安装

本方法安装的Proxmox可后续使用本项目的所有脚本。

一键安装PVE

TIP

建议debian12+,实测部分独立服务器的debian11系统会出现一重启网络就失联的情况,debian12没有这种问题

  • 安装的是当下apt源最新的PVE
  • 比如debian10则是pve6.4,debian11则是pve7.x,debian12则是pve8.x,debian13则是pve9.x
  • /etc/hosts文件修改(修正商家hostname设置错误以及新增PVE所需的内容)
  • /etc/cloud/cloud.cfg文件修改(避免覆写已修改的hostname等配置)
  • /etc/network/interfaces文件修改(修复auto、dhcp类型为static、增加vmbr0网关)
  • 检测是否为中国IP,如果为中国IP使用清华镜像源,否则使用官方源,同时处理apt的源和对应的nameserver,避免断网
  • 创建vmbr0(独立IP网关),宿主机允许addr和gateway为内网IP或外网IP,已自动识别
  • vmbr0创建支持开设纯IPV4、纯IPV6、双栈虚拟机,自动识别IPV4地址和IPV6地址,自动识别对应的IP区间
  • 安装PVE开虚拟机需要的必备工具包
  • x86_64的替换apt源中的企业订阅为社区源,arm的使用第三方修复的补丁构建的源
  • 打印查询Linux系统内核和PVE内核是否已安装
  • 设置DNS检测8.8.8.8的开机自启添加DNS的systemd服务
  • 新增PVE的APT源链接后,下载PVE并打印输出登陆信息

所有修改过的文件均已设置为只读模式,避免重启后文件被覆写,如需修改请使用chattr -i 文件路径取消只读锁定,修改完毕请执行chattr +i 文件路径进行只读锁定

执行过程中会提示重启系统一次,重启后务必等待起码20秒确保系统未再次自动重启,因为原始环境可能缺失ifupdownifupdown2环境,有加载安装的守护进程进行安装,安装后会再次自动重启系统,等待20秒未自重启确保这个安装已运行完毕.

如果你需要将新安装的PVE纳管进入已有的集群,那么这块安装的时候,名字就不能回车默认使用pve,需要换一个名字避免和集群内的pve本身的hostname冲突.

若宿主机本身存在SLAAC分配的IPV6地址,将可选择是否使用最大的IPV6子网范围,默认回车不使用最大的IPV6子网范围仅使用本机IPV6,若后续需要给虚拟机/容器附加独立的IPV6地址,该选项务必选择y.

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

shell
bash install_pve.sh

TIP

安装成功后打开网页可能提示不安全,点击高级或更多选项,坚持访问即可

登录的信息是你SSH的账户和密码

预配置环境

  • 创建资源池mypool(local)
  • 移除订阅弹窗
  • 尝试开启硬件直通
  • 对AppArmor模块检测和自动安装
  • 重启系统前推荐挂上nezha探针方便在后台不通过SSH使用命令行,避免SSH可能因为商家奇葩的预设可能导致重启后root密码丢失
  • 执行reboot前需要等待后台任务执行完毕,一些宿主机的系统apt命令执行很慢,得等一会才能执行完毕,当然大部分的机器没这么烂,如果很久都起不来ssh无法连接,那么尝试通过控制面板重启一下服务器

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

自动配置宿主机的网关

WARNING

使用前请保证重启过服务器且此时PVE能正常登录进WEB端再执行,重启机器后不要立即执行此命令,待WEB端启动并可登录成功后至少等1分钟再执行本命令 如果WEB端起不来,执行systemctl status pveproxy查看是否启动,如果卡住未启动,执行systemctl start pveproxy启动WEB端。

TIP

这一步是最容易造成SSH断开的,原因是未等待PVE内核启动就修改网络会造成设置冲突,所以至少等几分钟待内核启动也就是WEB端启动成功后再执行。

TIP

在执行本命令前如果宿主机需要附加IPV6隧道(给没有IPV6地址的宿主机添加IPV6子网),请查看IPV6免费子网附加部分的内容附加到对应的配置文件中,但请忽略<初始环境修改>的操作,直接进行附加,附加后验证有IPV6地址了再执行下面的一键配置网关的命令。

  • 如果vmbr0未创建,则自动创建,逻辑同主体安装一致
  • 创建vmbr1(NAT网关),支持开设NAT的IPV6网络的NAT的IPV4的服务器
  • 创建vmbr2(独立IPV6网关),使用ndppd解决宿主机对IPV6地址进行MAC校验的问题,支持开设带独立IPV6网络的服务器
  • 想查看完整设置可以执行cat /etc/network/interfaces查看,如需修改网关需要修改该文件,web端已经无法修改
  • 加载iptables并设置回源且允许NAT端口转发

简单的说,vmbr0负责v4的独立IP,vmbr1负责复杂v4/v6的NAT,vmbr2负责v6的独立IP

开独立IPV4的虚拟机时使用的vmbr0,gateway同宿主机,IPV4/CIDR使用同一网段的地址和相同的子网掩码,使用宿主机未绑定的IPV4地址做IPV4/CIDR,当然如果后续使用本套脚本无需关注这点细枝末节的东西

开NAT的IPV4的虚拟机时使用vmbr1,gateway使用172.16.1.1,IPV4/CIDR使用172.16.1.x/24,这里的x不能是1,当然如果后续使用本套脚本无需关注这点细枝末节的东西

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

TIP

这一步是可能需要你执行成功几分钟后重启系统,详见脚本最后执行完毕的提示,但重启可以保证部分隐藏设置加载成功,有条件务必重启一次服务器

到这一步主体安装完毕。

一键卸载PVE

卸载脚本执行完毕后,重启宿主机则回归到未安装的状态下

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

在物理机器上进行安装

本方法安装的Proxmox不可后续使用本项目的所有脚本。

本方法未大规模测试和适配,仅本人在本地机器上安装了PVE8.4,路由器本身使用的不是自动获取IP地址而是固定IP地址连接的方式,如有问题对应仓库开issues.

U盘刻录官方ISO

官方ISO下载地址:

https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso

需要提前下载到本地

同时还需要一个读写速率比较好的U盘,用于制作启动盘,由于启动盘需要使用rufus进行启动盘制作,所以需要U盘格式化,需要确保U盘制作前为空U盘

rufus下载地址(下载到你的本地,不是U盘中):

https://rufus.ie/zh/

https://github.com/pbatard/rufus

刻录需要使用DD方式进行刻录,刻录完毕后U盘原数据会被完全擦除。

PVE主体安装

查找宿主机本身如何进入BIOS,进入BIOS后修改两处地方

  1. 安全启动需要关闭

  2. Boot的顺序需要将USB的顺序移动到第一位

然后保存设置,然后插入U盘,重新启动系统,选择使用图形界面进行安装

FQDN需要填写一个网址,可以填写类似 pve.spiritlhl.net 这样的网址,最好是你拥有的域名的一个子域名,不是实际的域名的话写成类似 pve.localsite.com 也行,后续不一定用得到

安装完毕后会自动关机重启,重启黑屏后可以拔掉USB,避免又从U盘重启安装了,当然如果忘了又重启到安装页面了,关闭机器后拔掉U盘再启动也行

无线网络配置

下载所需的压缩文件和shell脚本

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.zip

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.sh

下载完成后,解压压缩包,将wireless的文件夹拖入一个新的U盘的根目录,同时wireless.sh文件也得放到根目录。

U盘插到物理机器后,需要挂载U盘,这里的sdx1是第一条命令查询到的U盘的实际路径,需要自行修改

shell
fdisk -l
+import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"PVE主体安装","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_install.md","filePath":"guide/pve/pve_install.md","lastUpdated":1773196139000}'),l={name:"guide/pve/pve_install.md"};function p(n,s,h,r,d,c){return a(),e("div",null,s[0]||(s[0]=[t(`

PVE主体安装

安装过程中遇到选项不会选的可无脑按回车,本项目所有脚本内置国内外IP自动判断,使用的是不同的安装源与配置文件,有使用CDN加速镜像下载

TIP

低配置的宿主机,建议所有内容安装完毕后,查看自定义分区的内容,进行内存调优,减少内存占用。

在非物理机器上进行安装

本方法安装的Proxmox可后续使用本项目的所有脚本。

一键安装PVE

TIP

建议debian12+,实测部分独立服务器的debian11系统会出现一重启网络就失联的情况,debian12没有这种问题

  • 安装的是当下apt源最新的PVE
  • 比如debian10则是pve6.4,debian11则是pve7.x,debian12则是pve8.x,debian13则是pve9.x
  • /etc/hosts文件修改(修正商家hostname设置错误以及新增PVE所需的内容)
  • /etc/cloud/cloud.cfg文件修改(避免覆写已修改的hostname等配置)
  • /etc/network/interfaces文件修改(修复auto、dhcp类型为static、增加vmbr0网关)
  • 检测是否为中国IP,如果为中国IP使用清华镜像源,否则使用官方源,同时处理apt的源和对应的nameserver,避免断网
  • 创建vmbr0(独立IP网关),宿主机允许addr和gateway为内网IP或外网IP,已自动识别
  • vmbr0创建支持开设纯IPV4、纯IPV6、双栈虚拟机,自动识别IPV4地址和IPV6地址,自动识别对应的IP区间
  • 安装PVE开虚拟机需要的必备工具包
  • x86_64的替换apt源中的企业订阅为社区源,arm的使用第三方修复的补丁构建的源
  • 打印查询Linux系统内核和PVE内核是否已安装
  • 设置DNS检测8.8.8.8的开机自启添加DNS的systemd服务
  • 新增PVE的APT源链接后,下载PVE并打印输出登陆信息

所有修改过的文件均已设置为只读模式,避免重启后文件被覆写,如需修改请使用chattr -i 文件路径取消只读锁定,修改完毕请执行chattr +i 文件路径进行只读锁定

执行过程中会提示重启系统一次,重启后务必等待起码20秒确保系统未再次自动重启,因为原始环境可能缺失ifupdownifupdown2环境,有加载安装的守护进程进行安装,安装后会再次自动重启系统,等待20秒未自重启确保这个安装已运行完毕.

如果你需要将新安装的PVE纳管进入已有的集群,那么这块安装的时候,名字就不能回车默认使用pve,需要换一个名字避免和集群内的pve本身的hostname冲突.

若宿主机本身存在SLAAC分配的IPV6地址,将可选择是否使用最大的IPV6子网范围,默认回车不使用最大的IPV6子网范围仅使用本机IPV6,若后续需要给虚拟机/容器附加独立的IPV6地址,该选项务必选择y.

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

shell
bash install_pve.sh

TIP

安装成功后打开网页可能提示不安全,点击高级或更多选项,坚持访问即可

登录的信息是你SSH的账户和密码

预配置环境

  • 创建资源池mypool(local)
  • 移除订阅弹窗
  • 尝试开启硬件直通
  • 对AppArmor模块检测和自动安装
  • 重启系统前推荐挂上nezha探针方便在后台不通过SSH使用命令行,避免SSH可能因为商家奇葩的预设可能导致重启后root密码丢失
  • 执行reboot前需要等待后台任务执行完毕,一些宿主机的系统apt命令执行很慢,得等一会才能执行完毕,当然大部分的机器没这么烂,如果很久都起不来ssh无法连接,那么尝试通过控制面板重启一下服务器

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

自动配置宿主机的网关

WARNING

使用前请保证重启过服务器且此时PVE能正常登录进WEB端再执行,重启机器后不要立即执行此命令,待WEB端启动并可登录成功后至少等1分钟再执行本命令 如果WEB端起不来,执行systemctl status pveproxy查看是否启动,如果卡住未启动,执行systemctl start pveproxy启动WEB端。

TIP

这一步是最容易造成SSH断开的,原因是未等待PVE内核启动就修改网络会造成设置冲突,所以至少等几分钟待内核启动也就是WEB端启动成功后再执行。

TIP

在执行本命令前如果宿主机需要附加IPV6隧道(给没有IPV6地址的宿主机添加IPV6子网),请查看IPV6免费子网附加部分的内容附加到对应的配置文件中,但请忽略<初始环境修改>的操作,直接进行附加,附加后验证有IPV6地址了再执行下面的一键配置网关的命令。

  • 如果vmbr0未创建,则自动创建,逻辑同主体安装一致
  • 创建vmbr1(NAT网关),支持开设NAT的IPV6网络的NAT的IPV4的服务器
  • 创建vmbr2(独立IPV6网关),使用ndppd解决宿主机对IPV6地址进行MAC校验的问题,支持开设带独立IPV6网络的服务器
  • 想查看完整设置可以执行cat /etc/network/interfaces查看,如需修改网关需要修改该文件,web端已经无法修改
  • 加载iptables并设置回源且允许NAT端口转发

简单的说,vmbr0负责v4的独立IP,vmbr1负责复杂v4/v6的NAT,vmbr2负责v6的独立IP

开独立IPV4的虚拟机时使用的vmbr0,gateway同宿主机,IPV4/CIDR使用同一网段的地址和相同的子网掩码,使用宿主机未绑定的IPV4地址做IPV4/CIDR,当然如果后续使用本套脚本无需关注这点细枝末节的东西

开NAT的IPV4的虚拟机时使用vmbr1,gateway使用172.16.1.1,IPV4/CIDR使用172.16.1.x/24,这里的x不能是1,当然如果后续使用本套脚本无需关注这点细枝末节的东西

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

TIP

这一步是可能需要你执行成功几分钟后重启系统,详见脚本最后执行完毕的提示,但重启可以保证部分隐藏设置加载成功,有条件务必重启一次服务器

到这一步主体安装完毕。

一键卸载PVE

卸载脚本执行完毕后,重启宿主机则回归到未安装的状态下

国际

shell
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

国内

shell
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/uninstall_pve.sh)

在物理机器上进行安装

本方法安装的Proxmox不可后续使用本项目的所有脚本。

本方法未大规模测试和适配,仅本人在本地机器上安装了PVE8.4,路由器本身使用的不是自动获取IP地址而是固定IP地址连接的方式,如有问题对应仓库开issues.

U盘刻录官方ISO

官方ISO下载地址:

https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso

需要提前下载到本地

同时还需要一个读写速率比较好的U盘,用于制作启动盘,由于启动盘需要使用rufus进行启动盘制作,所以需要U盘格式化,需要确保U盘制作前为空U盘

rufus下载地址(下载到你的本地,不是U盘中):

https://rufus.ie/zh/

https://github.com/pbatard/rufus

刻录需要使用DD方式进行刻录,刻录完毕后U盘原数据会被完全擦除。

PVE主体安装

查找宿主机本身如何进入BIOS,进入BIOS后修改两处地方

  1. 安全启动需要关闭

  2. Boot的顺序需要将USB的顺序移动到第一位

然后保存设置,然后插入U盘,重新启动系统,选择使用图形界面进行安装

FQDN需要填写一个网址,可以填写类似 pve.spiritlhl.net 这样的网址,最好是你拥有的域名的一个子域名,不是实际的域名的话写成类似 pve.localsite.com 也行,后续不一定用得到

安装完毕后会自动关机重启,重启黑屏后可以拔掉USB,避免又从U盘重启安装了,当然如果忘了又重启到安装页面了,关闭机器后拔掉U盘再启动也行

无线网络配置

下载所需的压缩文件和shell脚本

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.zip

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/wireless.sh

下载完成后,解压压缩包,将wireless的文件夹拖入一个新的U盘的根目录,同时wireless.sh文件也得放到根目录。

U盘插到物理机器后,需要挂载U盘,这里的sdx1是第一条命令查询到的U盘的实际路径,需要自行修改

shell
fdisk -l
 mount /dev/sdx1 /mnt

U盘内的wireless.zip需要确保已解压,打开可见其中的deb文件

此时直接执行一键配置

shell
bash /mnt/wireless.sh

配置完毕会自动重启系统,重启后会有公共网络

配置脚本执行过程中会提示输入WIFI的名字和密码,由于纯CI环境无中文输入法,WIFI的名字必须仅英文数字组成,密码也是

其他相关默认配置

下载脚本,类似上面一步那样导入文件

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/default.sh

使用前务必确保curl ip.sb无问题

shell
bash default.sh

执行会非常耗时,但装完后会自带xfce的桌面环境,且换源阿里云,且去除无效订阅,且设置合并local和loacl-lvm,且设置清华镜像容器源

注意事项

物理机安装无限模块后不可使用NAT直接连接虚拟机接入网络,所以本项目后续的教程不支持该方法接入的网桥,本项目后续脚本不支持本方法安装的Proxmox.

目前可行的无线模块在PVE上使用的成功案例,都要求WIFI路由器接入网络的方式是自动获取IP地址(DHCP)(后续使用openwrt或ikuai或直接nat后虚拟机内网络可用),或可在路由器上修改静态路由表,如果WIFI路由器使用固定IP地址连接网络,暂时未找到成功案例。

`,86)]))}const u=i(l,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/guide_pve_pve_install.md.B-fInh-4.lean.js b/assets/guide_pve_pve_install.md.BT-mRFVW.lean.js similarity index 86% rename from assets/guide_pve_pve_install.md.B-fInh-4.lean.js rename to assets/guide_pve_pve_install.md.BT-mRFVW.lean.js index 296afbd64e..2142ae000e 100644 --- a/assets/guide_pve_pve_install.md.B-fInh-4.lean.js +++ b/assets/guide_pve_pve_install.md.BT-mRFVW.lean.js @@ -1 +1 @@ -import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"PVE主体安装","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_install.md","filePath":"guide/pve/pve_install.md","lastUpdated":1773143516000}'),l={name:"guide/pve/pve_install.md"};function p(n,s,h,r,d,c){return a(),e("div",null,s[0]||(s[0]=[t("",86)]))}const u=i(l,[["render",p]]);export{k as __pageData,u as default}; +import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.QPV3Ar9-.js";const k=JSON.parse('{"title":"PVE主体安装","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_install.md","filePath":"guide/pve/pve_install.md","lastUpdated":1773196139000}'),l={name:"guide/pve/pve_install.md"};function p(n,s,h,r,d,c){return a(),e("div",null,s[0]||(s[0]=[t("",86)]))}const u=i(l,[["render",p]]);export{k as __pageData,u as default}; diff --git a/assets/guide_pve_pve_kvm.md.Br7SLskL.js b/assets/guide_pve_pve_kvm.md.Bcv9yV9c.js similarity index 99% rename from assets/guide_pve_pve_kvm.md.Br7SLskL.js rename to assets/guide_pve_pve_kvm.md.Bcv9yV9c.js index f368e0b52a..e07b949aa0 100644 --- a/assets/guide_pve_pve_kvm.md.Br7SLskL.js +++ b/assets/guide_pve_pve_kvm.md.Bcv9yV9c.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Linux虚拟机(KVM/TCG)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_kvm.md","filePath":"guide/pve/pve_kvm.md","lastUpdated":1773143516000}'),e={name:"guide/pve/pve_kvm.md"};function n(p,s,h,d,r,k){return t(),a("div",null,s[0]||(s[0]=[l(`

Linux虚拟机(KVM/TCG)

SSH登录说明

开设出的虚拟机,默认生成的用户名可以不是root,此时你需要执行sudo -i切换为root用户

默认设置的用户名不是root时,未经过设置的默认的root密码是passwordoneclickvirt

登录SSH切换为root权限后,一定要修改root密码,可以使用以下命令修改

国际

bash
bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

国内

bash
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

开设带IPV6地址的虚拟机的注意事项

由于长期闲置IPV6不使用可能导致NDP广播缓存失效重置,一般闲置50分钟左右就会出现IPV6不可用的情况,俗称“IPV6断流”,此时需要设置一个定时任务

shell
echo '*/1 * * * * curl -m 6 -s ipv6.ip.sb || curl -m 6 -s ipv6.ip.sb' | crontab -

在开设出的虚拟机中执行上述命令,可保证IPV6网络一直被使用,不会失效断流

开设虚拟机可使用的镜像

  • 已预安装开启cloudinit
  • 开启SSH登陆
  • 预设置SSH监听V4和V6的22端口
  • 开启允许密码验证登陆
  • 开启允许root登陆
  • 部分预安装Qemu-guest-agent
  • 系统支持:
    • x86_64架构的详见 pve_kvm_imageskvm_images 中列出的系统,使用时只需要写系统名字+系统版本号,如ubuntu20、ubutnu22、debian11、debian12这种
    • arm架构的详见 ubuntudebian 中列出的系统,使用时只需要写系统名字+系统版本号,如ubuntu20、ubutnu22、debian11、debian12这种

单独开设NAT的虚拟化的虚拟机

  • 自动开设NAT服务器,默认使用Debian10镜像,因为该镜像占用最小
  • 可在命令中自定义需要使用的镜像,这里有给出配置好的镜像,镜像自带空间设置是2~10G硬盘,日常使用至少10G以上即可,除非某些镜像开不起来再增加硬盘大小
  • 可在命令中指定存储盘位置,默认不指定时为local盘即系统盘,可指定为PVE中显示的挂载盘
  • 自定义内存大小推荐512MB内存
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部的cloud-init配置好网络以及登陆信息,大概需要5分钟
  • 虚拟机的相关信息将会存储到WEB端对应VM的NOTES中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是/64的子网

使用方法

TIP

注意这里的用户名不能是纯数字,会造成cloudinit出问题,最好是纯英文或英文开头

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

各参数含义

shell
# ./buildvm.sh VMID 用户名 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘 独立IPV6地址(留空默认N)

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

shell
./buildvm.sh 111 root oneclick123 1 512 10 40001 40002 40003 50000 50025 debian11 local N

开设完毕可执行cat vm111查看信息,或到WEB端对应VM的NOTES中查看

以下为开设的示例VM的信息:

属性
VMID111
SSH登录的用户名root
SSH登录的密码oneclick123
CPU核数1
内存大小512MB
磁盘大小10G
SSH端口40001
80端口40002
443端口40003
内外网映射端口一致的区间50000到50025
系统debian11
宿主机的存储盘local
绑定独立IPV6(留空默认N)N

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

删除指定虚拟机

  • 停止VM
  • 删除VM
  • 删除端口映射
  • 重启网络
  • 删除log文件

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

使用方法

可以删除对应VMID的虚拟机,这里用上文中的示例111做演示

shell
./pve_delete.sh 111

实际删除数量不固定,空格分隔每个VMID即可,可一次性删除多个

批量开设NAT的虚拟化的虚拟机

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 可多次运行批量生成VM
  • 自动开设NAT服务器,选项留空默认使用debian11镜像,可自定义使用镜像名字,支持的系统名字详见上文支持的镜像列表
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部的cloudinit配置好网络以及登陆信息,大概需要5分钟,每个虚拟机创建之间有间隔等待60秒避免突发性能不足
  • 默认批量开设的虚拟机网络配置为:22,80,443端口及一个25个端口区间的内外网映射
  • 可自定义批量开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 虚拟机的相关信息将会存储到WEB端对应VM的NOTES中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

开设完毕可执行cat vmlog查看信息,或到WEB端对应VM的NOTES中查看

删除所有虚拟机

  • 删除所有VM
  • 删除所有nat的端口映射
  • 重启网络
  • 删除log文件
shell
for vmid in $(qm list | awk '{if(NR>1) print $1}'); do qm stop $vmid; qm destroy $vmid; rm -rf /var/lib/vz/images/$vmid*; done
+import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Linux虚拟机(KVM/TCG)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_kvm.md","filePath":"guide/pve/pve_kvm.md","lastUpdated":1773196139000}'),e={name:"guide/pve/pve_kvm.md"};function n(p,s,h,d,r,k){return t(),a("div",null,s[0]||(s[0]=[l(`

Linux虚拟机(KVM/TCG)

SSH登录说明

开设出的虚拟机,默认生成的用户名可以不是root,此时你需要执行sudo -i切换为root用户

默认设置的用户名不是root时,未经过设置的默认的root密码是passwordoneclickvirt

登录SSH切换为root权限后,一定要修改root密码,可以使用以下命令修改

国际

bash
bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

国内

bash
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/fscarmen/tools/main/root.sh) [PASSWORD]

开设带IPV6地址的虚拟机的注意事项

由于长期闲置IPV6不使用可能导致NDP广播缓存失效重置,一般闲置50分钟左右就会出现IPV6不可用的情况,俗称“IPV6断流”,此时需要设置一个定时任务

shell
echo '*/1 * * * * curl -m 6 -s ipv6.ip.sb || curl -m 6 -s ipv6.ip.sb' | crontab -

在开设出的虚拟机中执行上述命令,可保证IPV6网络一直被使用,不会失效断流

开设虚拟机可使用的镜像

  • 已预安装开启cloudinit
  • 开启SSH登陆
  • 预设置SSH监听V4和V6的22端口
  • 开启允许密码验证登陆
  • 开启允许root登陆
  • 部分预安装Qemu-guest-agent
  • 系统支持:
    • x86_64架构的详见 pve_kvm_imageskvm_images 中列出的系统,使用时只需要写系统名字+系统版本号,如ubuntu20、ubutnu22、debian11、debian12这种
    • arm架构的详见 ubuntudebian 中列出的系统,使用时只需要写系统名字+系统版本号,如ubuntu20、ubutnu22、debian11、debian12这种

单独开设NAT的虚拟化的虚拟机

  • 自动开设NAT服务器,默认使用Debian10镜像,因为该镜像占用最小
  • 可在命令中自定义需要使用的镜像,这里有给出配置好的镜像,镜像自带空间设置是2~10G硬盘,日常使用至少10G以上即可,除非某些镜像开不起来再增加硬盘大小
  • 可在命令中指定存储盘位置,默认不指定时为local盘即系统盘,可指定为PVE中显示的挂载盘
  • 自定义内存大小推荐512MB内存
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部的cloud-init配置好网络以及登陆信息,大概需要5分钟
  • 虚拟机的相关信息将会存储到WEB端对应VM的NOTES中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是/64的子网

使用方法

TIP

注意这里的用户名不能是纯数字,会造成cloudinit出问题,最好是纯英文或英文开头

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

各参数含义

shell
# ./buildvm.sh VMID 用户名 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘 独立IPV6地址(留空默认N)

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

shell
./buildvm.sh 111 root oneclick123 1 512 10 40001 40002 40003 50000 50025 debian11 local N

开设完毕可执行cat vm111查看信息,或到WEB端对应VM的NOTES中查看

以下为开设的示例VM的信息:

属性
VMID111
SSH登录的用户名root
SSH登录的密码oneclick123
CPU核数1
内存大小512MB
磁盘大小10G
SSH端口40001
80端口40002
443端口40003
内外网映射端口一致的区间50000到50025
系统debian11
宿主机的存储盘local
绑定独立IPV6(留空默认N)N

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

删除指定虚拟机

  • 停止VM
  • 删除VM
  • 删除端口映射
  • 重启网络
  • 删除log文件

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

使用方法

可以删除对应VMID的虚拟机,这里用上文中的示例111做演示

shell
./pve_delete.sh 111

实际删除数量不固定,空格分隔每个VMID即可,可一次性删除多个

批量开设NAT的虚拟化的虚拟机

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 可多次运行批量生成VM
  • 自动开设NAT服务器,选项留空默认使用debian11镜像,可自定义使用镜像名字,支持的系统名字详见上文支持的镜像列表
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部的cloudinit配置好网络以及登陆信息,大概需要5分钟,每个虚拟机创建之间有间隔等待60秒避免突发性能不足
  • 默认批量开设的虚拟机网络配置为:22,80,443端口及一个25个端口区间的内外网映射
  • 可自定义批量开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 虚拟机的相关信息将会存储到WEB端对应VM的NOTES中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_vm.sh -o create_vm.sh && chmod +x create_vm.sh && bash create_vm.sh

开设完毕可执行cat vmlog查看信息,或到WEB端对应VM的NOTES中查看

删除所有虚拟机

  • 删除所有VM
  • 删除所有nat的端口映射
  • 重启网络
  • 删除log文件
shell
for vmid in $(qm list | awk '{if(NR>1) print $1}'); do qm stop $vmid; qm destroy $vmid; rm -rf /var/lib/vz/images/$vmid*; done
 iptables -t nat -F
 iptables -t filter -F
 service networking restart
diff --git a/assets/guide_pve_pve_kvm.md.Br7SLskL.lean.js b/assets/guide_pve_pve_kvm.md.Bcv9yV9c.lean.js
similarity index 86%
rename from assets/guide_pve_pve_kvm.md.Br7SLskL.lean.js
rename to assets/guide_pve_pve_kvm.md.Bcv9yV9c.lean.js
index db705dc35c..d1e2a02191 100644
--- a/assets/guide_pve_pve_kvm.md.Br7SLskL.lean.js
+++ b/assets/guide_pve_pve_kvm.md.Bcv9yV9c.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Linux虚拟机(KVM/TCG)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_kvm.md","filePath":"guide/pve/pve_kvm.md","lastUpdated":1773143516000}'),e={name:"guide/pve/pve_kvm.md"};function n(p,s,h,d,r,k){return t(),a("div",null,s[0]||(s[0]=[l("",136)]))}const F=i(e,[["render",n]]);export{o as __pageData,F as default};
+import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"Linux虚拟机(KVM/TCG)","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_kvm.md","filePath":"guide/pve/pve_kvm.md","lastUpdated":1773196139000}'),e={name:"guide/pve/pve_kvm.md"};function n(p,s,h,d,r,k){return t(),a("div",null,s[0]||(s[0]=[l("",136)]))}const F=i(e,[["render",n]]);export{o as __pageData,F as default};
diff --git a/assets/guide_pve_pve_lxc.md.DlntL99q.js b/assets/guide_pve_pve_lxc.md.DeIPS54K.js
similarity index 99%
rename from assets/guide_pve_pve_lxc.md.DlntL99q.js
rename to assets/guide_pve_pve_lxc.md.DeIPS54K.js
index ff1af8948a..f64e5434df 100644
--- a/assets/guide_pve_pve_lxc.md.DlntL99q.js
+++ b/assets/guide_pve_pve_lxc.md.DeIPS54K.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"LXC容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_lxc.md","filePath":"guide/pve/pve_lxc.md","lastUpdated":1773143516000}'),e={name:"guide/pve/pve_lxc.md"};function n(p,s,h,r,d,k){return t(),a("div",null,s[0]||(s[0]=[l(`

LXC容器

WARNING

如果你需要在一台服务器上开启超过200个LXC容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

开设LXC容器可使用的镜像

x86_64:

自动修补镜像:https://github.com/oneclickvirt/lxc_amd64_images/blob/main/all_images.txt

TIP

每日自动拉取进行编译和修补

手动修补镜像: https://github.com/oneclickvirt/pve_lxc_images/blob/main/all_images.txt

TIP

其中的部分镜像有缺陷,不保证所有PVE可用,名字为 ubuntu16.04debian6centos7opensuse42.2opensuse42.3 非必要不要使用。

执行pveam available --section system查看官方可用的系统名字和版本号

优先级:自修补镜像(Proxmox-VE 5及其以下版本不支持) > 官方默认镜像(都支持)

已通过脚本自动识别版本使用对应镜像

arm:

https://github.com/oneclickvirt/lxc_arm_images/blob/main/all_images.txt

可在上面的文件中查看支持的系统,其中列出的debian和ubuntu系统不要使用里面的别名,使用数字代号即可。

TIP

系统参数一律是小写的系统名字拼接版本号,如:debian11,ubuntu22等。 (自修补镜像支持一些偏门系统,如 centos6、centos7、debian8、debian9 等)

所有系统的CT默认用户名是root

TIP

当然有时候会存在特殊情况,version可能是current/base,此时系统参数仅使用英文系统名字即可,如 archlinux、gentoo、kali。

单独开设LXC虚拟化的CT

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 自动开设NAT服务器,默认使用Debian11镜像,也可自定义系统
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部配置好网络以及登陆信息,大概需要3分钟
  • 默认开设的网络配置为:22,80,443端口及一个25个端口区间的内外网映射
  • 可自定义开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 可在命令中指定存储盘位置,默认不指定时为local盘即系统盘,可指定为PVE中显示的挂载盘
  • 开设的CT默认已启用SSH且允许root登陆,且已设置支持使用docker的嵌套虚拟化
  • 容器的相关信息将会存储到对应的容器的NOTE中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

各参数含义

shell
# ./buildct.sh CTID 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘 独立IPV6(默认为N)

测试示例

shell
./buildct.sh 111 oneclick123 1 512 5 20001 20002 20003 30000 30025 debian11 local N

开设完毕可执行cat ct111查看信息,或在web端的NOTES查看

以下为开设的示例CT的信息:

属性
CTID111
SSH登录的用户名root
SSH登录的密码oneclick123
CPU核数1
内存大小512MB
磁盘大小5G
SSH端口20001
80端口20002
443端口20003
内外网映射端口一致的区间30000到30025
系统debian11
宿主机的存储盘local
IPV6

TIP

注意这里的CTID仅可使用100到256,其他数字不可用

自定义删除指定容器

  • 停止CT
  • 删除CT
  • 删除端口映射
  • 重启网络
  • 删除log文件

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

使用方法

可以删除对应CTID的容器,这里用上文中的示例111做演示

shell
./pve_delete.sh 111

实际删除数量不固定,空格分隔每个CTID即可,可一次性删除多个

批量开设NAT的LXC虚拟化的CT

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 可多次运行批量生成CT容器,但需要注意的是宿主机内存记得开点swap免得机器炸了开SWAP点我跳转
  • 每个容器创建之间有间隔等待60秒避免突发性能不足
  • 可自定义批量开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 开设的CT默认已启用SSH且允许root登陆,且已设置支持使用docker的嵌套虚拟化
  • 容器的相关信息将会存储到对应的容器的NOTE中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

开设完毕可执行cat ctlog查看信息,或在web端的NOTES查看

删除所有CT

  • 删除所有CT
  • 删除所有nat的端口映射
  • 重启网络
  • 删除log文件
shell
pct list | awk 'NR>1{print $1}' | xargs -I {} sh -c 'pct stop {}; pct destroy {}'
+import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"LXC容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_lxc.md","filePath":"guide/pve/pve_lxc.md","lastUpdated":1773196139000}'),e={name:"guide/pve/pve_lxc.md"};function n(p,s,h,r,d,k){return t(),a("div",null,s[0]||(s[0]=[l(`

LXC容器

WARNING

如果你需要在一台服务器上开启超过200个LXC容器,那么不推荐你使用本项目,可能会出现lxcfs访问漂移的问题,产生IO占用无法释放。(系lxc原生问题无法修复)

开设LXC容器可使用的镜像

x86_64:

自动修补镜像:https://github.com/oneclickvirt/lxc_amd64_images/blob/main/all_images.txt

TIP

每日自动拉取进行编译和修补

手动修补镜像: https://github.com/oneclickvirt/pve_lxc_images/blob/main/all_images.txt

TIP

其中的部分镜像有缺陷,不保证所有PVE可用,名字为 ubuntu16.04debian6centos7opensuse42.2opensuse42.3 非必要不要使用。

执行pveam available --section system查看官方可用的系统名字和版本号

优先级:自修补镜像(Proxmox-VE 5及其以下版本不支持) > 官方默认镜像(都支持)

已通过脚本自动识别版本使用对应镜像

arm:

https://github.com/oneclickvirt/lxc_arm_images/blob/main/all_images.txt

可在上面的文件中查看支持的系统,其中列出的debian和ubuntu系统不要使用里面的别名,使用数字代号即可。

TIP

系统参数一律是小写的系统名字拼接版本号,如:debian11,ubuntu22等。 (自修补镜像支持一些偏门系统,如 centos6、centos7、debian8、debian9 等)

所有系统的CT默认用户名是root

TIP

当然有时候会存在特殊情况,version可能是current/base,此时系统参数仅使用英文系统名字即可,如 archlinux、gentoo、kali。

单独开设LXC虚拟化的CT

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 自动开设NAT服务器,默认使用Debian11镜像,也可自定义系统
  • 自动进行内外网端口映射,含22,80,443端口以及其他25个内外网端口号一样的端口
  • 生成后需要等待一段时间虚拟机内部配置好网络以及登陆信息,大概需要3分钟
  • 默认开设的网络配置为:22,80,443端口及一个25个端口区间的内外网映射
  • 可自定义开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 可在命令中指定存储盘位置,默认不指定时为local盘即系统盘,可指定为PVE中显示的挂载盘
  • 开设的CT默认已启用SSH且允许root登陆,且已设置支持使用docker的嵌套虚拟化
  • 容器的相关信息将会存储到对应的容器的NOTE中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct.sh -o buildct.sh && chmod +x buildct.sh

各参数含义

shell
# ./buildct.sh CTID 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘 独立IPV6(默认为N)

测试示例

shell
./buildct.sh 111 oneclick123 1 512 5 20001 20002 20003 30000 30025 debian11 local N

开设完毕可执行cat ct111查看信息,或在web端的NOTES查看

以下为开设的示例CT的信息:

属性
CTID111
SSH登录的用户名root
SSH登录的密码oneclick123
CPU核数1
内存大小512MB
磁盘大小5G
SSH端口20001
80端口20002
443端口20003
内外网映射端口一致的区间30000到30025
系统debian11
宿主机的存储盘local
IPV6

TIP

注意这里的CTID仅可使用100到256,其他数字不可用

自定义删除指定容器

  • 停止CT
  • 删除CT
  • 删除端口映射
  • 重启网络
  • 删除log文件

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

使用方法

可以删除对应CTID的容器,这里用上文中的示例111做演示

shell
./pve_delete.sh 111

实际删除数量不固定,空格分隔每个CTID即可,可一次性删除多个

批量开设NAT的LXC虚拟化的CT

WARNING

初次使用前需要保证当前PVE纯净且宿主机未进行过任何端口映射,否则设置冲突可能出现BUG

TIP

开设前请使用screen挂起执行,避免批量开设时间过长,SSH不稳定导致中间执行中断

  • 可多次运行批量生成CT容器,但需要注意的是宿主机内存记得开点swap免得机器炸了开SWAP点我跳转
  • 每个容器创建之间有间隔等待60秒避免突发性能不足
  • 可自定义批量开设的核心数,内存大小,硬盘大小,使用宿主机哪个存储盘,记得自己计算好空闲资源开设
  • 开设的CT默认已启用SSH且允许root登陆,且已设置支持使用docker的嵌套虚拟化
  • 容器的相关信息将会存储到对应的容器的NOTE中,可在WEB端查看
  • 如果宿主机自带IPV6子网将自动附加上IPV6网络,但无公网IPV6地址
  • 可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/create_ct.sh -o create_ct.sh && chmod +x create_ct.sh && bash create_ct.sh

开设完毕可执行cat ctlog查看信息,或在web端的NOTES查看

删除所有CT

  • 删除所有CT
  • 删除所有nat的端口映射
  • 重启网络
  • 删除log文件
shell
pct list | awk 'NR>1{print $1}' | xargs -I {} sh -c 'pct stop {}; pct destroy {}'
 rm -rf ct*
 iptables -t nat -F
 iptables -t filter -F
diff --git a/assets/guide_pve_pve_lxc.md.DlntL99q.lean.js b/assets/guide_pve_pve_lxc.md.DeIPS54K.lean.js
similarity index 85%
rename from assets/guide_pve_pve_lxc.md.DlntL99q.lean.js
rename to assets/guide_pve_pve_lxc.md.DeIPS54K.lean.js
index 49da990ad5..bccdc1de9f 100644
--- a/assets/guide_pve_pve_lxc.md.DlntL99q.lean.js
+++ b/assets/guide_pve_pve_lxc.md.DeIPS54K.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"LXC容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_lxc.md","filePath":"guide/pve/pve_lxc.md","lastUpdated":1773143516000}'),e={name:"guide/pve/pve_lxc.md"};function n(p,s,h,r,d,k){return t(),a("div",null,s[0]||(s[0]=[l("",76)]))}const F=i(e,[["render",n]]);export{o as __pageData,F as default};
+import{_ as i,c as a,o as t,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"LXC容器","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_lxc.md","filePath":"guide/pve/pve_lxc.md","lastUpdated":1773196139000}'),e={name:"guide/pve/pve_lxc.md"};function n(p,s,h,r,d,k){return t(),a("div",null,s[0]||(s[0]=[l("",76)]))}const F=i(e,[["render",n]]);export{o as __pageData,F as default};
diff --git a/assets/guide_pve_pve_macos.md.CvtzCpJh.js b/assets/guide_pve_pve_macos.md.ByiKT-Ya.js
similarity index 99%
rename from assets/guide_pve_pve_macos.md.CvtzCpJh.js
rename to assets/guide_pve_pve_macos.md.ByiKT-Ya.js
index 1e22511e3a..7862a40aee 100644
--- a/assets/guide_pve_pve_macos.md.CvtzCpJh.js
+++ b/assets/guide_pve_pve_macos.md.ByiKT-Ya.js
@@ -1,4 +1,4 @@
-import{_ as a}from"./chunks/wk7.Bl1-W8YX.js";import{_ as i,c as e,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/mac0.CofQ9vw_.png",n="/assets/mac00.DelKhhmr.png",c="/assets/mac1.D7yJtJrl.png",h="/assets/mac2.du7V_m90.png",o="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",r="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",k="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",u="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",F="/assets/mac11.P11nsmhn.png",y="/assets/mac12.DHTBO7ih.png",C="/assets/mac13.DDrsH3zK.png",v="/assets/mac14.dLHoMtJy.png",_="/assets/mac15.vkr7IxY1.png",B="/assets/mac16.CeB_3pKz.png",E="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",P="/assets/mac19.C_d085-7.png",f="/assets/mac20.DsWyqQaw.png",z="/assets/mac21.XZ5wILhH.png",N=JSON.parse('{"title":"开设MacOS虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_macos.md","filePath":"guide/pve/pve_macos.md","lastUpdated":1773143516000}'),S={name:"guide/pve/pve_macos.md"};function I(M,s,q,w,D,V){return t(),e("div",null,s[0]||(s[0]=[p(`

开设MacOS虚拟机

前置需求

系统和硬件配置要求 --> 检测环境

只有检测环境检测出宿主机支持KVM嵌套虚拟化时,才可以开设MACOS虚拟机,否则会被硬件识别无法开设。

前置环境设置

  • 自动识别 CPU 类型(AMD 或 Intel),并根据类型设置嵌套虚拟化参数。
  • 修改 GRUB 启动参数,启用 IOMMU 和禁用默认 framebuffer。
  • 添加 VFIO 模块支持,便于直通硬件设备。
  • 黑名单声卡和显卡驱动模块,避免与 macOS 冲突。
  • 配置 KVM 相关内核参数,忽略 MSR 错误,提高兼容性。
  • 修补 Proxmox 前端状态检测逻辑,绕过状态限制。

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

执行成功后会显示15秒后重启本机,这是正常的流程,不重启无法使得内核参数生效。

系统镜像下载

  • 所有镜像已预装组件,体积较大(最小约4.9GB),下载与解压任务将后台挂起执行。
  • 镜像为完整系统含所有组件,无需联网即可引导使用。
  • 若系统盘空闲空间不足镜像大小的2倍,将拒绝下载。
  • 镜像为7z压缩格式,下载后需解压才能使用。
  • 可随时查看当前下载与解压任务状态,完成后方可创建虚拟机。

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh

shell
bash install_macos_images.sh

后台下载任务挂起执行后,可关闭SSH窗口,等待半小时到3个小时(具体等待时间取决于你的服务器带宽大小和连通性),下载iso的7z压缩包。

下载任务执行完毕后,查询显示当前下载任务为空时,就可以选择解压任务执行了,解压挂起执行等待的时间取决于你的服务器CPU性能。

当解压任务执行完毕,查询显示当前解压任务为空时,一切准备工作就算准备好了。

相同类型的任务可以并发,也可以随时取消某个任务,取消时需要输入PID的值。

通过 https://github.com/oneclickvirt/macos 制作的目前支持的镜像压缩包:

# 按系统发布时间从旧到新
+import{_ as a}from"./chunks/wk7.Bl1-W8YX.js";import{_ as i,c as e,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/mac0.CofQ9vw_.png",n="/assets/mac00.DelKhhmr.png",c="/assets/mac1.D7yJtJrl.png",h="/assets/mac2.du7V_m90.png",o="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",r="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",k="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",u="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",F="/assets/mac11.P11nsmhn.png",y="/assets/mac12.DHTBO7ih.png",C="/assets/mac13.DDrsH3zK.png",v="/assets/mac14.dLHoMtJy.png",_="/assets/mac15.vkr7IxY1.png",B="/assets/mac16.CeB_3pKz.png",E="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",P="/assets/mac19.C_d085-7.png",f="/assets/mac20.DsWyqQaw.png",z="/assets/mac21.XZ5wILhH.png",N=JSON.parse('{"title":"开设MacOS虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_macos.md","filePath":"guide/pve/pve_macos.md","lastUpdated":1773196139000}'),S={name:"guide/pve/pve_macos.md"};function I(M,s,q,w,D,V){return t(),e("div",null,s[0]||(s[0]=[p(`

开设MacOS虚拟机

前置需求

系统和硬件配置要求 --> 检测环境

只有检测环境检测出宿主机支持KVM嵌套虚拟化时,才可以开设MACOS虚拟机,否则会被硬件识别无法开设。

前置环境设置

  • 自动识别 CPU 类型(AMD 或 Intel),并根据类型设置嵌套虚拟化参数。
  • 修改 GRUB 启动参数,启用 IOMMU 和禁用默认 framebuffer。
  • 添加 VFIO 模块支持,便于直通硬件设备。
  • 黑名单声卡和显卡驱动模块,避免与 macOS 冲突。
  • 配置 KVM 相关内核参数,忽略 MSR 错误,提高兼容性。
  • 修补 Proxmox 前端状态检测逻辑,绕过状态限制。

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/extra_scripts/configure_macos.sh -o configure_macos.sh && chmod +x configure_macos.sh && bash configure_macos.sh

执行成功后会显示15秒后重启本机,这是正常的流程,不重启无法使得内核参数生效。

系统镜像下载

  • 所有镜像已预装组件,体积较大(最小约4.9GB),下载与解压任务将后台挂起执行。
  • 镜像为完整系统含所有组件,无需联网即可引导使用。
  • 若系统盘空闲空间不足镜像大小的2倍,将拒绝下载。
  • 镜像为7z压缩格式,下载后需解压才能使用。
  • 可随时查看当前下载与解压任务状态,完成后方可创建虚拟机。

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_macos_images.sh -o install_macos_images.sh && chmod +x install_macos_images.sh && bash install_macos_images.sh

shell
bash install_macos_images.sh

后台下载任务挂起执行后,可关闭SSH窗口,等待半小时到3个小时(具体等待时间取决于你的服务器带宽大小和连通性),下载iso的7z压缩包。

下载任务执行完毕后,查询显示当前下载任务为空时,就可以选择解压任务执行了,解压挂起执行等待的时间取决于你的服务器CPU性能。

当解压任务执行完毕,查询显示当前解压任务为空时,一切准备工作就算准备好了。

相同类型的任务可以并发,也可以随时取消某个任务,取消时需要输入PID的值。

通过 https://github.com/oneclickvirt/macos 制作的目前支持的镜像压缩包:

# 按系统发布时间从旧到新
 high-sierra.iso.7z (大小: 5.23GB)
 mojave.iso.7z (大小: 6.03GB)
 catalina.iso.7z (大小: 8.33GB)
diff --git a/assets/guide_pve_pve_macos.md.CvtzCpJh.lean.js b/assets/guide_pve_pve_macos.md.ByiKT-Ya.lean.js
similarity index 94%
rename from assets/guide_pve_pve_macos.md.CvtzCpJh.lean.js
rename to assets/guide_pve_pve_macos.md.ByiKT-Ya.lean.js
index b67cb36630..a08c6770db 100644
--- a/assets/guide_pve_pve_macos.md.CvtzCpJh.lean.js
+++ b/assets/guide_pve_pve_macos.md.ByiKT-Ya.lean.js
@@ -1 +1 @@
-import{_ as a}from"./chunks/wk7.Bl1-W8YX.js";import{_ as i,c as e,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/mac0.CofQ9vw_.png",n="/assets/mac00.DelKhhmr.png",c="/assets/mac1.D7yJtJrl.png",h="/assets/mac2.du7V_m90.png",o="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",r="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",k="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",u="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",F="/assets/mac11.P11nsmhn.png",y="/assets/mac12.DHTBO7ih.png",C="/assets/mac13.DDrsH3zK.png",v="/assets/mac14.dLHoMtJy.png",_="/assets/mac15.vkr7IxY1.png",B="/assets/mac16.CeB_3pKz.png",E="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",P="/assets/mac19.C_d085-7.png",f="/assets/mac20.DsWyqQaw.png",z="/assets/mac21.XZ5wILhH.png",N=JSON.parse('{"title":"开设MacOS虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_macos.md","filePath":"guide/pve/pve_macos.md","lastUpdated":1773143516000}'),S={name:"guide/pve/pve_macos.md"};function I(M,s,q,w,D,V){return t(),e("div",null,s[0]||(s[0]=[p("",101)]))}const O=i(S,[["render",I]]);export{N as __pageData,O as default};
+import{_ as a}from"./chunks/wk7.Bl1-W8YX.js";import{_ as i,c as e,o as t,ag as p}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/mac0.CofQ9vw_.png",n="/assets/mac00.DelKhhmr.png",c="/assets/mac1.D7yJtJrl.png",h="/assets/mac2.du7V_m90.png",o="/assets/mac3.BCWQuf_Q.png",d="/assets/mac4.B0L5oLF9.png",r="/assets/mac5.QrcmrZyS.png",m="/assets/mac6.CEnQahaC.png",k="/assets/mac7.Cq44sm3y.png",g="/assets/mac8.CfhgXZ8s.png",u="/assets/mac9.DIA9P3VH.png",b="/assets/mac10.CZg7Yifb.png",F="/assets/mac11.P11nsmhn.png",y="/assets/mac12.DHTBO7ih.png",C="/assets/mac13.DDrsH3zK.png",v="/assets/mac14.dLHoMtJy.png",_="/assets/mac15.vkr7IxY1.png",B="/assets/mac16.CeB_3pKz.png",E="/assets/mac17.qkqeaTbW.png",x="/assets/mac18.ChbyoMxq.png",P="/assets/mac19.C_d085-7.png",f="/assets/mac20.DsWyqQaw.png",z="/assets/mac21.XZ5wILhH.png",N=JSON.parse('{"title":"开设MacOS虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_macos.md","filePath":"guide/pve/pve_macos.md","lastUpdated":1773196139000}'),S={name:"guide/pve/pve_macos.md"};function I(M,s,q,w,D,V){return t(),e("div",null,s[0]||(s[0]=[p("",101)]))}const O=i(S,[["render",I]]);export{N as __pageData,O as default};
diff --git a/assets/guide_pve_pve_precheck.md.CWRjiBoK.js b/assets/guide_pve_pve_precheck.md.CAnEc34q.js
similarity index 98%
rename from assets/guide_pve_pve_precheck.md.CWRjiBoK.js
rename to assets/guide_pve_pve_precheck.md.CAnEc34q.js
index d3a4f045f0..bbd5469efa 100644
--- a/assets/guide_pve_pve_precheck.md.CWRjiBoK.js
+++ b/assets/guide_pve_pve_precheck.md.CAnEc34q.js
@@ -1,3 +1,3 @@
-import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/pve_kvm_1.BEDy-Dxt.png",l="/assets/pve_kvm_2.C98l0GO8.png",n="/assets/pve_kvm_3.DzuyyWMo.png",u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_precheck.md","filePath":"guide/pve/pve_precheck.md","lastUpdated":1773143516000}'),h={name:"guide/pve/pve_precheck.md"};function r(d,s,k,c,o,g){return t(),a("div",null,s[0]||(s[0]=[e(`

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果有未适配的商家或机器欢迎联系@spiritlhl_bot,有空会尝试支持一下

WARNING

会改变宿主机的网络结构,请保证宿主机随时可重置系统,且运行前无重要数据在宿主机上。

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/pve

各种要求

建议debian在使用前尽量使用最新的稳定版本的系统

警告:一键安装PVE仅支持具有独立公网IPv4地址的服务器

本项目依赖固定的 IPV4 地址进行网络分配,不支持以下情况:

  • 动态 IPV4 的环境(如机器重启后 IP 会变更的服务器)
  • 无独立的公网 IPV4 的环境(如通过家庭路由器 NAT 上网,需 DHCP 获取地址的情况)

如您的服务器不具备可分配的公网固定 IPv4 地址,请勿使用本项目。

本项目的一键安装脚本只适配Debian系统,非Debian无法通过APT源安装,官方只给了Debian的镜像,其他系统只能使用ISO安装,或使用自定义分区和常见问题分区中的其他方式解决问题。

  • 系统要求:Debian 8+

TIP

建议debian12+而不是debian11,debian11在部分独立服务器上有网络重启的BUG。

  • 硬件要求:2核2G内存x86_64arm架构服务器硬盘至少20G
  • 可开KVM的硬件要求:VM-X或AMD-V支持 (部分VPS和全部独服支持)
  • 如果硬件或系统需求不满足,可使用incus批量开LXC容器跳转

如果使用IPV6隧道进行宿主机的IPV6子网附加,务必在PVE安装成功但网关未自动设置时在对应文件添加内容,不要在一开始(未安装PVE)就进行IPV6隧道的添加。

警告:如果宿主机是独立服务器无IPMI自己无法重装系统的,不要使用本脚本,请直接委托技术人员手动ISO安装PVE,不要使用本项目,否则可能造成失联(部分独立服务器的网络设置不支持热插拔)

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

检测环境

  • 本项目相关脚本执行前务必执行本脚本检测环境,如果不符合安装PVE的要求则无法使用后续的脚本
  • 检测本机IPV6的网络配置情况(有无IPV6都可安装,只是查询一下罢了)
  • 检测硬件配置是否满足最低要求
  • 检测硬件环境是否可嵌套虚拟化KVM类型的服务器,不可嵌套虚拟化KVM的也可以开QEMU的TCG的服务器,性能较差
  • 检测系统环境是否可嵌套虚拟化KVM类型的服务器,不可嵌套虚拟化KVM的也可以开QEMU的TCG的服务器,性能较差
  • 不可嵌套虚拟化KVM的服务器不推荐安装PVE,不如使用incus性能更好

国际

bash
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

国内

bash
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

如果你需要更新IPV6信息再查询,那么执行以下命令后再查询

bash
rm -rf /usr/local/bin/pve_ipv6*
+import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/pve_kvm_1.BEDy-Dxt.png",l="/assets/pve_kvm_2.C98l0GO8.png",n="/assets/pve_kvm_3.DzuyyWMo.png",u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_precheck.md","filePath":"guide/pve/pve_precheck.md","lastUpdated":1773196139000}'),h={name:"guide/pve/pve_precheck.md"};function r(d,s,k,c,o,g){return t(),a("div",null,s[0]||(s[0]=[e(`

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

如果有未适配的商家或机器欢迎联系@spiritlhl_bot,有空会尝试支持一下

WARNING

会改变宿主机的网络结构,请保证宿主机随时可重置系统,且运行前无重要数据在宿主机上。

欢迎给项目一个Star进行免费的支持-->https://github.com/oneclickvirt/pve

各种要求

建议debian在使用前尽量使用最新的稳定版本的系统

警告:一键安装PVE仅支持具有独立公网IPv4地址的服务器

本项目依赖固定的 IPV4 地址进行网络分配,不支持以下情况:

  • 动态 IPV4 的环境(如机器重启后 IP 会变更的服务器)
  • 无独立的公网 IPV4 的环境(如通过家庭路由器 NAT 上网,需 DHCP 获取地址的情况)

如您的服务器不具备可分配的公网固定 IPv4 地址,请勿使用本项目。

本项目的一键安装脚本只适配Debian系统,非Debian无法通过APT源安装,官方只给了Debian的镜像,其他系统只能使用ISO安装,或使用自定义分区和常见问题分区中的其他方式解决问题。

  • 系统要求:Debian 8+

TIP

建议debian12+而不是debian11,debian11在部分独立服务器上有网络重启的BUG。

  • 硬件要求:2核2G内存x86_64arm架构服务器硬盘至少20G
  • 可开KVM的硬件要求:VM-X或AMD-V支持 (部分VPS和全部独服支持)
  • 如果硬件或系统需求不满足,可使用incus批量开LXC容器跳转

如果使用IPV6隧道进行宿主机的IPV6子网附加,务必在PVE安装成功但网关未自动设置时在对应文件添加内容,不要在一开始(未安装PVE)就进行IPV6隧道的添加。

警告:如果宿主机是独立服务器无IPMI自己无法重装系统的,不要使用本脚本,请直接委托技术人员手动ISO安装PVE,不要使用本项目,否则可能造成失联(部分独立服务器的网络设置不支持热插拔)

开设虚拟内存(SWAP)(非必须的可选项)

TIP

内存开点swap免得机器炸了,如果你的宿主机内存不够用硬盘又很多空闲的话

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

参考本组织相关项目的说明 跳转 这块开设虚拟内存的大小

物理内存大小推荐 SWAP 大小
≤ 2G内存的 2 倍
2G < 内存 ≤ 8G等于物理内存大小
≥ 8G约 8G 即可
需要休眠 (hibernation)至少等于物理内存大小

以上数值仅为推荐设置,实际数值请按照自身需求来,不要盲目照抄数值

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

检测环境

  • 本项目相关脚本执行前务必执行本脚本检测环境,如果不符合安装PVE的要求则无法使用后续的脚本
  • 检测本机IPV6的网络配置情况(有无IPV6都可安装,只是查询一下罢了)
  • 检测硬件配置是否满足最低要求
  • 检测硬件环境是否可嵌套虚拟化KVM类型的服务器,不可嵌套虚拟化KVM的也可以开QEMU的TCG的服务器,性能较差
  • 检测系统环境是否可嵌套虚拟化KVM类型的服务器,不可嵌套虚拟化KVM的也可以开QEMU的TCG的服务器,性能较差
  • 不可嵌套虚拟化KVM的服务器不推荐安装PVE,不如使用incus性能更好

国际

bash
bash <(curl -sSLk https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

国内

bash
bash <(curl -sSLk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

如果你需要更新IPV6信息再查询,那么执行以下命令后再查询

bash
rm -rf /usr/local/bin/pve_ipv6*
 rm -rf /usr/local/bin/pve_check_ipv6*
 rm -rf /usr/local/bin/pve_last_ipv6*

执行本项目的检测环境的命令,展示如下

图片

查询如上的只需使用下面的一键脚本自动创建虚拟机即可,无需手动再修改WEB端设置

图片

查询如上的在使用后续脚本创建了虚拟机后,可能需要手动修改WEB端设置,需要关闭对应每个虚拟机的硬件嵌套虚拟化,如下图

图片

先停止虚拟机再修改,修改完后再开机才能使用NOVNC,不关闭可能导致这个虚拟机有BUG无法使用

如果强行安装PVE开KVM,启动不了的也可以关闭这个选项试试能不能启动虚拟机,导致这些问题的原因就是上面说的,宿主机不支持嵌套虚拟化KVM进行加速

TIP

开设虚拟机前请使用screen挂起执行,避免开设时间过长,SSH不稳定导致中间执行中断



',46)]))}const F=i(h,[["render",r]]);export{u as __pageData,F as default}; diff --git a/assets/guide_pve_pve_precheck.md.CWRjiBoK.lean.js b/assets/guide_pve_pve_precheck.md.CAnEc34q.lean.js similarity index 77% rename from assets/guide_pve_pve_precheck.md.CWRjiBoK.lean.js rename to assets/guide_pve_pve_precheck.md.CAnEc34q.lean.js index 2656bc20ed..ce168e7c54 100644 --- a/assets/guide_pve_pve_precheck.md.CWRjiBoK.lean.js +++ b/assets/guide_pve_pve_precheck.md.CAnEc34q.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/pve_kvm_1.BEDy-Dxt.png",l="/assets/pve_kvm_2.C98l0GO8.png",n="/assets/pve_kvm_3.DzuyyWMo.png",u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_precheck.md","filePath":"guide/pve/pve_precheck.md","lastUpdated":1773143516000}'),h={name:"guide/pve/pve_precheck.md"};function r(d,s,k,c,o,g){return t(),a("div",null,s[0]||(s[0]=[e("",46)]))}const F=i(h,[["render",r]]);export{u as __pageData,F as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const p="/assets/pve_kvm_1.BEDy-Dxt.png",l="/assets/pve_kvm_2.C98l0GO8.png",n="/assets/pve_kvm_3.DzuyyWMo.png",u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_precheck.md","filePath":"guide/pve/pve_precheck.md","lastUpdated":1773196139000}'),h={name:"guide/pve/pve_precheck.md"};function r(d,s,k,c,o,g){return t(),a("div",null,s[0]||(s[0]=[e("",46)]))}const F=i(h,[["render",r]]);export{u as __pageData,F as default}; diff --git a/assets/guide_pve_pve_qa.md.Ci5qZtSU.js b/assets/guide_pve_pve_qa.md.CYd891jv.js similarity index 99% rename from assets/guide_pve_pve_qa.md.Ci5qZtSU.js rename to assets/guide_pve_pve_qa.md.CYd891jv.js index 60d50d3c80..8ba513923f 100644 --- a/assets/guide_pve_pve_qa.md.Ci5qZtSU.js +++ b/assets/guide_pve_pve_qa.md.CYd891jv.js @@ -1,4 +1,4 @@ -import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/onlinepkg.-C5qKOrj.png",p="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_qa.md","filePath":"guide/pve/pve_qa.md","lastUpdated":1773143516000}'),l={name:"guide/pve/pve_qa.md"};function r(h,s,d,o,c,k){return e(),i("div",null,s[0]||(s[0]=[n(`

解惑

执行脚本不到30秒机器就掉线了

原装系统执行

systemctl restart networking

看看是不是直接掉线,如果是那就是机器原生有问题,热插拔或者dhcp导致的网络无法自重启,此时建议更换宿主机的系统或DD一个新系统尝试

一般来说这种情况都是出现在独服的Debian11系统上,切换为Debian12系统就没问题了

安装PVE失败且报错显示某些安装包不存在

执行下述命令查询apt的源

shell
grep -r "deb " /etc/apt/sources.list /etc/apt/sources.list.d/

如果看到

deb file://
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/onlinepkg.-C5qKOrj.png",p="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_qa.md","filePath":"guide/pve/pve_qa.md","lastUpdated":1773196139000}'),l={name:"guide/pve/pve_qa.md"};function r(h,s,d,o,c,k){return e(),i("div",null,s[0]||(s[0]=[n(`

解惑

执行脚本不到30秒机器就掉线了

原装系统执行

systemctl restart networking

看看是不是直接掉线,如果是那就是机器原生有问题,热插拔或者dhcp导致的网络无法自重启,此时建议更换宿主机的系统或DD一个新系统尝试

一般来说这种情况都是出现在独服的Debian11系统上,切换为Debian12系统就没问题了

安装PVE失败且报错显示某些安装包不存在

执行下述命令查询apt的源

shell
grep -r "deb " /etc/apt/sources.list /etc/apt/sources.list.d/

如果看到

deb file://
 deb cdrom:[

这种开头的行,那么证明宿主机使用的是本地源而不是网络源,需要替换/etc/apt/sources.list的源,如

图片

一样替换为网络源才可使用PVE一键安装脚本进行安装。

替换网络源

国内服务器可使用

bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

国外服务器可使用

bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) --abroad

进行apt源的替换

安装PVE成功但重启后失联

如果什么机器安装PVE成功后WEB可用,但重启失联,请安装成功PVE后,重启前执行以下命令再重启

bash
auto_interface=$(grep '^auto ' /etc/network/interfaces | grep -v '^auto lo' | awk '{print $2}' | head -n 1)
 if ! grep -q "^post-up /sbin/ethtool" /etc/network/interfaces; then
     chattr -i /etc/network/interfaces
diff --git a/assets/guide_pve_pve_qa.md.Ci5qZtSU.lean.js b/assets/guide_pve_pve_qa.md.CYd891jv.lean.js
similarity index 87%
rename from assets/guide_pve_pve_qa.md.Ci5qZtSU.lean.js
rename to assets/guide_pve_pve_qa.md.CYd891jv.lean.js
index b2dffa853c..2020089455 100644
--- a/assets/guide_pve_pve_qa.md.Ci5qZtSU.lean.js
+++ b/assets/guide_pve_pve_qa.md.CYd891jv.lean.js
@@ -1 +1 @@
-import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/onlinepkg.-C5qKOrj.png",p="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_qa.md","filePath":"guide/pve/pve_qa.md","lastUpdated":1773143516000}'),l={name:"guide/pve/pve_qa.md"};function r(h,s,d,o,c,k){return e(),i("div",null,s[0]||(s[0]=[n("",121)]))}const u=a(l,[["render",r]]);export{g as __pageData,u as default};
+import{_ as a,c as i,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/onlinepkg.-C5qKOrj.png",p="/assets/dns0.DDagSewr.png",g=JSON.parse('{"title":"解惑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_qa.md","filePath":"guide/pve/pve_qa.md","lastUpdated":1773196139000}'),l={name:"guide/pve/pve_qa.md"};function r(h,s,d,o,c,k){return e(),i("div",null,s[0]||(s[0]=[n("",121)]))}const u=a(l,[["render",r]]);export{g as __pageData,u as default};
diff --git a/assets/guide_pve_pve_thanks.md.BcXFThz_.js b/assets/guide_pve_pve_thanks.md.IeKWHTlE.js
similarity index 97%
rename from assets/guide_pve_pve_thanks.md.BcXFThz_.js
rename to assets/guide_pve_pve_thanks.md.IeKWHTlE.js
index 8945a95c35..4ad3dbc5fe 100644
--- a/assets/guide_pve_pve_thanks.md.BcXFThz_.js
+++ b/assets/guide_pve_pve_thanks.md.IeKWHTlE.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/pve_thanks.md","filePath":"guide/pve/pve_thanks.md","lastUpdated":1773143516000}'),p={name:"guide/pve/pve_thanks.md"};function n(i,r,h,s,l,m){return a(),t("div",null,r[0]||(r[0]=[o('

致谢

https://forum.proxmox.com/

https://blog.ilolicon.com/archives/615

https://github.com/Ella-Alinda/somescripts/blob/main/nat.sh

https://pve.proxmox.com/pve-docs/qm.1.html

https://down.idc.wiki/Image/realServer-Template/

https://mirrors.tuna.tsinghua.edu.cn/proxmox/

https://github.com/roacn/pve/blob/main/pve.sh

https://github.com/spiritLHLS/lxc

https://github.com/leitbogioro/Tools

https://github.com/jiangcuo/Proxmox-Port

https://gitlab.com/minkebox/pimox

https://github.com/jiangcuo/run_proxmox_in_docker

https://github.com/yoursunny/ndpresponder

https://github.com/SuperManito/LinuxMirrors

感谢 @Ella-Alinda 提供的PVE指导

',16)]))}const b=e(p,[["render",n]]);export{g as __pageData,b as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/pve_thanks.md","filePath":"guide/pve/pve_thanks.md","lastUpdated":1773196139000}'),p={name:"guide/pve/pve_thanks.md"};function n(i,r,h,s,l,m){return a(),t("div",null,r[0]||(r[0]=[o('

致谢

https://forum.proxmox.com/

https://blog.ilolicon.com/archives/615

https://github.com/Ella-Alinda/somescripts/blob/main/nat.sh

https://pve.proxmox.com/pve-docs/qm.1.html

https://down.idc.wiki/Image/realServer-Template/

https://mirrors.tuna.tsinghua.edu.cn/proxmox/

https://github.com/roacn/pve/blob/main/pve.sh

https://github.com/spiritLHLS/lxc

https://github.com/leitbogioro/Tools

https://github.com/jiangcuo/Proxmox-Port

https://gitlab.com/minkebox/pimox

https://github.com/jiangcuo/run_proxmox_in_docker

https://github.com/yoursunny/ndpresponder

https://github.com/SuperManito/LinuxMirrors

感谢 @Ella-Alinda 提供的PVE指导

',16)]))}const b=e(p,[["render",n]]);export{g as __pageData,b as default}; diff --git a/assets/guide_pve_pve_thanks.md.BcXFThz_.lean.js b/assets/guide_pve_pve_thanks.md.IeKWHTlE.lean.js similarity index 85% rename from assets/guide_pve_pve_thanks.md.BcXFThz_.lean.js rename to assets/guide_pve_pve_thanks.md.IeKWHTlE.lean.js index 6df18c5402..72d815ad77 100644 --- a/assets/guide_pve_pve_thanks.md.BcXFThz_.lean.js +++ b/assets/guide_pve_pve_thanks.md.IeKWHTlE.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/pve_thanks.md","filePath":"guide/pve/pve_thanks.md","lastUpdated":1773143516000}'),p={name:"guide/pve/pve_thanks.md"};function n(i,r,h,s,l,m){return a(),t("div",null,r[0]||(r[0]=[o("",16)]))}const b=e(p,[["render",n]]);export{g as __pageData,b as default}; +import{_ as e,c as t,o as a,ag as o}from"./chunks/framework.QPV3Ar9-.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/pve/pve_thanks.md","filePath":"guide/pve/pve_thanks.md","lastUpdated":1773196139000}'),p={name:"guide/pve/pve_thanks.md"};function n(i,r,h,s,l,m){return a(),t("div",null,r[0]||(r[0]=[o("",16)]))}const b=e(p,[["render",n]]);export{g as __pageData,b as default}; diff --git a/assets/guide_pve_pve_windows.md.DvVP2KDj.js b/assets/guide_pve_pve_windows.md.DwSo14cJ.js similarity index 99% rename from assets/guide_pve_pve_windows.md.DvVP2KDj.js rename to assets/guide_pve_pve_windows.md.DwSo14cJ.js index c0796c080f..94ef519909 100644 --- a/assets/guide_pve_pve_windows.md.DvVP2KDj.js +++ b/assets/guide_pve_pve_windows.md.DwSo14cJ.js @@ -1,2 +1,2 @@ -import{_ as e}from"./chunks/wk7.Bl1-W8YX.js";import{_ as s,c,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d="/assets/kvm.CI48mv3H.png",t="/assets/dlwiniso.BxXucu9m.png",p="/assets/dlwiniso1.CQyxWlSu.png",r="/assets/general.BkOp2iK4.png",n="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",g="/assets/disks.BJniy5pO.png",m="/assets/cpu.DedcVQ_T.png",_="/assets/memory.CH7Gxf76.png",h="/assets/network.DPXM5W42.png",w="/assets/finish.Cf6DgPp1.png",u="/assets/start.vjgB4hml.png",v="/assets/gic1.XkdPXihx.png",k="/assets/gic2.s5VB7-xp.png",b="/assets/gic3.2zLznATL.png",y="/assets/gic4.CX3t8C19.png",x="/assets/gic5.pjwHWuhn.png",C="/assets/gic6.BnmyenL0.png",z="/assets/gic7.ZYHWzF5W.png",P="/assets/gic8.BwCbmRgC.png",f="/assets/gic9.62-9wTBo.png",q="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",I="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",D="/assets/virtio.CUVhk14O.png",E="/assets/lower2.SPGPKJ4N.png",B="/assets/lower1.DFw6c1iw.png",O="/assets/nodisk.CH47I8Tu.png",N="/assets/nodisk1.gZ09o2py.png",M="/assets/nodisk2.Do6XEKMW.png",W="/assets/nodisk3.1vBQc75S.png",K="/assets/nodisk4.CJjHGgtp.png",L="/assets/wk4.K5XvE6uQ.png",T="/assets/wk5.BEJ5BAWW.png",U="/assets/wk6.D9MKwk3w.png",X="/assets/wk1.BGnwsbrE.png",H="/assets/wk2.BasdNK2d.png",G="/assets/wk3.CWstwLHH.png",oo=JSON.parse('{"title":"通过PVE开设Windows虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_windows.md","filePath":"guide/pve/pve_windows.md","lastUpdated":1773143516000}'),A={name:"guide/pve/pve_windows.md"};function R(Q,o,F,J,$,j){return i(),c("div",null,o[0]||(o[0]=[a('

通过PVE开设Windows虚拟机

开设时选择KVM虚拟化还是QEMU的TCG仿真

宿主机本身如果支持嵌套虚拟化,那么就可用hostkvm64qemu64类型的CPU

从性能上来说,host > kvm64 > qemu64

qemu类型虚拟化性能损耗很多

如果本身不支持嵌套虚拟化,那么只能用qemu64类型的CPU,且需要在启动虚拟机前修改Options[选项]中的KVM hardware virtualization[KVM硬件虚拟化]

设置为no取消Enabled[启用]的勾选

kvm

如果你实在不清楚本机是否支持嵌套虚拟化,那么查看 系统与硬件配置要求 --> 检测环境 检测确保可用(含尝试性启用功能)

它的主体逻辑在

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh

推荐直接使用本教程中的PVE的 系统和硬件配置要求 --> 环境检测 进行一键检测,或者如下检测逻辑:

egrep -c '(vmx|svm)' /proc/cpuinfo 检测是否为1

cat /sys/module/kvm_intel/parameters/nested是否存在且为1

lsmod | grep -q kvm检测是否已加载

这些都支持的时候,选host类型才100%无问题,其他情况下使用可能存在未知报错自行尝试。

使用带virtio的iso镜像文件开设

1.下载镜像

安装需要提前下载镜像文件local(pve) --> ISO images --> Download from URL

下载链接URL:可使用

https://github.com/ILLKX/Windows-VirtIO

中的文件链接,文件名字File Name:win.iso

download

点击下载Download,下载完成后当前的页面可见win.iso的文件大小,可见格式为iso。

downloaded

2.设置模板

页面顶部右上角点击Create VM

General窗口中,Resource Pool:勾选mypoolName填写win,然后点击Next

general

OS窗口中,ISO image勾选win.isoGuest OS勾选TypeMicrosoft Windows类型,Version选择当前ISOwin的版本,示例下载是2022,就选11/2022类型,然后点击Next

OS

System窗口中,Graphic card勾选VirtIO-GPU类型,Machine勾选q35类型,SCSI Controller勾选VirtIO SCSI类型,BIOS勾选Default (SeaBIOS)类型,然后点击Next

system

Disk窗口中,Cache勾选Write Back类型,Disk size (GiB)填写你要分配的硬盘大小,一般不小于20Storage选择存储在哪个盘,示例只有系统盘local所以就选loacl,然后点击Next

disk

CPU窗口中,Cores填写所需核数,CPU类型按照前面描述的方法选择,然后点击Next

cpu

Memory窗口中,Memory (MiB)填写所需内存大小,然后点击Next

memory

Network窗口中,Bridge勾选vmbr1类型,Model勾选VirtIO (paravirtualized)类型,Firewall取消勾选,然后点击Next

Network

Confirm窗口中,点击Finish

finish

3.图形化配置安装

左侧点击设置好的模板,右上角点击Start启动虚拟机,然后点击Console进入VNC界面,等待操作系统启动。

console

然后在VNC中点击下一页,然后点击现在安装,然后点击我没有产品密钥,然后勾选接受许可,点击下一页,然后勾选自定义安装

win0

win1

win2

win3

win4

然后如果镜像本身带virtio,那么应该可见可选系统存储的硬盘及其大小,选中后点击下一页

win5

win6

然后等待系统安装,应该会自动重启几次,大概耗时10分钟以上。

win7

安装完成后首次登录会要求设置密码,正常设置即可

win8

设置完成后,NOVNC页面左侧有一个弹出框,点击第一个按钮,然后根据登录提示,点击Ctrl+Alt+最后一个按钮,进入登录页面。

4.初始化网络

由于通过本项目设置的PVE是静态网络,所以登陆后需要手动修改绑定的IP地址,不通过DHCP

在桌面右下角右击点出打开 网络和Internet设置,点击后,在弹出的设置页面中点击更改适配器设置

win9

然后在网络链接中勾选以太网,点击更改此连接的设置

win10

在弹出框中点击Internet协议版本4(TCP/IPV4)选中后点击属性

win11

在新弹出的弹出框中,选择并点击使用下面的IP地址(s),然后分别填入

IP地址(I):172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

子网掩码(U):255.255.255.0

默认网关(D):172.16.1.1

然后选择点击使用下面的DNS服务器地址(E),分别填入

8.8.8.8
+import{_ as e}from"./chunks/wk7.Bl1-W8YX.js";import{_ as s,c,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d="/assets/kvm.CI48mv3H.png",t="/assets/dlwiniso.BxXucu9m.png",p="/assets/dlwiniso1.CQyxWlSu.png",r="/assets/general.BkOp2iK4.png",n="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",g="/assets/disks.BJniy5pO.png",m="/assets/cpu.DedcVQ_T.png",_="/assets/memory.CH7Gxf76.png",h="/assets/network.DPXM5W42.png",w="/assets/finish.Cf6DgPp1.png",u="/assets/start.vjgB4hml.png",v="/assets/gic1.XkdPXihx.png",k="/assets/gic2.s5VB7-xp.png",b="/assets/gic3.2zLznATL.png",y="/assets/gic4.CX3t8C19.png",x="/assets/gic5.pjwHWuhn.png",C="/assets/gic6.BnmyenL0.png",z="/assets/gic7.ZYHWzF5W.png",P="/assets/gic8.BwCbmRgC.png",f="/assets/gic9.62-9wTBo.png",q="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",I="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",D="/assets/virtio.CUVhk14O.png",E="/assets/lower2.SPGPKJ4N.png",B="/assets/lower1.DFw6c1iw.png",O="/assets/nodisk.CH47I8Tu.png",N="/assets/nodisk1.gZ09o2py.png",M="/assets/nodisk2.Do6XEKMW.png",W="/assets/nodisk3.1vBQc75S.png",K="/assets/nodisk4.CJjHGgtp.png",L="/assets/wk4.K5XvE6uQ.png",T="/assets/wk5.BEJ5BAWW.png",U="/assets/wk6.D9MKwk3w.png",X="/assets/wk1.BGnwsbrE.png",H="/assets/wk2.BasdNK2d.png",G="/assets/wk3.CWstwLHH.png",oo=JSON.parse('{"title":"通过PVE开设Windows虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_windows.md","filePath":"guide/pve/pve_windows.md","lastUpdated":1773196139000}'),A={name:"guide/pve/pve_windows.md"};function R(Q,o,F,J,$,j){return i(),c("div",null,o[0]||(o[0]=[a('

通过PVE开设Windows虚拟机

开设时选择KVM虚拟化还是QEMU的TCG仿真

宿主机本身如果支持嵌套虚拟化,那么就可用hostkvm64qemu64类型的CPU

从性能上来说,host > kvm64 > qemu64

qemu类型虚拟化性能损耗很多

如果本身不支持嵌套虚拟化,那么只能用qemu64类型的CPU,且需要在启动虚拟机前修改Options[选项]中的KVM hardware virtualization[KVM硬件虚拟化]

设置为no取消Enabled[启用]的勾选

kvm

如果你实在不清楚本机是否支持嵌套虚拟化,那么查看 系统与硬件配置要求 --> 检测环境 检测确保可用(含尝试性启用功能)

它的主体逻辑在

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh

推荐直接使用本教程中的PVE的 系统和硬件配置要求 --> 环境检测 进行一键检测,或者如下检测逻辑:

egrep -c '(vmx|svm)' /proc/cpuinfo 检测是否为1

cat /sys/module/kvm_intel/parameters/nested是否存在且为1

lsmod | grep -q kvm检测是否已加载

这些都支持的时候,选host类型才100%无问题,其他情况下使用可能存在未知报错自行尝试。

使用带virtio的iso镜像文件开设

1.下载镜像

安装需要提前下载镜像文件local(pve) --> ISO images --> Download from URL

下载链接URL:可使用

https://github.com/ILLKX/Windows-VirtIO

中的文件链接,文件名字File Name:win.iso

download

点击下载Download,下载完成后当前的页面可见win.iso的文件大小,可见格式为iso。

downloaded

2.设置模板

页面顶部右上角点击Create VM

General窗口中,Resource Pool:勾选mypoolName填写win,然后点击Next

general

OS窗口中,ISO image勾选win.isoGuest OS勾选TypeMicrosoft Windows类型,Version选择当前ISOwin的版本,示例下载是2022,就选11/2022类型,然后点击Next

OS

System窗口中,Graphic card勾选VirtIO-GPU类型,Machine勾选q35类型,SCSI Controller勾选VirtIO SCSI类型,BIOS勾选Default (SeaBIOS)类型,然后点击Next

system

Disk窗口中,Cache勾选Write Back类型,Disk size (GiB)填写你要分配的硬盘大小,一般不小于20Storage选择存储在哪个盘,示例只有系统盘local所以就选loacl,然后点击Next

disk

CPU窗口中,Cores填写所需核数,CPU类型按照前面描述的方法选择,然后点击Next

cpu

Memory窗口中,Memory (MiB)填写所需内存大小,然后点击Next

memory

Network窗口中,Bridge勾选vmbr1类型,Model勾选VirtIO (paravirtualized)类型,Firewall取消勾选,然后点击Next

Network

Confirm窗口中,点击Finish

finish

3.图形化配置安装

左侧点击设置好的模板,右上角点击Start启动虚拟机,然后点击Console进入VNC界面,等待操作系统启动。

console

然后在VNC中点击下一页,然后点击现在安装,然后点击我没有产品密钥,然后勾选接受许可,点击下一页,然后勾选自定义安装

win0

win1

win2

win3

win4

然后如果镜像本身带virtio,那么应该可见可选系统存储的硬盘及其大小,选中后点击下一页

win5

win6

然后等待系统安装,应该会自动重启几次,大概耗时10分钟以上。

win7

安装完成后首次登录会要求设置密码,正常设置即可

win8

设置完成后,NOVNC页面左侧有一个弹出框,点击第一个按钮,然后根据登录提示,点击Ctrl+Alt+最后一个按钮,进入登录页面。

4.初始化网络

由于通过本项目设置的PVE是静态网络,所以登陆后需要手动修改绑定的IP地址,不通过DHCP

在桌面右下角右击点出打开 网络和Internet设置,点击后,在弹出的设置页面中点击更改适配器设置

win9

然后在网络链接中勾选以太网,点击更改此连接的设置

win10

在弹出框中点击Internet协议版本4(TCP/IPV4)选中后点击属性

win11

在新弹出的弹出框中,选择并点击使用下面的IP地址(s),然后分别填入

IP地址(I):172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

子网掩码(U):255.255.255.0

默认网关(D):172.16.1.1

然后选择点击使用下面的DNS服务器地址(E),分别填入

8.8.8.8
 144.144.144.144

然后右下角点击确定,注意不要勾选退出时验证

win12

然后其他弹出框都选确定就行了,然后本虚拟机就有网络了。

5.取消CD盘挂载

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

使用不带virtio的iso镜像开设

1.下载镜像

无virtio的win镜像下载可使用

https://github.com/ILLKX/Windows

这块的镜像

virtio的iso镜像可使用

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

下载

virtio也可以只下载msi包,本地用软件打包成iso压缩格式再本地上传到ProxmoxVE中也可以

这样的话包小一些,前者官方的是包含所有WIN镜像支持的包总计500MB左右,后者自己打包5MB左右

2.virtio导入

注意这里的导入在ProxmoxVE的8.x及之后的版本中,OS这一栏默认可选择virtio启动加载,如图所示

virtio

而在更低版本的ProxmoxVE中,比如7.x和6.x的版本,OS这一栏默认无法选择virtio启动加载

lower

需要手动在Hardware[硬件]中点击Add[添加]添加CD/DVD Drive选择下载好的virtioISO文件

lower

然后其他的一切照常,直到

nodisk

这块找不到硬盘,需要选择加载驱动程序

nodisk

然后选择驱动盘virtio的,点击打开,从amd64那导入对应系统名字的驱动

nodisk

我的是windows server 2019的镜像所以导入的是2k19的驱动,导入完毕后选择导入的驱动,点击下一页

nodisk

nodisk

这样就能看得到硬盘了,选中后继续后续的安装步骤,选中后继续后续的安装步骤如同前面的教程,直到系统安装完毕,进入桌面。

3.通过virtio-win-guest-tools安装驱动

此时安装成功,出现桌面后,还需要手动安装驱动

打开VirtIO驱动所在的CD光驱目录,最下面有一个virtio-win-guest-tools程序,会安装用到的virtio驱动,这个驱动也会包含virtio的网卡驱动

wk

wk

wk

点击安装完毕后就安装上网卡驱动了,后续网络设置参考前面的初始化网络的教程

4.安装网卡驱动(备选)

此时安装成功,出现桌面后,还需要手动安装网卡驱动才能连通网络:

  1. 打开 控制面板设备管理器
  2. 找到 以太网控制器,右键选择 更新驱动程序
  3. 选择 浏览我的计算机以查找驱动程序软件 (R)
  4. 浏览到VirtIO驱动所在的CD光驱目录
  5. 打开其中的 NetKVM 文件夹
  6. 根据当前系统版本选择对应的驱动文件夹(和上面相同的操作,我会选择2k19文件夹,里面的amd64驱动)
  7. 确认安装,完成后即可成功加载VirtIO的网卡驱动

wk

wk

wk

后续网络设置参考前面的初始化网络的教程

5.取消CD盘挂载

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

',132)]))}const eo=s(A,[["render",R]]);export{oo as __pageData,eo as default}; diff --git a/assets/guide_pve_pve_windows.md.DvVP2KDj.lean.js b/assets/guide_pve_pve_windows.md.DwSo14cJ.lean.js similarity index 96% rename from assets/guide_pve_pve_windows.md.DvVP2KDj.lean.js rename to assets/guide_pve_pve_windows.md.DwSo14cJ.lean.js index fb77971457..bf88047d72 100644 --- a/assets/guide_pve_pve_windows.md.DvVP2KDj.lean.js +++ b/assets/guide_pve_pve_windows.md.DwSo14cJ.lean.js @@ -1 +1 @@ -import{_ as e}from"./chunks/wk7.Bl1-W8YX.js";import{_ as s,c,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d="/assets/kvm.CI48mv3H.png",t="/assets/dlwiniso.BxXucu9m.png",p="/assets/dlwiniso1.CQyxWlSu.png",r="/assets/general.BkOp2iK4.png",n="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",g="/assets/disks.BJniy5pO.png",m="/assets/cpu.DedcVQ_T.png",_="/assets/memory.CH7Gxf76.png",h="/assets/network.DPXM5W42.png",w="/assets/finish.Cf6DgPp1.png",u="/assets/start.vjgB4hml.png",v="/assets/gic1.XkdPXihx.png",k="/assets/gic2.s5VB7-xp.png",b="/assets/gic3.2zLznATL.png",y="/assets/gic4.CX3t8C19.png",x="/assets/gic5.pjwHWuhn.png",C="/assets/gic6.BnmyenL0.png",z="/assets/gic7.ZYHWzF5W.png",P="/assets/gic8.BwCbmRgC.png",f="/assets/gic9.62-9wTBo.png",q="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",I="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",D="/assets/virtio.CUVhk14O.png",E="/assets/lower2.SPGPKJ4N.png",B="/assets/lower1.DFw6c1iw.png",O="/assets/nodisk.CH47I8Tu.png",N="/assets/nodisk1.gZ09o2py.png",M="/assets/nodisk2.Do6XEKMW.png",W="/assets/nodisk3.1vBQc75S.png",K="/assets/nodisk4.CJjHGgtp.png",L="/assets/wk4.K5XvE6uQ.png",T="/assets/wk5.BEJ5BAWW.png",U="/assets/wk6.D9MKwk3w.png",X="/assets/wk1.BGnwsbrE.png",H="/assets/wk2.BasdNK2d.png",G="/assets/wk3.CWstwLHH.png",oo=JSON.parse('{"title":"通过PVE开设Windows虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_windows.md","filePath":"guide/pve/pve_windows.md","lastUpdated":1773143516000}'),A={name:"guide/pve/pve_windows.md"};function R(Q,o,F,J,$,j){return i(),c("div",null,o[0]||(o[0]=[a("",132)]))}const eo=s(A,[["render",R]]);export{oo as __pageData,eo as default}; +import{_ as e}from"./chunks/wk7.Bl1-W8YX.js";import{_ as s,c,o as i,ag as a}from"./chunks/framework.QPV3Ar9-.js";const d="/assets/kvm.CI48mv3H.png",t="/assets/dlwiniso.BxXucu9m.png",p="/assets/dlwiniso1.CQyxWlSu.png",r="/assets/general.BkOp2iK4.png",n="/assets/os.CX7bMEp5.png",l="/assets/system.C_AmkiPg.png",g="/assets/disks.BJniy5pO.png",m="/assets/cpu.DedcVQ_T.png",_="/assets/memory.CH7Gxf76.png",h="/assets/network.DPXM5W42.png",w="/assets/finish.Cf6DgPp1.png",u="/assets/start.vjgB4hml.png",v="/assets/gic1.XkdPXihx.png",k="/assets/gic2.s5VB7-xp.png",b="/assets/gic3.2zLznATL.png",y="/assets/gic4.CX3t8C19.png",x="/assets/gic5.pjwHWuhn.png",C="/assets/gic6.BnmyenL0.png",z="/assets/gic7.ZYHWzF5W.png",P="/assets/gic8.BwCbmRgC.png",f="/assets/gic9.62-9wTBo.png",q="/assets/net1.CUyp8ayS.png",V="/assets/net2.BP2m5XnQ.png",I="/assets/net3.BJFg7Me5.png",S="/assets/net4.CANZtcPE.png",D="/assets/virtio.CUVhk14O.png",E="/assets/lower2.SPGPKJ4N.png",B="/assets/lower1.DFw6c1iw.png",O="/assets/nodisk.CH47I8Tu.png",N="/assets/nodisk1.gZ09o2py.png",M="/assets/nodisk2.Do6XEKMW.png",W="/assets/nodisk3.1vBQc75S.png",K="/assets/nodisk4.CJjHGgtp.png",L="/assets/wk4.K5XvE6uQ.png",T="/assets/wk5.BEJ5BAWW.png",U="/assets/wk6.D9MKwk3w.png",X="/assets/wk1.BGnwsbrE.png",H="/assets/wk2.BasdNK2d.png",G="/assets/wk3.CWstwLHH.png",oo=JSON.parse('{"title":"通过PVE开设Windows虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/pve/pve_windows.md","filePath":"guide/pve/pve_windows.md","lastUpdated":1773196139000}'),A={name:"guide/pve/pve_windows.md"};function R(Q,o,F,J,$,j){return i(),c("div",null,o[0]||(o[0]=[a("",132)]))}const eo=s(A,[["render",R]]);export{oo as __pageData,eo as default}; diff --git a/assets/guide_qemu_qemu_build.md.BwnIsDNw.js b/assets/guide_qemu_qemu_build.md.BGp-amd0.js similarity index 99% rename from assets/guide_qemu_qemu_build.md.BwnIsDNw.js rename to assets/guide_qemu_qemu_build.md.BGp-amd0.js index 6d5962a69e..0ad69cbd48 100644 --- a/assets/guide_qemu_qemu_build.md.BwnIsDNw.js +++ b/assets/guide_qemu_qemu_build.md.BGp-amd0.js @@ -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":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_build.md","filePath":"guide/qemu/qemu_build.md","lastUpdated":1773143516000}'),l={name:"guide/qemu/qemu_build.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一台 KVM/QEMU 虚拟机,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPv6 地址(需宿主机已有公网 IPv6 且安装脚本已配置 IPv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/oneqemu.sh
+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"},"headers":[],"relativePath":"guide/qemu/qemu_build.md","filePath":"guide/qemu/qemu_build.md","lastUpdated":1773196139000}'),l={name:"guide/qemu/qemu_build.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

前言

两种开设方式

单独开设

  • 只生成一台 KVM/QEMU 虚拟机,自动判断国际服务器还是国内服务器
  • 可配置绑定独立的 IPv6 地址(需宿主机已有公网 IPv6 且安装脚本已配置 IPv6 网络)
  • 支持 x86_64 和 ARM64 架构的服务器

下载脚本

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/oneqemu.sh
 chmod +x oneqemu.sh

国内

shell
curl -sSLO https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/oneqemu.sh
 chmod +x oneqemu.sh

示例

运行支持的变量如下

bash
./oneqemu.sh <name> <cpu> <memory_mb> <disk_gb> <password> <sshport> <startport> <endport> [independent_ipv6:y/n] [system]

目前 system 仅支持选择:

  • debian
  • ubuntu

默认不填则是 debian

shell
./oneqemu.sh vm1 1 1024 10 passwordhere 25000 34975 35000 n debian13

以下为开设的示例虚拟机的信息:

属性
虚拟机名字vm1
SSH 登录的用户名root
SSH 登录的密码MyPassword
CPU 核数1
内存大小1024MB
硬盘大小10GB
SSH 端口25000
内外网映射端口一致的区间34975 到 35000
系统debian
是否绑定独立的 IPv6 地址N

相关操作

查看所有虚拟机

shell
virsh list --all

启动虚拟机

shell
virsh start vm1

停止虚拟机

shell
virsh shutdown vm1

强制停止虚拟机

shell
virsh destroy vm1

进入虚拟机控制台

shell
virsh console vm1

要退出控制台请按 Ctrl + ]

删除示例

shell
virsh destroy vm1
 virsh undefine vm1 --remove-all-storage

查看虚拟机信息

shell
virsh dominfo vm1

批量开设

  • 批量多次运行继承配置生成
  • 自动递增虚拟机名(vm1, vm2, ...)、SSH 端口、公网端口
  • 虚拟机信息记录到 vmlog 文件
  • 生成多个时为避免 SSH 连接中断建议在 screen 中执行
  • 支持 x86_64 和 ARM64 架构的服务器

运行

国际

shell
curl -sSLO https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/create_qemu.sh
diff --git a/assets/guide_qemu_qemu_build.md.BwnIsDNw.lean.js b/assets/guide_qemu_qemu_build.md.BGp-amd0.lean.js
similarity index 86%
rename from assets/guide_qemu_qemu_build.md.BwnIsDNw.lean.js
rename to assets/guide_qemu_qemu_build.md.BGp-amd0.lean.js
index 096300af45..1f451b5505 100644
--- a/assets/guide_qemu_qemu_build.md.BwnIsDNw.lean.js
+++ b/assets/guide_qemu_qemu_build.md.BGp-amd0.lean.js
@@ -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"},"headers":[],"relativePath":"guide/qemu/qemu_build.md","filePath":"guide/qemu/qemu_build.md","lastUpdated":1773143516000}'),l={name:"guide/qemu/qemu_build.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",53)]))}const g=i(l,[["render",t]]);export{c as __pageData,g as default};
+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"},"headers":[],"relativePath":"guide/qemu/qemu_build.md","filePath":"guide/qemu/qemu_build.md","lastUpdated":1773196139000}'),l={name:"guide/qemu/qemu_build.md"};function t(h,s,p,k,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",53)]))}const g=i(l,[["render",t]]);export{c as __pageData,g as default};
diff --git a/assets/guide_qemu_qemu_install.md.Chptg-V4.js b/assets/guide_qemu_qemu_install.md.BjztCnH1.js
similarity index 99%
rename from assets/guide_qemu_qemu_install.md.Chptg-V4.js
rename to assets/guide_qemu_qemu_install.md.BjztCnH1.js
index 5e70293a97..84c5fd0e57 100644
--- a/assets/guide_qemu_qemu_install.md.Chptg-V4.js
+++ b/assets/guide_qemu_qemu_install.md.BjztCnH1.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_install.md","filePath":"guide/qemu/qemu_install.md","lastUpdated":1773143516000}'),t={name:"guide/qemu/qemu_install.md"};function n(p,s,h,d,r,k){return e(),a("div",null,s[0]||(s[0]=[l('

前言

安装 QEMU/KVM 环境,包含 qemu-kvm + 网络配置 + 端口转发全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Debian 11+、Ubuntu 20.04+
  • 自动安装 QEMU/KVM、libvirt、网桥工具等全套组件
  • 自动配置宿主机网桥(virbr0)和 NAT 网络
  • 自动检测公网 IPv6 地址并配置 IPv6 网络(如存在)
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

TIP

安装完成后建议执行 virsh list --all 验证 KVM 环境是否正常运行。

卸载 QEMU/KVM 环境

一键卸载 QEMU/KVM 全套环境,包括所有虚拟机、镜像、网络、辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有虚拟机、镜像及 QEMU/KVM 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const u=i(t,[["render",n]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_install.md","filePath":"guide/qemu/qemu_install.md","lastUpdated":1773196139000}'),t={name:"guide/qemu/qemu_install.md"};function n(p,s,h,d,r,k){return e(),a("div",null,s[0]||(s[0]=[l('

前言

安装 QEMU/KVM 环境,包含 qemu-kvm + 网络配置 + 端口转发全套组件

开设虚拟内存

TIP

内存开点 swap 免得机器炸了

单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用

建议只开实际内存大小两倍大小的虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

环境安装

  • 支持系统:Debian 11+、Ubuntu 20.04+
  • 自动安装 QEMU/KVM、libvirt、网桥工具等全套组件
  • 自动配置宿主机网桥(virbr0)和 NAT 网络
  • 自动检测公网 IPv6 地址并配置 IPv6 网络(如存在)
  • 支持 x86_64 和 ARM64 架构的服务器

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

TIP

安装完成后建议执行 virsh list --all 验证 KVM 环境是否正常运行。

卸载 QEMU/KVM 环境

一键卸载 QEMU/KVM 全套环境,包括所有虚拟机、镜像、网络、辅助文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuuninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。删除内容包括所有虚拟机、镜像及 QEMU/KVM 网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

',24)]))}const u=i(t,[["render",n]]);export{o as __pageData,u as default}; diff --git a/assets/guide_qemu_qemu_install.md.Chptg-V4.lean.js b/assets/guide_qemu_qemu_install.md.BjztCnH1.lean.js similarity index 86% rename from assets/guide_qemu_qemu_install.md.Chptg-V4.lean.js rename to assets/guide_qemu_qemu_install.md.BjztCnH1.lean.js index 5a70c4ff9b..883fc7d7cb 100644 --- a/assets/guide_qemu_qemu_install.md.Chptg-V4.lean.js +++ b/assets/guide_qemu_qemu_install.md.BjztCnH1.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_install.md","filePath":"guide/qemu/qemu_install.md","lastUpdated":1773143516000}'),t={name:"guide/qemu/qemu_install.md"};function n(p,s,h,d,r,k){return e(),a("div",null,s[0]||(s[0]=[l("",24)]))}const u=i(t,[["render",n]]);export{o as __pageData,u as default}; +import{_ as i,c as a,o as e,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_install.md","filePath":"guide/qemu/qemu_install.md","lastUpdated":1773196139000}'),t={name:"guide/qemu/qemu_install.md"};function n(p,s,h,d,r,k){return e(),a("div",null,s[0]||(s[0]=[l("",24)]))}const u=i(t,[["render",n]]);export{o as __pageData,u as default}; diff --git a/assets/guide_qemu_qemu_precheck.md.BvPKLRFu.js b/assets/guide_qemu_qemu_precheck.md.0u8V4hMo.js similarity index 98% rename from assets/guide_qemu_qemu_precheck.md.BvPKLRFu.js rename to assets/guide_qemu_qemu_precheck.md.0u8V4hMo.js index da413b5964..8a9b332a2f 100644 --- a/assets/guide_qemu_qemu_precheck.md.BvPKLRFu.js +++ b/assets/guide_qemu_qemu_precheck.md.0u8V4hMo.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_precheck.md","filePath":"guide/qemu/qemu_precheck.md","lastUpdated":1773143516000}'),d={name:"guide/qemu/qemu_precheck.md"};function s(r,t,n,o,c,p){return i(),a("div",null,t[0]||(t[0]=[l('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/qemu

项目特点

基于 QEMU/KVM 进行虚拟化,通过批量或单独开设 KVM 虚拟机,无需 Proxmox VE 或 Incus 等管理平台

  • 纯 QEMU/KVM 虚拟化方案,轻量、无需额外管理平台
  • 每台虚拟机自带独立 SSH 端口及端口映射
  • 支持 IPv4/IPv6 自动分配与端口转发
  • 支持批量开设,信息自动记录至日志文件
  • 支持 X86_64 和 ARM64 架构
  • 支持国内 CDN 镜像加速

支持的系统(宿主机)

系统amd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

配置要求

  • 宿主机需支持 KVM 硬件虚拟化(/dev/kvm 可用)
  • 内核版本:≥ 4.15
  • 架构:x86_64(amd64)或 ARM64
  • 内存:至少 1GB 可用内存(不含宿主机自身占用)
  • 存储:至少 10GB 可用磁盘空间
  • 系统:Debian 11+、Ubuntu 20.04+

WARNING

使用本项目前请确保宿主机支持 KVM 虚拟化,可通过以下命令检测:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

输出大于 0 即支持 KVM 虚拟化。也可执行 ls /dev/kvm 确认设备文件存在。

TIP

如果你的宿主机本身没有 IPv6 子网又想给虚拟机分配 IPv6 地址,需要宿主机本身已有公网 IPv6 地址,安装脚本会自动检测并配置。

推荐在开设虚拟机前先增加部分 SWAP 虚拟内存,避免突发的内存占用导致宿主机卡死

',13)]))}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; +import{_ as e,c as a,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_precheck.md","filePath":"guide/qemu/qemu_precheck.md","lastUpdated":1773196139000}'),d={name:"guide/qemu/qemu_precheck.md"};function s(r,t,n,o,c,p){return i(),a("div",null,t[0]||(t[0]=[l('

前言

以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了

欢迎给项目一个 Star 进行免费的支持-->https://github.com/oneclickvirt/qemu

项目特点

基于 QEMU/KVM 进行虚拟化,通过批量或单独开设 KVM 虚拟机,无需 Proxmox VE 或 Incus 等管理平台

  • 纯 QEMU/KVM 虚拟化方案,轻量、无需额外管理平台
  • 每台虚拟机自带独立 SSH 端口及端口映射
  • 支持 IPv4/IPv6 自动分配与端口转发
  • 支持批量开设,信息自动记录至日志文件
  • 支持 X86_64 和 ARM64 架构
  • 支持国内 CDN 镜像加速

支持的系统(宿主机)

系统amd64arm64
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04

配置要求

  • 宿主机需支持 KVM 硬件虚拟化(/dev/kvm 可用)
  • 内核版本:≥ 4.15
  • 架构:x86_64(amd64)或 ARM64
  • 内存:至少 1GB 可用内存(不含宿主机自身占用)
  • 存储:至少 10GB 可用磁盘空间
  • 系统:Debian 11+、Ubuntu 20.04+

WARNING

使用本项目前请确保宿主机支持 KVM 虚拟化,可通过以下命令检测:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo

输出大于 0 即支持 KVM 虚拟化。也可执行 ls /dev/kvm 确认设备文件存在。

TIP

如果你的宿主机本身没有 IPv6 子网又想给虚拟机分配 IPv6 地址,需要宿主机本身已有公网 IPv6 地址,安装脚本会自动检测并配置。

推荐在开设虚拟机前先增加部分 SWAP 虚拟内存,避免突发的内存占用导致宿主机卡死

',13)]))}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_qemu_qemu_precheck.md.BvPKLRFu.lean.js b/assets/guide_qemu_qemu_precheck.md.0u8V4hMo.lean.js similarity index 86% rename from assets/guide_qemu_qemu_precheck.md.BvPKLRFu.lean.js rename to assets/guide_qemu_qemu_precheck.md.0u8V4hMo.lean.js index ecc2c79504..abac84c07b 100644 --- a/assets/guide_qemu_qemu_precheck.md.BvPKLRFu.lean.js +++ b/assets/guide_qemu_qemu_precheck.md.0u8V4hMo.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_precheck.md","filePath":"guide/qemu/qemu_precheck.md","lastUpdated":1773143516000}'),d={name:"guide/qemu/qemu_precheck.md"};function s(r,t,n,o,c,p){return i(),a("div",null,t[0]||(t[0]=[l("",13)]))}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; +import{_ as e,c as a,o as i,ag as l}from"./chunks/framework.QPV3Ar9-.js";const u=JSON.parse('{"title":"前言","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_precheck.md","filePath":"guide/qemu/qemu_precheck.md","lastUpdated":1773196139000}'),d={name:"guide/qemu/qemu_precheck.md"};function s(r,t,n,o,c,p){return i(),a("div",null,t[0]||(t[0]=[l("",13)]))}const m=e(d,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/guide_qemu_qemu_qa.md.DyrsGQ5C.js b/assets/guide_qemu_qemu_qa.md.CcsWFlWk.js similarity index 99% rename from assets/guide_qemu_qemu_qa.md.DyrsGQ5C.js rename to assets/guide_qemu_qemu_qa.md.CcsWFlWk.js index a44ec8a688..aa4b04937e 100644 --- a/assets/guide_qemu_qemu_qa.md.DyrsGQ5C.js +++ b/assets/guide_qemu_qemu_qa.md.CcsWFlWk.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_qa.md","filePath":"guide/qemu/qemu_qa.md","lastUpdated":1773143516000}'),l={name:"guide/qemu/qemu_qa.md"};function t(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n(`

常见问题答疑

KVM 不可用 / /dev/kvm 不存在

检查宿主机是否支持硬件虚拟化:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_qa.md","filePath":"guide/qemu/qemu_qa.md","lastUpdated":1773196139000}'),l={name:"guide/qemu/qemu_qa.md"};function t(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n(`

常见问题答疑

KVM 不可用 / /dev/kvm 不存在

检查宿主机是否支持硬件虚拟化:

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
 ls /dev/kvm

若在 VPS 上无法使用 KVM,可能是宿主机不支持嵌套虚拟化(Nested Virtualization),请联系 VPS 提供商确认。

virsh: command not found

QEMU/KVM 环境未正确安装,请重新执行安装脚本:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

虚拟机无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep virbr

如果没有,手动添加(假设 virbr0 网段为 192.168.122.0/24):

shell
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
 iptables -A FORWARD -s 192.168.122.0/24 -j ACCEPT
 iptables -A FORWARD -d 192.168.122.0/24 -j ACCEPT

虚拟机 IPv6 未生效

  1. 确认宿主机有公网 IPv6 地址
  2. 检查 IPv6 网桥是否已配置:
shell
ip -6 addr show
  1. 确认安装脚本已完整执行并配置了 IPv6 网络

虚拟机无法启动 / 状态为 shut off

查看虚拟机的错误日志:

shell
virsh dominfo vm1
diff --git a/assets/guide_qemu_qemu_qa.md.DyrsGQ5C.lean.js b/assets/guide_qemu_qemu_qa.md.CcsWFlWk.lean.js
similarity index 86%
rename from assets/guide_qemu_qemu_qa.md.DyrsGQ5C.lean.js
rename to assets/guide_qemu_qemu_qa.md.CcsWFlWk.lean.js
index 1e25bd363e..2bcfd62cee 100644
--- a/assets/guide_qemu_qemu_qa.md.DyrsGQ5C.lean.js
+++ b/assets/guide_qemu_qemu_qa.md.CcsWFlWk.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_qa.md","filePath":"guide/qemu/qemu_qa.md","lastUpdated":1773143516000}'),l={name:"guide/qemu/qemu_qa.md"};function t(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n("",42)]))}const o=i(l,[["render",t]]);export{F as __pageData,o as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.QPV3Ar9-.js";const F=JSON.parse('{"title":"常见问题答疑","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/qemu/qemu_qa.md","filePath":"guide/qemu/qemu_qa.md","lastUpdated":1773196139000}'),l={name:"guide/qemu/qemu_qa.md"};function t(h,s,p,r,k,d){return e(),a("div",null,s[0]||(s[0]=[n("",42)]))}const o=i(l,[["render",t]]);export{F as __pageData,o as default};
diff --git a/assets/guide_qemu_qemu_thanks.md.CIuYo1h4.js b/assets/guide_qemu_qemu_thanks.md.SXi0ZIks.js
similarity index 90%
rename from assets/guide_qemu_qemu_thanks.md.CIuYo1h4.js
rename to assets/guide_qemu_qemu_thanks.md.SXi0ZIks.js
index 460e877911..4c71373f7e 100644
--- a/assets/guide_qemu_qemu_thanks.md.CIuYo1h4.js
+++ b/assets/guide_qemu_qemu_thanks.md.SXi0ZIks.js
@@ -1 +1 @@
-import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/qemu/qemu_thanks.md","filePath":"guide/qemu/qemu_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/qemu/qemu_thanks.md"};function n(p,t,s,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i('

致谢

https://github.com/qemu/qemu

https://github.com/libvirt/libvirt

https://github.com/libvirt/libvirt-python

https://github.com/coreos/ignition

https://github.com/spiritLHLS/addswap

https://www.linux-kvm.org/

',7)]))}const c=e(o,[["render",n]]);export{_ as __pageData,c as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/qemu/qemu_thanks.md","filePath":"guide/qemu/qemu_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/qemu/qemu_thanks.md"};function n(p,t,s,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i('

致谢

https://github.com/qemu/qemu

https://github.com/libvirt/libvirt

https://github.com/libvirt/libvirt-python

https://github.com/coreos/ignition

https://github.com/spiritLHLS/addswap

https://www.linux-kvm.org/

',7)]))}const c=e(o,[["render",n]]);export{_ as __pageData,c as default}; diff --git a/assets/guide_qemu_qemu_thanks.md.CIuYo1h4.lean.js b/assets/guide_qemu_qemu_thanks.md.SXi0ZIks.lean.js similarity index 70% rename from assets/guide_qemu_qemu_thanks.md.CIuYo1h4.lean.js rename to assets/guide_qemu_qemu_thanks.md.SXi0ZIks.lean.js index 8908175680..d49bfcf946 100644 --- a/assets/guide_qemu_qemu_thanks.md.CIuYo1h4.lean.js +++ b/assets/guide_qemu_qemu_thanks.md.SXi0ZIks.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/qemu/qemu_thanks.md","filePath":"guide/qemu/qemu_thanks.md","lastUpdated":1773143516000}'),o={name:"guide/qemu/qemu_thanks.md"};function n(p,t,s,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i("",7)]))}const c=e(o,[["render",n]]);export{_ as __pageData,c as default}; +import{_ as e,c as r,o as a,ag as i}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/qemu/qemu_thanks.md","filePath":"guide/qemu/qemu_thanks.md","lastUpdated":1773196139000}'),o={name:"guide/qemu/qemu_thanks.md"};function n(p,t,s,h,l,m){return a(),r("div",null,t[0]||(t[0]=[i("",7)]))}const c=e(o,[["render",n]]);export{_ as __pageData,c as default}; diff --git a/assets/incomplete_bashvm.md.CGn68aF3.js b/assets/incomplete_bashvm.md.Q11XTpGK.js similarity index 95% rename from assets/incomplete_bashvm.md.CGn68aF3.js rename to assets/incomplete_bashvm.md.Q11XTpGK.js index 5812abd003..4163569658 100644 --- a/assets/incomplete_bashvm.md.CGn68aF3.js +++ b/assets/incomplete_bashvm.md.Q11XTpGK.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/bashvm.md","filePath":"incomplete/bashvm.md","lastUpdated":1773143516000}'),s={name:"incomplete/bashvm.md"};function h(n,a,l,i,p,m){return r(),t("div",null,a[0]||(a[0]=[o('

仓库

https://github.com/babywhale321/bashvm

https://bashvm.com/

说明

如果你想深入了解怎么开设一个虚拟机,怎么转发端口,那么这个项目将完全从底层开始,一步步教你如何开设虚拟机

缺点

非常的繁琐,非常的耗时,不如别的项目快速设置网络和开设

',7)]))}const _=e(s,[["render",h]]);export{d as __pageData,_ as default}; +import{_ as e,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/bashvm.md","filePath":"incomplete/bashvm.md","lastUpdated":1773196139000}'),s={name:"incomplete/bashvm.md"};function h(n,a,l,i,p,m){return r(),t("div",null,a[0]||(a[0]=[o('

仓库

https://github.com/babywhale321/bashvm

https://bashvm.com/

说明

如果你想深入了解怎么开设一个虚拟机,怎么转发端口,那么这个项目将完全从底层开始,一步步教你如何开设虚拟机

缺点

非常的繁琐,非常的耗时,不如别的项目快速设置网络和开设

',7)]))}const _=e(s,[["render",h]]);export{d as __pageData,_ as default}; diff --git a/assets/incomplete_bashvm.md.CGn68aF3.lean.js b/assets/incomplete_bashvm.md.Q11XTpGK.lean.js similarity index 85% rename from assets/incomplete_bashvm.md.CGn68aF3.lean.js rename to assets/incomplete_bashvm.md.Q11XTpGK.lean.js index a3e3b40428..d44e518076 100644 --- a/assets/incomplete_bashvm.md.CGn68aF3.lean.js +++ b/assets/incomplete_bashvm.md.Q11XTpGK.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/bashvm.md","filePath":"incomplete/bashvm.md","lastUpdated":1773143516000}'),s={name:"incomplete/bashvm.md"};function h(n,a,l,i,p,m){return r(),t("div",null,a[0]||(a[0]=[o("",7)]))}const _=e(s,[["render",h]]);export{d as __pageData,_ as default}; +import{_ as e,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/bashvm.md","filePath":"incomplete/bashvm.md","lastUpdated":1773196139000}'),s={name:"incomplete/bashvm.md"};function h(n,a,l,i,p,m){return r(),t("div",null,a[0]||(a[0]=[o("",7)]))}const _=e(s,[["render",h]]);export{d as __pageData,_ as default}; diff --git a/assets/incomplete_cockpit.md.y4e1X8xM.js b/assets/incomplete_cockpit.md.BIN8-Enm.js similarity index 98% rename from assets/incomplete_cockpit.md.y4e1X8xM.js rename to assets/incomplete_cockpit.md.BIN8-Enm.js index 541d6b0c40..4e747c4481 100644 --- a/assets/incomplete_cockpit.md.y4e1X8xM.js +++ b/assets/incomplete_cockpit.md.BIN8-Enm.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/cockpit.md","filePath":"incomplete/cockpit.md","lastUpdated":1773143516000}'),l={name:"incomplete/cockpit.md"};function n(p,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[t('

仓库

hits

https://github.com/oneclickvirt/cockpit

安装

支持的系统:Debian,Ubuntu,Almalinux,Rockylinux,Fedora,Centos,Arch

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

只安装带容器的

shell
bash install.sh --ct

只安装带虚拟机的

shell
bash install.sh --vm

仅安装面板

shell
bash install.sh

容器和虚拟机依赖都进行安装

shell
bash install.sh --all

缺点

网络自行配置,镜像自行导入,端口自行映射,只是比纯命令行多了一个GUI界面罢了

致谢

https://cockpit-project.org/running.html

',21)]))}const g=i(l,[["render",n]]);export{o as __pageData,g as default}; +import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/cockpit.md","filePath":"incomplete/cockpit.md","lastUpdated":1773196139000}'),l={name:"incomplete/cockpit.md"};function n(p,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[t('

仓库

hits

https://github.com/oneclickvirt/cockpit

安装

支持的系统:Debian,Ubuntu,Almalinux,Rockylinux,Fedora,Centos,Arch

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/cockpit/refs/heads/main/scripts/install.sh -o install.sh && chmod +x install.sh

只安装带容器的

shell
bash install.sh --ct

只安装带虚拟机的

shell
bash install.sh --vm

仅安装面板

shell
bash install.sh

容器和虚拟机依赖都进行安装

shell
bash install.sh --all

缺点

网络自行配置,镜像自行导入,端口自行映射,只是比纯命令行多了一个GUI界面罢了

致谢

https://cockpit-project.org/running.html

',21)]))}const g=i(l,[["render",n]]);export{o as __pageData,g as default}; diff --git a/assets/incomplete_cockpit.md.y4e1X8xM.lean.js b/assets/incomplete_cockpit.md.BIN8-Enm.lean.js similarity index 85% rename from assets/incomplete_cockpit.md.y4e1X8xM.lean.js rename to assets/incomplete_cockpit.md.BIN8-Enm.lean.js index 2db36f16e3..869305be2e 100644 --- a/assets/incomplete_cockpit.md.y4e1X8xM.lean.js +++ b/assets/incomplete_cockpit.md.BIN8-Enm.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/cockpit.md","filePath":"incomplete/cockpit.md","lastUpdated":1773143516000}'),l={name:"incomplete/cockpit.md"};function n(p,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[t("",21)]))}const g=i(l,[["render",n]]);export{o as __pageData,g as default}; +import{_ as i,c as a,o as e,ag as t}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/cockpit.md","filePath":"incomplete/cockpit.md","lastUpdated":1773196139000}'),l={name:"incomplete/cockpit.md"};function n(p,s,h,r,d,c){return e(),a("div",null,s[0]||(s[0]=[t("",21)]))}const g=i(l,[["render",n]]);export{o as __pageData,g as default}; diff --git a/assets/incomplete_convoy.md.sPAvvKRB.js b/assets/incomplete_convoy.md.DTxuu6Jx.js similarity index 98% rename from assets/incomplete_convoy.md.sPAvvKRB.js rename to assets/incomplete_convoy.md.DTxuu6Jx.js index 2ff8162de4..f8355a5ba9 100644 --- a/assets/incomplete_convoy.md.sPAvvKRB.js +++ b/assets/incomplete_convoy.md.DTxuu6Jx.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/convoy.md","filePath":"incomplete/convoy.md","lastUpdated":1773143516000}'),n={name:"incomplete/convoy.md"};function l(p,s,h,o,r,c){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/convoypanel-scripts

hits

convoypanel-scripts

安装前提条件:

  • 已安装 PVE,但不能是同一节点(不能是同一台机器)
  • 系统为 Debian 11
  • CPU 至少 2 核,硬盘至少 20G,内存至少 4G(内存包含 swap)

我不保证这个脚本没有错误,本项目未完整

国际

shell
curl -L https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

Thanks

Base on https://github.com/oneclickvirt/pve

Base on https://docs.convoypanel.com/guide/deployment/#installation

Base on https://github.com/ConvoyPanel/panel

',15)]))}const g=i(n,[["render",l]]);export{d as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/convoy.md","filePath":"incomplete/convoy.md","lastUpdated":1773196139000}'),n={name:"incomplete/convoy.md"};function l(p,s,h,o,r,c){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/convoypanel-scripts

hits

convoypanel-scripts

安装前提条件:

  • 已安装 PVE,但不能是同一节点(不能是同一台机器)
  • 系统为 Debian 11
  • CPU 至少 2 核,硬盘至少 20G,内存至少 4G(内存包含 swap)

我不保证这个脚本没有错误,本项目未完整

国际

shell
curl -L https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://github.com/oneclickvirt/convoypanel-scripts/raw/main/installconvoy.sh -o installconvoy.sh && chmod +x installconvoy.sh && bash installconvoy.sh

Thanks

Base on https://github.com/oneclickvirt/pve

Base on https://docs.convoypanel.com/guide/deployment/#installation

Base on https://github.com/ConvoyPanel/panel

',15)]))}const g=i(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/assets/incomplete_convoy.md.sPAvvKRB.lean.js b/assets/incomplete_convoy.md.DTxuu6Jx.lean.js similarity index 85% rename from assets/incomplete_convoy.md.sPAvvKRB.lean.js rename to assets/incomplete_convoy.md.DTxuu6Jx.lean.js index 1972aed5d3..a8e534aa8b 100644 --- a/assets/incomplete_convoy.md.sPAvvKRB.lean.js +++ b/assets/incomplete_convoy.md.DTxuu6Jx.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/convoy.md","filePath":"incomplete/convoy.md","lastUpdated":1773143516000}'),n={name:"incomplete/convoy.md"};function l(p,s,h,o,r,c){return t(),a("div",null,s[0]||(s[0]=[e("",15)]))}const g=i(n,[["render",l]]);export{d as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const d=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/convoy.md","filePath":"incomplete/convoy.md","lastUpdated":1773196139000}'),n={name:"incomplete/convoy.md"};function l(p,s,h,o,r,c){return t(),a("div",null,s[0]||(s[0]=[e("",15)]))}const g=i(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/assets/incomplete_index.md.BiqvZjE4.js b/assets/incomplete_index.md.BnLKEkNB.js similarity index 95% rename from assets/incomplete_index.md.BiqvZjE4.js rename to assets/incomplete_index.md.BnLKEkNB.js index 45aa28ad4f..47029059b2 100644 --- a/assets/incomplete_index.md.BiqvZjE4.js +++ b/assets/incomplete_index.md.BnLKEkNB.js @@ -1 +1 @@ -import{_ as e,c as t,o as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","description":"","frontmatter":{"layout":"home","title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","hero":{"name":"其他虚拟化项目","text":"一些不完整的虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/incomplete/webvirtcloud"}]},"features":[{"title":"注意事项","details":"这块每个项目都有对应的缺点,每个项目都不像之前的项目一样简单好用,有一定的学习成本。"},{"title":"难易程度","details":"基于项目本身的使用难度,由易到难排序,越往后你能得到本指南的引导越少。"},{"title":"项目缺点","details":"每个项目都有部分缺点导致不被认为是完整的一键项目,有一些操作需要手动执行命令无法一键化。"}]},"headers":[],"relativePath":"incomplete/index.md","filePath":"incomplete/index.md","lastUpdated":1773143516000}'),a={name:"incomplete/index.md"};function n(l,o,s,r,c,p){return i(),t("div")}const h=e(a,[["render",n]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","description":"","frontmatter":{"layout":"home","title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","hero":{"name":"其他虚拟化项目","text":"一些不完整的虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/incomplete/webvirtcloud"}]},"features":[{"title":"注意事项","details":"这块每个项目都有对应的缺点,每个项目都不像之前的项目一样简单好用,有一定的学习成本。"},{"title":"难易程度","details":"基于项目本身的使用难度,由易到难排序,越往后你能得到本指南的引导越少。"},{"title":"项目缺点","details":"每个项目都有部分缺点导致不被认为是完整的一键项目,有一些操作需要手动执行命令无法一键化。"}]},"headers":[],"relativePath":"incomplete/index.md","filePath":"incomplete/index.md","lastUpdated":1773196139000}'),a={name:"incomplete/index.md"};function n(l,o,s,r,c,p){return i(),t("div")}const h=e(a,[["render",n]]);export{m as __pageData,h as default}; diff --git a/assets/incomplete_index.md.BiqvZjE4.lean.js b/assets/incomplete_index.md.BnLKEkNB.lean.js similarity index 95% rename from assets/incomplete_index.md.BiqvZjE4.lean.js rename to assets/incomplete_index.md.BnLKEkNB.lean.js index 45aa28ad4f..47029059b2 100644 --- a/assets/incomplete_index.md.BiqvZjE4.lean.js +++ b/assets/incomplete_index.md.BnLKEkNB.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","description":"","frontmatter":{"layout":"home","title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","hero":{"name":"其他虚拟化项目","text":"一些不完整的虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/incomplete/webvirtcloud"}]},"features":[{"title":"注意事项","details":"这块每个项目都有对应的缺点,每个项目都不像之前的项目一样简单好用,有一定的学习成本。"},{"title":"难易程度","details":"基于项目本身的使用难度,由易到难排序,越往后你能得到本指南的引导越少。"},{"title":"项目缺点","details":"每个项目都有部分缺点导致不被认为是完整的一键项目,有一些操作需要手动执行命令无法一键化。"}]},"headers":[],"relativePath":"incomplete/index.md","filePath":"incomplete/index.md","lastUpdated":1773143516000}'),a={name:"incomplete/index.md"};function n(l,o,s,r,c,p){return i(),t("div")}const h=e(a,[["render",n]]);export{m as __pageData,h as default}; +import{_ as e,c as t,o as i}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","description":"","frontmatter":{"layout":"home","title":"其他虚拟化项目","titleTemplate":"其他不完整的虚拟化项目","hero":{"name":"其他虚拟化项目","text":"一些不完整的虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"查看项目 →","link":"/incomplete/webvirtcloud"}]},"features":[{"title":"注意事项","details":"这块每个项目都有对应的缺点,每个项目都不像之前的项目一样简单好用,有一定的学习成本。"},{"title":"难易程度","details":"基于项目本身的使用难度,由易到难排序,越往后你能得到本指南的引导越少。"},{"title":"项目缺点","details":"每个项目都有部分缺点导致不被认为是完整的一键项目,有一些操作需要手动执行命令无法一键化。"}]},"headers":[],"relativePath":"incomplete/index.md","filePath":"incomplete/index.md","lastUpdated":1773196139000}'),a={name:"incomplete/index.md"};function n(l,o,s,r,c,p){return i(),t("div")}const h=e(a,[["render",n]]);export{m as __pageData,h as default}; diff --git a/assets/incomplete_pterodactyl.md.DdY27htv.js b/assets/incomplete_pterodactyl.md.DrR9vgxd.js similarity index 99% rename from assets/incomplete_pterodactyl.md.DdY27htv.js rename to assets/incomplete_pterodactyl.md.DrR9vgxd.js index dff01f8a3e..56e07a129e 100644 --- a/assets/incomplete_pterodactyl.md.DdY27htv.js +++ b/assets/incomplete_pterodactyl.md.DrR9vgxd.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/pterodactyl.md","filePath":"incomplete/pterodactyl.md","lastUpdated":1773143516000}'),l={name:"incomplete/pterodactyl.md"};function n(h,s,p,r,d,k){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/pterodactyl

hits

pterodactyl-scripts

进一步调研发现开设servers和绑定用户极麻烦,不如原生直接docker方便,故而暂不做后续开发了

说明

目前支持的系统

系统类型版本范围备注
Ubuntu20.04(推荐), 22.04, 24.04已支持
Debian11(Bullseye), 12(Bookworm)已支持

Panel

panel端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

Wings

wings端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

Import

panel端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

会生成需要在wings端执行的命令

生成的命令执行完毕后等待20秒以上,避免一些初始化流程未走完,然后wings端再执行:

shell
bash install_wings.sh

然后在http://<your_ip>/admin/nodes就能看到你的节点已经被自动添加纳管,心跳是绿色的

Thanks

https://pterodactyl.io/

',32)]))}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/pterodactyl.md","filePath":"incomplete/pterodactyl.md","lastUpdated":1773196139000}'),l={name:"incomplete/pterodactyl.md"};function n(h,s,p,r,d,k){return t(),a("div",null,s[0]||(s[0]=[e('

Repo

https://github.com/oneclickvirt/pterodactyl

hits

pterodactyl-scripts

进一步调研发现开设servers和绑定用户极麻烦,不如原生直接docker方便,故而暂不做后续开发了

说明

目前支持的系统

系统类型版本范围备注
Ubuntu20.04(推荐), 22.04, 24.04已支持
Debian11(Bullseye), 12(Bookworm)已支持

Panel

panel端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_pterodactyl.sh -o install_pterodactyl.sh && chmod 777 install_pterodactyl.sh && bash install_pterodactyl.sh

Wings

wings端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/install_wings.sh -o install_wings.sh && chmod 777 install_wings.sh && bash install_wings.sh

Import

panel端执行:

国际

shell
curl -slk https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

国内

shell
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pterodactyl/main/scripts/import_node.sh -o import_node.sh && chmod 777 import_node.sh && bash import_node.sh

会生成需要在wings端执行的命令

生成的命令执行完毕后等待20秒以上,避免一些初始化流程未走完,然后wings端再执行:

shell
bash install_wings.sh

然后在http://<your_ip>/admin/nodes就能看到你的节点已经被自动添加纳管,心跳是绿色的

Thanks

https://pterodactyl.io/

',32)]))}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/incomplete_pterodactyl.md.DdY27htv.lean.js b/assets/incomplete_pterodactyl.md.DrR9vgxd.lean.js similarity index 85% rename from assets/incomplete_pterodactyl.md.DdY27htv.lean.js rename to assets/incomplete_pterodactyl.md.DrR9vgxd.lean.js index aa6595d83a..f584ac074c 100644 --- a/assets/incomplete_pterodactyl.md.DdY27htv.lean.js +++ b/assets/incomplete_pterodactyl.md.DrR9vgxd.lean.js @@ -1 +1 @@ -import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/pterodactyl.md","filePath":"incomplete/pterodactyl.md","lastUpdated":1773143516000}'),l={name:"incomplete/pterodactyl.md"};function n(h,s,p,r,d,k){return t(),a("div",null,s[0]||(s[0]=[e("",32)]))}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; +import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/pterodactyl.md","filePath":"incomplete/pterodactyl.md","lastUpdated":1773196139000}'),l={name:"incomplete/pterodactyl.md"};function n(h,s,p,r,d,k){return t(),a("div",null,s[0]||(s[0]=[e("",32)]))}const g=i(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/incomplete_virtfusion.md.afpry-2P.js b/assets/incomplete_virtfusion.md.qafzfeDV.js similarity index 99% rename from assets/incomplete_virtfusion.md.afpry-2P.js rename to assets/incomplete_virtfusion.md.qafzfeDV.js index 137e9dd9f4..035e80c1bf 100644 --- a/assets/incomplete_virtfusion.md.afpry-2P.js +++ b/assets/incomplete_virtfusion.md.qafzfeDV.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtfusion.md","filePath":"incomplete/virtfusion.md","lastUpdated":1773143516000}'),t={name:"incomplete/virtfusion.md"};function e(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

官方文档

https://docs.virtfusion.com/next/installation/control-server/#activating-a-license

一键安装

debian11

shell
apt install curl -y
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtfusion.md","filePath":"incomplete/virtfusion.md","lastUpdated":1773196139000}'),t={name:"incomplete/virtfusion.md"};function e(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l(`

官方文档

https://docs.virtfusion.com/next/installation/control-server/#activating-a-license

一键安装

debian11

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-debian-11.sh | sh -s -- --verbose

debian12

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-debian-12.sh | sh -s -- --verbose

RHEL8

shell
dnf install curl -y
 curl https://install.virtfusion.net/install-control-rhel-8.sh | sh -s -- --verbose

RHEL9

shell
dnf install curl -y
diff --git a/assets/incomplete_virtfusion.md.afpry-2P.lean.js b/assets/incomplete_virtfusion.md.qafzfeDV.lean.js
similarity index 85%
rename from assets/incomplete_virtfusion.md.afpry-2P.lean.js
rename to assets/incomplete_virtfusion.md.qafzfeDV.lean.js
index 0eb0ee361f..1e2f821d97 100644
--- a/assets/incomplete_virtfusion.md.afpry-2P.lean.js
+++ b/assets/incomplete_virtfusion.md.qafzfeDV.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtfusion.md","filePath":"incomplete/virtfusion.md","lastUpdated":1773143516000}'),t={name:"incomplete/virtfusion.md"};function e(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",18)]))}const c=i(t,[["render",e]]);export{o as __pageData,c as default};
+import{_ as i,c as a,o as n,ag as l}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtfusion.md","filePath":"incomplete/virtfusion.md","lastUpdated":1773196139000}'),t={name:"incomplete/virtfusion.md"};function e(h,s,p,r,k,d){return n(),a("div",null,s[0]||(s[0]=[l("",18)]))}const c=i(t,[["render",e]]);export{o as __pageData,c as default};
diff --git a/assets/incomplete_virtualizor-docker.md.CVOsVijp.js b/assets/incomplete_virtualizor-docker.md.BosFcTNF.js
similarity index 95%
rename from assets/incomplete_virtualizor-docker.md.CVOsVijp.js
rename to assets/incomplete_virtualizor-docker.md.BosFcTNF.js
index f66b4023cd..70979e2de4 100644
--- a/assets/incomplete_virtualizor-docker.md.CVOsVijp.js
+++ b/assets/incomplete_virtualizor-docker.md.BosFcTNF.js
@@ -1 +1 @@
-import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtualizor-docker.md","filePath":"incomplete/virtualizor-docker.md","lastUpdated":1773143516000}'),i={name:"incomplete/virtualizor-docker.md"};function l(n,e,c,d,p,s){return r(),t("div",null,e[0]||(e[0]=[o('

仓库

https://github.com/ivstiv/virtualizor-docker

说明

在docker中开设的 virtualizor

证书用的是试用的证书,有效期一天,且默认只安装了OpenVZ的虚拟化方式

缺点

毫无社区,一切自行摸索

admin面板的端口不要看脚本的提示信息,以仓库说明为准。

',8)]))}const u=a(i,[["render",l]]);export{_ as __pageData,u as default}; +import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtualizor-docker.md","filePath":"incomplete/virtualizor-docker.md","lastUpdated":1773196139000}'),i={name:"incomplete/virtualizor-docker.md"};function l(n,e,c,d,p,s){return r(),t("div",null,e[0]||(e[0]=[o('

仓库

https://github.com/ivstiv/virtualizor-docker

说明

在docker中开设的 virtualizor

证书用的是试用的证书,有效期一天,且默认只安装了OpenVZ的虚拟化方式

缺点

毫无社区,一切自行摸索

admin面板的端口不要看脚本的提示信息,以仓库说明为准。

',8)]))}const u=a(i,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/incomplete_virtualizor-docker.md.CVOsVijp.lean.js b/assets/incomplete_virtualizor-docker.md.BosFcTNF.lean.js similarity index 86% rename from assets/incomplete_virtualizor-docker.md.CVOsVijp.lean.js rename to assets/incomplete_virtualizor-docker.md.BosFcTNF.lean.js index c413d1fc22..14edfcb3c0 100644 --- a/assets/incomplete_virtualizor-docker.md.CVOsVijp.lean.js +++ b/assets/incomplete_virtualizor-docker.md.BosFcTNF.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtualizor-docker.md","filePath":"incomplete/virtualizor-docker.md","lastUpdated":1773143516000}'),i={name:"incomplete/virtualizor-docker.md"};function l(n,e,c,d,p,s){return r(),t("div",null,e[0]||(e[0]=[o("",8)]))}const u=a(i,[["render",l]]);export{_ as __pageData,u as default}; +import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.QPV3Ar9-.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/virtualizor-docker.md","filePath":"incomplete/virtualizor-docker.md","lastUpdated":1773196139000}'),i={name:"incomplete/virtualizor-docker.md"};function l(n,e,c,d,p,s){return r(),t("div",null,e[0]||(e[0]=[o("",8)]))}const u=a(i,[["render",l]]);export{_ as __pageData,u as default}; diff --git a/assets/incomplete_webvirtcloud.md.CfqUm80o.js b/assets/incomplete_webvirtcloud.md.cXYB1aOP.js similarity index 99% rename from assets/incomplete_webvirtcloud.md.CfqUm80o.js rename to assets/incomplete_webvirtcloud.md.cXYB1aOP.js index fc2c9057d8..7092bd4576 100644 --- a/assets/incomplete_webvirtcloud.md.CfqUm80o.js +++ b/assets/incomplete_webvirtcloud.md.cXYB1aOP.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/admin.DfyN1XBs.png",t="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",h="/assets/webvirtcloud.DNieKxNE.png",u=JSON.parse('{"title":"WebVirtCloud 安装指南","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud.md","filePath":"incomplete/webvirtcloud.md","lastUpdated":1773143516000}'),r={name:"incomplete/webvirtcloud.md"};function k(d,s,o,c,F,g){return n(),a("div",null,s[0]||(s[0]=[e('

WebVirtCloud 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原官方删除了项目不再维护了,这里只能用我个人修复和更改后的代码进行部署。

效果图展示

admin

user

1. 控制端安装

系统要求

最低配置要求:

  • CPU: 1 核
  • 内存: 1 GB RAM
  • 硬盘: 空余 10 GB
  • 系统:Debian11+,Ubuntu20.04+, Centos8+, AlmaLinux8+, RockyLinux8+

默认登录信息

  • 用户名: admin@spiritlhl.net
  • 密码: admin

面板地址

  • 用户面板: https://192-168-0-114.nip.io
  • 管理后台: https://192-168-0-114.nip.io/admin

注意: 请将 192.168.0.114 替换为你的公网 IP,以获取真实可访问地址。

安装命令

国际版本:

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh -o install_webvirt_cloud.sh \\
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/admin.DfyN1XBs.png",t="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",h="/assets/webvirtcloud.DNieKxNE.png",u=JSON.parse('{"title":"WebVirtCloud 安装指南","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud.md","filePath":"incomplete/webvirtcloud.md","lastUpdated":1773196139000}'),r={name:"incomplete/webvirtcloud.md"};function k(d,s,o,c,F,g){return n(),a("div",null,s[0]||(s[0]=[e('

WebVirtCloud 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原官方删除了项目不再维护了,这里只能用我个人修复和更改后的代码进行部署。

效果图展示

admin

user

1. 控制端安装

系统要求

最低配置要求:

  • CPU: 1 核
  • 内存: 1 GB RAM
  • 硬盘: 空余 10 GB
  • 系统:Debian11+,Ubuntu20.04+, Centos8+, AlmaLinux8+, RockyLinux8+

默认登录信息

  • 用户名: admin@spiritlhl.net
  • 密码: admin

面板地址

  • 用户面板: https://192-168-0-114.nip.io
  • 管理后台: https://192-168-0-114.nip.io/admin

注意: 请将 192.168.0.114 替换为你的公网 IP,以获取真实可访问地址。

安装命令

国际版本:

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh -o install_webvirt_cloud.sh \\
 && chmod +x install_webvirt_cloud.sh \\
 && bash install_webvirt_cloud.sh

国内版本:

bash
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh -o install_webvirt_cloud.sh \\
 && chmod +x install_webvirt_cloud.sh \\
diff --git a/assets/incomplete_webvirtcloud.md.CfqUm80o.lean.js b/assets/incomplete_webvirtcloud.md.cXYB1aOP.lean.js
similarity index 89%
rename from assets/incomplete_webvirtcloud.md.CfqUm80o.lean.js
rename to assets/incomplete_webvirtcloud.md.cXYB1aOP.lean.js
index 7e2b992278..f3b1392d30 100644
--- a/assets/incomplete_webvirtcloud.md.CfqUm80o.lean.js
+++ b/assets/incomplete_webvirtcloud.md.cXYB1aOP.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/admin.DfyN1XBs.png",t="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",h="/assets/webvirtcloud.DNieKxNE.png",u=JSON.parse('{"title":"WebVirtCloud 安装指南","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud.md","filePath":"incomplete/webvirtcloud.md","lastUpdated":1773143516000}'),r={name:"incomplete/webvirtcloud.md"};function k(d,s,o,c,F,g){return n(),a("div",null,s[0]||(s[0]=[e("",109)]))}const m=i(r,[["render",k]]);export{u as __pageData,m as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.QPV3Ar9-.js";const l="/assets/admin.DfyN1XBs.png",t="/assets/user.CWGLyZGM.png",p="/assets/wv1.8ARiSJ9x.png",h="/assets/webvirtcloud.DNieKxNE.png",u=JSON.parse('{"title":"WebVirtCloud 安装指南","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud.md","filePath":"incomplete/webvirtcloud.md","lastUpdated":1773196139000}'),r={name:"incomplete/webvirtcloud.md"};function k(d,s,o,c,F,g){return n(),a("div",null,s[0]||(s[0]=[e("",109)]))}const m=i(r,[["render",k]]);export{u as __pageData,m as default};
diff --git a/assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.js b/assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.js
similarity index 99%
rename from assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.js
rename to assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.js
index 5aabad8ed7..2fad42c0f5 100644
--- a/assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.js
+++ b/assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/vcr1.NRLOOynQ.jpg",l="/assets/vcr2.DC9j-Ib5.jpg",n="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",c="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",o="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",k="/assets/vcr9.B4apCqgi.jpg",g="/assets/vcr10.D8t6cQ5v.jpg",b="/assets/vcr11.Cz1VMbIx.jpg",m="/assets/vcr12.BNQe5j_u.jpg",u="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",_="/assets/vcr14.Cjyr65Qp.jpg",F="/assets/resize.ppnxVOAW.jpg",j=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud_retspen.md","filePath":"incomplete/webvirtcloud_retspen.md","lastUpdated":1773143516000}'),y={name:"incomplete/webvirtcloud_retspen.md"};function C(B,s,w,E,f,x){return e(),a("div",null,s[0]||(s[0]=[p(`

WebVirtCloud 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原项目对应仓库:https://github.com/oneclickvirt/webvirtcloud_retspen

控制节点和计算节点同时安装

  • 支持系统:Debian10+, Ubuntu18.04+, Centos8+, AlmaLinux8+, RockyLinux8+
  • 推荐系统:Debian12+,Ubuntu22.04+
  • 低版本系统会自动编译python新版本的安装包后再进行部署,所以推荐使用新系统不必编译直接安装

国际

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud_retspen.sh -o install_webvirt_cloud_retspen.sh \\
+import{_ as i,c as a,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/vcr1.NRLOOynQ.jpg",l="/assets/vcr2.DC9j-Ib5.jpg",n="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",c="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",o="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",k="/assets/vcr9.B4apCqgi.jpg",g="/assets/vcr10.D8t6cQ5v.jpg",b="/assets/vcr11.Cz1VMbIx.jpg",m="/assets/vcr12.BNQe5j_u.jpg",u="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",_="/assets/vcr14.Cjyr65Qp.jpg",F="/assets/resize.ppnxVOAW.jpg",j=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud_retspen.md","filePath":"incomplete/webvirtcloud_retspen.md","lastUpdated":1773196139000}'),y={name:"incomplete/webvirtcloud_retspen.md"};function C(B,s,w,E,f,x){return e(),a("div",null,s[0]||(s[0]=[p(`

WebVirtCloud 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原项目对应仓库:https://github.com/oneclickvirt/webvirtcloud_retspen

控制节点和计算节点同时安装

  • 支持系统:Debian10+, Ubuntu18.04+, Centos8+, AlmaLinux8+, RockyLinux8+
  • 推荐系统:Debian12+,Ubuntu22.04+
  • 低版本系统会自动编译python新版本的安装包后再进行部署,所以推荐使用新系统不必编译直接安装

国际

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud_retspen.sh -o install_webvirt_cloud_retspen.sh \\
 && chmod +x install_webvirt_cloud_retspen.sh \\
 && bash install_webvirt_cloud_retspen.sh

国内

bash
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud_retspen.sh -o install_webvirt_cloud_retspen.sh \\
 && chmod +x install_webvirt_cloud_retspen.sh \\
diff --git a/assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.lean.js b/assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.lean.js
similarity index 93%
rename from assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.lean.js
rename to assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.lean.js
index abc0a81942..36ab5e30c1 100644
--- a/assets/incomplete_webvirtcloud_retspen.md.lM7FZQ-m.lean.js
+++ b/assets/incomplete_webvirtcloud_retspen.md.XJ0pgP9k.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/vcr1.NRLOOynQ.jpg",l="/assets/vcr2.DC9j-Ib5.jpg",n="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",c="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",o="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",k="/assets/vcr9.B4apCqgi.jpg",g="/assets/vcr10.D8t6cQ5v.jpg",b="/assets/vcr11.Cz1VMbIx.jpg",m="/assets/vcr12.BNQe5j_u.jpg",u="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",_="/assets/vcr14.Cjyr65Qp.jpg",F="/assets/resize.ppnxVOAW.jpg",j=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud_retspen.md","filePath":"incomplete/webvirtcloud_retspen.md","lastUpdated":1773143516000}'),y={name:"incomplete/webvirtcloud_retspen.md"};function C(B,s,w,E,f,x){return e(),a("div",null,s[0]||(s[0]=[p("",70)]))}const q=i(y,[["render",C]]);export{j as __pageData,q as default};
+import{_ as i,c as a,o as e,ag as p}from"./chunks/framework.QPV3Ar9-.js";const t="/assets/vcr1.NRLOOynQ.jpg",l="/assets/vcr2.DC9j-Ib5.jpg",n="/assets/vcr3.Ea5Km6nQ.jpg",r="/assets/vcr4.B9DOiqQ8.jpg",c="/assets/vcr5.BajXu8XE.jpg",d="/assets/vcr6.CxN-b1o3.jpg",o="/assets/vcr7.D4aYKhIW.jpg",h="/assets/vcr8.ByRFpMlF.jpg",k="/assets/vcr9.B4apCqgi.jpg",g="/assets/vcr10.D8t6cQ5v.jpg",b="/assets/vcr11.Cz1VMbIx.jpg",m="/assets/vcr12.BNQe5j_u.jpg",u="/assets/vcr13.JV3PfcCZ.jpg",v="/assets/deadimage.BBBzAqkc.jpg",_="/assets/vcr14.Cjyr65Qp.jpg",F="/assets/resize.ppnxVOAW.jpg",j=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtcloud_retspen.md","filePath":"incomplete/webvirtcloud_retspen.md","lastUpdated":1773196139000}'),y={name:"incomplete/webvirtcloud_retspen.md"};function C(B,s,w,E,f,x){return e(),a("div",null,s[0]||(s[0]=[p("",70)]))}const q=i(y,[["render",C]]);export{j as __pageData,q as default};
diff --git a/assets/incomplete_webvirtmgr.md.CUanyGBK.js b/assets/incomplete_webvirtmgr.md.CH1P6wbr.js
similarity index 98%
rename from assets/incomplete_webvirtmgr.md.CUanyGBK.js
rename to assets/incomplete_webvirtmgr.md.CH1P6wbr.js
index a9c2e6e525..6a64fbb982 100644
--- a/assets/incomplete_webvirtmgr.md.CUanyGBK.js
+++ b/assets/incomplete_webvirtmgr.md.CH1P6wbr.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtmgr.md","filePath":"incomplete/webvirtmgr.md","lastUpdated":1773143516000}'),n={name:"incomplete/webvirtmgr.md"};function l(r,s,h,p,k,d){return t(),a("div",null,s[0]||(s[0]=[e(`

WebVirtMgr 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原项目对应仓库:https://github.com/retspen/webvirtmgr

控制节点和计算节点同时安装

  • 支持系统:Debian[8,9,10],Ubuntu[16.04,18.04,20.04]
  • 系统会自动编译python的2.7的安装包后再进行部署,编译过程中会有报错提示但不用理会,只要脚本还在跑就说明一切正常

国际

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \\
+import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtmgr.md","filePath":"incomplete/webvirtmgr.md","lastUpdated":1773196139000}'),n={name:"incomplete/webvirtmgr.md"};function l(r,s,h,p,k,d){return t(),a("div",null,s[0]||(s[0]=[e(`

WebVirtMgr 安装指南

hits

仓库地址: https://github.com/oneclickvirt/webvirtcloud

原项目对应仓库:https://github.com/retspen/webvirtmgr

控制节点和计算节点同时安装

  • 支持系统:Debian[8,9,10],Ubuntu[16.04,18.04,20.04]
  • 系统会自动编译python的2.7的安装包后再进行部署,编译过程中会有报错提示但不用理会,只要脚本还在跑就说明一切正常

国际

bash
curl -slk https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \\
 && chmod +x install_webvirtmgr.sh \\
 && bash install_webvirtmgr.sh

国内

bash
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \\
 && chmod +x install_webvirtmgr.sh \\
diff --git a/assets/incomplete_webvirtmgr.md.CUanyGBK.lean.js b/assets/incomplete_webvirtmgr.md.CH1P6wbr.lean.js
similarity index 85%
rename from assets/incomplete_webvirtmgr.md.CUanyGBK.lean.js
rename to assets/incomplete_webvirtmgr.md.CH1P6wbr.lean.js
index 636ab7757f..f5b0edb780 100644
--- a/assets/incomplete_webvirtmgr.md.CUanyGBK.lean.js
+++ b/assets/incomplete_webvirtmgr.md.CH1P6wbr.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtmgr.md","filePath":"incomplete/webvirtmgr.md","lastUpdated":1773143516000}'),n={name:"incomplete/webvirtmgr.md"};function l(r,s,h,p,k,d){return t(),a("div",null,s[0]||(s[0]=[e("",12)]))}const b=i(n,[["render",l]]);export{o as __pageData,b as default};
+import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.QPV3Ar9-.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"incomplete/webvirtmgr.md","filePath":"incomplete/webvirtmgr.md","lastUpdated":1773196139000}'),n={name:"incomplete/webvirtmgr.md"};function l(r,s,h,p,k,d){return t(),a("div",null,s[0]||(s[0]=[e("",12)]))}const b=i(n,[["render",l]]);export{o as __pageData,b as default};
diff --git a/assets/index.md.CnaNti-t.js b/assets/index.md.CC8WK-TS.js
similarity index 96%
rename from assets/index.md.CnaNti-t.js
rename to assets/index.md.CC8WK-TS.js
index 00582bdad4..052dcea01a 100644
--- a/assets/index.md.CnaNti-t.js
+++ b/assets/index.md.CC8WK-TS.js
@@ -1 +1 @@
-import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"库苏恩","titleTemplate":"一键虚拟化项目","description":"","frontmatter":{"layout":"home","title":"库苏恩","titleTemplate":"一键虚拟化项目","tagline":"开源、易于使用的服务器虚拟化项目","hero":{"name":"一键虚拟化项目","text":"开源、易于使用的服务器虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/guide/dashboard"}]},"features":[{"title":"一键使用","details":"支持一键命令安装使用,轻松在X86_64和ARM架构的服务器上创建虚拟机或容器"},{"title":"基于主流系统开发","details":"基于 Debian、Ubuntu、Centos 等系统的长期维护版本开发,无论是什么系统总有一个方法能让你虚拟化出容器或虚拟机"},{"title":"端口转发和IP分配自动化","details":"自带内外网端口转发和IP地址自动分配(含IPV6、IPV4),支持TCP/UDP、VNC/RDP等协议,无需人工管理"},{"title":"批量虚拟化","details":"支持使用 QEMU、KVM、LXC、Docker 虚拟化批量开设容器或虚拟机"},{"title":"多系统多环境支持","details":"开设出的容器或虚拟机已支持主流系统,涵盖 Linux、Windows、MacOS、Android 系统,也支持纯粹的浏览器环境或桌面环境"},{"title":"自限制滥用","details":"部分虚拟化开设的容器或虚拟机支持设置屏蔽和装载限制,避免被用于滥用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1773143516000}'),i={name:"index.md"};function n(s,l,d,o,r,c){return a(),e("div")}const h=t(i,[["render",n]]);export{m as __pageData,h as default};
+import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"库苏恩","titleTemplate":"一键虚拟化项目","description":"","frontmatter":{"layout":"home","title":"库苏恩","titleTemplate":"一键虚拟化项目","tagline":"开源、易于使用的服务器虚拟化项目","hero":{"name":"一键虚拟化项目","text":"开源、易于使用的服务器虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/guide/dashboard"}]},"features":[{"title":"一键使用","details":"支持一键命令安装使用,轻松在X86_64和ARM架构的服务器上创建虚拟机或容器"},{"title":"基于主流系统开发","details":"基于 Debian、Ubuntu、Centos 等系统的长期维护版本开发,无论是什么系统总有一个方法能让你虚拟化出容器或虚拟机"},{"title":"端口转发和IP分配自动化","details":"自带内外网端口转发和IP地址自动分配(含IPV6、IPV4),支持TCP/UDP、VNC/RDP等协议,无需人工管理"},{"title":"批量虚拟化","details":"支持使用 QEMU、KVM、LXC、Docker 虚拟化批量开设容器或虚拟机"},{"title":"多系统多环境支持","details":"开设出的容器或虚拟机已支持主流系统,涵盖 Linux、Windows、MacOS、Android 系统,也支持纯粹的浏览器环境或桌面环境"},{"title":"自限制滥用","details":"部分虚拟化开设的容器或虚拟机支持设置屏蔽和装载限制,避免被用于滥用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1773196139000}'),i={name:"index.md"};function n(s,l,d,o,r,c){return a(),e("div")}const h=t(i,[["render",n]]);export{m as __pageData,h as default};
diff --git a/assets/index.md.CnaNti-t.lean.js b/assets/index.md.CC8WK-TS.lean.js
similarity index 96%
rename from assets/index.md.CnaNti-t.lean.js
rename to assets/index.md.CC8WK-TS.lean.js
index 00582bdad4..052dcea01a 100644
--- a/assets/index.md.CnaNti-t.lean.js
+++ b/assets/index.md.CC8WK-TS.lean.js
@@ -1 +1 @@
-import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"库苏恩","titleTemplate":"一键虚拟化项目","description":"","frontmatter":{"layout":"home","title":"库苏恩","titleTemplate":"一键虚拟化项目","tagline":"开源、易于使用的服务器虚拟化项目","hero":{"name":"一键虚拟化项目","text":"开源、易于使用的服务器虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/guide/dashboard"}]},"features":[{"title":"一键使用","details":"支持一键命令安装使用,轻松在X86_64和ARM架构的服务器上创建虚拟机或容器"},{"title":"基于主流系统开发","details":"基于 Debian、Ubuntu、Centos 等系统的长期维护版本开发,无论是什么系统总有一个方法能让你虚拟化出容器或虚拟机"},{"title":"端口转发和IP分配自动化","details":"自带内外网端口转发和IP地址自动分配(含IPV6、IPV4),支持TCP/UDP、VNC/RDP等协议,无需人工管理"},{"title":"批量虚拟化","details":"支持使用 QEMU、KVM、LXC、Docker 虚拟化批量开设容器或虚拟机"},{"title":"多系统多环境支持","details":"开设出的容器或虚拟机已支持主流系统,涵盖 Linux、Windows、MacOS、Android 系统,也支持纯粹的浏览器环境或桌面环境"},{"title":"自限制滥用","details":"部分虚拟化开设的容器或虚拟机支持设置屏蔽和装载限制,避免被用于滥用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1773143516000}'),i={name:"index.md"};function n(s,l,d,o,r,c){return a(),e("div")}const h=t(i,[["render",n]]);export{m as __pageData,h as default};
+import{_ as t,c as e,o as a}from"./chunks/framework.QPV3Ar9-.js";const m=JSON.parse('{"title":"库苏恩","titleTemplate":"一键虚拟化项目","description":"","frontmatter":{"layout":"home","title":"库苏恩","titleTemplate":"一键虚拟化项目","tagline":"开源、易于使用的服务器虚拟化项目","hero":{"name":"一键虚拟化项目","text":"开源、易于使用的服务器虚拟化项目","image":"https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritlhls/pages/main/logo.png","actions":[{"theme":"brand","text":"开始使用 →","link":"/guide/dashboard"}]},"features":[{"title":"一键使用","details":"支持一键命令安装使用,轻松在X86_64和ARM架构的服务器上创建虚拟机或容器"},{"title":"基于主流系统开发","details":"基于 Debian、Ubuntu、Centos 等系统的长期维护版本开发,无论是什么系统总有一个方法能让你虚拟化出容器或虚拟机"},{"title":"端口转发和IP分配自动化","details":"自带内外网端口转发和IP地址自动分配(含IPV6、IPV4),支持TCP/UDP、VNC/RDP等协议,无需人工管理"},{"title":"批量虚拟化","details":"支持使用 QEMU、KVM、LXC、Docker 虚拟化批量开设容器或虚拟机"},{"title":"多系统多环境支持","details":"开设出的容器或虚拟机已支持主流系统,涵盖 Linux、Windows、MacOS、Android 系统,也支持纯粹的浏览器环境或桌面环境"},{"title":"自限制滥用","details":"部分虚拟化开设的容器或虚拟机支持设置屏蔽和装载限制,避免被用于滥用"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1773196139000}'),i={name:"index.md"};function n(s,l,d,o,r,c){return a(),e("div")}const h=t(i,[["render",n]]);export{m as __pageData,h as default};
diff --git a/case/case1.html b/case/case1.html
index 02b2ab6236..d854a98a38 100644
--- a/case/case1.html
+++ b/case/case1.html
@@ -13,7 +13,7 @@
     
     
     
-    
+    
     
     
     
@@ -98,8 +98,8 @@
 cd ecs
  1. 安装 Go 环境(如已安装可跳过)

选择 go 1.25.3 的版本进行安装

bash
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/go.sh -o go.sh && chmod +x go.sh && bash go.sh
  1. 编译
bash
go build -o goecs
  1. 运行测试
bash
./goecs -menu=false -l zh

支持的编译参数:

  • GOOS:支持 linux、windows、darwin、freebsd、openbsd
  • GOARCH:支持 amd64、arm、arm64、386、mips、mipsle、s390x、riscv64

跨平台编译示例:

bash
# 编译 Windows 版本
 GOOS=windows GOARCH=amd64 go build -o goecs.exe
 # 编译 MacOS 版本
-GOOS=darwin GOARCH=amd64 go build -o goecs_darwin

QA

Q: 为什么默认使用sysbench而不是geekbench

A: 比较二者特点

比较项sysbenchgeekbench
适用范围轻量级,几乎可在任何服务器上运行重量级,小型机器无法运行
测试要求无需网络,无特殊硬件需求需联网,IPV4环境,至少1G内存
开源情况基于LUA,开源,可自行编译各架构版本官方二进制闭源代码,不支持自行编译
测试稳定性核心测试组件10年以上未变每个大版本更新测试项,分数不同版本间难以对比(每个版本对标当前最好的CPU)
测试内容仅测试计算性能覆盖多种性能测试,分数加权计算,但部分测试实际不常用
适用场景适合快速测试,仅测试计算性能适合综合全面的测试
排行榜sysbench.spiritlhl.netbrowser.geekbench.com

goecs测试使用何种CPU测试方式可使用参数指定,默认只是为了更多用户快速测试的需求

Q: 为什么使用Golang而不是Rust重构

A: 因为网络相关的项目目前以Golang语言为趋势,大多组件有开源生态维护,Rust很多得自己手搓,我懒得搞我没那个技术力

Q: 为什么不继续开发Shell版本而是选择重构

A: 因为太多千奇百怪的环境问题了,还是提前编译好测试的二进制文件比较容易解决环境问题(泛化性更好)

Q: 每个测试项目的说明有吗?

A: 每个测试项目有对应的维护仓库,自行点击查看仓库说明

Q: 测试进行到一半如何手动终止?

A: 按ctrl键和c键终止程序,终止后依然会在当前目录下生成goecs.txt文件和分享链接,里面是已经测试到的信息。

Q: 非Root环境如何进行测试?

A: 手动执行安装命令,实在装不上也没问题,直接在release中下载对应架构的压缩包解压后执行即可,只要你能执行的了文件。或者你能使用docker的话用docker执行。

致谢

感谢 DKLYDataHub - IP Geolocation Datahe.net bgp.tools ipinfo.io maxmind.com cloudflare.com ip.sb scamalytics.com abuseipdb.com ip2location.com ip-api.com ipregistry.co ipdata.co ipgeolocation.io ipwhois.io ipapi.com ipapi.is ipqualityscore.com bigdatacloud.com virustotal.com ipfighter.com getipintel.net fraudlogix.com 等网站提供的API进行检测,感谢互联网各网站提供的查询资源

感谢

h501

提供的免费托管支持本开源项目的共享测试结果存储

同时感谢以下平台提供编辑和测试支持

golandibmzmto

History Usage

goecs

Stargazers over time

Stargazers over time

License

FOSSA Status

- +GOOS=darwin GOARCH=amd64 go build -o goecs_darwin

QA

Q: 为什么默认使用sysbench而不是geekbench

A: 比较二者特点

比较项sysbenchgeekbench
适用范围轻量级,几乎可在任何服务器上运行重量级,小型机器无法运行
测试要求无需网络,无特殊硬件需求需联网,IPV4环境,至少1G内存
开源情况基于LUA,开源,可自行编译各架构版本官方二进制闭源代码,不支持自行编译
测试稳定性核心测试组件10年以上未变每个大版本更新测试项,分数不同版本间难以对比(每个版本对标当前最好的CPU)
测试内容仅测试计算性能覆盖多种性能测试,分数加权计算,但部分测试实际不常用
适用场景适合快速测试,仅测试计算性能适合综合全面的测试
排行榜sysbench.spiritlhl.netbrowser.geekbench.com

goecs测试使用何种CPU测试方式可使用参数指定,默认只是为了更多用户快速测试的需求

Q: 为什么使用Golang而不是Rust重构

A: 因为网络相关的项目目前以Golang语言为趋势,大多组件有开源生态维护,Rust很多得自己手搓,我懒得搞我没那个技术力

Q: 为什么不继续开发Shell版本而是选择重构

A: 因为太多千奇百怪的环境问题了,还是提前编译好测试的二进制文件比较容易解决环境问题(泛化性更好)

Q: 每个测试项目的说明有吗?

A: 每个测试项目有对应的维护仓库,自行点击查看仓库说明

Q: 测试进行到一半如何手动终止?

A: 按ctrl键和c键终止程序,终止后依然会在当前目录下生成goecs.txt文件和分享链接,里面是已经测试到的信息。

Q: 非Root环境如何进行测试?

A: 手动执行安装命令,实在装不上也没问题,直接在release中下载对应架构的压缩包解压后执行即可,只要你能执行的了文件。或者你能使用docker的话用docker执行。

致谢

感谢 DKLYDataHub - IP Geolocation Datahe.net bgp.tools ipinfo.io maxmind.com cloudflare.com ip.sb scamalytics.com abuseipdb.com ip2location.com ip-api.com ipregistry.co ipdata.co ipgeolocation.io ipwhois.io ipapi.com ipapi.is ipqualityscore.com bigdatacloud.com virustotal.com ipfighter.com getipintel.net fraudlogix.com 等网站提供的API进行检测,感谢互联网各网站提供的查询资源

感谢

h501

提供的免费托管支持本开源项目的共享测试结果存储

同时感谢以下平台提供编辑和测试支持

golandibmzmto

History Usage

goecs

Stargazers over time

Stargazers over time

License

FOSSA Status

+ \ No newline at end of file diff --git a/case/case2.html b/case/case2.html index bc05f277b9..8357711d95 100644 --- a/case/case2.html +++ b/case/case2.html @@ -13,7 +13,7 @@ - + @@ -57,8 +57,8 @@ cat .config/code-server/config.yaml

卸载需要

sudo systemctl stop code-server@root
 sudo systemctl disable code-server@root
 rm -rf ~/.cache/coder
-sudo apt remove coder -y
- +sudo apt remove coder -y + \ No newline at end of file diff --git a/case/case3.html b/case/case3.html index c48553c777..69dacd52a9 100644 --- a/case/case3.html +++ b/case/case3.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/case/case4.html b/case/case4.html index ce0409f122..92ae68d1b0 100644 --- a/case/case4.html +++ b/case/case4.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/case/case5.html b/case/case5.html index 9ad4f30a21..345ad8f257 100644 --- a/case/case5.html +++ b/case/case5.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/case/case6.html b/case/case6.html index 330aeb5652..7fc0dabefd 100644 --- a/case/case6.html +++ b/case/case6.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/case/case7.html b/case/case7.html index d370fe5ffa..c1ed007f62 100644 --- a/case/case7.html +++ b/case/case7.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/case/index.html b/case/index.html index d8203afe52..167f8264eb 100644 --- a/case/index.html +++ b/case/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/developer/index.html b/developer/index.html index 117b308ba7..91ff7264b4 100644 --- a/developer/index.html +++ b/developer/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/developer/l10n.html b/developer/l10n.html index a95009c57a..195dba2cce 100644 --- a/developer/l10n.html +++ b/developer/l10n.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/developer/index.html b/en/developer/index.html index 35f00239df..2f2fa3a8c5 100644 --- a/en/developer/index.html +++ b/en/developer/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/en/developer/l10n.html b/en/developer/l10n.html index a107e141be..52529dde6d 100644 --- a/en/developer/l10n.html +++ b/en/developer/l10n.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/block/block_docker.html b/en/guide/block/block_docker.html index acba17e296..5e1dca1d04 100644 --- a/en/guide/block/block_docker.html +++ b/en/guide/block/block_docker.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/block/block_incus.html b/en/guide/block/block_incus.html index 1b0b55d76d..8140ce3bca 100644 --- a/en/guide/block/block_incus.html +++ b/en/guide/block/block_incus.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/block/block_iptables.html b/en/guide/block/block_iptables.html index 0642b5b01c..2a74babdeb 100644 --- a/en/guide/block/block_iptables.html +++ b/en/guide/block/block_iptables.html @@ -13,7 +13,7 @@ - + @@ -126,8 +126,8 @@ iptables -F BT_BLOCK iptables -X BT_BLOCK

Remove speed restrictions

shell
iptables -D OUTPUT -j SPEED_BLOCK
 iptables -F SPEED_BLOCK
-iptables -X SPEED_BLOCK
- +iptables -X SPEED_BLOCK + \ No newline at end of file diff --git a/en/guide/block/block_lxd.html b/en/guide/block/block_lxd.html index eae2276eb5..dacc24cc47 100644 --- a/en/guide/block/block_lxd.html +++ b/en/guide/block/block_lxd.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/block/block_pve.html b/en/guide/block/block_pve.html index 3e33db68f6..fc6b666c4e 100644 --- a/en/guide/block/block_pve.html +++ b/en/guide/block/block_pve.html @@ -13,7 +13,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +xxx.xxx.xxx.xxx

<VMID> is replaced with the VMID number of the virtual machine, <net0> is replaced with the corresponding alias in the network device (which generally doesn't need to be changed unless you're restricted to IPV6), and xxx.xxx.xxx.xxx is replaced with the public IP address, noting that this IP corresponds to the network device in front of it.

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.

There can be more than one IP, once this rule is enabled the VM can't use any other IP, if you don't write an IPv6 address it means the VM can't use an IPv6 address.

TIP

This setting is only recommended when opening VMs with separate IPs that are not NAT full port mapped, otherwise it may cause strange issues resulting in the server being without a network.

This method is not suitable for use on PVEs that open any NAT VMs/containers.

+ \ No newline at end of file diff --git a/en/guide/containerd/containerd_build.html b/en/guide/containerd/containerd_build.html index 1995a1d7ce..fffbcd6d37 100644 --- a/en/guide/containerd/containerd_build.html +++ b/en/guide/containerd/containerd_build.html @@ -13,7 +13,7 @@ - + @@ -30,8 +30,8 @@ chmod +x create_containerd.sh ./create_containerd.sh

Query Batch Container Information

shell
cat ctlog

Output format:

container_name ssh_port root_password cpu_cores memory_mb start_port end_port disk_gb

One line per container.

Remove All Containers and Images

shell
nerdctl ps -aq | xargs -r nerdctl rm -f
 nerdctl images -q | xargs -r nerdctl rmi -f
-rm -rf ctlog

Restart All Containers After Host Reboot

By default, containers are not configured to auto-restart. Run the following command to start all stopped containers:

shell
nerdctl ps -aq -f status=exited | xargs -r nerdctl start
- +rm -rf ctlog

Restart All Containers After Host Reboot

By default, containers are not configured to auto-restart. Run the following command to start all stopped containers:

shell
nerdctl ps -aq -f status=exited | xargs -r nerdctl start
+ \ No newline at end of file diff --git a/en/guide/containerd/containerd_install.html b/en/guide/containerd/containerd_install.html index 2a81539e9c..4d8947c2a1 100644 --- a/en/guide/containerd/containerd_install.html +++ b/en/guide/containerd/containerd_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/containerd/containerd_precheck.html b/en/guide/containerd/containerd_precheck.html index dbda086d31..630ebed370 100644 --- a/en/guide/containerd/containerd_precheck.html +++ b/en/guide/containerd/containerd_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/containerd/containerd_qa.html b/en/guide/containerd/containerd_qa.html index 8111291cd2..eef1ed25cd 100644 --- a/en/guide/containerd/containerd_qa.html +++ b/en/guide/containerd/containerd_qa.html @@ -13,7 +13,7 @@ - + @@ -29,8 +29,8 @@ iptables -A FORWARD -s 172.20.0.0/16 -j ACCEPT iptables -A FORWARD -d 172.20.0.0/16 -j ACCEPT

Container IPv6 not working

  1. Confirm the host has a public IPv6 address
  2. Check if the containerd-ipv6 CNI network exists:
shell
cat /etc/cni/net.d/20-containerd-ipv6.conflist
  1. Check if the ndpresponder container is running:
shell
nerdctl ps | grep ndpresponder

Image pull failed

The script includes built-in CDN detection. You can also manually test CDN availability:

shell
curl -4 -sL -k "https://cdn0.spiritlhl.top/https://raw.githubusercontent.com/spiritLHLS/ecs/main/back/test" --max-time 6

How to completely reset the containerd environment

Uninstall, then reinstall:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

If lxcfs is not installed on the host, containers will see the host's CPU/memory view. Install lxcfs:

shell
apt-get install -y lxcfs   # Debian/Ubuntu
-yum install -y lxcfs       # CentOS/RHEL

Disk limit not working

Disk limits require xfs or btrfs snapshotter support. The default overlay snapshotter does not support container-level disk limits.

For disk limits, refer to the docker or incus solution documentation.

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

- +yum install -y lxcfs # CentOS/RHEL

Disk limit not working

Disk limits require xfs or btrfs snapshotter support. The default overlay snapshotter does not support container-level disk limits.

For disk limits, refer to the docker or incus solution documentation.

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/containerd/containerd_thanks.html b/en/guide/containerd/containerd_thanks.html index 83837f7dbf..c8e054fc68 100644 --- a/en/guide/containerd/containerd_thanks.html +++ b/en/guide/containerd/containerd_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/dashboard.html b/en/guide/dashboard.html index 3dd96d22c5..8469a1848f 100644 --- a/en/guide/dashboard.html +++ b/en/guide/dashboard.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/dashboardq.html b/en/guide/dashboardq.html index b8de8b5e3f..11076a2f40 100644 --- a/en/guide/dashboardq.html +++ b/en/guide/dashboardq.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/docker/docker_android.html b/en/guide/docker/docker_android.html index bb526f79dc..ba434ab3d7 100644 --- a/en/guide/docker/docker_android.html +++ b/en/guide/docker/docker_android.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ rm -rf /etc/nginx/sites-enabled/reverse-proxy rm -rf /etc/nginx/sites-available/reverse-proxy rm -rf /etc/nginx/passwd_scrcpy_web -rm -rf /root/android_info

Install the APK file

Click list files to open the file directory, switch to the /storage/emulated/0/Download directory, drag and drop the apk into it to install it, and wait for the progress to finish running, and the apk will be uploaded to the Android container.

At this point, go back to the Android interface, open the file manager, it will show the file you just uploaded, click on it to install.

- +rm -rf /root/android_info

Install the APK file

Click list files to open the file directory, switch to the /storage/emulated/0/Download directory, drag and drop the apk into it to install it, and wait for the progress to finish running, and the apk will be uploaded to the Android container.

At this point, go back to the Android interface, open the file manager, it will show the file you just uploaded, click on it to install.

+ \ No newline at end of file diff --git a/en/guide/docker/docker_build.html b/en/guide/docker/docker_build.html index c226ca1f53..7e51f30167 100644 --- a/en/guide/docker/docker_build.html +++ b/en/guide/docker/docker_build.html @@ -13,7 +13,7 @@ - + @@ -45,8 +45,8 @@ docker exec -it $container_id bash -c "service sshd restart" docker exec -it $container_id sh -c "service ssh start" docker exec -it $container_id sh -c "/usr/sbin/sshd" -done - +done + \ No newline at end of file diff --git a/en/guide/docker/docker_custom.html b/en/guide/docker/docker_custom.html index 71c2c96c96..ea8fa663bc 100644 --- a/en/guide/docker/docker_custom.html +++ b/en/guide/docker/docker_custom.html @@ -13,7 +13,7 @@ - + @@ -31,8 +31,8 @@ docker rm -f chromium_${PORT} rm -rf /usr/local/bin/config_${PORT} rm -rf /usr/local/bin/password_${PORT} -docker rmi lscr.io/linuxserver/chromium

One-Click Setup of Desktop Container

A complete Linux desktop on which you can use a browser

The host system requires at least 1 core, 2 GB of RAM, and 5 GB of hard disk space. The created container will occupy a minimum of 3.2 GB of hard disk space.

Setup Instructions:

After setup, the default username is onew and the password is oneclick. The default maximum memory usage is 2 GB.

The default web port for HTTP protocol is 3004, and for HTTPS protocol is 3005. After setup, open the corresponding protocol with localhost's IPV4:port in your web browser.

Run the following command to download and execute the setup script:

curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewebtop.sh -o onewebtop.sh && chmod +x onewebtop.sh && bash onewebtop.sh

Deletion

Command:

shell
docker ps -a

Query for containers with a prefix of 'webtop' in their names, and record the IDs of these containers.

shell
docker rm -f container_ID

To remove the corresponding image, you can use the following command after deleting all associated containers:

shell
docker rmi lscr.io/linuxserver/webtop

One-Click Installation of Guacamole

A web-based tool for controlling servers using protocols like SSH or RDP.

Website: http://your_IPV4_address:80/guacamole

Default Username: guacadmin

Default Password: guacadmin

After installation, remember to change the password upon login.

The host machine should have at least 1 core, 2GB RAM, and 10GB of disk space; otherwise, launching might lead to host machine freezing!

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh
- +docker rmi lscr.io/linuxserver/chromium

One-Click Setup of Desktop Container

A complete Linux desktop on which you can use a browser

The host system requires at least 1 core, 2 GB of RAM, and 5 GB of hard disk space. The created container will occupy a minimum of 3.2 GB of hard disk space.

Setup Instructions:

After setup, the default username is onew and the password is oneclick. The default maximum memory usage is 2 GB.

The default web port for HTTP protocol is 3004, and for HTTPS protocol is 3005. After setup, open the corresponding protocol with localhost's IPV4:port in your web browser.

Run the following command to download and execute the setup script:

curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewebtop.sh -o onewebtop.sh && chmod +x onewebtop.sh && bash onewebtop.sh

Deletion

Command:

shell
docker ps -a

Query for containers with a prefix of 'webtop' in their names, and record the IDs of these containers.

shell
docker rm -f container_ID

To remove the corresponding image, you can use the following command after deleting all associated containers:

shell
docker rmi lscr.io/linuxserver/webtop

One-Click Installation of Guacamole

A web-based tool for controlling servers using protocols like SSH or RDP.

Website: http://your_IPV4_address:80/guacamole

Default Username: guacadmin

Default Password: guacadmin

After installation, remember to change the password upon login.

The host machine should have at least 1 core, 2GB RAM, and 10GB of disk space; otherwise, launching might lead to host machine freezing!

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh
+ \ No newline at end of file diff --git a/en/guide/docker/docker_install.html b/en/guide/docker/docker_install.html index abf106259e..efd2ff1346 100644 --- a/en/guide/docker/docker_install.html +++ b/en/guide/docker/docker_install.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +bash disk_test.sh 1000

Uninstall Docker Environment

One-click uninstall of the entire Docker environment, including all containers, images, networks, systemd services, and binaries:

International

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

China Mainland

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

WARNING

The script requires entering yes to confirm before execution. This operation is irreversible. Deleted content includes all containers, images, and network configurations. Retest workflow: Run uninstall first, then run install to verify the entire installation process from scratch.

+ \ No newline at end of file diff --git a/en/guide/docker/docker_macos.html b/en/guide/docker/docker_macos.html index 49ea9de97b..7e02dbeb97 100644 --- a/en/guide/docker/docker_macos.html +++ b/en/guide/docker/docker_macos.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/docker/docker_precheck.html b/en/guide/docker/docker_precheck.html index c16280a7d2..356722c752 100644 --- a/en/guide/docker/docker_precheck.html +++ b/en/guide/docker/docker_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/docker/docker_qa.html b/en/guide/docker/docker_qa.html index 73e0869318..59fa9afd09 100644 --- a/en/guide/docker/docker_qa.html +++ b/en/guide/docker/docker_qa.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/docker/docker_thanks.html b/en/guide/docker/docker_thanks.html index 54d8d2a086..8c9768e242 100644 --- a/en/guide/docker/docker_thanks.html +++ b/en/guide/docker/docker_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/docker/docker_windows.html b/en/guide/docker/docker_windows.html index 311be66476..6b2f44f876 100644 --- a/en/guide/docker/docker_windows.html +++ b/en/guide/docker/docker_windows.html @@ -13,7 +13,7 @@ - + @@ -47,8 +47,8 @@ --device=/dev/net/tun \ --cap-add NET_ADMIN \ --stop-timeout 120 \ - windows:2022

Important Notes

It is not recommended to use docker commit to save changes to this image, as repeated layer stacking may cause the image size to exceed 40 GB.

For personalized configuration or additional software integration, always start from the builder image to ensure a clean and maintainable result.

- + windows:2022

Important Notes

It is not recommended to use docker commit to save changes to this image, as repeated layer stacking may cause the image size to exceed 40 GB.

For personalized configuration or additional software integration, always start from the builder image to ensure a clean and maintainable result.

+ \ No newline at end of file diff --git a/en/guide/incus/incus_custom.html b/en/guide/incus/incus_custom.html index 3fe5bab65e..2cd772c7bb 100644 --- a/en/guide/incus/incus_custom.html +++ b/en/guide/incus/incus_custom.html @@ -13,7 +13,7 @@ - + @@ -103,8 +103,8 @@ # Reconnect and set process daemon to take effect automatically after reboot. systemctl enable --now wg-quick@warp

3: Autorun: fscarmen's one-click scripts

Finally, the one-click script for fscarmen is introduced. The script is mentioned as a handy tool to simplify the configuration process. It also automatically handles advanced parameters such as Optimal MTU, Optimal Endpoint, etc.

Project: https://github.com/fscarmen/warp-sh

# Run one-key script
-curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

- +curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

+ \ No newline at end of file diff --git a/en/guide/incus/incus_extra_config.html b/en/guide/incus/incus_extra_config.html index 72608c1877..022bd10958 100644 --- a/en/guide/incus/incus_extra_config.html +++ b/en/guide/incus/incus_extra_config.html @@ -13,7 +13,7 @@ - + @@ -44,8 +44,8 @@ Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/zabbly.gpg EOF' -apt-get update

For instructions on adding sources to other systems, refer to the official repository documentation at https://github.com/zabbly/incus?tab=readme-ov-file#installation.

- +apt-get update

For instructions on adding sources to other systems, refer to the official repository documentation at https://github.com/zabbly/incus?tab=readme-ov-file#installation.

+ \ No newline at end of file diff --git a/en/guide/incus/incus_install.html b/en/guide/incus/incus_install.html index d651f61460..b35ac9b50e 100644 --- a/en/guide/incus/incus_install.html +++ b/en/guide/incus/incus_install.html @@ -13,7 +13,7 @@ - + @@ -38,8 +38,8 @@ EOF' apt-get update apt-get install incus -y -incus -h

If there are no exceptions, continue execution

incus admin init

Just enter the default for the normal options

Choose the size of the physical disk (hint: select the default option with a minimum of 1GB). Generally, I fill in the available disk space minus the memory size, then multiply by 0.95 and round down. Here, I entered 10GB.

Remember to select 'no' for options containing 'auto' when prompted to update the image, in order to avoid occupying the system.

- +incus -h

If there are no exceptions, continue execution

incus admin init

Just enter the default for the normal options

Choose the size of the physical disk (hint: select the default option with a minimum of 1GB). Generally, I fill in the available disk space minus the memory size, then multiply by 0.95 and round down. Here, I entered 10GB.

Remember to select 'no' for options containing 'auto' when prompted to update the image, in order to avoid occupying the system.

+ \ No newline at end of file diff --git a/en/guide/incus/incus_lxc.html b/en/guide/incus/incus_lxc.html index 47a787b80d..0bab30a815 100644 --- a/en/guide/incus/incus_lxc.html +++ b/en/guide/incus/incus_lxc.html @@ -13,7 +13,7 @@ - + @@ -46,8 +46,8 @@ curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/ssh_bash.sh -o /usr/local/bin/ssh_bash.sh && chmod +x /usr/local/bin/ssh_bash.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/ssh_sh.sh -o /usr/local/bin/ssh_sh.sh && chmod +x /usr/local/bin/ssh_sh.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o /root/build_ipv6_network.sh && chmod +x /root/build_ipv6_network.sh -curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

Just download the other one-click scripts yourself.

- +curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

Just download the other one-click scripts yourself.

+ \ No newline at end of file diff --git a/en/guide/incus/incus_precheck.html b/en/guide/incus/incus_precheck.html index d80ee15ec7..78d82a7272 100644 --- a/en/guide/incus/incus_precheck.html +++ b/en/guide/incus/incus_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/incus/incus_qa.html b/en/guide/incus/incus_qa.html index 5f38b6e926..d94b21ee22 100644 --- a/en/guide/incus/incus_qa.html +++ b/en/guide/incus/incus_qa.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/incus/incus_qemu.html b/en/guide/incus/incus_qemu.html index 1901beb1c0..80339f4baa 100644 --- a/en/guide/incus/incus_qemu.html +++ b/en/guide/incus/incus_qemu.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ incus delete -f test rm -rf test rm -rf test_v6 -ls - +ls + \ No newline at end of file diff --git a/en/guide/incus/incus_thanks.html b/en/guide/incus/incus_thanks.html index 58ecb6824e..9dc1ca22ab 100644 --- a/en/guide/incus/incus_thanks.html +++ b/en/guide/incus/incus_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/incus/incus_windows.html b/en/guide/incus/incus_windows.html index 6034e1b6b8..99cccbb93f 100644 --- a/en/guide/incus/incus_windows.html +++ b/en/guide/incus/incus_windows.html @@ -13,7 +13,7 @@ - + @@ -49,8 +49,8 @@ nohup websockify --web /usr/share/spice-html5 6080 --unix-target=/run/incus/winvm/qemu.spice > /var/log/websockify-winvm.log 2>&1 & echo "SPICE HTML5 console on http://${SERVER_IP}:6080/spice_auto.html"

At the first boot, you'll need to press the Ctrl+Alt+Delete button in the upper left corner of the browser page. After restarting, follow the prompts on the default interface. You'll need to wait 5-10 minutes for the ISO to be loaded for the actual installation.

Eventually, the Zabbly icon will appear and spin for at least 2 minutes. Please be patient.

Once the spinning stops, you'll enter the normal Windows VM installation process, similar to PVE operations.

Here the hard disk can not be selected, choose to view the yellow tips in the lower left corner, and then follow the prompts will be offline hard disk online point to confirm the button, you can select the hard disk.

Once the installation is complete, the virtual machine will automatically reboot a few times to update the network, and the web side of spice will show up in the user setup interface, while in the background you can use the incus list to see that the network is automatically attached.

After setting up the user to enter the system login page, execute the following command to shut down/exit Windows, then remove the ISO device to ensure that the next boot is from the hard disk, and then start the virtual machine again.

shell
incus stop winvm
 incus config device remove winvm install
-incus start winvm

The following image can be seen after startup (test visit a website)

No need to configure your own network, incus will automatically assign IPV4 addresses and connect to the network.

Remove the remote component to restart the browser mapping

If you need to delete the VM and recreate it due to resource limitations or other reasons, use pkill -f websockify to terminate all SPICE signal forwarding, then incus delete -f winvm to forcibly delete the VM.

shell
lsof -i :6080

Check if the PID for the corresponding port still exists to ensure it has completely stopped (if you have signal forwarding for multiple VMs, it's better not to use pkill to delete all of them; use kill -9 to delete the PID for the specific port).

If it crashes and stops within a few minutes of first startup

Need to add CPU passthrough

shell
incus config set winvm raw.qemu -- "-cpu host"

Just start the virtual machine again

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

Disadvantages

The frontend lacks authentication, so you can't set user passwords.

If you need frontend authentication, you'll need to use Guacamole with additional settings to implement it, which won't be covered in detail here.

The VM piece doesn't have some well established interactive panels and adaptations, spice is too old (although there is a web-based spice client), and the official panels don't support rbac with a username and password and can only be used with certificates.

- +incus start winvm

The following image can be seen after startup (test visit a website)

No need to configure your own network, incus will automatically assign IPV4 addresses and connect to the network.

Remove the remote component to restart the browser mapping

If you need to delete the VM and recreate it due to resource limitations or other reasons, use pkill -f websockify to terminate all SPICE signal forwarding, then incus delete -f winvm to forcibly delete the VM.

shell
lsof -i :6080

Check if the PID for the corresponding port still exists to ensure it has completely stopped (if you have signal forwarding for multiple VMs, it's better not to use pkill to delete all of them; use kill -9 to delete the PID for the specific port).

If it crashes and stops within a few minutes of first startup

Need to add CPU passthrough

shell
incus config set winvm raw.qemu -- "-cpu host"

Just start the virtual machine again

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

Disadvantages

The frontend lacks authentication, so you can't set user passwords.

If you need frontend authentication, you'll need to use Guacamole with additional settings to implement it, which won't be covered in detail here.

The VM piece doesn't have some well established interactive panels and adaptations, spice is too old (although there is a web-based spice client), and the official panels don't support rbac with a username and password and can only be used with certificates.

+ \ No newline at end of file diff --git a/en/guide/kubevirt/kubevirt_build.html b/en/guide/kubevirt/kubevirt_build.html index 5b3fc01407..3ccd74a23e 100644 --- a/en/guide/kubevirt/kubevirt_build.html +++ b/en/guide/kubevirt/kubevirt_build.html @@ -13,7 +13,7 @@ - + @@ -37,8 +37,8 @@ # Start all stopped VMs for vm in $(kubectl get vm -n default --no-headers -o custom-columns=':metadata.name'); do virtctl start "$vm" -n default 2>/dev/null -done - +done + \ No newline at end of file diff --git a/en/guide/kubevirt/kubevirt_install.html b/en/guide/kubevirt/kubevirt_install.html index fbcd6e7bc9..e86f3939c7 100644 --- a/en/guide/kubevirt/kubevirt_install.html +++ b/en/guide/kubevirt/kubevirt_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/kubevirt/kubevirt_precheck.html b/en/guide/kubevirt/kubevirt_precheck.html index dd37229431..8c8d19491a 100644 --- a/en/guide/kubevirt/kubevirt_precheck.html +++ b/en/guide/kubevirt/kubevirt_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/kubevirt/kubevirt_qa.html b/en/guide/kubevirt/kubevirt_qa.html index 26ae03ed95..718fb37f76 100644 --- a/en/guide/kubevirt/kubevirt_qa.html +++ b/en/guide/kubevirt/kubevirt_qa.html @@ -13,7 +13,7 @@ - + @@ -25,8 +25,8 @@
Skip to content
- +bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/kubevirt/kubevirt_thanks.html b/en/guide/kubevirt/kubevirt_thanks.html index 716ae6bc3c..72613a1370 100644 --- a/en/guide/kubevirt/kubevirt_thanks.html +++ b/en/guide/kubevirt/kubevirt_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_custom.html b/en/guide/lxd/lxd_custom.html index f1f3d684d3..7b4336cb3a 100644 --- a/en/guide/lxd/lxd_custom.html +++ b/en/guide/lxd/lxd_custom.html @@ -13,7 +13,7 @@ - + @@ -103,8 +103,8 @@ # Reconnect and set process daemon to take effect automatically after reboot. systemctl enable --now wg-quick@warp

3: Autorun: fscarmen's one-click scripts

Finally, the one-click script for fscarmen is introduced. The script is mentioned as a handy tool to simplify the configuration process. It also automatically handles advanced parameters such as Optimal MTU, Optimal Endpoint, etc.

Project: https://github.com/fscarmen/warp-sh

# Run one-key script
-curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

- +curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_extra_config.html b/en/guide/lxd/lxd_extra_config.html index c42bc3e41c..381cf540ef 100644 --- a/en/guide/lxd/lxd_extra_config.html +++ b/en/guide/lxd/lxd_extra_config.html @@ -13,7 +13,7 @@ - + @@ -37,8 +37,8 @@ systemctl reload snap.lxd.daemon snap restart --reload lxd

Then you can type in your browser

https://your_public_ipv4_address:8443

You can enter the official visualization panel, subsequent operation configuration in accordance with the UI prompts can be operated.

One-Click Installation of Hosted Third-Party Visualization Dashboard

shell
lxc config set core.https_address [::]
 lxc config set core.trust_password your_password
-snap install lxdmosaic

After the installation is complete, open the hen IP address, follow the prompts to set the password for admin, other all the way to the default will be able to use the panel!

- +snap install lxdmosaic

After the installation is complete, open the hen IP address, follow the prompts to set the password for admin, other all the way to the default will be able to use the panel!

+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_install.html b/en/guide/lxd/lxd_install.html index 7738ba98ae..5c292b42f0 100644 --- a/en/guide/lxd/lxd_install.html +++ b/en/guide/lxd/lxd_install.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ ufw disable

Enabling Virtual Memory SWAP

The amount of memory depends on how many instances you want to run. If you want to run 8 instances and calculate, you'll need 2GB of memory. If your actual physical memory is 512MB, you'll need an additional 1.5GB. To be cautious, allocate 2GB of virtual memory.

Execute the following commands: Enter '1', then enter '2048'. This signifies allocating 2GB of virtual memory.

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

Installing LXD

Actually, the virtual memory allocated for swap should be twice the size of the actual memory. So, it's reasonable to allocate 1GB if the actual memory is 500MB. The scenario I described above is an excessive allocation.

apt install snapd -y
 snap install lxd
 /snap/bin/lxd init

If the following error occurs in the above command

(snap "lxd" assumes unsupported features: snapd2.39 (try to update snapd and refresh the core snap))

Use the command patch before installing lxd

snap install core

If there are no exceptions, the results of the above three lines of commands are as follows

Just enter the default for the normal options

Choose the size of the physical disk (hint: select the default option with a minimum of 1GB). Generally, I fill in the available disk space minus the memory size, then multiply by 0.95 and round down. Here, I entered 10GB.

Remember to select 'no' for options containing 'auto' when prompted to update the image, in order to avoid occupying the system.

Test whether symbolic links are functioning in LXC.

lxc -h

If an error is reported then execute the following command to soft connect the lxc command

bash
! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
-export PATH=$PATH:/snap/bin

After connecting, test the lxc command again to see if there is an error about not being able to find it

- +export PATH=$PATH:/snap/bin

After connecting, test the lxc command again to see if there is an error about not being able to find it

+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_lxc.html b/en/guide/lxd/lxd_lxc.html index 42ac9bce4e..7a7f4f8f0d 100644 --- a/en/guide/lxd/lxd_lxc.html +++ b/en/guide/lxd/lxd_lxc.html @@ -13,7 +13,7 @@ - + @@ -46,8 +46,8 @@ curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/ssh_bash.sh -o /usr/local/bin/ssh_bash.sh && chmod +x /usr/local/bin/ssh_bash.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/ssh_sh.sh -o /usr/local/bin/ssh_sh.sh && chmod +x /usr/local/bin/ssh_sh.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o /root/build_ipv6_network.sh && chmod +x /root/build_ipv6_network.sh -curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

Just download the other one-click scripts yourself.

- +curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

Just download the other one-click scripts yourself.

+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_precheck.html b/en/guide/lxd/lxd_precheck.html index 2436be885d..e583c29cec 100644 --- a/en/guide/lxd/lxd_precheck.html +++ b/en/guide/lxd/lxd_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_qa.html b/en/guide/lxd/lxd_qa.html index b5b37cb13f..f84691ebf1 100644 --- a/en/guide/lxd/lxd_qa.html +++ b/en/guide/lxd/lxd_qa.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +export PATH=$PATH:/snap/bin

After executing this command try

lxc -h

to see if the lxc command is fixed.

What to do if you open centos7 and find that CGroupV1 is not supported?

Enable CGroup V1: To enable CGroup V1 on an Ubuntu system, you need to edit the kernel boot parameters.

Please note that before changing kernel boot parameters, make sure to backup important data and settings to prevent unexpected problems.

Edit the ```/etc/default/grubfile and addsystemd.unified_cgroup_hierarchy=0to the end of the parameters inGRUB_CMDLINE_LINUX_DEFAULT``, just like:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

Save the file and run the following command to update the GRUB boot.

bash
sudo update-grub

Reboot the system for the changes to take effect

If the above changes still do not support the opening of centos7, try using a different host system.

Requires both LXD and Docker compatibility to exist

If left unaddressed, docker will override the iptables setting and cause LXD to have no network link

You need to install a scheduled task to detect and fix this issue

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

Currently verified VPS vendors that can open containers with separate IPV6 addresses.

kuroit Phoenix, USA regular

datalix German AMD Promotions

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_qemu.html b/en/guide/lxd/lxd_qemu.html index 23f9efc407..4c8ad17ab5 100644 --- a/en/guide/lxd/lxd_qemu.html +++ b/en/guide/lxd/lxd_qemu.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ lxc delete -f test rm -rf test rm -rf test_v6 -ls - +ls + \ No newline at end of file diff --git a/en/guide/lxd/lxd_thanks.html b/en/guide/lxd/lxd_thanks.html index 215deba625..f01922548f 100644 --- a/en/guide/lxd/lxd_thanks.html +++ b/en/guide/lxd/lxd_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/lxd/lxd_windows.html b/en/guide/lxd/lxd_windows.html index 26bab59897..282da17d4d 100644 --- a/en/guide/lxd/lxd_windows.html +++ b/en/guide/lxd/lxd_windows.html @@ -13,7 +13,7 @@ - + @@ -39,8 +39,8 @@ nohup websockify --web /usr/share/spice-html5 6080 --unix-target=/var/snap/lxd/common/lxd/logs/winvm/qemu.spice > /var/log/websockify-winvm.log 2>&1 & echo "SPICE HTML5 console on http://${SERVER_IP}:6080/spice_auto.html"

At the first boot, you'll need to press the Ctrl+Alt+Delete button in the upper left corner of the browser page. After restarting, follow the prompts on the default interface. You'll need to wait 5-10 minutes for the ISO to be loaded for the actual installation.

Eventually, the Zabbly icon will appear and spin for at least 2 minutes. Please be patient.

Once the spinning stops, you'll enter the normal Windows VM installation process, similar to PVE operations.

Here the hard disk can not be selected, choose to view the yellow tips in the lower left corner, and then follow the prompts will be offline hard disk online point to confirm the button, you can select the hard disk.

Once the installation is complete, the virtual machine will automatically reboot a few times to update the network, and the web side of spice will show up in the user setup interface, while in the background you can use the lxc list to see that the network is automatically attached.

After setting up the user to enter the system login page, execute the following command to shut down/exit Windows, then remove the ISO device to ensure that the next boot is from the hard disk, and then start the virtual machine again.

shell
lxc stop winvm
 lxc config device remove winvm install
-lxc start winvm

The following image can be seen after startup (test visit a website)

No need to configure your own network, lxd will automatically assign IPV4 addresses and connect to the network.

Remove the remote component to restart the browser mapping

If you need to delete the VM and recreate it due to resource limitations or other reasons, use pkill -f websockify to terminate all SPICE signal forwarding, then lxc delete -f winvm to forcibly delete the VM.

shell
lsof -i :6080

Check if the PID for the corresponding port still exists to ensure it has completely stopped (if you have signal forwarding for multiple VMs, it's better not to use pkill to delete all of them; use kill -9 to delete the PID for the specific port).

If it crashes and stops within a few minutes of first startup

Need to add CPU passthrough

shell
lxc config set winvm raw.qemu -- "-cpu host"

Just start the virtual machine again

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

Disadvantages

The frontend lacks authentication, so you can't set user passwords.

If you need frontend authentication, you'll need to use Guacamole with additional settings to implement it, which won't be covered in detail here.

The VM piece doesn't have some well established interactive panels and adaptations, spice is too old (although there is a web-based spice client), and the official panels don't support rbac with a username and password and can only be used with certificates.

- +lxc start winvm

The following image can be seen after startup (test visit a website)

No need to configure your own network, lxd will automatically assign IPV4 addresses and connect to the network.

Remove the remote component to restart the browser mapping

If you need to delete the VM and recreate it due to resource limitations or other reasons, use pkill -f websockify to terminate all SPICE signal forwarding, then lxc delete -f winvm to forcibly delete the VM.

shell
lsof -i :6080

Check if the PID for the corresponding port still exists to ensure it has completely stopped (if you have signal forwarding for multiple VMs, it's better not to use pkill to delete all of them; use kill -9 to delete the PID for the specific port).

If it crashes and stops within a few minutes of first startup

Need to add CPU passthrough

shell
lxc config set winvm raw.qemu -- "-cpu host"

Just start the virtual machine again

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

Disadvantages

The frontend lacks authentication, so you can't set user passwords.

If you need frontend authentication, you'll need to use Guacamole with additional settings to implement it, which won't be covered in detail here.

The VM piece doesn't have some well established interactive panels and adaptations, spice is too old (although there is a web-based spice client), and the official panels don't support rbac with a username and password and can only be used with certificates.

+ \ No newline at end of file diff --git a/en/guide/oneclickvirt/oneclickvirt_install.html b/en/guide/oneclickvirt/oneclickvirt_install.html index 19be4336f5..e63b34107c 100644 --- a/en/guide/oneclickvirt/oneclickvirt_install.html +++ b/en/guide/oneclickvirt/oneclickvirt_install.html @@ -13,7 +13,7 @@ - + @@ -93,8 +93,8 @@ -e DB_PASSWORD="your-password" \ -v oneclickvirt-storage:/app/storage \ --restart unless-stopped \ - oneclickvirt:no-db

Database Initialization

After installing and starting mysql, create an empty database oneclickvirt with type utf8mb4. It's best to make it accessible only locally at 127.0.0.1. Save the corresponding username and password. (If you are using the all-in-one Docker deployment container, it comes with a built-in database and you don't need to create an empty database yourself. The corresponding database is already started and available in the container by default)

After opening the corresponding frontend page, it will automatically redirect to the initialization interface.

Fill in the database information and related user information. If the database connection test is successful, you can click Initialize System.

After completing initialization, it will automatically redirect to the homepage, and you can explore and use it yourself.

If the default user information is used for initialization, the default account is:

Administrator account name and password are respectively:

admin
Admin123!@#

During the initialization process, all image seed data is loaded into the database by default, but by default only debian and alpine related version images are enabled. This is to avoid user selection difficulties caused by too many enabled images.

If you need additional types of images, you need to search by type, architecture, and version in the system image management interface under administrator privileges and enable them.

After initialization, please immediately change the default administrator username and password, and disable or delete the default enabled test user testuser. This can be done in the administrator's user management page.

- + oneclickvirt:no-db

Database Initialization

After installing and starting mysql, create an empty database oneclickvirt with type utf8mb4. It's best to make it accessible only locally at 127.0.0.1. Save the corresponding username and password. (If you are using the all-in-one Docker deployment container, it comes with a built-in database and you don't need to create an empty database yourself. The corresponding database is already started and available in the container by default)

After opening the corresponding frontend page, it will automatically redirect to the initialization interface.

Fill in the database information and related user information. If the database connection test is successful, you can click Initialize System.

After completing initialization, it will automatically redirect to the homepage, and you can explore and use it yourself.

If the default user information is used for initialization, the default account is:

Administrator account name and password are respectively:

admin
Admin123!@#

During the initialization process, all image seed data is loaded into the database by default, but by default only debian and alpine related version images are enabled. This is to avoid user selection difficulties caused by too many enabled images.

If you need additional types of images, you need to search by type, architecture, and version in the system image management interface under administrator privileges and enable them.

After initialization, please immediately change the default administrator username and password, and disable or delete the default enabled test user testuser. This can be done in the administrator's user management page.

+ \ No newline at end of file diff --git a/en/guide/oneclickvirt/oneclickvirt_precheck.html b/en/guide/oneclickvirt/oneclickvirt_precheck.html index 31a629c671..6fe5cf54a6 100644 --- a/en/guide/oneclickvirt/oneclickvirt_precheck.html +++ b/en/guide/oneclickvirt/oneclickvirt_precheck.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ NAT IPv4 + Independent IPv6 Independent IPv4 Independent IPv4 + IPv6 -Pure IPv6 - +Pure IPv6 + \ No newline at end of file diff --git a/en/guide/oneclickvirt/oneclickvirt_qa.html b/en/guide/oneclickvirt/oneclickvirt_qa.html index 68c454d781..93f740fd5f 100644 --- a/en/guide/oneclickvirt/oneclickvirt_qa.html +++ b/en/guide/oneclickvirt/oneclickvirt_qa.html @@ -13,7 +13,7 @@ - + @@ -34,8 +34,8 @@ -- Exit EXIT;
  1. Login Test

Log in to the system with the new password to verify.

Notes

How to Delete Persistent Database and Storage Volumes in Docker

After deleting the corresponding container

Execute

shell
docker volume rm oneclickvirt-data oneclickvirt-storage oneclickvirt-config

to delete

Excessive Instance Creation Causes Node Abnormalities

A prominent symptom is extremely slow operation execution, with commands taking several minutes to complete.

This commonly occurs when a node has poor I/O performance and is over-allocated with SWAP memory. For example, in an LXD environment, executing lxc list may result in an error:

shell
internal error, please report: running “lxd.lxc” failed: cannot create transient scope: DBus error “org.freedesktop.DBus.Error.TimedOut”: [Failed to activate service ‘org.freedesktop.systemd1’: timed out (service_start_timeout=25000ms)]

The root cause is setting too many instances while the provider imposes strict I/O restrictions.

At this point, only one solution remains: force-reboot the node server.

Immediately after reboot, log into SSH and use the corresponding script to clear swap usage, then delete some instances to free resources.

Since containers take time to restart individually after reboot, this window may not delete many instances, but each reboot clears some.

Ultimately, when limiting instance counts, carefully assess node performance. Avoid overloading weaker nodes or those with strict constraints.

Issues Arising from Self-Compilation

Commonly encountered in source code deployment, Dockerfile, and Docker Compose deployment methods

Frequently observed in frontend compilation errors on ARM architectures

Directly deploy using pre-compiled Docker container images or binary files (most reliable approach)

Some commands cannot detect NAT mapping rules for Incus and LXD.

This is normal behavior.

Incus/LXD port mapping defaults to kernel-level NAT (DNAT + FORWARD) and does not create port listening processes on the host machine. Therefore, traditional port occupancy tools typically will not show any results.

For example, the following commands will not detect host port usage:

shell
ss -lntup
 lsof -i
-netstat -lntp

Only by running:

shell
incus config device show instance1

or:

shell
lxd config device show instance1

to view configured port mapping rules, as traffic bypasses the host and forwards directly externally.

The correct method to check port mappings is to examine nftables rules

shell
nft list ruleset

or view only the NAT table:

shell
nft list table ip nat

On systems using iptables, use:

shell
iptables -t nat -L

If traffic is flowing in or out, inspect actual connection states with:

shell
conntrack -L | grep <port>

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

- +netstat -lntp

Only by running:

shell
incus config device show instance1

or:

shell
lxd config device show instance1

to view configured port mapping rules, as traffic bypasses the host and forwards directly externally.

The correct method to check port mappings is to examine nftables rules

shell
nft list ruleset

or view only the NAT table:

shell
nft list table ip nat

On systems using iptables, use:

shell
iptables -t nat -L

If traffic is flowing in or out, inspect actual connection states with:

shell
conntrack -L | grep <port>

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/oneclickvirt/oneclickvirt_thanks.html b/en/guide/oneclickvirt/oneclickvirt_thanks.html index f6c0266d6e..31b39acb95 100644 --- a/en/guide/oneclickvirt/oneclickvirt_thanks.html +++ b/en/guide/oneclickvirt/oneclickvirt_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/oneclickvirt/oneclickvirt_usage.html b/en/guide/oneclickvirt/oneclickvirt_usage.html index f1907cb755..1a8b84e65a 100644 --- a/en/guide/oneclickvirt/oneclickvirt_usage.html +++ b/en/guide/oneclickvirt/oneclickvirt_usage.html @@ -13,7 +13,7 @@ - + @@ -118,8 +118,8 @@ prefix: '[oneclickvirt]' retention-day: 3 show-line: false - stacktrace-key: stacktrace

Detailed configuration for system log recording, based on the zap log library.

Note: When debugging issues, level should be set to debug to obtain detailed log information.

- + stacktrace-key: stacktrace

Detailed configuration for system log recording, based on the zap log library.

Note: When debugging issues, level should be set to debug to obtain detailed log information.

+ \ No newline at end of file diff --git a/en/guide/podman/podman_build.html b/en/guide/podman/podman_build.html index d99c978af3..75b92c28b7 100644 --- a/en/guide/podman/podman_build.html +++ b/en/guide/podman/podman_build.html @@ -13,7 +13,7 @@ - + @@ -34,8 +34,8 @@ podman system prune -af rm -rf ctlog

Restart All Containers After Host Reboot

Podman supports systemd integration. Generate auto-start service for a container:

shell
# Generate systemd service for a specific container
 podman generate systemd --name ct1 > /etc/systemd/system/container-ct1.service
-systemctl enable container-ct1

Or manually start all stopped containers:

shell
podman ps -aq -f status=exited | xargs -r podman start
- +systemctl enable container-ct1

Or manually start all stopped containers:

shell
podman ps -aq -f status=exited | xargs -r podman start
+ \ No newline at end of file diff --git a/en/guide/podman/podman_install.html b/en/guide/podman/podman_install.html index 1d66ba3eba..ed7bf8ee31 100644 --- a/en/guide/podman/podman_install.html +++ b/en/guide/podman/podman_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/podman/podman_precheck.html b/en/guide/podman/podman_precheck.html index 85d1285588..0ee1d85e8c 100644 --- a/en/guide/podman/podman_precheck.html +++ b/en/guide/podman/podman_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/podman/podman_qa.html b/en/guide/podman/podman_qa.html index 1952dc9da2..7ce906e948 100644 --- a/en/guide/podman/podman_qa.html +++ b/en/guide/podman/podman_qa.html @@ -13,7 +13,7 @@ - + @@ -28,8 +28,8 @@ ghcr.io/oneclickvirt/podman:<os>-arm64 ghcr.io/oneclickvirt/podman:<os> # multi-arch manifest

Manually pull image example:

shell
podman pull ghcr.io/oneclickvirt/podman:debian-amd64

How to completely reset the Podman environment

Uninstall, then reinstall:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

Podman vs containerd: which to choose?

DNS issues

Podman installation configures the check-dns-podman.service. Check if it's running:

shell
systemctl status check-dns-podman

Manual DNS fix:

shell
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
-echo "nameserver 1.1.1.1" >> /etc/resolv.conf

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

- +echo "nameserver 1.1.1.1" >> /etc/resolv.conf

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/podman/podman_thanks.html b/en/guide/podman/podman_thanks.html index b123edef4d..59c30616b1 100644 --- a/en/guide/podman/podman_thanks.html +++ b/en/guide/podman/podman_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/pve/images/readme.html b/en/guide/pve/images/readme.html index ab154bb64e..cbc1960ac8 100644 --- a/en/guide/pve/images/readme.html +++ b/en/guide/pve/images/readme.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/pve/pve_android.html b/en/guide/pve/pve_android.html index aa08b09b56..e300d561ad 100644 --- a/en/guide/pve/pve_android.html +++ b/en/guide/pve/pve_android.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/pve/pve_custom.html b/en/guide/pve/pve_custom.html index e5122dd75c..bc97a49135 100644 --- a/en/guide/pve/pve_custom.html +++ b/en/guide/pve/pve_custom.html @@ -13,7 +13,7 @@ - + @@ -55,8 +55,8 @@ 2a01:4f8:1c1c:94de::3 2a01:4f8:1c1c:94de::4 2a01:4f8:1c1c:94de::5 -2a01:4f8:1c1c:94de::6

This approach can be used when the host machine has not been fully allocated a subnet larger than /80, possesses only a few IPv6 addresses, yet requires the creation of instances with independent IPv6 addresses.

- +2a01:4f8:1c1c:94de::6

This approach can be used when the host machine has not been fully allocated a subnet larger than /80, possesses only a few IPv6 addresses, yet requires the creation of instances with independent IPv6 addresses.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_install.html b/en/guide/pve/pve_install.html index 952db93583..e109e3164a 100644 --- a/en/guide/pve/pve_install.html +++ b/en/guide/pve/pve_install.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +mount /dev/sdx1 /mnt

The wireless.zip on the USB flash drive should be unzipped and opened to see the deb file.

At this point, run the one-click configuration

shell
bash /mnt/wireless.sh

After the configuration is complete, the system will automatically reboot and the public network will be available after the reboot.

During the execution of the configuration script, you will be prompted to enter the name and password of the WIFI. Since there is no Chinese input method in the pure CI environment, the name of the WIFI must be composed of English numbers only, and the password must be the same.

Cautions

Physical machine after the installation of unlimited modules can not use NAT to connect directly to the virtual machine to access the network, so the subsequent tutorials of this project does not support this method of access to the bridge, the subsequent scripts of this project does not support this method of installation of Proxmox.

Currently feasible wireless module used on the PVE success stories, are required to WIFI router access to the network is automatically obtain an IP address (DHCP) (the subsequent use of openwrt or ikuai or directly nat after the network available within the virtual machine), or can be modified in the router static routing table, if the WIFI router to use a fixed IP address Connection to the network, for the time being did not find success stories.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_kvm.html b/en/guide/pve/pve_kvm.html index fc2e092446..8a59571a26 100644 --- a/en/guide/pve/pve_kvm.html +++ b/en/guide/pve/pve_kvm.html @@ -13,7 +13,7 @@ - + @@ -33,8 +33,8 @@ rm -rf vmlog rm -rf vm*

TIP

Before modifying the VM configuration for PVE, you must shut it down first. After making the configuration changes, start it again to avoid configuration reload errors.

Setting Up Virtual Machines with Dedicated IPv4 Addresses

Three scripts, each with its own advantages and disadvantages.

The first two scripts don't require an additional IPV4 address to be bound to the vmbr0 interface beforehand, and the opened VM will directly bind the additional IPV4 address.

The last script requires additional IPV4 addresses to be bound to the vmbr0 interface beforehand, and the opened VM will do NAT full port mapping to the intranet IPV4 address, **without directly binding additional IPV4 addresses.

Automatically selects additional IPV4 addresses on the same subnet as the host machine to open the virtual machine

WARNING

Before use, ensure that the current host machine has at least 2 available IP addresses within its IP range, and there are unallocated IP addresses. These unallocated IP addresses should not be bound to the host machine.

TIP

At this point, the IPV4 address appended is the address following the host's current IPV4 address in sequence. For example, if the current host address is 1.1.1.32 and then 1.1.1.33 there is already a virtual machine, then this script appends an IP address of 1.1.1.34.

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_extra_ip.sh -o buildvm_extra_ip.sh && chmod +x buildvm_extra_ip.sh

Meaning of each parameter

shell
# ./buildvm_extra_ip.sh VMID Username Password Number_of_CPU_Cores Memory_Size_in_MB Disk_Size_in_GB OS Storage_Disk Attach_IPV6(Default is N)

TIP

Note that the Password here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the Password due to special characters being escaped during the setup process.

Test Example

shell
./buildvm_extra_ip.sh 152 root oneclick123 1 1024 10 debian12 local N

The above command is used to create a virtual machine with a dedicated IPv4 address.

AttributeValue
VMID152
Usernameroot
Passwordoneclick123
CPU1 core
Memory1024MB
Disk10GB
OSdebian12
Storagelocal disk
IPv6 AddonNot attached by default

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

Manually Assign Additional IPV4 Addresses to Open Virtual Machines

TIP

If IP addresses within different subnets are appended without a MAC address, the router will not recognize the source MAC address, and the traffic will be flagged as “misuse” and “may” cause the server to be blocked. (If you are using a Hetzner standalone server, it is recommended that you provide the MAC address of the attached IPV4 address to prevent abuse from being reported.)

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_manual_ip.sh -o buildvm_manual_ip.sh && chmod +x buildvm_manual_ip.sh

Meaning of each parameter

shell
# ./buildvm_manual_ip.sh VMID USERNAME PASSWORD CPU_CORES MEMORY_SIZE_GB STORAGE_SIZE_GB OS STORAGE_DISK IPV4_ADDRESS ATTACH_IPV6(defaults to N) MAC_ADDRESS(Optional whether to specify)

TIP

Note that the PASSWORD here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the PASSWORD due to special characters being escaped during the setup process.

Test Example

shell
./buildvm_manual_ip.sh 152 root oneclick123 1 1024 10 debian12 local a.b.c.d/24 N

The above command is used to create a virtual machine with an independent IPV4 address.

AttributeValue
VMID152
Usernameroot
Passwordoneclick123
CPU1 core
Memory1024MB
Disk10GB
Operating Systemdebian12
Storage DiskLocal Disk (System Disk)
IPV4 Addressa.b.c.d
Subnet/24 Subnet
IPV6None
MAC_ADDRESSNone

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

Host manually appends an additional IPV4 address and then specifies the IPV4 address to open the virtual machine

TIP

Make sure you can SSH into the host with the extra IPV4 address before opening, but curl ip.sb still shows the original host IPV4 address.

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_fullnat_ip.sh -o buildvm_fullnat_ip.sh && chmod +x buildvm_fullnat_ip.sh

Meaning of each parameter

shell
# ./buildvm_fullnat_ip.sh VMID USERNAME PASSWORD CPU_CORES MEMORY_SIZE_GB STORAGE_SIZE_GB OS STORAGE_DISK IPV4_ADDRESS ATTACH_IPV6(defaults to N)

TIP

Note that the PASSWORD here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the PASSWORD due to special characters being escaped during the setup process.

Test Example

shell
./buildvm_fullnat_ip.sh 152 root oneclick123 1 1024 10 debian12 local a.b.c.d N

The above command is used to create a virtual machine with an independent IPV4 address.

AttributeValue
VMID152
Usernameroot
Passwordoneclick123
CPU1 core
Memory1024MB
Disk10GB
Operating Systemdebian12
Storage DiskLocal Disk (System Disk)
IPV4 Addressa.b.c.d
IPV6None
MAC_ADDRESSNone

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

Incoming and outgoing traffic goes to the bound IPV4 address

execute

line="-A POSTROUTING -s 172.16.1.0\/24 -o vmbr0 -j MASQUERADE"
 sed -i "\|$line|d" /etc/iptables/rules.v4
-service netfilter-persistent restart

This will cause the host to lose the ability to open VMs/containers with NAT that do not have a separate IPV4 address, so be careful!

After this, You will only be able to open VMs with separate IPV4 addresses.

Creating Virtual Machines with Pure IPv6 Addresses

The prerequisite is that the host provides an IPv6 subnet instead of just a standalone IPv6 address, and the host does not have MAC address verification enabled.

Automatic Selection of IPv6 Addresses without Manual Specification

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

Meaning of each parameter

shell
# ./buildvm_onlyv6.sh VMID username password CPU_cores memory_GB disk_GB operating_system storage_disk

TIP

Note that the password here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the password due to special characters being escaped during the setup process.

Test Example

shell
./buildvm_onlyv6.sh 152 root oneclick123 1 1024 10 debian12 local

The above command is used to create a virtual machine with only IPv6 addresses.

ParameterValue
VMID152
Usernameroot
Passwordoneclick123
CPU1 core
Memory1024MB
Disk10GB
Operating Systemdebian12
Storage Disklocal

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

- +service netfilter-persistent restart

This will cause the host to lose the ability to open VMs/containers with NAT that do not have a separate IPV4 address, so be careful!

After this, You will only be able to open VMs with separate IPV4 addresses.

Creating Virtual Machines with Pure IPv6 Addresses

The prerequisite is that the host provides an IPv6 subnet instead of just a standalone IPv6 address, and the host does not have MAC address verification enabled.

Automatic Selection of IPv6 Addresses without Manual Specification

Usage Instructions

Download Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

Meaning of each parameter

shell
# ./buildvm_onlyv6.sh VMID username password CPU_cores memory_GB disk_GB operating_system storage_disk

TIP

Note that the password here should be a mix of English and numbers only, and start with English, so as to avoid failing to set the password due to special characters being escaped during the setup process.

Test Example

shell
./buildvm_onlyv6.sh 152 root oneclick123 1 1024 10 debian12 local

The above command is used to create a virtual machine with only IPv6 addresses.

ParameterValue
VMID152
Usernameroot
Passwordoneclick123
CPU1 core
Memory1024MB
Disk10GB
Operating Systemdebian12
Storage Disklocal

TIP

Note that only VMIDs from 100 to 256 can be used here, no other numbers can be used.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_lxc.html b/en/guide/pve/pve_lxc.html index 8e5b74ab64..12862c817c 100644 --- a/en/guide/pve/pve_lxc.html +++ b/en/guide/pve/pve_lxc.html @@ -13,7 +13,7 @@ - + @@ -33,8 +33,8 @@ systemctl restart networking.service systemctl restart ndpresponder.service iptables-save | awk '{if($1=="COMMIT"){delete x}}$1=="-A"?!x[$0]++:1' | iptables-restore -iptables-save > /etc/iptables/rules.v4

Creating Virtual Machines with Pure IPv6 Addresses

The premise is that the host provides an IPv6 subnet rather than a standalone IPv6 address, and the host does not have MAC address filtering enabled.

Automatic Selection of IPv6 Addresses, No Manual Configuration Needed

Download script

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

Example Usage

shell
./buildct_onlyv6.sh CTID Password Number_of_CPU_Cores Memory_Size_in_MB Disk_Size_in_GB Operating_System Storage_Disk
shell
./buildct_onlyv6.sh 152 oneclick123 1 1024 10 debian13 local

The above command signifies the creation of a container with a pure IPV6 address.

AttributeValue
Container TypeCT
CTID152
Usernameroot
Passwordoneclick123
CPU Cores1
Memory1024MB
Disk10G
Operating Systemdebian13
Storage DiskLocal Disk (System Disk)

TIP

Note that only CTIDs from 100 to 256 can be used here, no other numbers can be used.

- +iptables-save > /etc/iptables/rules.v4

Creating Virtual Machines with Pure IPv6 Addresses

The premise is that the host provides an IPv6 subnet rather than a standalone IPv6 address, and the host does not have MAC address filtering enabled.

Automatic Selection of IPv6 Addresses, No Manual Configuration Needed

Download script

Command:

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

Example Usage

shell
./buildct_onlyv6.sh CTID Password Number_of_CPU_Cores Memory_Size_in_MB Disk_Size_in_GB Operating_System Storage_Disk
shell
./buildct_onlyv6.sh 152 oneclick123 1 1024 10 debian13 local

The above command signifies the creation of a container with a pure IPV6 address.

AttributeValue
Container TypeCT
CTID152
Usernameroot
Passwordoneclick123
CPU Cores1
Memory1024MB
Disk10G
Operating Systemdebian13
Storage DiskLocal Disk (System Disk)

TIP

Note that only CTIDs from 100 to 256 can be used here, no other numbers can be used.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_macos.html b/en/guide/pve/pve_macos.html index 5c84df10e8..de72944f07 100644 --- a/en/guide/pve/pve_macos.html +++ b/en/guide/pve/pve_macos.html @@ -14,7 +14,7 @@ - + @@ -31,8 +31,8 @@ monterey.iso.7z (Size: 12.36GB) ventura.iso.7z (Size: 12.31GB) sonoma.iso.7z (Size: 14.41GB) -sequoia.iso.7z (Size: 15.02GB)

MACOS Virtual Machine Template Setup

Download Template Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

Parameter Meanings

shell
# ./buildvm_macos.sh VMID CPU_cores Memory Disk SSH_port VNC_port System Storage_disk Independent_IPV6(default_N_if_empty)

TIP

The disk size here is only the size of the virtual machine's disk. During the actual setup process, the program will also mount the boot disk and system image, so the actual disk requirement for setting up a virtual machine is virtual machine disk size + image size + boot disk size (500MB). Always be aware of whether your disk space is sufficient for setting up virtual machines.

Example Command

Using the oldest version (high-sierra) as an example, the supported configuration is as follows (very laggy)

shell
./buildvm_macos.sh 100 2 4096 45 44022 45901 high-sierra local N

After the template is set up, you can run cat vm100 to view information, or check the NOTES in the corresponding VM in the WEB interface.

TIP

If you did not install PVE on Debian through this project, but installed PVE directly using the official ISO, and did not merge the local and local-lvm partitions, or the local partition is not enabled to support the VM disk type, then the local in the one-click command above should be changed to local-lvm, and you need to use a VM disk-supporting Partitioning for virtual machine creation

Here is the information for the example VM:

PropertyValue
VMID100
CPU cores2
Memory size4096MB
Disk size45G
SSH port44022
VNC port45901
Systemhigh-sierra
Host storage disklocal
Independent IPV6N

TIP

Note that VMID can only use numbers from 100 to 256, other numbers are not available

MACOS System Boot and Installation

After completing the previous steps, you can see a gray virtual machine waiting to be started in the panel.

mac0

After clicking start, enter the VNC panel. The selection box on the left has a full-screen button. It is recommended to operate in full screen to avoid resolution issues.

mac00

After about 3 minutes of boot disk loading, a startup disk will be displayed on the left center of the screen. Click directly or press Enter.

After another 3-5 minutes of startup disk loading, four selection boxes will appear. Select Disk Utility and click to enter.

mac1

After entering, you can see three disks and one image. Find the disk larger than 40G named QEMU HARDDISK Media, and click Erase.

mac2

A pop-up window will appear, requiring you to rename the name to macos for easy identification and use later, then click Erase to continue initialization.

mac3

After initialization is complete, click Done.

mac4

Now you need to exit the Disk Utility interface. Click Disk Utility in the upper right corner and select Quit Disk Utility to exit the current selection box.

mac5

Then you return to the previous four selection boxes. Select Install macOS XXXX (since I am using Big Sur as an example, XXXX is Big Sur), and click continue.

mac6

In the following steps, continue clicking continue, then click Agree, and then Agree again.

mac7

mac8

mac9

Until those three disks appear again, but here you can see the disk larger than 40G named macos. Select it and click continue.

mac10

After a period of file copying and disk loading (about 12 minutes), you will formally enter the system installation phase. Choose your region based on where the host machine is located.

mac11

After selecting the region, continue clicking continue.

mac12

mac13

Until the Migration Assistant data migration option appears, select Not Now in the lower left corner to not import user data.

mac14

Then you will be prompted to create a user. Fill in the username, account name, and login password. After setting up, click continue.

mac15

After that, you will continue clicking continue until the system installation is complete.

Network Configuration

Since the system installation was performed in an offline environment, you need to manually configure a static network connection to the host's bridge.

Click the WIFI button in the upper right corner, turn off WIFI, and then click Network Preferences ...

mac16

After entering the settings interface, click the Advanced button to enter the advanced settings interface.

mac17

Fill in the static network configuration in the TCP/IP tab.

Configure IPV4: Manually

IPV4 Address: 172.16.1.xxx (replace xxx with the IP you want to bind, my vmid is 100, so I wrote 100 for convenience)

Subnet Mask: 255.255.255.0

Router: 172.16.1.1

If you need to configure an IPV6 network, similar to the IPV4 settings above, you will need to fill in the public IPV6 address bound to the virtual machine (written in the Note box in the PVE panel), subnet mask 128, and the default gateway obtained by executing cat /usr/local/bin/pve_check_ipv6 on the host.

mac18

Fill in the static network DNS configuration in the DNS tab.

Generally, adding 8.8.8.8 and 1.1.1.1 is sufficient. For use in mainland China, use 114.114.114.114.

mac19

After filling in and applying, the top left of the settings will show that the network is connected.

mac20

Now, opening the default browser and visiting any website will allow you to access public network resources, proving that the network has worked.

Remove ISO

Manually click on the corresponding CD in the Hardware on the web side of ProxmoxVE and select Remove, then restart the VM and you can use it directly.

wk

Macos system is to uninstall opencore.iso and xxxx (the system image used for installation).iso, similar to the Windows system uninstallation of win image and virtio image in the example picture above.

- +sequoia.iso.7z (Size: 15.02GB)

MACOS Virtual Machine Template Setup

Download Template Script

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

Parameter Meanings

shell
# ./buildvm_macos.sh VMID CPU_cores Memory Disk SSH_port VNC_port System Storage_disk Independent_IPV6(default_N_if_empty)

TIP

The disk size here is only the size of the virtual machine's disk. During the actual setup process, the program will also mount the boot disk and system image, so the actual disk requirement for setting up a virtual machine is virtual machine disk size + image size + boot disk size (500MB). Always be aware of whether your disk space is sufficient for setting up virtual machines.

Example Command

Using the oldest version (high-sierra) as an example, the supported configuration is as follows (very laggy)

shell
./buildvm_macos.sh 100 2 4096 45 44022 45901 high-sierra local N

After the template is set up, you can run cat vm100 to view information, or check the NOTES in the corresponding VM in the WEB interface.

TIP

If you did not install PVE on Debian through this project, but installed PVE directly using the official ISO, and did not merge the local and local-lvm partitions, or the local partition is not enabled to support the VM disk type, then the local in the one-click command above should be changed to local-lvm, and you need to use a VM disk-supporting Partitioning for virtual machine creation

Here is the information for the example VM:

PropertyValue
VMID100
CPU cores2
Memory size4096MB
Disk size45G
SSH port44022
VNC port45901
Systemhigh-sierra
Host storage disklocal
Independent IPV6N

TIP

Note that VMID can only use numbers from 100 to 256, other numbers are not available

MACOS System Boot and Installation

After completing the previous steps, you can see a gray virtual machine waiting to be started in the panel.

mac0

After clicking start, enter the VNC panel. The selection box on the left has a full-screen button. It is recommended to operate in full screen to avoid resolution issues.

mac00

After about 3 minutes of boot disk loading, a startup disk will be displayed on the left center of the screen. Click directly or press Enter.

After another 3-5 minutes of startup disk loading, four selection boxes will appear. Select Disk Utility and click to enter.

mac1

After entering, you can see three disks and one image. Find the disk larger than 40G named QEMU HARDDISK Media, and click Erase.

mac2

A pop-up window will appear, requiring you to rename the name to macos for easy identification and use later, then click Erase to continue initialization.

mac3

After initialization is complete, click Done.

mac4

Now you need to exit the Disk Utility interface. Click Disk Utility in the upper right corner and select Quit Disk Utility to exit the current selection box.

mac5

Then you return to the previous four selection boxes. Select Install macOS XXXX (since I am using Big Sur as an example, XXXX is Big Sur), and click continue.

mac6

In the following steps, continue clicking continue, then click Agree, and then Agree again.

mac7

mac8

mac9

Until those three disks appear again, but here you can see the disk larger than 40G named macos. Select it and click continue.

mac10

After a period of file copying and disk loading (about 12 minutes), you will formally enter the system installation phase. Choose your region based on where the host machine is located.

mac11

After selecting the region, continue clicking continue.

mac12

mac13

Until the Migration Assistant data migration option appears, select Not Now in the lower left corner to not import user data.

mac14

Then you will be prompted to create a user. Fill in the username, account name, and login password. After setting up, click continue.

mac15

After that, you will continue clicking continue until the system installation is complete.

Network Configuration

Since the system installation was performed in an offline environment, you need to manually configure a static network connection to the host's bridge.

Click the WIFI button in the upper right corner, turn off WIFI, and then click Network Preferences ...

mac16

After entering the settings interface, click the Advanced button to enter the advanced settings interface.

mac17

Fill in the static network configuration in the TCP/IP tab.

Configure IPV4: Manually

IPV4 Address: 172.16.1.xxx (replace xxx with the IP you want to bind, my vmid is 100, so I wrote 100 for convenience)

Subnet Mask: 255.255.255.0

Router: 172.16.1.1

If you need to configure an IPV6 network, similar to the IPV4 settings above, you will need to fill in the public IPV6 address bound to the virtual machine (written in the Note box in the PVE panel), subnet mask 128, and the default gateway obtained by executing cat /usr/local/bin/pve_check_ipv6 on the host.

mac18

Fill in the static network DNS configuration in the DNS tab.

Generally, adding 8.8.8.8 and 1.1.1.1 is sufficient. For use in mainland China, use 114.114.114.114.

mac19

After filling in and applying, the top left of the settings will show that the network is connected.

mac20

Now, opening the default browser and visiting any website will allow you to access public network resources, proving that the network has worked.

Remove ISO

Manually click on the corresponding CD in the Hardware on the web side of ProxmoxVE and select Remove, then restart the VM and you can use it directly.

wk

Macos system is to uninstall opencore.iso and xxxx (the system image used for installation).iso, similar to the Windows system uninstallation of win image and virtio image in the example picture above.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_precheck.html b/en/guide/pve/pve_precheck.html index 0ff65c8938..ec02d72872 100644 --- a/en/guide/pve/pve_precheck.html +++ b/en/guide/pve/pve_precheck.html @@ -13,7 +13,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +rm -rf /usr/local/bin/pve_last_ipv6*

Commands to set up the testing environment for executing this project are as follows:

图片

To perform the above-mentioned query, you only need to use the one-click script below to automatically create a virtual machine. There is no need to manually modify settings on the web interface.

图片

After creating the virtual machines using the subsequent script as mentioned above, it may be necessary to manually modify the settings on the web interface. You will need to disable hardware nested virtualization for each respective virtual machine, as shown in the following diagram.

图片

Stop the virtual machine before making modifications. After the modifications are done, you can start the machine to use NOVNC. Failure to close it may result in bugs that render this virtual machine unusable.

If you forcibly install PVE to enable KVM, even if the startup fails, you can also disable this option and try to start the virtual machine to see if it works.

The reason for these issues is what was stated above, the host does not support nested virtualized KVMs for acceleration.

TIP

Please use the "screen" command to suspend execution before launching the virtual machine, in order to avoid prolonged startup times. Unstable SSH connections could lead to interruptions during the intermediate execution.



+ \ No newline at end of file diff --git a/en/guide/pve/pve_qa.html b/en/guide/pve/pve_qa.html index 48460cb956..9ac7bdcc08 100644 --- a/en/guide/pve/pve_qa.html +++ b/en/guide/pve/pve_qa.html @@ -13,7 +13,7 @@ - + @@ -35,8 +35,8 @@ service networking restart systemctl restart networking.service cat /etc/iptables/rules.v4 | iptables-restore

Detect whether the merchant has falsely declared the IPV6 subnet size, resulting in the inability to set up virtual machines/containers with independent IPV6 addresses.

Use the following command to test the actual subnet mask size on a clean machine that does not have Proxmox VE installed.

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/ecs/main/archive/eo6s.sh -o eo6s.sh && chmod +x eo6s.sh && bash eo6s.sh

If the test result is 128, it proves that the merchant has falsely labelled the subnet size, and only one IPV6 address cannot be additionally allocated to virtual machines/containers.

Another situation is that the merchant only gives permission to add, but does not actually give the complete IPV6 subnet to the machine. A typical example is virtfusion, which requires adding IPV6 IPs one by one in the background. In this case, it is also impossible to open.

virtfusion's customer service explanation for this situation:

All of the blocks you get for IPv6 are 1 x /64 however you need to add and route them to the VPS.
-Once you add 1 IPv6 you need to ping the gateway (its in the panel under networking) and then ping the IPv6 address, then repeat for every IPv6 address you add.

Host IPv6 Subnet Change Requires Corresponding Configuration Updates

Three areas require updating:

/etc/network/interfaces

/etc/systemd/system/ndpresponder.service

/usr/local/bin/ Files containing IPv6 addresses

After completing the update, restart the host machine and proceed with the setup. You should then be able to use the new network segment.

Adding a New Node to an Existing PVE Cluster (Create / Join Cluster)

To form a cluster from two independent Proxmox VE instances, the following prerequisites must be met:

Cluster Prerequisites

  1. Unique Hostnames
    The hostname of each node must be unique to avoid conflicts. It is recommended to use names like pve1, pve2, etc.

  2. Unique VMIDs
    There must be no duplicate VMIDs across the two PVE nodes. If conflicts exist, adjust the VMIDs beforehand to prevent issues during cluster merge.

  3. Network Connectivity & Low Latency
    Both nodes must be able to ping each other. A low-latency network (LAN or high-speed public connection) is recommended for reliable cluster communication.

Creating the Cluster (Run on Any Node)

  1. Log in to the web interface of the node where the cluster will be created (e.g., pve1).
  2. Navigate to: Datacenter → Cluster → Create Cluster.
  3. Enter a name for the cluster (Cluster Name).
  4. Select the network interface to be used for cluster communication (e.g., public IP if only one interface is available).
  5. Click Create to initialize the cluster.
  6. Once the cluster is created, click Join Information and copy the displayed information for use on the joining node.

Note: The cluster has no "master" or "slave" nodes—any node can be the one that initiates the cluster.

Joining the Cluster (Run on the Second Node)

  1. Log in to the web interface of the node to be added (e.g., pve2).
  2. Navigate to: Datacenter → Cluster → Join Cluster.
  3. Paste the Join Information from pve1 into the input field.
  4. Enter the password of root user on pve1 in the Peer Password field.
  5. Click Join to begin the joining process.
  6. Wait until the process completes successfully, then refresh the page or re-login. You should now see both nodes in the same cluster.

Cluster Benefits

Verified VPS Providers

VPS Providers Offering KVM Virtualization with NAT

spartanhost Debian12 on a Dedicated Server (Debian11 has problems)

interserver VPS or dedicated servers

frantech Las Vegas Tier 2

eugamehost US Phoenix Black Friday Special

amhost Testing version

digitalocean Perminu Intel and Regular 4-core versions

skrime Lowest configuration of AMD Ryzen KVM Server

webdock AMD KVM Server

4vps Russian and Greek testing versions

adtaq Storage KVM server with lowest configuration

nocix Dedicated servers

online.net Debian12 on a Dedicated Server (Debian11 has problems)

OVH Public Cloud needs to be installed after dd as a pure system using the following command

shell
bash <(curl -sSL https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh) -debian 12 -pwd ' oneclickvirt139' --network "static"

At this point, the system username after dd is root, and the password is oneclickvirt139.

If it doesn't work, please check the issues and instructions in https://github.com/leitbogioro/Tools. A common problem is that OVH standalone servers are dd'd, which requires the source system to be remounted as raid1 on debian12 by default, and then parameterized to specify dd'd as raid0 in order to be successful, using the following command

shell
curl -sSLk 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' -o InstallNET.sh && chmod a+x InstallNET.sh && bash InstallNET.sh -debian 12  -mirror "http://ftp.debian.org/debian/" -pwd oneclickvirt139 -raid 0

VPS Providers Offering NAT with LXC Virtualization

Tencent Cloud Worry-Free and Student editions

spectraip KVM servers

Linode Lowest configuration with dedicated CPU

hosthatch Special high-configuration servers

hetzner Cloud servers

rackdog Servers with floating IP

vultr Standard Cloud servers

azure Standard machines

scaleway ARM architecture servers

aws EC2 servers

Google cloud platform - GCP AMD servers

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

- +Once you add 1 IPv6 you need to ping the gateway (its in the panel under networking) and then ping the IPv6 address, then repeat for every IPv6 address you add.

Host IPv6 Subnet Change Requires Corresponding Configuration Updates

Three areas require updating:

/etc/network/interfaces

/etc/systemd/system/ndpresponder.service

/usr/local/bin/ Files containing IPv6 addresses

After completing the update, restart the host machine and proceed with the setup. You should then be able to use the new network segment.

Adding a New Node to an Existing PVE Cluster (Create / Join Cluster)

To form a cluster from two independent Proxmox VE instances, the following prerequisites must be met:

Cluster Prerequisites

  1. Unique Hostnames
    The hostname of each node must be unique to avoid conflicts. It is recommended to use names like pve1, pve2, etc.

  2. Unique VMIDs
    There must be no duplicate VMIDs across the two PVE nodes. If conflicts exist, adjust the VMIDs beforehand to prevent issues during cluster merge.

  3. Network Connectivity & Low Latency
    Both nodes must be able to ping each other. A low-latency network (LAN or high-speed public connection) is recommended for reliable cluster communication.

Creating the Cluster (Run on Any Node)

  1. Log in to the web interface of the node where the cluster will be created (e.g., pve1).
  2. Navigate to: Datacenter → Cluster → Create Cluster.
  3. Enter a name for the cluster (Cluster Name).
  4. Select the network interface to be used for cluster communication (e.g., public IP if only one interface is available).
  5. Click Create to initialize the cluster.
  6. Once the cluster is created, click Join Information and copy the displayed information for use on the joining node.

Note: The cluster has no "master" or "slave" nodes—any node can be the one that initiates the cluster.

Joining the Cluster (Run on the Second Node)

  1. Log in to the web interface of the node to be added (e.g., pve2).
  2. Navigate to: Datacenter → Cluster → Join Cluster.
  3. Paste the Join Information from pve1 into the input field.
  4. Enter the password of root user on pve1 in the Peer Password field.
  5. Click Join to begin the joining process.
  6. Wait until the process completes successfully, then refresh the page or re-login. You should now see both nodes in the same cluster.

Cluster Benefits

Verified VPS Providers

VPS Providers Offering KVM Virtualization with NAT

spartanhost Debian12 on a Dedicated Server (Debian11 has problems)

interserver VPS or dedicated servers

frantech Las Vegas Tier 2

eugamehost US Phoenix Black Friday Special

amhost Testing version

digitalocean Perminu Intel and Regular 4-core versions

skrime Lowest configuration of AMD Ryzen KVM Server

webdock AMD KVM Server

4vps Russian and Greek testing versions

adtaq Storage KVM server with lowest configuration

nocix Dedicated servers

online.net Debian12 on a Dedicated Server (Debian11 has problems)

OVH Public Cloud needs to be installed after dd as a pure system using the following command

shell
bash <(curl -sSL https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh) -debian 12 -pwd ' oneclickvirt139' --network "static"

At this point, the system username after dd is root, and the password is oneclickvirt139.

If it doesn't work, please check the issues and instructions in https://github.com/leitbogioro/Tools. A common problem is that OVH standalone servers are dd'd, which requires the source system to be remounted as raid1 on debian12 by default, and then parameterized to specify dd'd as raid0 in order to be successful, using the following command

shell
curl -sSLk 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' -o InstallNET.sh && chmod a+x InstallNET.sh && bash InstallNET.sh -debian 12  -mirror "http://ftp.debian.org/debian/" -pwd oneclickvirt139 -raid 0

VPS Providers Offering NAT with LXC Virtualization

Tencent Cloud Worry-Free and Student editions

spectraip KVM servers

Linode Lowest configuration with dedicated CPU

hosthatch Special high-configuration servers

hetzner Cloud servers

rackdog Servers with floating IP

vultr Standard Cloud servers

azure Standard machines

scaleway ARM architecture servers

aws EC2 servers

Google cloud platform - GCP AMD servers

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/pve/pve_thanks.html b/en/guide/pve/pve_thanks.html index 691d520d7e..2894f455eb 100644 --- a/en/guide/pve/pve_thanks.html +++ b/en/guide/pve/pve_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/pve/pve_windows.html b/en/guide/pve/pve_windows.html index 953391437c..517d49b59b 100644 --- a/en/guide/pve/pve_windows.html +++ b/en/guide/pve/pve_windows.html @@ -14,7 +14,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +144.144.144.144

Click OK in the bottom right corner, and make sure Validate settings upon exit is NOT checked.

win12

Click OK and Yes for any other dialog boxes, and your virtual machine will now have network connectivity.

5. Unmounting the CD Drive

Manually click on the corresponding CD in the Hardware on the web side of ProxmoxVE and select Remove, then restart the VM and you can use it directly.

wk

Using ISO Images without VirtIO for VM Installation

1. Download Images

For Windows images without VirtIO, you can use:

https://github.com/ILLKX/Windows

For VirtIO ISO images, you can use:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

Alternatively, you can download just the MSI package, package it into an ISO format locally, and then upload it to ProxmoxVE.

This way, the package is smaller. The official package contains support for all Windows images and is about 500MB, while a self-packaged one is around 5MB.

2. VirtIO Import

Note that in ProxmoxVE version 8.x and later, you can select VirtIO boot loading by default in the OS section, as shown in the image:

virtio

In lower versions of ProxmoxVE, such as 7.x and 6.x, you cannot select VirtIO boot loading by default in the OS section:

lower

You need to manually add CD/DVD Drive by clicking Add in the Hardware section and selecting the downloaded VirtIO ISO file:

lower

Then proceed as usual until you reach:

nodisk

At this point, you can't find the hard disk. You need to select Load Driver:

nodisk

Then select the VirtIO as your driver disk, click open, and import the corresponding system driver from the amd64 directory:

nodisk

I'm using a Windows Server 2019 image, so I imported the 2k19 driver. After importing, select the imported driver and click Next:

nodisk

nodisk

Now you should be able to see the hard disk. Select it and continue with the installation steps as in the previous tutorial until the system installation is complete and you reach the desktop.

3. Installing Drivers via virtio-win-guest-tools

Once successfully installed and at the desktop, you still need to manually install the drivers.

Open the VirtIO driver's CD drive directory. At the bottom, there's a virtio-win-guest-tools program that will install the required VirtIO drivers, including the VirtIO network card driver:

wk

wk

wk

After clicking install, the network card driver will be installed. For subsequent network settings, refer to the network initialization tutorial mentioned earlier.

4. Installing Network Card Driver (Alternative)

After successful installation and reaching the desktop, you may still need to manually install the network card driver to connect to the network:

  1. Open Control PanelDevice Manager
  2. Find the Ethernet Controller, right-click and select Update Driver
  3. Select Browse my computer for driver software (R)
  4. Browse to the VirtIO driver's CD drive directory
  5. Open the NetKVM folder
  6. Select the driver folder corresponding to your current system version (like the above operation, I would choose the 2k19 folder with amd64 drivers)
  7. Confirm the installation, and after completion, the VirtIO network card driver will be successfully loaded

wk

wk

wk

For subsequent network settings, refer to the network initialization tutorial mentioned earlier.

5. Unmounting the CD Drive

In the ProxmoxVE web interface, manually click on the corresponding CD in the Hardware section, select Remove, and then restart the virtual machine. This way, you can use it directly:

wk

The old Windows image only includes Internet Explorer.

Manually enter the following URL in IE: https://www.microsoft.com/zh-cn/edge/download to download the file.

Since IE does not automatically whitelist certificates, multiple pop-ups will appear. Click “Add Domain,” save the changes, and only then will the download button appear on the page.

Additionally, older systems lack the WebView2 component by default. A prompt will appear indicating that this component must be downloaded and installed separately to enable modern browser functionality.

+ \ No newline at end of file diff --git a/en/guide/qemu/qemu_build.html b/en/guide/qemu/qemu_build.html index 6dcfcf9306..9e80501d15 100644 --- a/en/guide/qemu/qemu_build.html +++ b/en/guide/qemu/qemu_build.html @@ -13,7 +13,7 @@ - + @@ -34,8 +34,8 @@ virsh dominfo vm1 | grep Autostart # Disable autostart -virsh autostart vm1 --disable

Or manually start all stopped VMs:

shell
for vm in $(virsh list --all --name); do virsh start "$vm" 2>/dev/null; done
- +virsh autostart vm1 --disable

Or manually start all stopped VMs:

shell
for vm in $(virsh list --all --name); do virsh start "$vm" 2>/dev/null; done
+ \ No newline at end of file diff --git a/en/guide/qemu/qemu_install.html b/en/guide/qemu/qemu_install.html index 3ad115a38a..7baa6a5add 100644 --- a/en/guide/qemu/qemu_install.html +++ b/en/guide/qemu/qemu_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/qemu/qemu_precheck.html b/en/guide/qemu/qemu_precheck.html index bf591559c6..18be622b2d 100644 --- a/en/guide/qemu/qemu_precheck.html +++ b/en/guide/qemu/qemu_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/guide/qemu/qemu_qa.html b/en/guide/qemu/qemu_qa.html index 746bd3eca7..3711d1c10d 100644 --- a/en/guide/qemu/qemu_qa.html +++ b/en/guide/qemu/qemu_qa.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ iptables -A FORWARD -s 192.168.122.0/24 -j ACCEPT iptables -A FORWARD -d 192.168.122.0/24 -j ACCEPT

VM IPv6 not working

  1. Confirm the host has a public IPv6 address
  2. Check if the IPv6 bridge is configured:
shell
ip -6 addr show
  1. Confirm the installation script fully executed and configured the IPv6 network.

VM fails to start / status is shut off

Check the VM error log:

shell
virsh dominfo vm1
 cat /var/log/libvirt/qemu/vm1.log

Common causes:

How to view SSH login info

View the vmlog file for batch-created VM info:

shell
cat vmlog

Or view port forwarding rules:

shell
iptables -t nat -L PREROUTING -n -v | grep 25000

How to completely reset the QEMU/KVM environment

Uninstall first, then reinstall:

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/qemuuninstall.sh)
-bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

- +bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

No-CDN mode (WITHOUTCDN)

If your network is stable and useful, or you want to fully disable CDN acceleration, set this before running scripts:

shell
export WITHOUTCDN=TRUE

You can also apply it to a single command only:

shell
WITHOUTCDN=TRUE

When enabled, scripts will no longer try CDN acceleration URLs during execution.

+ \ No newline at end of file diff --git a/en/guide/qemu/qemu_thanks.html b/en/guide/qemu/qemu_thanks.html index 74486ace81..5479f357e3 100644 --- a/en/guide/qemu/qemu_thanks.html +++ b/en/guide/qemu/qemu_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/bashvm.html b/en/incomplete/bashvm.html index 0185da481c..f10fb25169 100644 --- a/en/incomplete/bashvm.html +++ b/en/incomplete/bashvm.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/cockpit.html b/en/incomplete/cockpit.html index 22a5e88c15..773897cae7 100644 --- a/en/incomplete/cockpit.html +++ b/en/incomplete/cockpit.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/convoy.html b/en/incomplete/convoy.html index 64182e13b6..8aa82d8623 100644 --- a/en/incomplete/convoy.html +++ b/en/incomplete/convoy.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/index.html b/en/incomplete/index.html index ebde1a6c4a..23a469ec2a 100644 --- a/en/incomplete/index.html +++ b/en/incomplete/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/en/incomplete/pterodactyl.html b/en/incomplete/pterodactyl.html index b0eb432ad0..8e45af62cb 100644 --- a/en/incomplete/pterodactyl.html +++ b/en/incomplete/pterodactyl.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/virtfusion.html b/en/incomplete/virtfusion.html index dbbaf041d6..0259e5c51e 100644 --- a/en/incomplete/virtfusion.html +++ b/en/incomplete/virtfusion.html @@ -13,7 +13,7 @@ - + @@ -28,8 +28,8 @@ curl https://install.virtfusion.net/install-control-rhel-8.sh | sh -s -- --verbose

RHEL9

shell
dnf install curl -y
 curl https://install.virtfusion.net/install-control-rhel-9.sh | sh -s -- --verbose

Ubuntu22.04

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-ubuntu-22.04.sh | sh -s -- --verbose

Ubuntu24.04

shell
apt install curl -y
-curl https://install.virtfusion.net/install-control-ubuntu-24.04.sh | sh -s -- --verbose

Disadvantages

Only one 30-day trial certificate per server per mailbox, no permanent free certificates

Supports only amd64/x86_64 architectures

- +curl https://install.virtfusion.net/install-control-ubuntu-24.04.sh | sh -s -- --verbose

Disadvantages

Only one 30-day trial certificate per server per mailbox, no permanent free certificates

Supports only amd64/x86_64 architectures

+ \ No newline at end of file diff --git a/en/incomplete/virtualizor-docker.html b/en/incomplete/virtualizor-docker.html index 77405e4dd7..cb0683f872 100644 --- a/en/incomplete/virtualizor-docker.html +++ b/en/incomplete/virtualizor-docker.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/en/incomplete/webvirtcloud.html b/en/incomplete/webvirtcloud.html index 0f8d6132ba..e5e045376d 100644 --- a/en/incomplete/webvirtcloud.html +++ b/en/incomplete/webvirtcloud.html @@ -13,7 +13,7 @@ - + @@ -66,8 +66,8 @@ systemctl status prometheus-libvirt-exporter

If none of the above reveals the problem, then you need to execute on the Controller:

shell
docker exec -it webvirtcloud-backend /bin/sh
 vi webvirtcloud/settings/production.py

Change DEBUG=False to DEBUG=True, save the file, then execute in the container:

shell
UV_PROJECT_ENVIRONMENT=/usr/local uv sync --dev

Then exit the container and execute:

shell
docker restart webvirtcloud-backend
 sleep 3
-docker logs webvirtcloud-backend -f

Then trigger the error in the frontend, and you'll see the corresponding error in the real-time loaded logs.

Docker Containers Not Auto-Restarting After Controller Reboot

If Docker containers don't automatically restart after system reboot, execute:

bash
docker start $(docker ps -a -q)

5. Drawbacks

System images are hard-coded; you can't use your own custom images, nor export them for use.

This is not the same project as https://github.com/retspen/webvirtcloud, don't confuse them.

- +docker logs webvirtcloud-backend -f

Then trigger the error in the frontend, and you'll see the corresponding error in the real-time loaded logs.

Docker Containers Not Auto-Restarting After Controller Reboot

If Docker containers don't automatically restart after system reboot, execute:

bash
docker start $(docker ps -a -q)

5. Drawbacks

System images are hard-coded; you can't use your own custom images, nor export them for use.

This is not the same project as https://github.com/retspen/webvirtcloud, don't confuse them.

+ \ No newline at end of file diff --git a/en/incomplete/webvirtcloud_retspen.html b/en/incomplete/webvirtcloud_retspen.html index e055974909..659bb0ca17 100644 --- a/en/incomplete/webvirtcloud_retspen.html +++ b/en/incomplete/webvirtcloud_retspen.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ && bash install_webvirt_cloud_retspen.sh

After installation is complete, open the public IP address to access the login page.

The default login username and password are both admin. Make sure to change them after logging in.

Creating a Linux Virtual Machine

After entering the control panel and changing the admin password, you need to manually configure a compute node.

vcr1

Select the type as Local, and name it local.

vcr2

After creation, click the eye icon to enter the view.

vcr3

Under the Storage section, add a storage entry. Choose the type Dir and name it local. If you need to use an ISO for system boot, you’ll need to create a storage of type ISO. If not, just follow this guide and create only the Dir type.

vcr4

vcr5

After creation, download the appropriate qcow2 image for the system using the repository below:

https://github.com/oneclickvirt/pve_kvm_images/releases/tag/images

In the example, a Debian 12 qcow2 image is used:

shell
cd /var/lib/libvirt/images
 curl -sSLO https://github.com/oneclickvirt/pve_kvm_images/releases/download/images/debian12.qcow2
 chmod 777 debian12.qcow2

Return to the instance page to create a new instance.

vcr6

Select local as the compute node.

vcr7

The default chipset is fine; changing it is optional.

vcr8

You can use predefined sizes for the virtual machine or customize it, depending on your preference.

vcr9

Note: the instance name must not duplicate the system name. For example, you cannot use debian12 as the instance name in this case.

vcr10

After successful creation, do not power it on immediately.

vcr11

You need to modify the disk settings first.

vcr12

Change the disk file to debian12.qcow2, which matches the qcow2 image you previously downloaded.

vcr13

After the modification is confirmed you will see a redundant disk in the local volume of the original compute node's storage, such as test.qcow2 here, which is best deleted to avoid hogging the disk

deadimage

Once confirmed and configured correctly, return to the power page and turn on the VM.

vcr14

The default login for the image is:

After booting, you will find that the hard disk is only the size of the original image, at this time you need to adjust the size of the hard disk, you need to shut down the computer again, at this time, you can see the buttons on the following page is available and the size of the hard disk is also recognized.

Without the first boot, the size of the hard disk is not recognized, recognition can not be modified, so the first switch is necessary.

resize

After the modification and restart the virtual machine, you will find that there is new disk space unallocated, at this time you need to follow the following method resize disk.

Check the disk path and remaining blank space unallocated:

shell
lsblk

Then use the following command to resizeen the disk

shell
fdisk /dev/vda

Do this in the following order:

Type d to delete the old partition (yes, you need to delete the old vda1, no data will be lost as it will not be formatted later).

Type n and enter to create a new partition.

Select primary for type (default p) and just enter.

Partition number is also 1.

The start position must be the same as the old partition (default is right), just press enter.

Show if you want to erase fingerprints, type Y and enter.

Press enter at the end position to use all the remaining space.

Type w to save and exit.

At this point, use lsblk to confirm that the new free disk has been successfully allocated.

Disadvantages

Networking is not auto-configured — not as smart as the previous project — you still need to configure it manually.

You need to be in the VNC of the opened VM, logged in and execute

shell
systemctl enable cloud-init
-reboot

Manually enable the configuration to self-start after reboot, then reboot the server and you have internet.

- +reboot

Manually enable the configuration to self-start after reboot, then reboot the server and you have internet.

+ \ No newline at end of file diff --git a/en/incomplete/webvirtmgr.html b/en/incomplete/webvirtmgr.html index e7b94b9112..0b0f838d80 100644 --- a/en/incomplete/webvirtmgr.html +++ b/en/incomplete/webvirtmgr.html @@ -13,7 +13,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +&& bash install_webvirtmgr.sh

Disadvantages

The origin project is no longer maintained and is not recommended at all.

+ \ No newline at end of file diff --git a/en/index.html b/en/index.html index 013c0abe3d..31193a2a62 100644 --- a/en/index.html +++ b/en/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/guide/block/block_docker.html b/guide/block/block_docker.html index 1b79f065b1..df04d052a4 100644 --- a/guide/block/block_docker.html +++ b/guide/block/block_docker.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/block/block_incus.html b/guide/block/block_incus.html index ad0f49fc57..bcbdd7bcb9 100644 --- a/guide/block/block_incus.html +++ b/guide/block/block_incus.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/block/block_iptables.html b/guide/block/block_iptables.html index 6a9d1b8dc9..12e008e463 100644 --- a/guide/block/block_iptables.html +++ b/guide/block/block_iptables.html @@ -13,7 +13,7 @@ - + @@ -126,8 +126,8 @@ iptables -F BT_BLOCK iptables -X BT_BLOCK

解除测速限制

shell
iptables -D OUTPUT -j SPEED_BLOCK
 iptables -F SPEED_BLOCK
-iptables -X SPEED_BLOCK
- +iptables -X SPEED_BLOCK + \ No newline at end of file diff --git a/guide/block/block_lxd.html b/guide/block/block_lxd.html index 5b3757471d..beb35ead99 100644 --- a/guide/block/block_lxd.html +++ b/guide/block/block_lxd.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/block/block_pve.html b/guide/block/block_pve.html index 8fc7bf6a1c..ed99247759 100644 --- a/guide/block/block_pve.html +++ b/guide/block/block_pve.html @@ -13,7 +13,7 @@ - + @@ -25,8 +25,8 @@
Skip to content
- +xxx.xxx.xxx.xxx

<VMID>替换为虚拟机的VMID数字,<net0>替换为网络设备中对应的别名(一般不用修改,除非你限制的IPV6),xxx.xxx.xxx.xxx替换为公网IP地址,注意此IP对应前面的网络设备。

这里的意思是net0只能使用xxx.xxx.xxx.xxx这个IP,如果使用其他的IP数据将会被丢弃,从而达到限制虚拟机只能使用此IP的目的。

这里可以有多个IP,一旦启用此规则该VM就无法使用除此之外的任何IP,如果你没有写IPv6地址则代表该VM无法使用IPv6地址。

TIP

本设置仅推荐在开设非NAT全端口映射的独立IP的虚拟机时使用,否则可能导致奇奇怪怪的问题造成服务器没网。

该方法不适合开设任何NAT虚拟机/容器的PVE上使用。

+ \ No newline at end of file diff --git a/guide/containerd/containerd_build.html b/guide/containerd/containerd_build.html index 685d51b368..ff33d0e14f 100644 --- a/guide/containerd/containerd_build.html +++ b/guide/containerd/containerd_build.html @@ -13,7 +13,7 @@ - + @@ -30,8 +30,8 @@ chmod +x create_containerd.sh ./create_containerd.sh

查询批量开设的信息

shell
cat ctlog

输出格式

容器名字 SSH端口 登陆的root密码 核数 内存 外网端口起 外网端口止 硬盘大小

一行一个容器对应的信息

删除所有容器和镜像

shell
nerdctl ps -aq | xargs -r nerdctl rm -f
 nerdctl images -q | xargs -r nerdctl rmi -f
-rm -rf ctlog

宿主机重启后重启所有容器

默认容器没有设置停止后自重启,需要执行以下命令启动所有停止的容器

shell
nerdctl ps -aq -f status=exited | xargs -r nerdctl start
- +rm -rf ctlog

宿主机重启后重启所有容器

默认容器没有设置停止后自重启,需要执行以下命令启动所有停止的容器

shell
nerdctl ps -aq -f status=exited | xargs -r nerdctl start
+ \ No newline at end of file diff --git a/guide/containerd/containerd_install.html b/guide/containerd/containerd_install.html index 2ed8bb79bb..4bf336d121 100644 --- a/guide/containerd/containerd_install.html +++ b/guide/containerd/containerd_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/containerd/containerd_precheck.html b/guide/containerd/containerd_precheck.html index 49f6a4dd9e..5ec45799c3 100644 --- a/guide/containerd/containerd_precheck.html +++ b/guide/containerd/containerd_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/containerd/containerd_qa.html b/guide/containerd/containerd_qa.html index f9a6f60cd7..d8774d6058 100644 --- a/guide/containerd/containerd_qa.html +++ b/guide/containerd/containerd_qa.html @@ -13,7 +13,7 @@ - + @@ -31,8 +31,8 @@ curl -4 -sL -k "https://cdn0.spiritlhl.top/https://raw.githubusercontent.com/spiritLHLS/ecs/main/back/test" --max-time 6

如何完全重置 containerd 环境

先卸载,再重新安装:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerduninstall.sh)
 bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/containerd/main/containerdinstall.sh)

lxcfs 相关问题

如果宿主机未安装 lxcfs,容器内查询的 CPU/内存为宿主机视图。安装 lxcfs:

shell
apt-get install -y lxcfs   # Debian/Ubuntu
-yum install -y lxcfs       # CentOS/RHEL

磁盘限制不生效

磁盘限制需要 xfs 或 btrfs snapshotter 支持,默认 overlay snapshotter 不支持容器级磁盘限制。

如需磁盘限制,请查看 docker 方案或 incus 方案中对应的说明。

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +yum install -y lxcfs # CentOS/RHEL

磁盘限制不生效

磁盘限制需要 xfs 或 btrfs snapshotter 支持,默认 overlay snapshotter 不支持容器级磁盘限制。

如需磁盘限制,请查看 docker 方案或 incus 方案中对应的说明。

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/containerd/containerd_thanks.html b/guide/containerd/containerd_thanks.html index 6fd8d63a4c..85051a8037 100644 --- a/guide/containerd/containerd_thanks.html +++ b/guide/containerd/containerd_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/dashboard.html b/guide/dashboard.html index 81059282dc..e47f301735 100644 --- a/guide/dashboard.html +++ b/guide/dashboard.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/dashboardq.html b/guide/dashboardq.html index 27e756d142..0d33904b9a 100644 --- a/guide/dashboardq.html +++ b/guide/dashboardq.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/docker/docker_android.html b/guide/docker/docker_android.html index eeb83ea66f..d7cd3e3c78 100644 --- a/guide/docker/docker_android.html +++ b/guide/docker/docker_android.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ rm -rf /etc/nginx/sites-enabled/reverse-proxy rm -rf /etc/nginx/sites-available/reverse-proxy rm -rf /etc/nginx/passwd_scrcpy_web -rm -rf /root/android_info

安装APK文件

点击list files打开文件目录,切换到/storage/emulated/0/Download目录,把apk拖拽进来进行安装,等待进度跑完,apk就上传到安卓容器里面了。

此时回到安卓的界面,打开文件管理器,就会显示你刚上传的文件,点击后可进行安装。

- +rm -rf /root/android_info

安装APK文件

点击list files打开文件目录,切换到/storage/emulated/0/Download目录,把apk拖拽进来进行安装,等待进度跑完,apk就上传到安卓容器里面了。

此时回到安卓的界面,打开文件管理器,就会显示你刚上传的文件,点击后可进行安装。

+ \ No newline at end of file diff --git a/guide/docker/docker_build.html b/guide/docker/docker_build.html index 6d07907d83..0b3a964b44 100644 --- a/guide/docker/docker_build.html +++ b/guide/docker/docker_build.html @@ -13,7 +13,7 @@ - + @@ -45,8 +45,8 @@ docker exec -it $container_id bash -c "service sshd restart" docker exec -it $container_id sh -c "service ssh start" docker exec -it $container_id sh -c "/usr/sbin/sshd" -done - +done + \ No newline at end of file diff --git a/guide/docker/docker_custom.html b/guide/docker/docker_custom.html index 5f64864342..265ed15e9a 100644 --- a/guide/docker/docker_custom.html +++ b/guide/docker/docker_custom.html @@ -13,7 +13,7 @@ - + @@ -32,8 +32,8 @@ rm -rf /usr/local/bin/config_${PORT} rm -rf /usr/local/bin/password_${PORT} docker rmi lscr.io/linuxserver/chromium

注意事项

图片

一键开设Desktop的容器

完整的Linux桌面,可以在上面使用浏览器

宿主机需要至少1核2G内存5G硬盘,开设的容器大小将占用起码3.2G硬盘

开设

开设后默认的用户名是onew,密码是oneclick,默认的内存最大占用是2GB

默认的http协议的web端口是3004,默认的https协议的web端口是3005,开设后打开对应协议的本机IPV4:端口即可

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewebtop.sh -o onewebtop.sh && chmod +x onewebtop.sh && bash onewebtop.sh

删除

执行

shell
docker ps -a

查询name的前缀是webtop的容器,记录容器的ID用

shell
docker rm -f 容器的ID

删除所有关联的容器后可用

shell
docker rmi lscr.io/linuxserver/webtop

删除对应镜像

一键安装guacamole

一个网页端连接SSH或RDP等协议控制服务器的玩意

网址:http://你的IPV4地址:80/guacamole

默认用户: guacadmin

默认密码: guacadmin

安装完毕登录后自行修改

宿主机的配置至少要有1核2G内存10G硬盘,否则开设可能会导致宿主机卡死!

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh

一键开设RustDesk的容器

一个跨端的远控中继端(非客户端),支持双向控制

宿主机需要至少1核1G内存10G硬盘,对带宽的需求极低

开设

安装后客户端在这里找 https://github.com/rustdesk/rustdesk/releases/latest

在设置中设置中继服务器的IP即可,支持 Android、Windows、Linux、浏览器 端,支持电脑远控手机

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onerustdesk.sh -o onerustdesk.sh && chmod +x onerustdesk.sh && bash onerustdesk.sh

删除

删除容器

shell
docker rm -f hbbs
-docker rm -f hbbr

删除对应镜像

shell
docker rmi rustdesk/rustdesk-server
- +docker rm -f hbbr

删除对应镜像

shell
docker rmi rustdesk/rustdesk-server
+ \ No newline at end of file diff --git a/guide/docker/docker_install.html b/guide/docker/docker_install.html index fd5398bb13..9174cf95dd 100644 --- a/guide/docker/docker_install.html +++ b/guide/docker/docker_install.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +bash disk_test.sh 1000

卸载 Docker 环境

一键卸载 Docker 全套环境,包括所有容器、镜像、网络、systemd 服务、二进制文件:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/main/dockeruninstall.sh)

WARNING

脚本会在执行前要求输入 yes 确认,操作不可逆。薐删内容包括所有容器、镜像、网络配置。 复测流程:先执行卸载,再执行安装,即可从零验证整个安装流程。

+ \ No newline at end of file diff --git a/guide/docker/docker_macos.html b/guide/docker/docker_macos.html index 6951d08abb..813bea93d2 100644 --- a/guide/docker/docker_macos.html +++ b/guide/docker/docker_macos.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/docker/docker_precheck.html b/guide/docker/docker_precheck.html index b32fa32517..49a1b47e25 100644 --- a/guide/docker/docker_precheck.html +++ b/guide/docker/docker_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/docker/docker_qa.html b/guide/docker/docker_qa.html index c121eda73d..7c7e1664df 100644 --- a/guide/docker/docker_qa.html +++ b/guide/docker/docker_qa.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/docker/docker_thanks.html b/guide/docker/docker_thanks.html index cfe584e4bf..0bd00360f2 100644 --- a/guide/docker/docker_thanks.html +++ b/guide/docker/docker_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/docker/docker_windows.html b/guide/docker/docker_windows.html index 0257b13719..0869b7c3e6 100644 --- a/guide/docker/docker_windows.html +++ b/guide/docker/docker_windows.html @@ -13,7 +13,7 @@ - + @@ -47,8 +47,8 @@ --device=/dev/net/tun \ --cap-add NET_ADMIN \ --stop-timeout 120 \ - windows:2022

注意事项

不建议在当前镜像基础上使用 docker commit 保存修改,因为写入层会不断叠加,导致二次生成的镜像体积可能超过 40G。

如需进行个性化配置或集成应用,请builder 镜像开始自行构建新镜像,以保持镜像整洁与可维护性。

- + windows:2022

注意事项

不建议在当前镜像基础上使用 docker commit 保存修改,因为写入层会不断叠加,导致二次生成的镜像体积可能超过 40G。

如需进行个性化配置或集成应用,请builder 镜像开始自行构建新镜像,以保持镜像整洁与可维护性。

+ \ No newline at end of file diff --git a/guide/incus/incus_custom.html b/guide/incus/incus_custom.html index d303641b88..5d23225bd1 100644 --- a/guide/incus/incus_custom.html +++ b/guide/incus/incus_custom.html @@ -13,7 +13,7 @@ - + @@ -103,8 +103,8 @@ # 重新连接并设置进程守护,以便重启后自动生效 systemctl enable --now wg-quick@warp

自动安装和运行(fscarmen的一键脚本)

最后,介绍 fscarmen 的一键脚本。提到该脚本是一个方便的工具,可以简化配置过程。并自动处理最优 MTU, 最优 Endpoint 等进阶参数。

项目介绍: https://github.com/fscarmen/warp-sh

# 运动脚本
-curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

- +curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

+ \ No newline at end of file diff --git a/guide/incus/incus_extra_config.html b/guide/incus/incus_extra_config.html index ec6b4ae2e7..6326bb7ad7 100644 --- a/guide/incus/incus_extra_config.html +++ b/guide/incus/incus_extra_config.html @@ -13,7 +13,7 @@ - + @@ -44,8 +44,8 @@ Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/zabbly.gpg EOF' -apt-get update

其他系统如何添加源可参考 https://github.com/zabbly/incus?tab=readme-ov-file#installation 官方仓库的说明

- +apt-get update

其他系统如何添加源可参考 https://github.com/zabbly/incus?tab=readme-ov-file#installation 官方仓库的说明

+ \ No newline at end of file diff --git a/guide/incus/incus_install.html b/guide/incus/incus_install.html index 1dd3371e86..6ec457093d 100644 --- a/guide/incus/incus_install.html +++ b/guide/incus/incus_install.html @@ -13,7 +13,7 @@ - + @@ -38,8 +38,8 @@ EOF' apt-get update apt-get install incus -y -incus -h

如果无异常,继续执行

incus admin init

一般的选项回车默认即可

选择配置物理盘大小(提示默认最小1GB那个选项),一般我填空闲磁盘大小减去内存大小后乘以0.95并向下取整,这里我填了10GB

提示带auto的更新image的选项记得选no,避免更新占用系统

incus -h
- +incus -h

如果无异常,继续执行

incus admin init

一般的选项回车默认即可

选择配置物理盘大小(提示默认最小1GB那个选项),一般我填空闲磁盘大小减去内存大小后乘以0.95并向下取整,这里我填了10GB

提示带auto的更新image的选项记得选no,避免更新占用系统

incus -h
+ \ No newline at end of file diff --git a/guide/incus/incus_lxc.html b/guide/incus/incus_lxc.html index 744d4afe9d..d6023122b4 100644 --- a/guide/incus/incus_lxc.html +++ b/guide/incus/incus_lxc.html @@ -13,7 +13,7 @@ - + @@ -46,8 +46,8 @@ curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/ssh_bash.sh -o /usr/local/bin/ssh_bash.sh && chmod +x /usr/local/bin/ssh_bash.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/ssh_sh.sh -o /usr/local/bin/ssh_sh.sh && chmod +x /usr/local/bin/ssh_sh.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/build_ipv6_network.sh -o /root/build_ipv6_network.sh && chmod +x /root/build_ipv6_network.sh -curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

其他一键脚本自己对应下载回来就行了

- +curl -sSL https://raw.githubusercontent.com/oneclickvirt/incus/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

其他一键脚本自己对应下载回来就行了

+ \ No newline at end of file diff --git a/guide/incus/incus_precheck.html b/guide/incus/incus_precheck.html index 90e23996fa..131614e0c2 100644 --- a/guide/incus/incus_precheck.html +++ b/guide/incus/incus_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/incus/incus_qa.html b/guide/incus/incus_qa.html index 7b7792bea7..092bddf358 100644 --- a/guide/incus/incus_qa.html +++ b/guide/incus/incus_qa.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/incus/incus_qemu.html b/guide/incus/incus_qemu.html index 42a6f28fb8..4d3365e334 100644 --- a/guide/incus/incus_qemu.html +++ b/guide/incus/incus_qemu.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ incus delete -f test rm -rf test rm -rf test_v6 -ls - +ls + \ No newline at end of file diff --git a/guide/incus/incus_thanks.html b/guide/incus/incus_thanks.html index 745f30545e..ed826db101 100644 --- a/guide/incus/incus_thanks.html +++ b/guide/incus/incus_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/incus/incus_windows.html b/guide/incus/incus_windows.html index af3964b735..ce0f955ed5 100644 --- a/guide/incus/incus_windows.html +++ b/guide/incus/incus_windows.html @@ -13,7 +13,7 @@ - + @@ -49,8 +49,8 @@ nohup websockify --web /usr/share/spice-html5 6080 --unix-target=/run/incus/winvm/qemu.spice > /var/log/websockify-winvm.log 2>&1 & echo "SPICE HTML5 console on http://${SERVER_IP}:6080/spice_auto.html"

浏览器打开输出提示的地址

首次启动需要按浏览器页面左上角的Ctrl+Alt+Delete按钮,重启后在默认的界面按照提示,按回车等待5~10分钟才会正式装载ISO进行实际的安装

最终会显示Zabbly的图标,这个图标在这里转圈圈需要至少2分钟,请耐心等待。

转圈圈完毕就会进入正常的Win虚拟机安装流程,类比PVE的操作即可。

这里硬盘不可选中,选择在左下角查看黄色的提示,然后按照提示将脱机的硬盘联机点确认按钮,就可以选中硬盘了。

安装完成后,虚拟机会自动重新启动几次更新网络,spice的网页端显示进入用户设置界面,同时后台可使用incus list查看到网络被自动附加。

设置完用户进入系统登录页面后,执行下述命令关闭/退出Windows,然后移除 ISO 设备,保证下次从硬盘启动,然后再次启动虚拟机

shell
incus stop winvm
 incus config device remove winvm install
-incus start winvm

启动后可见如下图(测试访问一个网站)

无需自行进行网络配置,incus将自动分配IPV4地址和连接网络

删除远程组件重新启动浏览器映射

如果发现资源没给够等原因需要删虚拟机重新开设,那么需要使用pkill -f websockify终止所有的spice信号转发,然后incus delete -f winvm强行删除虚拟机。

shell
lsof -i :6080

查询对应端口的PID号是否还存在,确保已完全停止(如果你有多个虚拟机的信号转发,那么最好不要用pkill删除所有,用kill -9删除对应端口的PID即可)。

如果首次启动没过几分钟就崩溃停机了

需要添加CPU直通

shell
incus config set winvm raw.qemu -- "-cpu host"

再次启动虚拟机即可

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

缺点

前端无权限校验,没法设置用户密码

如果需要前端鉴权,那么得使用Guacamole添加一些设置来实现,这里就不赘述了

虚拟机这块没有成型的一些交互面板和适配,spice古老了(虽然有网页端的spice客户端),官方的面板又不支持rbac使用用户名密码,只能通过证书使用

- +incus start winvm

启动后可见如下图(测试访问一个网站)

无需自行进行网络配置,incus将自动分配IPV4地址和连接网络

删除远程组件重新启动浏览器映射

如果发现资源没给够等原因需要删虚拟机重新开设,那么需要使用pkill -f websockify终止所有的spice信号转发,然后incus delete -f winvm强行删除虚拟机。

shell
lsof -i :6080

查询对应端口的PID号是否还存在,确保已完全停止(如果你有多个虚拟机的信号转发,那么最好不要用pkill删除所有,用kill -9删除对应端口的PID即可)。

如果首次启动没过几分钟就崩溃停机了

需要添加CPU直通

shell
incus config set winvm raw.qemu -- "-cpu host"

再次启动虚拟机即可

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

缺点

前端无权限校验,没法设置用户密码

如果需要前端鉴权,那么得使用Guacamole添加一些设置来实现,这里就不赘述了

虚拟机这块没有成型的一些交互面板和适配,spice古老了(虽然有网页端的spice客户端),官方的面板又不支持rbac使用用户名密码,只能通过证书使用

+ \ No newline at end of file diff --git a/guide/kubevirt/kubevirt_build.html b/guide/kubevirt/kubevirt_build.html index f50128a9ce..c93c9e75d9 100644 --- a/guide/kubevirt/kubevirt_build.html +++ b/guide/kubevirt/kubevirt_build.html @@ -13,7 +13,7 @@ - + @@ -40,8 +40,8 @@ # 启动所有已停止的虚拟机 for vm in $(kubectl get vm -n default --no-headers -o custom-columns=':metadata.name'); do virtctl start "$vm" -n default 2>/dev/null -done - +done + \ No newline at end of file diff --git a/guide/kubevirt/kubevirt_install.html b/guide/kubevirt/kubevirt_install.html index a9bbae1f92..7532b1baf3 100644 --- a/guide/kubevirt/kubevirt_install.html +++ b/guide/kubevirt/kubevirt_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/kubevirt/kubevirt_precheck.html b/guide/kubevirt/kubevirt_precheck.html index 7fdb31b046..afabe9681e 100644 --- a/guide/kubevirt/kubevirt_precheck.html +++ b/guide/kubevirt/kubevirt_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/kubevirt/kubevirt_qa.html b/guide/kubevirt/kubevirt_qa.html index cba7688d7e..86d7f2d6cb 100644 --- a/guide/kubevirt/kubevirt_qa.html +++ b/guide/kubevirt/kubevirt_qa.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ kubectl logs <pod-name> -n kubevirt

常见原因:

虚拟机无法访问外网(IPv4)

检查 iptables NAT 规则是否存在:

shell
iptables -t nat -L POSTROUTING -n -v | grep flannel

如果没有,检查 Flannel 网络插件是否正常运行:

shell
kubectl get pods -n kube-system | grep flannel

虚拟机 IPv6 未生效

  1. 确认宿主机有公网 IPv6 地址
  2. 检查是否配置了 IPv6 相关资源:
shell
kubectl get svc -n default | grep ipv6

KVM 不可用

bash
egrep -c '(vmx|svm)' /proc/cpuinfo
 ls /dev/kvm

若在 VPS 上无法使用 KVM,可能是宿主机不支持嵌套虚拟化(Nested Virtualization),请联系 VPS 提供商确认。

虚拟机一直处于 Pending 状态

查看虚拟机实例详情:

shell
kubectl describe vmi vm1 -n default

常见原因:

shell
kubectl get dv -n default

如何查看 SSH 登录信息

查看 vmlog 文件获取批量开设时的信息:

shell
cat vmlog

如何完全重置 KubeVirt 环境

先卸载,再重新安装:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/kubevirtuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/kubevirtuninstall.sh)
-bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/kubevirt/kubevirt_thanks.html b/guide/kubevirt/kubevirt_thanks.html index 3c3f3507c6..3b286b61a7 100644 --- a/guide/kubevirt/kubevirt_thanks.html +++ b/guide/kubevirt/kubevirt_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/lxd/lxd_custom.html b/guide/lxd/lxd_custom.html index 3944e30692..52634b1e14 100644 --- a/guide/lxd/lxd_custom.html +++ b/guide/lxd/lxd_custom.html @@ -13,7 +13,7 @@ - + @@ -103,8 +103,8 @@ # 重新连接并设置进程守护,以便重启后自动生效 systemctl enable --now wg-quick@warp

自动安装和运行(fscarmen的一键脚本)

最后,介绍 fscarmen 的一键脚本。提到该脚本是一个方便的工具,可以简化配置过程。并自动处理最优 MTU, 最优 Endpoint 等进阶参数。

项目介绍: https://github.com/fscarmen/warp-sh

# 运动脚本
-curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

- +curl -sSLO https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

image.png

+ \ No newline at end of file diff --git a/guide/lxd/lxd_extra_config.html b/guide/lxd/lxd_extra_config.html index 8f22ef8833..b8b2682d78 100644 --- a/guide/lxd/lxd_extra_config.html +++ b/guide/lxd/lxd_extra_config.html @@ -13,7 +13,7 @@ - + @@ -37,8 +37,8 @@ systemctl reload snap.lxd.daemon snap restart --reload lxd

然后你可以在浏览器中输入

https://你的公网IPV4地址:8443

即可进入官方可视化操作面板,后续的操作配置按照UI提示操作即可

一键安装宿主机第三方可视化操作的面板

shell
lxc config set core.https_address [::]
 lxc config set core.trust_password your_password
-snap install lxdmosaic

安装完毕后打开宿主机IP地址,按照提示设置admin的密码,其他一路默认就能使用面板了

- +snap install lxdmosaic

安装完毕后打开宿主机IP地址,按照提示设置admin的密码,其他一路默认就能使用面板了

+ \ No newline at end of file diff --git a/guide/lxd/lxd_install.html b/guide/lxd/lxd_install.html index 51d13032a0..8556ba8b5e 100644 --- a/guide/lxd/lxd_install.html +++ b/guide/lxd/lxd_install.html @@ -13,7 +13,7 @@ - + @@ -27,8 +27,8 @@ ufw disable

开设虚拟内存SWAP

内存看你开多少服务器,这里如果要开8个,换算需要2G内存,实际内存如果是512MB内存,还需要开1.5G,保守点开2G虚拟内存即可

执行下面命令,输入1,再输入2048,代表开2G虚拟内存

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/swap.sh -o swap.sh && chmod +x swap.sh && bash swap.sh

安装LXD

执行下述命令进行安装和初始化

apt install snapd -y
 snap install lxd
 /snap/bin/lxd init

如果上面的命令中出现下面的错误

(snap "lxd" assumes unsupported features: snapd2.39 (try to update snapd and refresh the core snap))

使用命令修补后再进行lxd的安装

snap install core

如果无异常,上面三行命令执行结果如下

图片

一般的选项回车默认即可

选择配置物理盘大小(提示默认最小1GB那个选项),一般我填空闲磁盘大小减去内存大小后乘以0.95并向下取整,这里我填了10GB

提示带auto的更新image的选项记得选no,避免更新占用系统

测试lxc有没有软连接上

lxc -h

如果报错则执行以下命令软连接lxc命令

bash
! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
-export PATH=$PATH:/snap/bin

连接后再测试lxc命令是否有报错找不到

- +export PATH=$PATH:/snap/bin

连接后再测试lxc命令是否有报错找不到

+ \ No newline at end of file diff --git a/guide/lxd/lxd_lxc.html b/guide/lxd/lxd_lxc.html index f8c610082a..195ef63244 100644 --- a/guide/lxd/lxd_lxc.html +++ b/guide/lxd/lxd_lxc.html @@ -13,7 +13,7 @@ - + @@ -46,8 +46,8 @@ curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/ssh_bash.sh -o /usr/local/bin/ssh_bash.sh && chmod +x /usr/local/bin/ssh_bash.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/ssh_sh.sh -o /usr/local/bin/ssh_sh.sh && chmod +x /usr/local/bin/ssh_sh.sh curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/build_ipv6_network.sh -o /root/build_ipv6_network.sh && chmod +x /root/build_ipv6_network.sh -curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

其他一键脚本自己对应下载回来就行了

- +curl -sSL https://raw.githubusercontent.com/oneclickvirt/lxd/main/scripts/buildct.sh -o /root/buildct.sh && chmod +x /root/buildct.sh

其他一键脚本自己对应下载回来就行了

+ \ No newline at end of file diff --git a/guide/lxd/lxd_precheck.html b/guide/lxd/lxd_precheck.html index 54094585cf..aeed6bdb20 100644 --- a/guide/lxd/lxd_precheck.html +++ b/guide/lxd/lxd_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/lxd/lxd_qa.html b/guide/lxd/lxd_qa.html index ff0bbecc69..12483a84a4 100644 --- a/guide/lxd/lxd_qa.html +++ b/guide/lxd/lxd_qa.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +export PATH=$PATH:/snap/bin

执行这个命令后尝试

lxc -h

看看lxc命令是否已修复

开设centos7发现报错CGroupV1不支持

启用CGroup V1:要在Ubuntu系统上启用CGroup V1,需要编辑内核启动参数。

请注意,在更改内核启动参数之前,请务必备份重要的数据和设置,以防止意外的问题。

编辑/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT中的参数末尾加上systemd.unified_cgroup_hierarchy=0,如

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"

保存文件并运行以下命令更新GRUB引导。

bash
sudo update-grub

重启系统,使更改生效

如果上述更改仍旧不支持开设centos7,那么请使用别的宿主机系统尝试

需要LXD和Docker兼容同时存在

如果不做处理,docker会覆写iptables设置导致LXD无网络链接

需要安装一个定时任务定时检测和修复这个问题

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/incus/main/extra_scripts/docker-coexistence.sh -o docker-coexistence.sh && chmod +x docker-coexistence.sh && bash docker-coexistence.sh

目前已验证可开带独立IPV6地址容器的VPS商家

kuroit 中的 美国凤凰城 regular

datalix 中的 德国AMD 促销

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/lxd/lxd_qemu.html b/guide/lxd/lxd_qemu.html index d5ac6d9695..57cd0794e5 100644 --- a/guide/lxd/lxd_qemu.html +++ b/guide/lxd/lxd_qemu.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ lxc delete -f test rm -rf test rm -rf test_v6 -ls - +ls + \ No newline at end of file diff --git a/guide/lxd/lxd_thanks.html b/guide/lxd/lxd_thanks.html index 121b2f9b08..16da85d348 100644 --- a/guide/lxd/lxd_thanks.html +++ b/guide/lxd/lxd_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/lxd/lxd_windows.html b/guide/lxd/lxd_windows.html index 673c517be2..c091f35c3e 100644 --- a/guide/lxd/lxd_windows.html +++ b/guide/lxd/lxd_windows.html @@ -13,7 +13,7 @@ - + @@ -39,8 +39,8 @@ nohup websockify --web /usr/share/spice-html5 6080 --unix-target=/var/snap/lxd/common/lxd/logs/winvm/qemu.spice > /var/log/websockify-winvm.log 2>&1 & echo "SPICE HTML5 console on http://${SERVER_IP}:6080/spice_auto.html"

浏览器打开输出提示的地址

首次启动需要按浏览器页面左上角的Ctrl+Alt+Delete按钮,重启后在默认的界面按照提示,按回车等待5~10分钟才会正式装载ISO进行实际的安装

最终会显示三个立方体的图标,这个图标在这里转圈圈需要至少2分钟,请耐心等待。

转圈圈完毕就会进入正常的Win虚拟机安装流程,类比PVE的操作即可。

这里硬盘不可选中,选择在左下角查看黄色的提示,然后按照提示将脱机的硬盘联机点确认按钮,就可以选中硬盘了。

安装完成后,虚拟机会自动重新启动几次更新网络,spice的网页端显示进入用户设置界面,同时后台可使用lxc list查看到网络被自动附加。

设置完用户进入系统登录页面后,执行下述命令关闭/退出Windows,然后移除 ISO 设备,保证下次从硬盘启动,然后再次启动虚拟机

shell
lxc stop winvm
 lxc config device remove winvm install
-lxc start winvm

启动后可见如下图(测试访问一个网站)

无需自行进行网络配置,lxd将自动分配IPV4地址和连接网络

删除远程组件重新启动浏览器映射

如果发现资源没给够等原因需要删虚拟机重新开设,那么需要使用pkill -f websockify终止所有的spice信号转发,然后lxc delete -f winvm强行删除虚拟机。

shell
lsof -i :6080

查询对应端口的PID号是否还存在,确保已完全停止(如果你有多个虚拟机的信号转发,那么最好不要用pkill删除所有,用kill -9删除对应端口的PID即可)。

如果首次启动没过几分钟就崩溃停机了

需要添加CPU直通

shell
lxc config set winvm raw.qemu -- "-cpu host"

再次启动虚拟机即可

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

缺点

前端无权限校验,没法设置用户密码

如果需要前端鉴权,那么得使用Guacamole添加一些设置来实现,这里就不赘述了

虚拟机这块没有成型的一些交互面板和适配,spice古老了(虽然有网页端的spice客户端),官方的面板又不支持rbac使用用户名密码,只能通过证书使用

- +lxc start winvm

启动后可见如下图(测试访问一个网站)

无需自行进行网络配置,lxd将自动分配IPV4地址和连接网络

删除远程组件重新启动浏览器映射

如果发现资源没给够等原因需要删虚拟机重新开设,那么需要使用pkill -f websockify终止所有的spice信号转发,然后lxc delete -f winvm强行删除虚拟机。

shell
lsof -i :6080

查询对应端口的PID号是否还存在,确保已完全停止(如果你有多个虚拟机的信号转发,那么最好不要用pkill删除所有,用kill -9删除对应端口的PID即可)。

如果首次启动没过几分钟就崩溃停机了

需要添加CPU直通

shell
lxc config set winvm raw.qemu -- "-cpu host"

再次启动虚拟机即可

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

缺点

前端无权限校验,没法设置用户密码

如果需要前端鉴权,那么得使用Guacamole添加一些设置来实现,这里就不赘述了

虚拟机这块没有成型的一些交互面板和适配,spice古老了(虽然有网页端的spice客户端),官方的面板又不支持rbac使用用户名密码,只能通过证书使用

+ \ No newline at end of file diff --git a/guide/oneclickvirt/oneclickvirt_install.html b/guide/oneclickvirt/oneclickvirt_install.html index 9a9b1c4c6c..33a72d50dd 100644 --- a/guide/oneclickvirt/oneclickvirt_install.html +++ b/guide/oneclickvirt/oneclickvirt_install.html @@ -13,7 +13,7 @@ - + @@ -50,7 +50,7 @@ proxy_buffering off; add_header X-Cache $upstream_cache_status; add_header Cache-Control no-cache; -}
Windows

查看

https://github.com/oneclickvirt/oneclickvirt/releases/latest

下载最新的对应架构的压缩文件,解压后挂起执行。

执行的二进制文件的同级目录下,下载

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/server/config.yaml

文件,这是后续需要使用的配置文件。

下载web-dist.zip文件后,解压并使用对应的程序建立静态网站,类似Linux那样设置好反向代理即可。

一体化部署

这里不再区分前后端的概念,从

https://github.com/oneclickvirt/oneclickvirt/releases/latest

中找到带allinone标签的压缩包进行下载,注意区分amd64arm64架构,以及对应的系统。

Linux中使用tar -zxvf命令解压tar.gz压缩包,Windows中使用对应解压工具解压zip压缩包,将其中的二进制文件复制粘贴到你需要部署项目的位置。

最好移动到一个专门的文件夹中,因为运行过程中将产生结构化的日志文件。

(以下说明将以amd64架构的linux系统的文件进行示例)

Linux中赋予文件可执行权限,如

shell
chmod 777 server-allinone-linux-amd64

然后下载

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

文件到同一个文件夹中。

Linux中,使用screentmuxnohup命令挂起执行二进制文件即可,如

shell
./server-allinone-linux-amd64

然后打开对应的IP地址的8888端口即可看到前端进行使用了,如

http://你的IP地址:8888

如果你是Windows系统,那么需要使用管理员权限启动exe文件,同时确保启动前exe文件同一个文件夹中存在config.yaml配置文件,否则启动将出现白屏或不通的情况。至于怎么挂起执行,自行探索吧,直接挂着cmd界面运行也行。

一体化部署的模式适合本机没有公网IP的情况,你的IP地址可以是localhost或者127.0.0.1,也可以是对应的公网IPV4地址,具体部署环境下自测。

通过Docker安装

TIP

由于启动的时候连带数据库一起启动,所以容器刚启动的时候不要立即操作,需要至少等待12秒。

可使用的镜像tag可在

https://hub.docker.com/r/spiritlhl/oneclickvirt

https://github.com/oneclickvirt/oneclickvirt/pkgs/container/oneclickvirt

中查询

预构建镜像

镜像标签说明

镜像标签说明适用场景
spiritlhl/oneclickvirt:latest一体化版本(内置数据库)最新版快速部署
spiritlhl/oneclickvirt:20260310一体化版本特定日期版本需要固定版本
spiritlhl/oneclickvirt:no-db独立数据库版本最新版不内置数据库
spiritlhl/oneclickvirt:no-db-20260310独立数据库版本特定日期不内置数据库

所有镜像均支持 linux/amd64linux/arm64 架构。

全新部署

使用已构建好的amd64arm64镜像,会自动根据当前系统架构下载对应版本:

不配置域名:

bash
docker run -d \
+}
Windows

查看

https://github.com/oneclickvirt/oneclickvirt/releases/latest

下载最新的对应架构的压缩文件,解压后挂起执行。

执行的二进制文件的同级目录下,下载

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/oneclickvirt/refs/heads/main/server/config.yaml

文件,这是后续需要使用的配置文件。

下载web-dist.zip文件后,解压并使用对应的程序建立静态网站,类似Linux那样设置好反向代理即可。

一体化部署

这里不再区分前后端的概念,从

https://github.com/oneclickvirt/oneclickvirt/releases/latest

中找到带allinone标签的压缩包进行下载,注意区分amd64arm64架构,以及对应的系统。

Linux中使用tar -zxvf命令解压tar.gz压缩包,Windows中使用对应解压工具解压zip压缩包,将其中的二进制文件复制粘贴到你需要部署项目的位置。

最好移动到一个专门的文件夹中,因为运行过程中将产生结构化的日志文件。

(以下说明将以amd64架构的linux系统的文件进行示例)

Linux中赋予文件可执行权限,如

shell
chmod 777 server-allinone-linux-amd64

然后下载

https://github.com/oneclickvirt/oneclickvirt/blob/main/server/config.yaml

文件到同一个文件夹中。

Linux中,使用screentmuxnohup命令挂起执行二进制文件即可,如

shell
./server-allinone-linux-amd64

然后打开对应的IP地址的8888端口即可看到前端进行使用了,如

http://你的IP地址:8888

如果你是Windows系统,那么需要使用管理员权限启动exe文件,同时确保启动前exe文件同一个文件夹中存在config.yaml配置文件,否则启动将出现白屏或不通的情况。至于怎么挂起执行,自行探索吧,直接挂着cmd界面运行也行。

一体化部署的模式适合本机没有公网IP的情况,你的IP地址可以是localhost或者127.0.0.1,也可以是对应的公网IPV4地址,具体部署环境下自测。

通过Docker安装

TIP

由于启动的时候连带数据库一起启动,所以容器刚启动的时候不要立即操作,需要至少等待12秒。

可使用的镜像tag可在

https://hub.docker.com/r/spiritlhl/oneclickvirt

https://github.com/oneclickvirt/oneclickvirt/pkgs/container/oneclickvirt

中查询

预构建镜像

镜像标签说明

镜像标签说明适用场景
spiritlhl/oneclickvirt:latest一体化版本(内置数据库)最新版快速部署
spiritlhl/oneclickvirt:20260311一体化版本特定日期版本需要固定版本
spiritlhl/oneclickvirt:no-db独立数据库版本最新版不内置数据库
spiritlhl/oneclickvirt:no-db-20260311独立数据库版本特定日期不内置数据库

所有镜像均支持 linux/amd64linux/arm64 架构。

全新部署

使用已构建好的amd64arm64镜像,会自动根据当前系统架构下载对应版本:

不配置域名:

bash
docker run -d \
   --name oneclickvirt \
   -p 80:80 \
   -v oneclickvirt-data:/var/lib/mysql \
@@ -93,8 +93,8 @@
   -e DB_PASSWORD="your-password" \
   -v oneclickvirt-storage:/app/storage \
   --restart unless-stopped \
-  oneclickvirt:no-db

数据库初始化

安装启动了mysql后,创建一个空的数据库oneclickvirt,使用类型utf8mb4,最好仅本地127.0.0.1可访问,对应用户名和密码保存好。(如果你安装使用的是docker一体化部署的容器,自带数据库无需自己创建空数据库,默认已在容器中启动了对应的数据库可用了)

打开前端对应的页面后,将自动跳转到初始化界面。

填写数据库信息和相关用户信息,测试数据库链接无问题,则可点击初始化系统。

完成初始化后会自动跳转到首页,可以自行探索并使用了。

如果使用的是默认的用户信息进行初始化,那么默认的账户为:

管理员账户名密码分别为:

admin
Admin123!@#

初始化过程中,默认加载了所有的镜像种子数据到数据库中,但是默认仅启用了debianalpine相关版本的镜像,这是为了避免过多镜像启用导致用户选择困难。

如果你需要额外类型的镜像,需要在管理员权限下,在系统镜像管理界面按照类型、架构、版本搜索并进行启用。

初始化后请立即修改默认的管理员的用户名密码,并禁用或删除默认启用的测试用户testuser,这一部分可在管理员的用户管理页面进行操作。

- + oneclickvirt:no-db

数据库初始化

安装启动了mysql后,创建一个空的数据库oneclickvirt,使用类型utf8mb4,最好仅本地127.0.0.1可访问,对应用户名和密码保存好。(如果你安装使用的是docker一体化部署的容器,自带数据库无需自己创建空数据库,默认已在容器中启动了对应的数据库可用了)

打开前端对应的页面后,将自动跳转到初始化界面。

填写数据库信息和相关用户信息,测试数据库链接无问题,则可点击初始化系统。

完成初始化后会自动跳转到首页,可以自行探索并使用了。

如果使用的是默认的用户信息进行初始化,那么默认的账户为:

管理员账户名密码分别为:

admin
Admin123!@#

初始化过程中,默认加载了所有的镜像种子数据到数据库中,但是默认仅启用了debianalpine相关版本的镜像,这是为了避免过多镜像启用导致用户选择困难。

如果你需要额外类型的镜像,需要在管理员权限下,在系统镜像管理界面按照类型、架构、版本搜索并进行启用。

初始化后请立即修改默认的管理员的用户名密码,并禁用或删除默认启用的测试用户testuser,这一部分可在管理员的用户管理页面进行操作。

+ \ No newline at end of file diff --git a/guide/oneclickvirt/oneclickvirt_precheck.html b/guide/oneclickvirt/oneclickvirt_precheck.html index c0613fcbd2..47a3a0c63c 100644 --- a/guide/oneclickvirt/oneclickvirt_precheck.html +++ b/guide/oneclickvirt/oneclickvirt_precheck.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ NAT IPv4 + 独立IPv6 独立IPv4 独立IPv4 + IPv6 -纯IPv6 - +纯IPv6 + \ No newline at end of file diff --git a/guide/oneclickvirt/oneclickvirt_qa.html b/guide/oneclickvirt/oneclickvirt_qa.html index a659a68de3..8c56e7132d 100644 --- a/guide/oneclickvirt/oneclickvirt_qa.html +++ b/guide/oneclickvirt/oneclickvirt_qa.html @@ -13,7 +13,7 @@ - + @@ -34,8 +34,8 @@ -- 退出 EXIT;
  1. 登录测试

使用新密码登录系统验证。

注意事项

Docker如何删除持久化的数据库和存储卷

删除对应的容器后

执行

shell
docker volume rm oneclickvirt-data oneclickvirt-storage oneclickvirt-config

进行删除

开设实例过多导致节点异常

一个显著的现象是执行操作极其缓慢,甚至几分钟都执行不完毕一个命令

一般常见于节点的IO比较差,此时又开了很多SWAP超配内存

比如lxd环境下,执行lxc list会报错

shell
internal error, please report: running “lxd.lxc” failed: cannot create transient scope: DBus error “org.freedesktop.DBus.Error.TimedOut”: [Failed to activate service ‘org.freedesktop.systemd1’: timed out (service_start_timeout=25000ms)]

原因就是设置的实例数量太多了,商家又高度限制IO

此时只有一种方法,重启节点服务器,强制重启

重启后立即登录SSH,使用对应的脚本删除swap的使用,然后删除一些实例释放资源

由于重启后容器虚拟机需要一段时间一个个自动重启,打这个时间差可能删不了多少,但每次重启都能删一些

最终还是需要在限制实例数量的时候,慎重考虑节点的性能,较弱或者限制较多的节点,建议不要开设过多实例

自编译出现依赖缺失或者兼容性问题

常见于 源码部署、Dockerfile、DockerCompose 方式部署

常见于 ARM 架构下前端编译出错

直接使用 预编译的Docker容器镜像 或 直接使用二进制文件部署(最稳妥)

incus 和 lxd 进行 NAT 映射一些命令查不到映射规则

这是正常现象。

Incus / LXD 的端口映射默认使用 内核态 NAT(DNAT + FORWARD) 实现,并 不会在宿主机上创建端口监听进程。 因此,使用传统的端口占用查询工具通常无法看到任何结果

例如,以下命令都 查不到宿主机端口占用

shell
ss -lntup
 lsof -i
-netstat -lntp

只有通过:

shell
incus config device show 实例1

或:

shell
lxd config device show 实例1

才能看到已配置的端口映射规则,因为流量不过宿主机直接对外转发。

正确的端口映射查找方式是查看 nftables 规则

shell
nft list ruleset

或仅查看 NAT 表:

shell
nft list table ip nat

在使用 iptables 的系统中可使用:

shell
iptables -t nat -L

如果有流量进出,查看真实连接状态可使用:

shell
conntrack -L | grep <>

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +netstat -lntp

只有通过:

shell
incus config device show 实例1

或:

shell
lxd config device show 实例1

才能看到已配置的端口映射规则,因为流量不过宿主机直接对外转发。

正确的端口映射查找方式是查看 nftables 规则

shell
nft list ruleset

或仅查看 NAT 表:

shell
nft list table ip nat

在使用 iptables 的系统中可使用:

shell
iptables -t nat -L

如果有流量进出,查看真实连接状态可使用:

shell
conntrack -L | grep <>

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/oneclickvirt/oneclickvirt_thanks.html b/guide/oneclickvirt/oneclickvirt_thanks.html index ce83673405..f6716b5168 100644 --- a/guide/oneclickvirt/oneclickvirt_thanks.html +++ b/guide/oneclickvirt/oneclickvirt_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/oneclickvirt/oneclickvirt_usage.html b/guide/oneclickvirt/oneclickvirt_usage.html index b21ef9f742..f96185e0fe 100644 --- a/guide/oneclickvirt/oneclickvirt_usage.html +++ b/guide/oneclickvirt/oneclickvirt_usage.html @@ -13,7 +13,7 @@ - + @@ -118,8 +118,8 @@ prefix: '[oneclickvirt]' retention-day: 3 show-line: false - stacktrace-key: stacktrace

系统日志记录的详细配置,基于zap日志库。

注意:调试问题时应将level设置为debug以获取详细日志信息。

- + stacktrace-key: stacktrace

系统日志记录的详细配置,基于zap日志库。

注意:调试问题时应将level设置为debug以获取详细日志信息。

+ \ No newline at end of file diff --git a/guide/podman/podman_build.html b/guide/podman/podman_build.html index 38f8e146ec..f5c02de267 100644 --- a/guide/podman/podman_build.html +++ b/guide/podman/podman_build.html @@ -13,7 +13,7 @@ - + @@ -34,8 +34,8 @@ podman system prune -af rm -rf ctlog

宿主机重启后重启所有容器

Podman 支持 systemd 集成,可通过以下命令生成自启动服务:

shell
# 为指定容器生成 systemd service
 podman generate systemd --name ct1 > /etc/systemd/system/container-ct1.service
-systemctl enable container-ct1

或者手动启动所有已停止的容器:

shell
podman ps -aq -f status=exited | xargs -r podman start
- +systemctl enable container-ct1

或者手动启动所有已停止的容器:

shell
podman ps -aq -f status=exited | xargs -r podman start
+ \ No newline at end of file diff --git a/guide/podman/podman_install.html b/guide/podman/podman_install.html index d97415f11f..24740ff22c 100644 --- a/guide/podman/podman_install.html +++ b/guide/podman/podman_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/podman/podman_precheck.html b/guide/podman/podman_precheck.html index bd51c1830c..327ea642cc 100644 --- a/guide/podman/podman_precheck.html +++ b/guide/podman/podman_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/podman/podman_qa.html b/guide/podman/podman_qa.html index 9a5683c9fc..8186fa7fae 100644 --- a/guide/podman/podman_qa.html +++ b/guide/podman/podman_qa.html @@ -13,7 +13,7 @@ - + @@ -29,8 +29,8 @@ ghcr.io/oneclickvirt/podman:<os> # multi-arch manifest

手动拉取镜像示例:

shell
podman pull ghcr.io/oneclickvirt/podman:debian-amd64

如何完全重置 Podman 环境

先卸载,再重新安装:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmanuninstall.sh)
 bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/podman/main/podmaninstall.sh)

Podman 与 containerd 如何选择

DNS 问题

Podman 安装时会配置 check-dns-podman.service 服务,检查是否运行:

shell
systemctl status check-dns-podman

手动修复 DNS:

shell
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
-echo "nameserver 1.1.1.1" >> /etc/resolv.conf

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +echo "nameserver 1.1.1.1" >> /etc/resolv.conf

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/podman/podman_thanks.html b/guide/podman/podman_thanks.html index 8f0b4c119e..6e1413b9a3 100644 --- a/guide/podman/podman_thanks.html +++ b/guide/podman/podman_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/pve/images/readme.html b/guide/pve/images/readme.html index 11764a6610..3c11b6f1a7 100644 --- a/guide/pve/images/readme.html +++ b/guide/pve/images/readme.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/pve/pve_android.html b/guide/pve/pve_android.html index 92066feaec..784c192930 100644 --- a/guide/pve/pve_android.html +++ b/guide/pve/pve_android.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/pve/pve_custom.html b/guide/pve/pve_custom.html index befc885de6..d7a43742f2 100644 --- a/guide/pve/pve_custom.html +++ b/guide/pve/pve_custom.html @@ -13,7 +13,7 @@ - + @@ -55,8 +55,8 @@ 2a01:4f8:1c1c:94de::3 2a01:4f8:1c1c:94de::4 2a01:4f8:1c1c:94de::5 -2a01:4f8:1c1c:94de::6

这种方式可用于宿主机未完整分配/80以上大小的子网的时候,仅带几个IPV6的时候,又需要开设独立的IPV6地址的实例

- +2a01:4f8:1c1c:94de::6

这种方式可用于宿主机未完整分配/80以上大小的子网的时候,仅带几个IPV6的时候,又需要开设独立的IPV6地址的实例

+ \ No newline at end of file diff --git a/guide/pve/pve_install.html b/guide/pve/pve_install.html index 05c9134ee4..d14645a084 100644 --- a/guide/pve/pve_install.html +++ b/guide/pve/pve_install.html @@ -13,7 +13,7 @@ - + @@ -23,8 +23,8 @@
Skip to content
- +mount /dev/sdx1 /mnt

U盘内的wireless.zip需要确保已解压,打开可见其中的deb文件

此时直接执行一键配置

shell
bash /mnt/wireless.sh

配置完毕会自动重启系统,重启后会有公共网络

配置脚本执行过程中会提示输入WIFI的名字和密码,由于纯CI环境无中文输入法,WIFI的名字必须仅英文数字组成,密码也是

其他相关默认配置

下载脚本,类似上面一步那样导入文件

https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/refs/heads/main/extra_scripts/wireless/default.sh

使用前务必确保curl ip.sb无问题

shell
bash default.sh

执行会非常耗时,但装完后会自带xfce的桌面环境,且换源阿里云,且去除无效订阅,且设置合并local和loacl-lvm,且设置清华镜像容器源

注意事项

物理机安装无限模块后不可使用NAT直接连接虚拟机接入网络,所以本项目后续的教程不支持该方法接入的网桥,本项目后续脚本不支持本方法安装的Proxmox.

目前可行的无线模块在PVE上使用的成功案例,都要求WIFI路由器接入网络的方式是自动获取IP地址(DHCP)(后续使用openwrt或ikuai或直接nat后虚拟机内网络可用),或可在路由器上修改静态路由表,如果WIFI路由器使用固定IP地址连接网络,暂时未找到成功案例。

+ \ No newline at end of file diff --git a/guide/pve/pve_kvm.html b/guide/pve/pve_kvm.html index 82380d4972..512be1fdd8 100644 --- a/guide/pve/pve_kvm.html +++ b/guide/pve/pve_kvm.html @@ -13,7 +13,7 @@ - + @@ -33,8 +33,8 @@ rm -rf vmlog rm -rf vm*

TIP

PVE修改VM配置前都得停机先,再修改配置,修改完再启动,免得出现配置重载错误

开设独立IPV4地址的虚拟机

三个脚本,各取所需,各有优缺点。

前两个脚本不需要额外的IPV4地址事先绑定到vmbr0接口上,开设的虚拟机将直接绑定额外的IPV4地址。

最后一个脚本需要额外的IPV4地址事先绑定到vmbr0接口上,开设的虚拟机将做NAT全端口映射内网IPV4地址,不直接绑定额外的IPV4地址。

自动选择宿主机同一子网内的额外IPV4地址开设虚拟机

WARNING

使用前需要保证当前宿主机的IP段带了至少2个IP,且有空余的IP未配置,该空余的IP未绑定宿主机。

TIP

此时附加的IPV4地址是宿主机目前的IPV4地址顺位后面的地址, 比如目前宿主机地址是1.1.1.32然后1.1.1.33已经有虚拟机了,那么本脚本附加IP地址为1.1.1.34

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_extra_ip.sh -o buildvm_extra_ip.sh && chmod +x buildvm_extra_ip.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_extra_ip.sh -o buildvm_extra_ip.sh && chmod +x buildvm_extra_ip.sh

各参数含义

shell
# ./buildvm_extra_ip.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘 独立IPV6(默认为N)

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

shell
./buildvm_extra_ip.sh 152 root oneclick123 1 1024 10 debian12 local N

上述命令意义为开设一个带独立IPV4地址的虚拟机

属性
VMID152
用户名root
密码oneclick123
CPU1核
内存1024MB
硬盘10G
系统debian12
存储盘local盘
IPV6附加默认不附加

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

手动指定额外IPV4地址开设虚拟机

TIP

不同子网内的IP地址,如果附加时不指定MAC地址,那么路由器无法识别源 MAC 地址,流量将被标记为“滥用”,并“可能”导致服务器被阻止。 (如果使用Hetzner的独立服务器务建议提供附加IPV4地址对应的MAC地址防止被报告滥用)

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_manual_ip.sh -o buildvm_manual_ip.sh && chmod +x buildvm_manual_ip.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_manual_ip.sh -o buildvm_manual_ip.sh && chmod +x buildvm_manual_ip.sh

各参数含义

shell
# ./buildvm_manual_ip.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘 IPV4地址 独立IPV6(默认为N) MAC地址(不提供时将不指定虚拟机的MAC地址)

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

shell
./buildvm_manual_ip.sh 152 root oneclick123 1 1024 10 debian12 local a.b.c.d/24 N

上述命令意义为开设一个带独立IPV4地址的虚拟机

属性
VMID152
用户名root
密码oneclick123
CPU1核
内存1024MB
硬盘10G
系统debian12
存储盘local盘 (系统盘)
IPV4地址a.b.c.d
子网/24 子网
IPV6
MAC地址

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

宿主机手动附加额外IPV4地址后再指定IPV4地址开设虚拟机

TIP

务必保证开设前你能使用额外的IPV4地址通过SSH登录宿主机,但curl ip.sb却仍显示原来的宿主机IPV4地址

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_fullnat_ip.sh -o buildvm_fullnat_ip.sh && chmod +x buildvm_fullnat_ip.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_fullnat_ip.sh -o buildvm_fullnat_ip.sh && chmod +x buildvm_fullnat_ip.sh

各参数含义

shell
# ./buildvm_fullnat_ip.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘 IPV4地址 独立IPV6(默认为N)

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

shell
./buildvm_fullnat_ip.sh 152 root oneclick123 1 1024 10 debian12 local a.b.c.d N

上述命令意义为开设一个带独立IPV4地址的虚拟机

属性
VMID152
用户名root
密码oneclick123
CPU1核
内存1024MB
硬盘10G
系统debian12
存储盘local盘 (系统盘)
IPV4地址a.b.c.d
IPV6

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

进出流量都走绑定的IPV4地址

执行

line="-A POSTROUTING -s 172.16.1.0\/24 -o vmbr0 -j MASQUERADE"
 sed -i "\|$line|d" /etc/iptables/rules.v4
-service netfilter-persistent restart

即可,但这会导致宿主机丧失开设非独立IPV4地址的NAT的虚拟机/容器的能力,慎重执行

执行后你只能开设独立IPV4地址的虚拟机了。

开设纯IPV6地址的虚拟机

前提是宿主机给的是IPV6子网而不是单独一个IPV6地址,且宿主机未开启MAC地址校验

自动选择IPV6地址无需手动指定

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

各参数含义

shell
# ./buildvm_onlyv6.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

创建示例

shell
./buildvm_onlyv6.sh 152 root oneclick123 1 1024 10 debian12 local

上述命令意义为开设一个纯IPV6地址的虚拟机

参数
VMID152
用户名root
密码oneclick123
CPU1核
内存1024MB
硬盘10G
系统debian12
存储盘local

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

- +service netfilter-persistent restart

即可,但这会导致宿主机丧失开设非独立IPV4地址的NAT的虚拟机/容器的能力,慎重执行

执行后你只能开设独立IPV4地址的虚拟机了。

开设纯IPV6地址的虚拟机

前提是宿主机给的是IPV6子网而不是单独一个IPV6地址,且宿主机未开启MAC地址校验

自动选择IPV6地址无需手动指定

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_onlyv6.sh -o buildvm_onlyv6.sh && chmod +x buildvm_onlyv6.sh

各参数含义

shell
# ./buildvm_onlyv6.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘

TIP

注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

创建示例

shell
./buildvm_onlyv6.sh 152 root oneclick123 1 1024 10 debian12 local

上述命令意义为开设一个纯IPV6地址的虚拟机

参数
VMID152
用户名root
密码oneclick123
CPU1核
内存1024MB
硬盘10G
系统debian12
存储盘local

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

+ \ No newline at end of file diff --git a/guide/pve/pve_lxc.html b/guide/pve/pve_lxc.html index 3d320149d1..1a7ff49c12 100644 --- a/guide/pve/pve_lxc.html +++ b/guide/pve/pve_lxc.html @@ -13,7 +13,7 @@ - + @@ -33,8 +33,8 @@ systemctl restart networking.service systemctl restart ndpresponder.service iptables-save | awk '{if($1=="COMMIT"){delete x}}$1=="-A"?!x[$0]++:1' | iptables-restore -iptables-save > /etc/iptables/rules.v4

开设纯IPV6地址的虚拟机

前提是宿主机给的是IPV6子网而不是单独一个IPV6地址,且宿主机未开启MAC地址校验

自动选择IPV6地址无需手动指定

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

各参数含义

shell
# ./buildct_onlyv6.sh CTID 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘

创建示例

shell
./buildct_onlyv6.sh 152 oneclick123 1 1024 10 debian13 local

上述命令意义为开设一个纯IPV6地址的容器

属性
容器类型CT
CTID152
用户名root
密码oneclick123
CPU核心数1
内存1024MB
硬盘10G
系统debian13
存储盘local盘 (系统盘)

TIP

注意这里的CTID仅可使用100到256,其他数字不可用

- +iptables-save > /etc/iptables/rules.v4

开设纯IPV6地址的虚拟机

前提是宿主机给的是IPV6子网而不是单独一个IPV6地址,且宿主机未开启MAC地址校验

自动选择IPV6地址无需手动指定

使用方法

下载脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildct_onlyv6.sh -o buildct_onlyv6.sh && chmod +x buildct_onlyv6.sh

各参数含义

shell
# ./buildct_onlyv6.sh CTID 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘

创建示例

shell
./buildct_onlyv6.sh 152 oneclick123 1 1024 10 debian13 local

上述命令意义为开设一个纯IPV6地址的容器

属性
容器类型CT
CTID152
用户名root
密码oneclick123
CPU核心数1
内存1024MB
硬盘10G
系统debian13
存储盘local盘 (系统盘)

TIP

注意这里的CTID仅可使用100到256,其他数字不可用

+ \ No newline at end of file diff --git a/guide/pve/pve_macos.html b/guide/pve/pve_macos.html index 79c5f693c6..47ffcc1540 100644 --- a/guide/pve/pve_macos.html +++ b/guide/pve/pve_macos.html @@ -14,7 +14,7 @@ - + @@ -31,8 +31,8 @@ monterey.iso.7z (大小: 12.36GB) ventura.iso.7z (大小: 12.31GB) sonoma.iso.7z (大小: 14.41GB) -sequoia.iso.7z (大小: 15.02GB)

MACOS虚拟机模板设置

下载模板脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

参数含义

shell
# ./buildvm_macos.sh VMID CPU核数 内存 硬盘 SSH端口 VNC端口 系统 存储盘 独立IPV6(留空默认N)

TIP

这块的硬盘大小只是你开设的虚拟机的硬盘大小,实际开设过程中,程序还会挂载引导盘和系统镜像,所以实际开设一个虚拟机的硬盘需求是 虚拟机硬盘大小+镜像本体大小+引导盘大小(500MB) 请时刻注意你的硬盘空间是否足够开设虚拟机

示例命令

以最旧的版本(high-sierra)为例,实验支持的配置如下(非常卡顿)

shell
./buildvm_macos.sh 100 2 4096 45 44022 45901 high-sierra local N

模板开设完毕可执行cat vm100查看信息,或到WEB端对应VM的NOTES中查看

TIP

如果你不是通过本项目在Debian上安装的PVE,而是直接使用的官方ISO安装的PVE,且没有合并local和local-lvm分区,或者local分区未启用支持虚拟机磁盘类型,那么上面的一键命令中的local请改成local-lvm,需要使用支持虚拟机磁盘的分区进行虚拟机创建

以下为开设的示例VM的信息:

属性
VMID100
CPU核数2
内存大小4096MB
磁盘大小45G
SSH端口44022
VNC端口45901
系统high-sierra
宿主机的存储盘local
绑定独立IPV6(留空默认N)N

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

MACOS系统引导和安装

前面的流程走完后,面板端可以看到一个灰色的虚拟机待启动

mac0

点击启动后,进入VNC面板,左侧选择框有一个全屏按钮,实际操作时建议全屏操作,避免分辨率问题

mac00

经过大概3分钟的引导盘加载后,屏幕中央靠左侧会显示有一个启动盘可用,直接点击或回车

然后又是大概3~5分钟的启动盘加载后,会出现四个选择框,选择Disk Utility点击进入

mac1

进入后可以看到有三个盘和一个镜像,找到那个盘大小大于40G且名字叫QEMU HARDDISK Media的盘,点击Erase

mac2

此时会出现一个弹窗,需要给name重命名为macos方便后续识别使用,然后点击Erase继续初始化

mac3

初始化完毕后,点击Done

mac4

此时需要退出Disk Utility界面,右上角点击Disk Utility选择Quit Disk Utility退出当前选择框

mac5

然后回到了之前那四个选择框那里,选择Install macOS XXXX(由于我在以Big Sur为示例安装,所以XXXX为Big Sur系统),点击continue

mac6

后续就是继续点击continue,然后点击Agree,然后又是点击Agree

mac7

mac8

mac9

直到又出现那三个盘,但在这块可以那个盘大小大于40G且名字叫macos的盘,选择它,然后点击continue

mac10

一段时间的文件复制硬盘加载(大概跑个12分钟)后,正式进入系统安装环节,这块看你宿主机在哪个地区选哪个

mac11

选择完地区后一路点击continue

mac12

mac13

直到出现数据迁移选项Migration Assistant,选择左下角的Not Now不导入用户数据

mac14

然后就会提示你创建用户,填写用户名和账户名,还有登录所需的密码,设置完毕后点击continue

mac15

然后后面就会一路畅通点击continue,直到系统安装完毕了

网络配置

由于是离线环境进行的系统安装,所以这块需要手动配置静态网络连接宿主机的网桥

右上角点击WIFI按钮,关闭WIFI后,点击Network Preferences ...

mac16

进入设置界面后,点击Advanced按钮,进入高级设置界面

mac17

TCP/IP这一栏填写静态网络配置

Configure IPV4: Manually

IPV4 Address: 172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

Subnet Mask: 255.255.255.0

Router: 172.16.1.1

如果你需要配置IPV6网络,类比上面的IPV4设置,需要填写的会是虚拟机绑定的公网IPV6地址(PVE面板中的Note框有写),子网掩码填128,默认网关填写cat /usr/local/bin/pve_check_ipv6在宿主机执行后显示的地址。

mac18

DNS这一栏填写静态网络的DNS配置

一般加入8.8.8.81.1.1.1足够了,中国境内使用114.114.114.114即可。

mac19

填写完毕且apply后,设置的左上角会显示网络已连通

mac20

此时打开默认的浏览器,随便打开一个网址,都是可访问公网资源的,证明网络已配置成功

mac21

卸载iso镜像

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

Macos系统就是卸载opencore.isoxxxx(安装使用的系统镜像).iso,类似上面示例图片的Windows系统卸载win镜像和virtio镜像一样。

- +sequoia.iso.7z (大小: 15.02GB)

MACOS虚拟机模板设置

下载模板脚本

国际

shell
curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_macos.sh -o buildvm_macos.sh && chmod +x buildvm_macos.sh

参数含义

shell
# ./buildvm_macos.sh VMID CPU核数 内存 硬盘 SSH端口 VNC端口 系统 存储盘 独立IPV6(留空默认N)

TIP

这块的硬盘大小只是你开设的虚拟机的硬盘大小,实际开设过程中,程序还会挂载引导盘和系统镜像,所以实际开设一个虚拟机的硬盘需求是 虚拟机硬盘大小+镜像本体大小+引导盘大小(500MB) 请时刻注意你的硬盘空间是否足够开设虚拟机

示例命令

以最旧的版本(high-sierra)为例,实验支持的配置如下(非常卡顿)

shell
./buildvm_macos.sh 100 2 4096 45 44022 45901 high-sierra local N

模板开设完毕可执行cat vm100查看信息,或到WEB端对应VM的NOTES中查看

TIP

如果你不是通过本项目在Debian上安装的PVE,而是直接使用的官方ISO安装的PVE,且没有合并local和local-lvm分区,或者local分区未启用支持虚拟机磁盘类型,那么上面的一键命令中的local请改成local-lvm,需要使用支持虚拟机磁盘的分区进行虚拟机创建

以下为开设的示例VM的信息:

属性
VMID100
CPU核数2
内存大小4096MB
磁盘大小45G
SSH端口44022
VNC端口45901
系统high-sierra
宿主机的存储盘local
绑定独立IPV6(留空默认N)N

TIP

注意这里的VMID仅可使用100到256,其他数字不可用

MACOS系统引导和安装

前面的流程走完后,面板端可以看到一个灰色的虚拟机待启动

mac0

点击启动后,进入VNC面板,左侧选择框有一个全屏按钮,实际操作时建议全屏操作,避免分辨率问题

mac00

经过大概3分钟的引导盘加载后,屏幕中央靠左侧会显示有一个启动盘可用,直接点击或回车

然后又是大概3~5分钟的启动盘加载后,会出现四个选择框,选择Disk Utility点击进入

mac1

进入后可以看到有三个盘和一个镜像,找到那个盘大小大于40G且名字叫QEMU HARDDISK Media的盘,点击Erase

mac2

此时会出现一个弹窗,需要给name重命名为macos方便后续识别使用,然后点击Erase继续初始化

mac3

初始化完毕后,点击Done

mac4

此时需要退出Disk Utility界面,右上角点击Disk Utility选择Quit Disk Utility退出当前选择框

mac5

然后回到了之前那四个选择框那里,选择Install macOS XXXX(由于我在以Big Sur为示例安装,所以XXXX为Big Sur系统),点击continue

mac6

后续就是继续点击continue,然后点击Agree,然后又是点击Agree

mac7

mac8

mac9

直到又出现那三个盘,但在这块可以那个盘大小大于40G且名字叫macos的盘,选择它,然后点击continue

mac10

一段时间的文件复制硬盘加载(大概跑个12分钟)后,正式进入系统安装环节,这块看你宿主机在哪个地区选哪个

mac11

选择完地区后一路点击continue

mac12

mac13

直到出现数据迁移选项Migration Assistant,选择左下角的Not Now不导入用户数据

mac14

然后就会提示你创建用户,填写用户名和账户名,还有登录所需的密码,设置完毕后点击continue

mac15

然后后面就会一路畅通点击continue,直到系统安装完毕了

网络配置

由于是离线环境进行的系统安装,所以这块需要手动配置静态网络连接宿主机的网桥

右上角点击WIFI按钮,关闭WIFI后,点击Network Preferences ...

mac16

进入设置界面后,点击Advanced按钮,进入高级设置界面

mac17

TCP/IP这一栏填写静态网络配置

Configure IPV4: Manually

IPV4 Address: 172.16.1.xxx(xxx换成你想绑定的ip,我的vmid是100,为了方便写了100)

Subnet Mask: 255.255.255.0

Router: 172.16.1.1

如果你需要配置IPV6网络,类比上面的IPV4设置,需要填写的会是虚拟机绑定的公网IPV6地址(PVE面板中的Note框有写),子网掩码填128,默认网关填写cat /usr/local/bin/pve_check_ipv6在宿主机执行后显示的地址。

mac18

DNS这一栏填写静态网络的DNS配置

一般加入8.8.8.81.1.1.1足够了,中国境内使用114.114.114.114即可。

mac19

填写完毕且apply后,设置的左上角会显示网络已连通

mac20

此时打开默认的浏览器,随便打开一个网址,都是可访问公网资源的,证明网络已配置成功

mac21

卸载iso镜像

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

Macos系统就是卸载opencore.isoxxxx(安装使用的系统镜像).iso,类似上面示例图片的Windows系统卸载win镜像和virtio镜像一样。

+ \ No newline at end of file diff --git a/guide/pve/pve_precheck.html b/guide/pve/pve_precheck.html index da836fb039..e2dfe97645 100644 --- a/guide/pve/pve_precheck.html +++ b/guide/pve/pve_precheck.html @@ -13,7 +13,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +rm -rf /usr/local/bin/pve_last_ipv6*

执行本项目的检测环境的命令,展示如下

图片

查询如上的只需使用下面的一键脚本自动创建虚拟机即可,无需手动再修改WEB端设置

图片

查询如上的在使用后续脚本创建了虚拟机后,可能需要手动修改WEB端设置,需要关闭对应每个虚拟机的硬件嵌套虚拟化,如下图

图片

先停止虚拟机再修改,修改完后再开机才能使用NOVNC,不关闭可能导致这个虚拟机有BUG无法使用

如果强行安装PVE开KVM,启动不了的也可以关闭这个选项试试能不能启动虚拟机,导致这些问题的原因就是上面说的,宿主机不支持嵌套虚拟化KVM进行加速

TIP

开设虚拟机前请使用screen挂起执行,避免开设时间过长,SSH不稳定导致中间执行中断



+ \ No newline at end of file diff --git a/guide/pve/pve_qa.html b/guide/pve/pve_qa.html index 7af163d493..c8ef092c93 100644 --- a/guide/pve/pve_qa.html +++ b/guide/pve/pve_qa.html @@ -13,7 +13,7 @@ - + @@ -35,8 +35,8 @@ service networking restart systemctl restart networking.service cat /etc/iptables/rules.v4 | iptables-restore

检测是不是商家虚标IPV6子网大小导致无法开设独立IPV6地址的虚拟机/容器

使用以下命令在纯净的未安装ProxmoxVE的机器上测试实际的子网掩码大小

国际

shell
curl -L https://raw.githubusercontent.com/spiritLHLS/ecs/main/archive/eo6s.sh -o eo6s.sh && chmod +x eo6s.sh && bash eo6s.sh

国内

shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/ecs/main/archive/eo6s.sh -o eo6s.sh && chmod +x eo6s.sh && bash eo6s.sh

如果检测结果为128证明商家虚标子网大小,仅一个IPV6地址无法额外分配给虚拟机/容器。

还有一种情况,就是商家只给了权限附加,实际上没有给完整的IPV6子网到机器上,典型的如 virtfusion 这种阿三面板,需要后台一个个加IPV6的IP进去,这种情况下也无法开设。

virtfusion的客服对于这种情况的说明:

您获得的所有IPv6地址块均为1个/64,但您需要自行将它们一个个添加并路由到VPS。
-添加1个IPv6地址后,您需要ping网关(在控制面板的网络设置下),然后ping该IPv6地址,之后对添加的每个IPv6地址重复此操作。

宿主机的IPV6网段更换需要对应更新配置

需要更新三个地方:

/etc/network/interfaces

/etc/systemd/system/ndpresponder.service

/usr/local/bin/ 中的带ipv6的文件

更新完毕后,重启宿主机再进行开设,应该就可以使用新的网段了

在现有的 PVE 中纳管新的 PVE(创建 / 加入集群)

为了将两个独立的 Proxmox VE 实例组成一个集群,需满足以下前提条件:

集群前提条件

  1. 主机名唯一
    两个节点的 hostname 不可相同,避免命名冲突。建议使用诸如 pve1pve2 等命名方式。

  2. VMID 唯一
    两台 PVE 上不能存在相同 VMID 的虚拟机或容器。若存在冲突,请调整 VMID 以避免合并时发生冲突。

  3. 网络互通、延迟低
    两台主机之间必须能互相 ping 通,建议网络延迟低(局域网或高速公网),以保障集群通信质量。

创建集群(在任意节点执行)

  1. 登录主节点(如 pve1)Web 管理界面。
  2. 依次点击:Datacenter → Cluster → Create Cluster
  3. 输入集群名称(Cluster Name)。
  4. 选择要用于集群通信的网卡(如仅有公网 IP,可选择此网卡)。
  5. 点击 Create 创建集群。
  6. 创建成功后,点击 Join Information,复制该页面显示的信息备用。

PS: 在哪个节点上创建集群都可以,集群中不分主从节点。

加入集群(在第二个节点执行)

  1. 登录待加入节点(如 pve2)Web 管理界面。
  2. 依次点击:Datacenter → Cluster → Join Cluster
  3. pve1Join Information 粘贴到输入框中。
  4. 填入 pve1 上具的 root 用户密码到 Peer Password
  5. 点击 Join 开始加入过程。
  6. 等待页面提示成功后,刷新页面或重新登录,即可看到两个节点已组成集群。

集群优势

目前已验证的VPS商家

可开设KVM虚拟化的NAT的商家

spartanhost 中的独立服务器的Debian12(Debian11有问题)

interserver 中的VPS或独立服务器

frantech 中的拉斯维加斯第二档

eugamehost 中的美国凤凰城黑五促销款

amhost 中的测试款

digitalocean 中的 Perminu Intel 和 Regular 4核款

skrime 中的 AMD Ryzen KVM Server 最低配款

webdock 中的 AMD KVM Server

4vps 中的 俄罗斯和希腊 测试款

adtaq 中的最低配存储KVM服务器

nocix 中的独立服务器

online.net 中的低配独立服务器的Debian12(Debian11有问题)

OVH 中的 Public Cloud 服务器 需要使用以下命令dd为纯净系统后安装

shell
bash <(curl -sSL https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh) -debian 12 -pwd 'oneclickvirt139' --network "static"

此时dd后的系统用户名为root,密码为oneclickvirt139

如果不成功,请查看 https://github.com/leitbogioro/Tools 中的issues和说明。一个常见的问题是OVH独立服务器进行dd,需要源系统默认重装为raid1的debian12,然后用参数指定dd为raid0,才能成功,使用如下命令

shell
curl -sSLk 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' -o InstallNET.sh && chmod a+x InstallNET.sh && bash InstallNET.sh -debian 12  -mirror "http://ftp.debian.org/debian/" -pwd oneclickvirt139 -raid 0

只可开设LXC虚拟化的NAT的商家

腾讯云 中的无忧款和特惠款(学生机)

spectraip 中的KVM服务器

Linode 中美国专用CPU的最低配

hosthatch 中的特价高配服务器

hetzner 的cloud服务器

rackdog 的浮动IP的服务器

vultr 的Cloud普通服务器

azure 的普通机器

scaleway 中的ARM架构的服务器

aws 中的ec2实例

Google cloud platform - GCP 的 AMD 服务器

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +添加1个IPv6地址后,您需要ping网关(在控制面板的网络设置下),然后ping该IPv6地址,之后对添加的每个IPv6地址重复此操作。

宿主机的IPV6网段更换需要对应更新配置

需要更新三个地方:

/etc/network/interfaces

/etc/systemd/system/ndpresponder.service

/usr/local/bin/ 中的带ipv6的文件

更新完毕后,重启宿主机再进行开设,应该就可以使用新的网段了

在现有的 PVE 中纳管新的 PVE(创建 / 加入集群)

为了将两个独立的 Proxmox VE 实例组成一个集群,需满足以下前提条件:

集群前提条件

  1. 主机名唯一
    两个节点的 hostname 不可相同,避免命名冲突。建议使用诸如 pve1pve2 等命名方式。

  2. VMID 唯一
    两台 PVE 上不能存在相同 VMID 的虚拟机或容器。若存在冲突,请调整 VMID 以避免合并时发生冲突。

  3. 网络互通、延迟低
    两台主机之间必须能互相 ping 通,建议网络延迟低(局域网或高速公网),以保障集群通信质量。

创建集群(在任意节点执行)

  1. 登录主节点(如 pve1)Web 管理界面。
  2. 依次点击:Datacenter → Cluster → Create Cluster
  3. 输入集群名称(Cluster Name)。
  4. 选择要用于集群通信的网卡(如仅有公网 IP,可选择此网卡)。
  5. 点击 Create 创建集群。
  6. 创建成功后,点击 Join Information,复制该页面显示的信息备用。

PS: 在哪个节点上创建集群都可以,集群中不分主从节点。

加入集群(在第二个节点执行)

  1. 登录待加入节点(如 pve2)Web 管理界面。
  2. 依次点击:Datacenter → Cluster → Join Cluster
  3. pve1Join Information 粘贴到输入框中。
  4. 填入 pve1 上具的 root 用户密码到 Peer Password
  5. 点击 Join 开始加入过程。
  6. 等待页面提示成功后,刷新页面或重新登录,即可看到两个节点已组成集群。

集群优势

目前已验证的VPS商家

可开设KVM虚拟化的NAT的商家

spartanhost 中的独立服务器的Debian12(Debian11有问题)

interserver 中的VPS或独立服务器

frantech 中的拉斯维加斯第二档

eugamehost 中的美国凤凰城黑五促销款

amhost 中的测试款

digitalocean 中的 Perminu Intel 和 Regular 4核款

skrime 中的 AMD Ryzen KVM Server 最低配款

webdock 中的 AMD KVM Server

4vps 中的 俄罗斯和希腊 测试款

adtaq 中的最低配存储KVM服务器

nocix 中的独立服务器

online.net 中的低配独立服务器的Debian12(Debian11有问题)

OVH 中的 Public Cloud 服务器 需要使用以下命令dd为纯净系统后安装

shell
bash <(curl -sSL https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh) -debian 12 -pwd 'oneclickvirt139' --network "static"

此时dd后的系统用户名为root,密码为oneclickvirt139

如果不成功,请查看 https://github.com/leitbogioro/Tools 中的issues和说明。一个常见的问题是OVH独立服务器进行dd,需要源系统默认重装为raid1的debian12,然后用参数指定dd为raid0,才能成功,使用如下命令

shell
curl -sSLk 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' -o InstallNET.sh && chmod a+x InstallNET.sh && bash InstallNET.sh -debian 12  -mirror "http://ftp.debian.org/debian/" -pwd oneclickvirt139 -raid 0

只可开设LXC虚拟化的NAT的商家

腾讯云 中的无忧款和特惠款(学生机)

spectraip 中的KVM服务器

Linode 中美国专用CPU的最低配

hosthatch 中的特价高配服务器

hetzner 的cloud服务器

rackdog 的浮动IP的服务器

vultr 的Cloud普通服务器

azure 的普通机器

scaleway 中的ARM架构的服务器

aws 中的ec2实例

Google cloud platform - GCP 的 AMD 服务器

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/pve/pve_thanks.html b/guide/pve/pve_thanks.html index 1488e50c4c..6e7fa4346c 100644 --- a/guide/pve/pve_thanks.html +++ b/guide/pve/pve_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/pve/pve_windows.html b/guide/pve/pve_windows.html index ac097eb11e..15f62ceb68 100644 --- a/guide/pve/pve_windows.html +++ b/guide/pve/pve_windows.html @@ -14,7 +14,7 @@ - + @@ -24,8 +24,8 @@
Skip to content
- +144.144.144.144

然后右下角点击确定,注意不要勾选退出时验证

win12

然后其他弹出框都选确定就行了,然后本虚拟机就有网络了。

5.取消CD盘挂载

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

使用不带virtio的iso镜像开设

1.下载镜像

无virtio的win镜像下载可使用

https://github.com/ILLKX/Windows

这块的镜像

virtio的iso镜像可使用

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

下载

virtio也可以只下载msi包,本地用软件打包成iso压缩格式再本地上传到ProxmoxVE中也可以

这样的话包小一些,前者官方的是包含所有WIN镜像支持的包总计500MB左右,后者自己打包5MB左右

2.virtio导入

注意这里的导入在ProxmoxVE的8.x及之后的版本中,OS这一栏默认可选择virtio启动加载,如图所示

virtio

而在更低版本的ProxmoxVE中,比如7.x和6.x的版本,OS这一栏默认无法选择virtio启动加载

lower

需要手动在Hardware[硬件]中点击Add[添加]添加CD/DVD Drive选择下载好的virtioISO文件

lower

然后其他的一切照常,直到

nodisk

这块找不到硬盘,需要选择加载驱动程序

nodisk

然后选择驱动盘virtio的,点击打开,从amd64那导入对应系统名字的驱动

nodisk

我的是windows server 2019的镜像所以导入的是2k19的驱动,导入完毕后选择导入的驱动,点击下一页

nodisk

nodisk

这样就能看得到硬盘了,选中后继续后续的安装步骤,选中后继续后续的安装步骤如同前面的教程,直到系统安装完毕,进入桌面。

3.通过virtio-win-guest-tools安装驱动

此时安装成功,出现桌面后,还需要手动安装驱动

打开VirtIO驱动所在的CD光驱目录,最下面有一个virtio-win-guest-tools程序,会安装用到的virtio驱动,这个驱动也会包含virtio的网卡驱动

wk

wk

wk

点击安装完毕后就安装上网卡驱动了,后续网络设置参考前面的初始化网络的教程

4.安装网卡驱动(备选)

此时安装成功,出现桌面后,还需要手动安装网卡驱动才能连通网络:

  1. 打开 控制面板设备管理器
  2. 找到 以太网控制器,右键选择 更新驱动程序
  3. 选择 浏览我的计算机以查找驱动程序软件 (R)
  4. 浏览到VirtIO驱动所在的CD光驱目录
  5. 打开其中的 NetKVM 文件夹
  6. 根据当前系统版本选择对应的驱动文件夹(和上面相同的操作,我会选择2k19文件夹,里面的amd64驱动)
  7. 确认安装,完成后即可成功加载VirtIO的网卡驱动

wk

wk

wk

后续网络设置参考前面的初始化网络的教程

5.取消CD盘挂载

在ProxmoxVE的web端手动在Hardware[硬件]中点击对应的CD选择Remove[删除]然后再重启虚拟机,这样就能直接使用了

wk

使用的旧的win镜像只有IE浏览器

自行在IE浏览器中输入

https://www.microsoft.com/zh-cn/edge/download

进行下载

由于IE浏览器不默认添加证书白名单,会有一系列弹窗,点击添加域名,添加后保存,才能真正进入对应的页面显示下载按钮点击下载

又由于默认老系统没有webview2组件,提示下载需要额外下载安装组件后才能正常使用现代浏览器

https://learn.microsoft.com/zh-cn/answers/questions/3866296/msvcp140-dll

某些旧镜像无法运行程序,提示报错MSVCP140这个dll缺失,需要访问上述地址下载安装相应的C++运行时依赖

+ \ No newline at end of file diff --git a/guide/qemu/qemu_build.html b/guide/qemu/qemu_build.html index 99ef873c28..b97e819831 100644 --- a/guide/qemu/qemu_build.html +++ b/guide/qemu/qemu_build.html @@ -13,7 +13,7 @@ - + @@ -37,8 +37,8 @@ virsh dominfo vm1 | grep Autostart # 取消自启动 -virsh autostart vm1 --disable

或者手动启动所有已停止的虚拟机:

shell
for vm in $(virsh list --all --name); do virsh start "$vm" 2>/dev/null; done
- +virsh autostart vm1 --disable

或者手动启动所有已停止的虚拟机:

shell
for vm in $(virsh list --all --name); do virsh start "$vm" 2>/dev/null; done
+ \ No newline at end of file diff --git a/guide/qemu/qemu_install.html b/guide/qemu/qemu_install.html index 2f9755e33c..20ff056991 100644 --- a/guide/qemu/qemu_install.html +++ b/guide/qemu/qemu_install.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/qemu/qemu_precheck.html b/guide/qemu/qemu_precheck.html index 81a89ea9a3..87c76f595d 100644 --- a/guide/qemu/qemu_precheck.html +++ b/guide/qemu/qemu_precheck.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/guide/qemu/qemu_qa.html b/guide/qemu/qemu_qa.html index e378d64d48..ecff164b9a 100644 --- a/guide/qemu/qemu_qa.html +++ b/guide/qemu/qemu_qa.html @@ -13,7 +13,7 @@ - + @@ -28,8 +28,8 @@ iptables -A FORWARD -d 192.168.122.0/24 -j ACCEPT

虚拟机 IPv6 未生效

  1. 确认宿主机有公网 IPv6 地址
  2. 检查 IPv6 网桥是否已配置:
shell
ip -6 addr show
  1. 确认安装脚本已完整执行并配置了 IPv6 网络

虚拟机无法启动 / 状态为 shut off

查看虚拟机的错误日志:

shell
virsh dominfo vm1
 cat /var/log/libvirt/qemu/vm1.log

常见原因:

如何查看 SSH 登录信息

查看 vmlog 文件获取批量开设时的信息:

shell
cat vmlog

或通过以下命令查看端口转发规则:

shell
iptables -t nat -L PREROUTING -n -v | grep 25000

如何完全重置 QEMU/KVM 环境

先卸载,再重新安装:

国际

shell
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/qemuuninstall.sh)
 bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

国内

shell
bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/scripts/qemuuninstall.sh)
-bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

- +bash <(curl -sSL https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/qemu/main/qemuinstall.sh)

无 CDN 模式(WITHOUTCDN)

如果服务器网络非常好无需加速,或希望完全禁用 CDN 加速,可在执行脚本前设置:

shell
export WITHOUTCDN=TRUE

也可以只对单次命令生效:

shell
WITHOUTCDN=TRUE

设置后,脚本执行过程中将不再尝试使用 CDN 加速地址。

+ \ No newline at end of file diff --git a/guide/qemu/qemu_thanks.html b/guide/qemu/qemu_thanks.html index 32e02a88ce..7df479e744 100644 --- a/guide/qemu/qemu_thanks.html +++ b/guide/qemu/qemu_thanks.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 96085a68c0..2a8e43d111 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"case_case1.md":"CSxNJhxe","case_case2.md":"DRBe_7dn","case_case3.md":"DRWmio28","case_case4.md":"BEil2tH0","case_case5.md":"DPCgUS6O","case_case6.md":"CGjNllmZ","case_case7.md":"gi9gp8pd","case_index.md":"C0DUV4RF","developer_index.md":"B8znk3d2","developer_l10n.md":"iD3aNsOG","en_developer_index.md":"Cm5zcfA9","en_developer_l10n.md":"iiFjzuQg","en_guide_block_block_docker.md":"Doy9s9Vh","en_guide_block_block_incus.md":"_B3e7Pan","en_guide_block_block_iptables.md":"BuVIpjNA","en_guide_block_block_lxd.md":"1188Sozz","en_guide_block_block_pve.md":"RGc1tKBz","en_guide_containerd_containerd_build.md":"BGED5Cu_","en_guide_containerd_containerd_install.md":"Bbxca2PR","en_guide_containerd_containerd_precheck.md":"CyrTUZiu","en_guide_containerd_containerd_qa.md":"HyiZqgIb","en_guide_containerd_containerd_thanks.md":"DtuDOZ-p","en_guide_dashboard.md":"CpwMvZTp","en_guide_dashboardq.md":"_bVyRwtO","en_guide_docker_docker_android.md":"B8dMMnUe","en_guide_docker_docker_build.md":"CTIvFfWb","en_guide_docker_docker_custom.md":"OY4gKWwk","en_guide_docker_docker_install.md":"CDALzLC_","en_guide_docker_docker_macos.md":"BaiPRHaf","en_guide_docker_docker_precheck.md":"BSHP7pkf","en_guide_docker_docker_qa.md":"CgGdy1j3","en_guide_docker_docker_thanks.md":"DxW1R0HO","en_guide_docker_docker_windows.md":"C1jmpKHD","en_guide_incus_incus_custom.md":"O4ZDK5u2","en_guide_incus_incus_extra_config.md":"PNnYtcMO","en_guide_incus_incus_install.md":"Ciy_nR33","en_guide_incus_incus_lxc.md":"BGLDu0wo","en_guide_incus_incus_precheck.md":"wD-FlxZP","en_guide_incus_incus_qa.md":"6SEJtO6O","en_guide_incus_incus_qemu.md":"7dyIDO2-","en_guide_incus_incus_thanks.md":"B7ZrWUmI","en_guide_incus_incus_windows.md":"v0GUr3pl","en_guide_kubevirt_kubevirt_build.md":"DX1CYXPd","en_guide_kubevirt_kubevirt_install.md":"DlcdObuG","en_guide_kubevirt_kubevirt_precheck.md":"DX4nJZaS","en_guide_kubevirt_kubevirt_qa.md":"Z_df9QPM","en_guide_kubevirt_kubevirt_thanks.md":"CQiaCeIm","en_guide_lxd_lxd_custom.md":"Bp6v5Zy-","en_guide_lxd_lxd_extra_config.md":"iGGYT1xK","en_guide_lxd_lxd_install.md":"DEVhwMpg","en_guide_lxd_lxd_lxc.md":"Dq7KibPk","en_guide_lxd_lxd_precheck.md":"CSuViZhP","en_guide_lxd_lxd_qa.md":"B1l7HXAo","en_guide_lxd_lxd_qemu.md":"JrZJ0oUF","en_guide_lxd_lxd_thanks.md":"BCd8YLMv","en_guide_lxd_lxd_windows.md":"UJUaq5rg","en_guide_oneclickvirt_oneclickvirt_install.md":"Ba_g8SBd","en_guide_oneclickvirt_oneclickvirt_precheck.md":"Cp8bxn8j","en_guide_oneclickvirt_oneclickvirt_qa.md":"DkuKBHYB","en_guide_oneclickvirt_oneclickvirt_thanks.md":"OOvm5In9","en_guide_oneclickvirt_oneclickvirt_usage.md":"DUd22Iil","en_guide_podman_podman_build.md":"BjM-TffL","en_guide_podman_podman_install.md":"DqguNd1F","en_guide_podman_podman_precheck.md":"DxYY0UwE","en_guide_podman_podman_qa.md":"DM9Gt1Vh","en_guide_podman_podman_thanks.md":"CzETp0OB","en_guide_pve_images_readme.md":"Cc_yQGo9","en_guide_pve_pve_android.md":"CkHMSJua","en_guide_pve_pve_custom.md":"C2ClsMUA","en_guide_pve_pve_install.md":"Ba7wEJMt","en_guide_pve_pve_kvm.md":"HBF0dK3U","en_guide_pve_pve_lxc.md":"ByndHppy","en_guide_pve_pve_macos.md":"8CuaOLGH","en_guide_pve_pve_precheck.md":"DExDyJzI","en_guide_pve_pve_qa.md":"CbFkFSq5","en_guide_pve_pve_thanks.md":"C4i7h17y","en_guide_pve_pve_windows.md":"DLVpqdqe","en_guide_qemu_qemu_build.md":"Ne4D861D","en_guide_qemu_qemu_install.md":"Dlupwn8V","en_guide_qemu_qemu_precheck.md":"DiLLa72V","en_guide_qemu_qemu_qa.md":"DWYL6NQl","en_guide_qemu_qemu_thanks.md":"Bt6MLM-f","en_incomplete_bashvm.md":"E9fF7lCb","en_incomplete_cockpit.md":"CyFnyV6C","en_incomplete_convoy.md":"BiEQPyMY","en_incomplete_index.md":"CStK-QK9","en_incomplete_pterodactyl.md":"DYrLgbEB","en_incomplete_virtfusion.md":"C0_rAZns","en_incomplete_virtualizor-docker.md":"Dci0ze-C","en_incomplete_webvirtcloud.md":"CMGt2znu","en_incomplete_webvirtcloud_retspen.md":"3yqNohoy","en_incomplete_webvirtmgr.md":"BqAX0-at","en_index.md":"CgmjKWj5","guide_block_block_docker.md":"Bw_l0FCS","guide_block_block_incus.md":"BYew2Lw9","guide_block_block_iptables.md":"DOeN3AYE","guide_block_block_lxd.md":"CZpzVayR","guide_block_block_pve.md":"DHzr8lJe","guide_containerd_containerd_build.md":"BBB7iFk6","guide_containerd_containerd_install.md":"w3pTXhU5","guide_containerd_containerd_precheck.md":"BUByUHwF","guide_containerd_containerd_qa.md":"FSRAjNyu","guide_containerd_containerd_thanks.md":"BHthFbxP","guide_dashboard.md":"CnK_Ubha","guide_dashboardq.md":"CjAOFN8_","guide_docker_docker_android.md":"CDefl5Ss","guide_docker_docker_build.md":"ChL_h0pq","guide_docker_docker_custom.md":"5HfdwPhH","guide_docker_docker_install.md":"nRTEdMox","guide_docker_docker_macos.md":"DJkCeuY4","guide_docker_docker_precheck.md":"uJ-SRlqA","guide_docker_docker_qa.md":"UX7_kDAI","guide_docker_docker_thanks.md":"BSuLBr32","guide_docker_docker_windows.md":"ho0xYayV","guide_incus_incus_custom.md":"BKTJVy5m","guide_incus_incus_extra_config.md":"C-guQNJz","guide_incus_incus_install.md":"DRLe1k5O","guide_incus_incus_lxc.md":"CnovMFmy","guide_incus_incus_precheck.md":"6zgZie2y","guide_incus_incus_qa.md":"SgCP8EiY","guide_incus_incus_qemu.md":"Zk6vuIbj","guide_incus_incus_thanks.md":"C--T4-TC","guide_incus_incus_windows.md":"B7vl6lFF","guide_kubevirt_kubevirt_build.md":"Bdgxm7oG","guide_kubevirt_kubevirt_install.md":"BA2o9jN4","guide_kubevirt_kubevirt_precheck.md":"nvH94L54","guide_kubevirt_kubevirt_qa.md":"B12VmdOW","guide_kubevirt_kubevirt_thanks.md":"Dfj0jwV7","guide_lxd_lxd_custom.md":"Bp44plbh","guide_lxd_lxd_extra_config.md":"D_nRHZTY","guide_lxd_lxd_install.md":"jTqXfX-p","guide_lxd_lxd_lxc.md":"BHCd5Mp8","guide_lxd_lxd_precheck.md":"icBQHtjb","guide_lxd_lxd_qa.md":"DX81exQ3","guide_lxd_lxd_qemu.md":"CrHtdnIe","guide_lxd_lxd_thanks.md":"BiGn2HlE","guide_lxd_lxd_windows.md":"B_lHFvNt","guide_oneclickvirt_oneclickvirt_install.md":"D_m-YgD6","guide_oneclickvirt_oneclickvirt_precheck.md":"CTq-enZw","guide_oneclickvirt_oneclickvirt_qa.md":"BjWTkein","guide_oneclickvirt_oneclickvirt_thanks.md":"CkjQijGJ","guide_oneclickvirt_oneclickvirt_usage.md":"CA65urzE","guide_podman_podman_build.md":"BIDlzCzV","guide_podman_podman_install.md":"B47eckhB","guide_podman_podman_precheck.md":"BVLG5yoH","guide_podman_podman_qa.md":"BEnef7c3","guide_podman_podman_thanks.md":"B-gbTOst","guide_pve_images_readme.md":"Dj3OB9Mq","guide_pve_pve_android.md":"CD1jfhZE","guide_pve_pve_custom.md":"BzHWVQ2I","guide_pve_pve_install.md":"B-fInh-4","guide_pve_pve_kvm.md":"Br7SLskL","guide_pve_pve_lxc.md":"DlntL99q","guide_pve_pve_macos.md":"CvtzCpJh","guide_pve_pve_precheck.md":"CWRjiBoK","guide_pve_pve_qa.md":"Ci5qZtSU","guide_pve_pve_thanks.md":"BcXFThz_","guide_pve_pve_windows.md":"DvVP2KDj","guide_qemu_qemu_build.md":"BwnIsDNw","guide_qemu_qemu_install.md":"Chptg-V4","guide_qemu_qemu_precheck.md":"BvPKLRFu","guide_qemu_qemu_qa.md":"DyrsGQ5C","guide_qemu_qemu_thanks.md":"CIuYo1h4","incomplete_bashvm.md":"CGn68aF3","incomplete_cockpit.md":"y4e1X8xM","incomplete_convoy.md":"sPAvvKRB","incomplete_index.md":"BiqvZjE4","incomplete_pterodactyl.md":"DdY27htv","incomplete_virtfusion.md":"afpry-2P","incomplete_virtualizor-docker.md":"CVOsVijp","incomplete_webvirtcloud.md":"CfqUm80o","incomplete_webvirtcloud_retspen.md":"lM7FZQ-m","incomplete_webvirtmgr.md":"CUanyGBK","index.md":"CnaNti-t"} +{"case_case1.md":"DbxkDXWP","case_case2.md":"DcwQCQim","case_case3.md":"CMS3OP6x","case_case4.md":"7ZC29s40","case_case5.md":"2mubFzz8","case_case6.md":"BGu_yJ2b","case_case7.md":"CPl9nMbi","case_index.md":"DScteKxA","developer_index.md":"n2uq9NWX","developer_l10n.md":"uPQLp5qr","en_developer_index.md":"Dl3fxvU3","en_developer_l10n.md":"C9bDViS2","en_guide_block_block_docker.md":"BNY--B3S","en_guide_block_block_incus.md":"C2PW2uJM","en_guide_block_block_iptables.md":"DBqQm89a","en_guide_block_block_lxd.md":"D3o50Z_N","en_guide_block_block_pve.md":"BoIG_v6y","en_guide_containerd_containerd_build.md":"w6TKNP9H","en_guide_containerd_containerd_install.md":"C887cD_h","en_guide_containerd_containerd_precheck.md":"e_e4j9jH","en_guide_containerd_containerd_qa.md":"Nlk_rkjy","en_guide_containerd_containerd_thanks.md":"Bx-B4d73","en_guide_dashboard.md":"-ZFBnAqk","en_guide_dashboardq.md":"BqZmHJfx","en_guide_docker_docker_android.md":"DUJysAV4","en_guide_docker_docker_build.md":"C48yhqXn","en_guide_docker_docker_custom.md":"jZKnFNGX","en_guide_docker_docker_install.md":"NcTGEKFG","en_guide_docker_docker_macos.md":"kVfbg90t","en_guide_docker_docker_precheck.md":"DG9SexCY","en_guide_docker_docker_qa.md":"D2jZfNFS","en_guide_docker_docker_thanks.md":"CnmhrpAs","en_guide_docker_docker_windows.md":"ckjy7CPt","en_guide_incus_incus_custom.md":"BJKI4at5","en_guide_incus_incus_extra_config.md":"BCoKt_Ef","en_guide_incus_incus_install.md":"BSX2i3zJ","en_guide_incus_incus_lxc.md":"BvGiSaPF","en_guide_incus_incus_precheck.md":"EJPThZ6i","en_guide_incus_incus_qa.md":"XwrY30_W","en_guide_incus_incus_qemu.md":"DkepcBp-","en_guide_incus_incus_thanks.md":"MEfOzHR4","en_guide_incus_incus_windows.md":"iGTwb3TD","en_guide_kubevirt_kubevirt_build.md":"DxEJ3rPc","en_guide_kubevirt_kubevirt_install.md":"jOOXKJJC","en_guide_kubevirt_kubevirt_precheck.md":"BVIFjpig","en_guide_kubevirt_kubevirt_qa.md":"faoAuBLj","en_guide_kubevirt_kubevirt_thanks.md":"C23kwvPI","en_guide_lxd_lxd_custom.md":"C5IE6kcj","en_guide_lxd_lxd_extra_config.md":"BbuKC6nF","en_guide_lxd_lxd_install.md":"CM9Mkw_Z","en_guide_lxd_lxd_lxc.md":"DGr-zCMD","en_guide_lxd_lxd_precheck.md":"Cb8rneCu","en_guide_lxd_lxd_qa.md":"BdzbCpAs","en_guide_lxd_lxd_qemu.md":"DzDaHLS2","en_guide_lxd_lxd_thanks.md":"D1geRhkU","en_guide_lxd_lxd_windows.md":"Bnh9M5gT","en_guide_oneclickvirt_oneclickvirt_install.md":"CDr-08BT","en_guide_oneclickvirt_oneclickvirt_precheck.md":"De29Dzxa","en_guide_oneclickvirt_oneclickvirt_qa.md":"CmrQuK61","en_guide_oneclickvirt_oneclickvirt_thanks.md":"DxEIEfyg","en_guide_oneclickvirt_oneclickvirt_usage.md":"DrKuZHOx","en_guide_podman_podman_build.md":"CirV5HL_","en_guide_podman_podman_install.md":"BnXmYAFj","en_guide_podman_podman_precheck.md":"Bsk1Ohm8","en_guide_podman_podman_qa.md":"_Zd6OG2N","en_guide_podman_podman_thanks.md":"CbSsZZj7","en_guide_pve_images_readme.md":"DvtVh_YV","en_guide_pve_pve_android.md":"BZoivCDl","en_guide_pve_pve_custom.md":"DoZZakT9","en_guide_pve_pve_install.md":"DWz0cnZq","en_guide_pve_pve_kvm.md":"GX7sLtZY","en_guide_pve_pve_lxc.md":"VErvMYbe","en_guide_pve_pve_macos.md":"Bu149fm6","en_guide_pve_pve_precheck.md":"DPbjn0xk","en_guide_pve_pve_qa.md":"Qv6hyWLK","en_guide_pve_pve_thanks.md":"CSJRH-iq","en_guide_pve_pve_windows.md":"CqTZC21M","en_guide_qemu_qemu_build.md":"D5GNAYVL","en_guide_qemu_qemu_install.md":"CJGX2MBk","en_guide_qemu_qemu_precheck.md":"Db_hUnRO","en_guide_qemu_qemu_qa.md":"CokSOtlt","en_guide_qemu_qemu_thanks.md":"C2qVQ0i_","en_incomplete_bashvm.md":"CYcAJorD","en_incomplete_cockpit.md":"DPRVDtT0","en_incomplete_convoy.md":"BiVasIkP","en_incomplete_index.md":"DSVQ049G","en_incomplete_pterodactyl.md":"pBXIj7vG","en_incomplete_virtfusion.md":"CEcQqESq","en_incomplete_virtualizor-docker.md":"6Ql1K265","en_incomplete_webvirtcloud.md":"xtlpSx_X","en_incomplete_webvirtcloud_retspen.md":"Dv1f1cx6","en_incomplete_webvirtmgr.md":"BUYa6s-m","en_index.md":"xiERJy12","guide_block_block_docker.md":"BA0mH0EK","guide_block_block_incus.md":"BOKqlmwJ","guide_block_block_iptables.md":"DpwSNujf","guide_block_block_lxd.md":"GsBSbKni","guide_block_block_pve.md":"DWtr9ooe","guide_containerd_containerd_build.md":"C5WetK9G","guide_containerd_containerd_install.md":"D1BopDXI","guide_containerd_containerd_precheck.md":"BP6RE0Ux","guide_containerd_containerd_qa.md":"CmAotbAi","guide_containerd_containerd_thanks.md":"CcSlhUIr","guide_dashboard.md":"CGRdCkvf","guide_dashboardq.md":"Bx38O9vC","guide_docker_docker_android.md":"EZ9A4zxL","guide_docker_docker_build.md":"BqBxdm8D","guide_docker_docker_custom.md":"CO01yPMv","guide_docker_docker_install.md":"CyPwvW4o","guide_docker_docker_macos.md":"AoixV4mD","guide_docker_docker_precheck.md":"E6lOY-ou","guide_docker_docker_qa.md":"CTh6v0OH","guide_docker_docker_thanks.md":"DvIicQOI","guide_docker_docker_windows.md":"DVhNvzRP","guide_incus_incus_custom.md":"DPN5W2S7","guide_incus_incus_extra_config.md":"CGOZO1FW","guide_incus_incus_install.md":"xPa31B31","guide_incus_incus_lxc.md":"C1aMQc5M","guide_incus_incus_precheck.md":"B6rEsaLc","guide_incus_incus_qa.md":"BrsdtkVw","guide_incus_incus_qemu.md":"Du2aF86Q","guide_incus_incus_thanks.md":"C-evMVCv","guide_incus_incus_windows.md":"BVMq770l","guide_kubevirt_kubevirt_build.md":"BSqBtHl_","guide_kubevirt_kubevirt_install.md":"G3ek-P-s","guide_kubevirt_kubevirt_precheck.md":"BoHiN-XG","guide_kubevirt_kubevirt_qa.md":"C-xjgPnF","guide_kubevirt_kubevirt_thanks.md":"DsK8MbDG","guide_lxd_lxd_custom.md":"D4TaiVky","guide_lxd_lxd_extra_config.md":"B_jHLwRP","guide_lxd_lxd_install.md":"C5ukyXX7","guide_lxd_lxd_lxc.md":"DS1dMATW","guide_lxd_lxd_precheck.md":"BIrpkuj5","guide_lxd_lxd_qa.md":"25zbM29D","guide_lxd_lxd_qemu.md":"DTwNzEss","guide_lxd_lxd_thanks.md":"CNqLGcSA","guide_lxd_lxd_windows.md":"tyliFAGv","guide_oneclickvirt_oneclickvirt_install.md":"44jfWHtR","guide_oneclickvirt_oneclickvirt_precheck.md":"BP-DIQUL","guide_oneclickvirt_oneclickvirt_qa.md":"IuA3vvE3","guide_oneclickvirt_oneclickvirt_thanks.md":"BuaYmBUR","guide_oneclickvirt_oneclickvirt_usage.md":"DZ3-tk1n","guide_podman_podman_build.md":"CvMJ7lqn","guide_podman_podman_install.md":"Ct4FbZdf","guide_podman_podman_precheck.md":"lwJB6a8k","guide_podman_podman_qa.md":"BeGT7Y2H","guide_podman_podman_thanks.md":"iL9FxamW","guide_pve_images_readme.md":"dgTV2Ek6","guide_pve_pve_android.md":"C-edHnyl","guide_pve_pve_custom.md":"BepCeh9c","guide_pve_pve_install.md":"BT-mRFVW","guide_pve_pve_kvm.md":"Bcv9yV9c","guide_pve_pve_lxc.md":"DeIPS54K","guide_pve_pve_macos.md":"ByiKT-Ya","guide_pve_pve_precheck.md":"CAnEc34q","guide_pve_pve_qa.md":"CYd891jv","guide_pve_pve_thanks.md":"IeKWHTlE","guide_pve_pve_windows.md":"DwSo14cJ","guide_qemu_qemu_build.md":"BGp-amd0","guide_qemu_qemu_install.md":"BjztCnH1","guide_qemu_qemu_precheck.md":"0u8V4hMo","guide_qemu_qemu_qa.md":"CcsWFlWk","guide_qemu_qemu_thanks.md":"SXi0ZIks","incomplete_bashvm.md":"Q11XTpGK","incomplete_cockpit.md":"BIN8-Enm","incomplete_convoy.md":"DTxuu6Jx","incomplete_index.md":"BnLKEkNB","incomplete_pterodactyl.md":"DrR9vgxd","incomplete_virtfusion.md":"qafzfeDV","incomplete_virtualizor-docker.md":"BosFcTNF","incomplete_webvirtcloud.md":"cXYB1aOP","incomplete_webvirtcloud_retspen.md":"XJ0pgP9k","incomplete_webvirtmgr.md":"CH1P6wbr","index.md":"CC8WK-TS"} diff --git a/incomplete/bashvm.html b/incomplete/bashvm.html index a075d249e7..611bd5e4ae 100644 --- a/incomplete/bashvm.html +++ b/incomplete/bashvm.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/incomplete/cockpit.html b/incomplete/cockpit.html index 7e035035ea..95b374ce9d 100644 --- a/incomplete/cockpit.html +++ b/incomplete/cockpit.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/incomplete/convoy.html b/incomplete/convoy.html index 4743391ad9..e6ae25ed70 100644 --- a/incomplete/convoy.html +++ b/incomplete/convoy.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/incomplete/index.html b/incomplete/index.html index e9a5cd9ea8..9763d07e2a 100644 --- a/incomplete/index.html +++ b/incomplete/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/incomplete/pterodactyl.html b/incomplete/pterodactyl.html index 841ff8b3dd..830a973154 100644 --- a/incomplete/pterodactyl.html +++ b/incomplete/pterodactyl.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/incomplete/virtfusion.html b/incomplete/virtfusion.html index 6c2a79ca4f..9ec3cb13c1 100644 --- a/incomplete/virtfusion.html +++ b/incomplete/virtfusion.html @@ -13,7 +13,7 @@ - + @@ -28,8 +28,8 @@ curl https://install.virtfusion.net/install-control-rhel-8.sh | sh -s -- --verbose

RHEL9

shell
dnf install curl -y
 curl https://install.virtfusion.net/install-control-rhel-9.sh | sh -s -- --verbose

Ubuntu22.04

shell
apt install curl -y
 curl https://install.virtfusion.net/install-control-ubuntu-22.04.sh | sh -s -- --verbose

Ubuntu24.04

shell
apt install curl -y
-curl https://install.virtfusion.net/install-control-ubuntu-24.04.sh | sh -s -- --verbose

缺点

每台服务器每个邮箱只有一次30天试用的证书,无永久的免费的证书

仅支持 amd64/x86_64 架构

- +curl https://install.virtfusion.net/install-control-ubuntu-24.04.sh | sh -s -- --verbose

缺点

每台服务器每个邮箱只有一次30天试用的证书,无永久的免费的证书

仅支持 amd64/x86_64 架构

+ \ No newline at end of file diff --git a/incomplete/virtualizor-docker.html b/incomplete/virtualizor-docker.html index a9560e3f01..1a2626dd89 100644 --- a/incomplete/virtualizor-docker.html +++ b/incomplete/virtualizor-docker.html @@ -13,7 +13,7 @@ - + @@ -22,8 +22,8 @@ -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/incomplete/webvirtcloud.html b/incomplete/webvirtcloud.html index c7a22cbe0c..178e5c4d38 100644 --- a/incomplete/webvirtcloud.html +++ b/incomplete/webvirtcloud.html @@ -13,7 +13,7 @@ - + @@ -69,8 +69,8 @@ systemctl status prometheus-libvirt-exporter

如果以上都查不出问题,那么就需要到Controller控制端执行:

shell
docker exec -it webvirtcloud-backend /bin/sh
 vi webvirtcloud/settings/production.py

DEBUG=False 改成 DEBUG=True,然后保存文件后,容器内执行:

shell
UV_PROJECT_ENVIRONMENT=/usr/local uv sync --dev

然后exit退出容器后,执行:

shell
docker restart webvirtcloud-backend
 sleep 3
-docker logs webvirtcloud-backend -f

然后前端去触发错误的位置,这块日志实时加载就会看到对应的报错了。

Controller 重启后 Docker 容器不自重启

如果 Docker 容器在系统重启后没有自动重启,执行以下命令:

bash
docker start $(docker ps -a -q)

5. 缺点

系统镜像是写死的,没法使用自己制作的自定义镜像,也没办法导出使用。

目前系统镜像是本人推送到Github仓库的那些镜像,具体自定义的镜像可导入PVE的qcow2格式的镜像,但需要在配置中填写哈希码。

https://github.com/retspen/webvirtcloud 不是同一个项目,不要搞混淆了。

webvirtcloud

- +docker logs webvirtcloud-backend -f

然后前端去触发错误的位置,这块日志实时加载就会看到对应的报错了。

Controller 重启后 Docker 容器不自重启

如果 Docker 容器在系统重启后没有自动重启,执行以下命令:

bash
docker start $(docker ps -a -q)

5. 缺点

系统镜像是写死的,没法使用自己制作的自定义镜像,也没办法导出使用。

目前系统镜像是本人推送到Github仓库的那些镜像,具体自定义的镜像可导入PVE的qcow2格式的镜像,但需要在配置中填写哈希码。

https://github.com/retspen/webvirtcloud 不是同一个项目,不要搞混淆了。

webvirtcloud

+ \ No newline at end of file diff --git a/incomplete/webvirtcloud_retspen.html b/incomplete/webvirtcloud_retspen.html index 4de04d08c0..ebd035395a 100644 --- a/incomplete/webvirtcloud_retspen.html +++ b/incomplete/webvirtcloud_retspen.html @@ -13,7 +13,7 @@ - + @@ -29,8 +29,8 @@ && bash install_webvirt_cloud_retspen.sh

安装完成后打开公网IP地址,就能看到登录页面。

登录信息用户名和密码都是admin,记得登录后自行修改。

开设Linux虚拟机

进入控制面板后,修改完admin的密码后,需要自行设置计算节点。

vcr1

选择本地类型,添加命名为local。

vcr2

创建完成后,点击眼睛按钮,进入查看

vcr3

存储一栏中添加存储,选择Dir类型,添加名字叫local。如果你需要使用ISO类型的系统引导,那么需要创建ISO类型的存储,如果不需要的话跟着本指南走,就仅需要创建Dir类型。

vcr4

vcr5

创建完毕后,下载对应系统的qcow2文件,使用下面这个仓库的链接

https://github.com/oneclickvirt/pve_kvm_images/releases/tag/images

示例中下载使用debian12的qcow2镜像使用

shell
cd /var/lib/libvirt/images
 curl -sSLO https://cdn.spiritlhl.net/https://github.com/oneclickvirt/pve_kvm_images/releases/download/images/debian12.qcow2
 chmod 777 debian12.qcow2

回到实例页面创建实例

vcr6

计算节点选择local

vcr7

芯片组使用默认的就行,换不换都没问题

vcr8

创建虚拟机可以使用预定义的配置大小,也可以自行使用自定义大小,看你的选择。

vcr9

注意这块填写的实例名字不能和刚刚下载的镜像的文件名字重复,比如示例中就不能填写debian12

vcr10

创建成功后不能立即点击开机。

vcr11

需要修改磁盘设置。

vcr12

这块修改qcow2文件为debian12.qcow2,对应之前下载的qcow2的文件的名字,使用镜像。

vcr13

修改确认后会在原来的计算节点的存储的local卷里看到有一个多余的盘,比如这里的test.qcow2,最好删除,避免占用磁盘

deadimage

修改完成确认无误后,才可回到电源页面开机。

vcr14

镜像的默认登录的用户名是root,密码是password或者是 oneclickvirt

开机后,你会发现硬盘只有原始镜像的大小,此时需要调整硬盘大小,需要再次关机,此时能见到下图页面的按钮可用且硬盘大小也识别出来了。

没有经过首次开机,硬盘的大小是识别不出来的,识别不出来就不能进行修改,所以首次开关机是必须的。

resize

修改后重启虚拟机,会发现有新的盘空间未分配,此时需要按照下面的方法扩容硬盘。

查看盘路径和剩余空白空间未分配的:

shell
lsblk

然后使用下述命令阔盘

shell
fdisk /dev/vda

按以下顺序操作:

输入d删除旧的分区(是的,需要删除旧的 vda1,数据不会丢失,因为后面不会格式化)。

输入n后回车新建一个分区。

类型选 primary(默认 p),直接回车就行

分区号同样选1

起始位置必须和旧分区一样(默认是对的)按回车就行

显示是否需要擦除指纹,输入Y回车

结束位置直接按回车,使用全部剩余空间

输入w保存并退出。

此时再使用lsblk可确认新的空闲硬盘被分配成功了。

缺点

网络还是没有自动配置,不如上一个项目智能,还得手动配置一下。

需要在已经开好的虚拟机的VNC中,登录后执行

shell
systemctl enable cloud-init
-reboot

手动启用配置为重启后自启动,然后重启服务器,就有网了。

- +reboot

手动启用配置为重启后自启动,然后重启服务器,就有网了。

+ \ No newline at end of file diff --git a/incomplete/webvirtmgr.html b/incomplete/webvirtmgr.html index 64d46c9c03..da751a71eb 100644 --- a/incomplete/webvirtmgr.html +++ b/incomplete/webvirtmgr.html @@ -13,7 +13,7 @@ - + @@ -26,8 +26,8 @@ && chmod +x install_webvirtmgr.sh \ && bash install_webvirtmgr.sh

国内

bash
curl -slk https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirtmgr.sh -o install_webvirtmgr.sh \
 && chmod +x install_webvirtmgr.sh \
-&& bash install_webvirtmgr.sh

缺点

原项目已经不再有维护,完全不推荐使用。

- +&& bash install_webvirtmgr.sh

缺点

原项目已经不再有维护,完全不推荐使用。

+ \ No newline at end of file diff --git a/index.html b/index.html index 4a78e3ab96..c201cc8cd2 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@
Skip to content
- + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index f96d64a7ce..0c44318b49 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://www.spiritlhl.net/case/case2.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/developer/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case4.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case6.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case3.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case5.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case7.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/case1.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/case/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/developer/l10n.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/developer/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_extra_config.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/developer/l10n.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/dashboard.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/dashboardq.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_android.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_macos.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_extra_config.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_qemu.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_qemu.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_usage.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/block/block_docker.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/block/block_iptables.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/block/block_incus.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/block/block_lxd.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/block/block_pve.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_android.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_kvm.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/images/readme.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/bashvm.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/cockpit.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/convoy.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/pterodactyl.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/virtfusion.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/virtualizor-docker.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/dashboard.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtcloud.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtcloud_retspen.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtmgr.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/dashboardq.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_macos.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_android.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/docker/docker_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_extra_config.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_macos.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/block/block_docker.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/block/block_incus.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/block/block_lxd.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/block/block_pve.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/block/block_iptables.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/incus/incus_qemu.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_extra_config.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_qemu.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/podman/podman_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_android.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_build.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/bashvm.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_usage.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/podman/podman_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/podman/podman_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/podman/podman_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/podman/podman_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_custom.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_kvm.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_lxc.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_install.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_precheck.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_qa.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_thanks.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/cockpit.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/convoy.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/virtfusion.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/pterodactyl.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/virtualizor-docker.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/webvirtcloud.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/webvirtcloud_retspen.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/images/readme.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/incomplete/webvirtmgr.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/index.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_windows.html2026-03-10T11:51:56.000Zhttps://www.spiritlhl.net/guide/pve/pve_macos.html2026-03-10T11:51:56.000Z \ No newline at end of file +https://www.spiritlhl.net/case/case1.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/developer/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case2.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case4.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case3.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case5.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case6.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/case7.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/case/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/developer/l10n.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_android.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/developer/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_extra_config.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/dashboard.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/dashboardq.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_macos.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/docker/docker_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_qemu.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/incus/incus_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/kubevirt/kubevirt_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_extra_config.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_qemu.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/lxd/lxd_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/oneclickvirt/oneclickvirt_usage.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/developer/l10n.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/block/block_incus.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/block/block_iptables.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/block/block_lxd.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/block/block_pve.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/block/block_docker.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/containerd/containerd_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_android.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/podman/podman_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_kvm.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/images/readme.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/bashvm.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/dashboard.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_android.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/qemu/qemu_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/cockpit.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/convoy.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/pterodactyl.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/virtfusion.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/virtualizor-docker.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtcloud.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtcloud_retspen.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/incomplete/webvirtmgr.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/dashboardq.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_macos.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/docker/docker_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_extra_config.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/en/guide/pve/pve_macos.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/block/block_docker.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/block/block_iptables.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/block/block_incus.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/block/block_pve.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/block/block_lxd.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/containerd/containerd_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_qemu.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/incus/incus_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/kubevirt/kubevirt_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_extra_config.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_qemu.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/lxd/lxd_windows.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/podman/podman_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_android.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/images/readme.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_build.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/bashvm.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/oneclickvirt/oneclickvirt_usage.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/podman/podman_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/podman/podman_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/podman/podman_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/podman/podman_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_custom.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_lxc.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_install.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_qa.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_precheck.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/qemu/qemu_thanks.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/cockpit.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/convoy.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/pterodactyl.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/virtfusion.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_kvm.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/virtualizor-docker.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/webvirtcloud.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/webvirtcloud_retspen.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/incomplete/webvirtmgr.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/index.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_macos.html2026-03-11T02:28:59.000Zhttps://www.spiritlhl.net/guide/pve/pve_windows.html2026-03-11T02:28:59.000Z \ No newline at end of file